今天继续给大家分享C语言学习的经典练手案例
1.商品优惠计算机
商品优惠计算器 使用if语句编程实现输入购货金额,输出实际付款金额。购货折扣率如下:
购货金额≤500元 不打折
500元<购货金额≤1000元 9折
1000元<购货金额 8折
#include <stdio.h> #include <ctype.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int main() { float money = 0.0; float pay = 0.0; bool run = true; while (run) { printf("\n请输入购货金额:\n"); scanf("%f", &money); if (money > 1000) { pay = money * 0.8; printf("打八折,应付金额:%.2f\n", pay); } else if ((money > 500) && (money <= 1000))500 { pay = money * 0.9; printf("打九折,应付金额:%.2f\n", pay); } else if (money <= 500) { printf("不打折,应付金额:%.2f\n", money); } } return 0; }
程序运行截图:
2.递归函数
编写求1,2,3,n这n个数累加的递归函数
分析:第一步:确定参数,n个数放在数组中,数组作为容器,把数放在容器中,我们要对容器里面的数进行加和,因此数组是一个参数;有了容器,但是容器里面这么多数,我们不知道该对哪一个数进行加和,所以数在数组里面的下标也要作为参数。所以,数组是参数,数的下标值是第二个参数
第二步:找规律,1,2,3,4,5,6,,,,,,n这些数的规律是什么?后一个数比前一个数多1,所以我们在调用函数自身时,n+1和n-1肯定是要用到的(具体用哪一个根据你要传入的实参值而定,在此我们选择下标实参n-1(即数组中的第n个数),所以在代码中用到的是(n-1)
第三步:递归出口,递归是函数调用自身,但是不能不停地调用自身,否则就成了死循环了,在此题中,我们用到的规律是(n-1),所以当下标参数到0时(即到了第一个数字arr[0]),函数停止调用新的自身,开始回退,直到将所有调用的自身函数运行一遍,返回结果。
#include<stdio.h> #include<stdlib.h> /*递归有两个过程 1.递推 2.回退 我们往往只需要考虑一个过程,因为两个过程是对称的 在此我们考虑递推过程*/ /*递归函数,返回数组arr[0]到arr[i]的和*/ int fact(int arr[], int i) //数组,当前数组下标 { if (i == 0) //递归出口,当递推到arr[0]时开始回退 return arr[0]; else return arr[i] + fact(arr, i-1); //递推,当还没有加到arr[0]时,继续往前面加 } int main() { int n; int arr[100]; printf("输入n的值(n>=1):"); scanf_s("%d", &n); for (int i = 0; i < n; i++) //将1到n保存到数组中 arr[i] = i + 1; printf("1到%d的和为:%d\n", n,fact(arr,n-1)); //打印和 system("pause"); //暂停,控制闪屏 return 0; }
3.六角填数
题目描述
如下图所示六角形中,有12个点,依次填入1~12的数字,使得每条直线上的数字之和都相同。其中,已经替你填好了点1,2,3的数字,请你计算其他位置所代表的数字是多少?
输入
输入仅一行,以空格隔开,分别表示已经填好的点1,2,3的数字。
输出
输出仅一行,以空格隔开,分别表示所有位置所代表的数字。
样例输入:
1 8 2
样例输出:
1 8 2 9 7 11 10 12 3 5 6 4
代码:
#include <iostream> #include <cmath> #include <cstdio> #include <cstring> using namespace std; #define eps 10e-10 #define N 15 int a[N]; bool vis[N]; void dfs(int x) { if (x == 1 || x == 2 || x == 3) { dfs(x + 1); return; } if (x > 12) { int t[6]; t[0] = a[1] + a[3] + a[6] + a[8]; t[1] = a[1] + a[4] + a[7] + a[11]; t[2] = a[2] + a[3] + a[4] + a[5]; t[3] = a[2] + a[6] + a[9] + a[12]; t[4] = a[8] + a[9] + a[10] + a[11]; t[5] = a[12] + a[10] + a[7] + a[5]; for (int i = 1; i < 6; ++i) { if (t[i] != t[i - 1]) return; } for (int i = 1; i <= 12; i++) cout << a[i] << " "; return; } for (int i = 1; i < 13; ++i) { if(!vis[i]) { vis[i] = 1; a[x] = i; dfs(x+1); vis[i] = 0; } } } int main() { memset(vis, 0, sizeof(vis)); cin >> a[1]; vis[a[1]] = 1; cin >> a[2]; vis[a[2]] = 1; cin >> a[3]; vis[a[3]] = 1; dfs(1); return 0; }
今天就到这里,大家继续加油!