今天继续给大家分享C语言学习的经典练手案例
记录在校学习第三天,继续加油
今日案例来源:csdn社区每日一练
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];elsereturn 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;
}
今天就到这里,大家继续加油!