前言
此文章主要收集了程序设计基础C语言(第二版)中的练习题,其中有些题目会有我的个人思路和解析,如果感兴趣,可以来看看。
题目栏
两数求和
输入两个整数,求解并输出它们的和
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}
摄氏华氏温度转换
假如用C表示摄氏温度,F表示华氏温度,则有:F=Cx9/5+32.输入一个数表示摄氏温度,根据该公式编程求对应的华氏温度。结果保留一位小数
int main()
{
float c = 0.0;//先创建一个浮点型的变量,这样整型和浮点型的摄氏度都可以输入了
scanf("%f", &c);//记得要用%f接收浮点型变量
float f = c * 1.8 + 32;
printf("%.1f\n", f);
return 0;
}
输入三位数的个位、十位、百位
简单版本
int main()
{
int n = 0;
int arr[3] = { 0 };//创建一个数组存放个位、十位、百位
scanf("%d", &n);
int i = 0;
for (i = 0; i < 3; i++)
{
arr[2 - i] = n % 10;//用取模的方式得到每一位
n = n / 10;//n取完模后记得更新
}
//打印个位、十位、百位
for (i = 0; i < 3; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
但是此版本的作用范围太小,只能针对于三位数的打印,所以我们能不能将其优化为任何位数都能打印它的各个位呢?
优化版本
int GetDigit(int n)
{
if (n > 9)
return GetDigit(n / 10) + 1;//递归法得到位数长度
else
return 1;
}
int main()
{
int n = 0;
scanf("%d", &n);
int digit = GetDigit(n);//创建一个函数得到该数字的位数
int k = digit;
int i = 0;
int res = 0;
for (i = 0; i < digit; i++,k--)
{
res = n / (pow(10,k-1));//从个位开始,得到每一位的数
printf("%d ", res);
n = n - res * pow(10, k-1);//得到位数后记得将n更新
}
return 0;
}
效果展示👇🏻👇🏻👇🏻
求存款到期利息
输入存款金额money,存期year和年利率rate,根据下列公式计算;
interest=moneyx(1+rate)^year-money
输出时保留两位小数
int main()
{
int a, b;
float c;
printf("Enter money,year and rate:");
scanf("%d %d %f",&a,&b,&c);
float interest = a * pow((1 + c), b) - a;
printf("interest=%.2f\n", interest);
return 0;
}
记得头文件要加上<math.h>
求三角形面积
做这道题,我们首先要确保我们输入的3边值,能够满足构成一个三角形,所以,在之前,我们需要构建一个函数判断是否满足,若不满足,则重新输入值
int Judge(int a, int b, int c)//判断是否满足构成一个三角形
{
if (a + b > c && a + c > b && b + c > a)
return 0;
else
return 1;
}
int main()
{
int a, b, c;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
while (Judge(a,b,c))//判断是否满足构成一个三角形
{
printf("\n");
printf("请重新输入合法的值:");
scanf("%d %d %d", &a, &b, &c);
}
int s = (a + b + c) / 2;
float S = pow( s*(s - a)*(s - b)*(s - c), 0.5);
printf("S=%.3f", S);
return 0;
}
输入一个4位正整数,将其加密后输出
加密方法:将该数每位上的数字加9,然后除以10取余,所得结果作为该位上的新数字,最后将千位数和十位数互换,百位数和个位数互换,组成加密后的新4位数
int main()
{
int n = 0;
printf("Enter a number:");
scanf("%d", &n);
int arr[4] = { 0 };
int i = 0;
int digit = 0,res=0;
for (i = 1; i >= 0; i--)
{
digit = n % 10;//得到该位上的数字
res = ((digit + 9) % 10) ;
arr[i] = res;
n = n / 10;//记得将n更新
}
for (i = 3; i >=2 ; i--)
{
digit = n % 10;//得到该位上的数字
res = ((digit + 9) % 10) ;
arr[i] = res;
n = n / 10;//记得将n更新
}
printf("The encrypted number is ");
for (i = 0; i < 4; i++)
{
printf("%d", arr[i]);
}
return 0;
}
输出下一秒
该题会有这几种情况
1.下一秒,秒位没有满60,不进1,正常打印
2.下一秒,秒位满60,秒位变00,分位进1,进行打印
3.下一秒,秒位满60,分位满60,分位变00,时位进1,进行打印
4.下一秒,秒位满60,分位满60,时位满24,此时打印00:00:00
此时需要用if语句将这些情况执行
如何解决高位补0问题?
我们也可以运用到If语句
当我们对时位、分位、秒位的数字都确定完之后
我们对于数值小于10的位,进行单独补0
注:我们还要再判断输入的数值是否合法(时位在0~24,分位在0 ~60,秒位在0 ~60)
代码如下👇🏻👇🏻👇🏻
int main()
{
int a, b, c;
while (1)//可以无限输入
{
again:
printf("请输入当前时间:");
scanf("%d:%d:%d", &a, &b, &c);
if (a < 0 || a>23 || b < 0 || b>60 || c < 0 || c>60)
{
printf("输入值不合理,请重新输入\a\n");
goto again;
}
//接下来要对a,b,c进行改造
if (c + 1 == 60)
{
c = 0;//秒位变为0
b += 1;//分位加1
if (b == 60)//如果分位加1后也满60
{
b = 0;
a += 1;//时位加1
if (a == 24)
{
a = 0;
}
}
}
else
c += 1;
//改造完之后,进入正式打印环节,要从时位开始打印
if (a < 10)
printf("下一秒时间为:%02d:", a);
else
printf("下一秒时间为:%d:", a);
if (b < 10)
printf("%02d:", b);
else
printf("%d:", b);
if (c < 10)
printf("%02d\n", c);
else
printf("%d\n", c);
}
return 0;
}
效果如下👇🏻👇🏻👇🏻
时钟指针角度
我们易知,在时钟中,小时之间的间隔角度为30度,分钟之间间隔角度为6度(本题只需要精确到分钟间隔即可)
知道这些之后
我们可以以12点为起点,计算某时/分针的角度,如3时,它的角度就是90度。
我们分别计算出时针和分针的角度之后,求得二者角度之差即可求得结果
但是这里的结果有两种情况
1.结果<=180度,这种情况,直接打印结果就行
2.结果>180度,这种情况,我们只要将360度-结果就可以得到此时时分针角度之差
3.结果<0度,这种情况,我们将结果取负就可以得到正数差值。但这只是一般作法,我们可以用三目操作符直接取出其中的最大值和最小值进行相减
注意:
我们还要注意在分针处于0分和59分之间时,时针也有偏移角度,那么我们如何计算出这个偏移角度呢?
我们只要求得分针此时的分钟占60分钟的百分比,将这个百分比x30度就是偏移角度
代码如下👇🏻👇🏻👇🏻
int main()
{
int a, b;
float angle_a,angle_b;
again:
printf("请输入小时和分钟:");
scanf("%d:%d", &a, &b);
if (a < 0 || a>23 || b < 0 || a>59)
{
printf("输入值不合理,请重新输入\a\n");
goto again;
}
if (a > 12)//我们需要将小时中大于12的转化为12小时制表达
a -= 12;
float proportion_b = b / 60.0;
angle_a = a * 30.0+ proportion_b*30.0;
angle_b = b * 6.0;
float max = angle_a > angle_b ? angle_a : angle_b;
float min = angle_a < angle_b ? angle_a : angle_b;
float minus = max - min;
if (minus <= 180)
{
printf("角度差为:%.3f\n", minus);
}
else
{
printf("角度差为:%.3f\n", 360.0-minus);
}
return 0;
}
球的反弹高度
球第m次落地时经过的全部路程
其实可以将其划分为m段
第一次落地时,经过路程只有下落的路程
但是到了第二次落地第三次落地之后,每段所经历的路程包括上下两路程
所以这里我们需要将这两种情况分开
int main()
{
while (1)
{
float n;
int m;
printf("请输入n、m值:");
scanf("%f %d", &n, &m);
int i = 0;
float sum = n;//我们先将第一次落地经历的路程存入
n *= 0.25;
for (i = 0; i < m - 1; i++)
{
sum += 2 * n;//每次落地所经历的路程
n *= 0.25;//记得将n更新
}
printf("总路程:%.2f\n", sum);
printf("第%d次反弹高度:%.2f\n", m, n);
}
return 0;
}
效果如下👇🏻👇🏻👇🏻
统计字符个数
#include <string.h>
int main()
{
int n = 0,len=0,i;
char arr[100] = {0};//初始化一个一维数组存放我们要输入的字符串
char* p = arr;
again:
printf("你所要输入的字符长度和字符串,格式为,长度:字符串\n");
printf("请输入:");
scanf("%d:%[^\n]", &len,arr);//%[^\n]只读取到\n才停止,只有这样,才能输入空格进去
arr[len] = '\0';//在此终止
printf("字符串长度为:%d\n", strlen(arr));
if (*(p+len+1) !=0|| *(p + len-1) == 0)//当字符串长度不符合时
{
printf("你所输入的字符串长度不一致,请重新输入\a");
goto again;
}
int letter=0,blank=0,digit=0,other=0;
while (*p != '\0')
{
if (*p >= '0' && *p <= '9')
digit++;
if((*p>='A'&&*p<='Z')||(*p >= 'a' && *p <= 'z'))
letter++;
if (*p == ' ')
blank++;
if (*p != ' ' &&( (*p < '0') || (*p > '9'&&*p<'A')||(*p>'Z' && *p<'a')||*p>'z'))
other++;
p++;
}
printf("letter=%d,blank=%d,digit=%d,other=%d\n", letter, blank, digit, other);
return 0;
}
最大公约数和最小公倍数
int get_cv(int a, int b)
{
int max = a > b ? a : b;
int min = a < b ? a : b;
int i = 0, tmp=0;
for (i = 1; i <= min; i++)
{
if (min % i == 0 && max % i == 0)
{
tmp = i;
}
}
return tmp;
}
int get_cm(int a, int b)
{
int max = a > b ? a : b;
int min = a < b ? a : b;
int tmp = min;
while (1)
{
if (tmp % min == 0 && (tmp % max == 0))
break;
tmp++;
}
return tmp;
}
int main()
{
int a, b;
printf("请输入两个整数:");
scanf("%d %d", &a, &b);
int res1 = get_cv(a, b);
int res2 = get_cm(a, b);
printf("最大公约数为:%d\n", res1);
printf("最大公倍数为:%d\n", res2);
return 0;
}
换钱的交易
int main()
{
int tm = 100000;
int n = 0;
int i = 0;
float res =0.1f ;
float sum1 = 0.0;
int sum2 = 0;//sum1为富翁给的钱,sum2为陌生人给的钱
printf("请输入还钱交易天数:");
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
sum1 += res;
res *= 2;
if (i < 4)
sum2 += tm;
}
printf("富翁给的钱:%.0f\n", sum1);
printf("陌生人给的钱:%d\n", sum2);
return 0;
}
兑换钱币
对于该类问题
其实属于可能性问题
在这里,2分钱最多会被分配n/2个,5分钱最多会被分配为n/5个
所以我们可以从分配数量最少时,开始从头遍历所有可能的分配个数
int main()
{
int n = 0;
while (1)
{
int count = 0;
again:
printf("请输入金额:");
scanf("%d", &n);
if (n > 0)
{
int tmp1 = n;
int two_num = n / 2, five_num = n / 5;//2分和5分能分配的最大个数
int i = 0, j = 0;
for (i = 0; i <= five_num; i++)
{
n = tmp1 - 5 * i;//每次分配完后还剩下多少钱
int tmp2 = n;
for (j = 0; j <= two_num; j++)
{
n = tmp2 - 2 * j;//每次分配完后还剩下多少钱
if (n >= 0)//当5分钱和2分钱都分配完之后,剩下的钱如果还能大于0,剩下就用1分来补齐
count++;
}
}
}
else if (n == 0)
{
count = 0;
}
else
{
printf("你输入的金额不合理,请重新输入,\a");
goto again;
}
printf("分配方案共有:%d\n", count);
}
return 0;
}
效果如下👇🏻👇🏻👇🏻
同构数
正整数 n 若是它的平方数的尾部,则称 n 为同构数。
例如:5的平方数是25,而且 25 的尾部是 5 ,所以 5 就是一个同构数。
由此,其实我们可以知道,判断一个数是否为同构数,有两种情况:
- 下界存在一个同构数
- 上界存在一个同构数
- 或上下都有
只要满足这三种情况之一,我们就可以判断这个数为同构数
int judge(int x)
{
int unit = x % 10;//对x进行取模
int x_sqrt = pow(x, 0.5);//取开根号是因为x的下界中的元素开平方最大不能超过x,所以只要遍历到x_sqrt即可
int i = 0,n=1;
//先判断下界是否有x的同构数
for (i = 0; i <= x_sqrt; i++)
{
int res_unit = i % 10;//求出i的模
int res = pow(i, 2);//i平方
if (res == x && i == unit)//此时满足了x下界当中,存在同构数的条件
{
return 1;
}
}
//此时再判断上界是否有x的同构数
int x_up = pow(x, 2);
int x_up_unit = x_up % 10;
if (x_up_unit == x)
{
return 1;
}
else
return 0;
}
int main()
{
int n, m;
while (1)
{
printf("\n");
printf("请输入两个整数:");
scanf("%d %d", &n, &m);
int i = 0;
int count = 0;
printf("在%d到%d之间同构数有:", n, m);
for (i = n; i <= m; i++)
{
if (judge(i))
{
printf("%d ", i);
count++;
}
}
if (count == 0)
printf("No Answer\a");
}
return 0;
}
效果如下👇🏻👇🏻👇🏻
sinx的近似计算公式
对于这种已经给出公式的题目,我们只要按照其中的公式找猫画虎即可。
根据公式,我们可以求出第n项的数值
所以,我们可以单独创建一个函数来求得第n项的值
然后,如果我们要求前4项的和,只需要分别用该函数求出每一项的值然后相加即可。
int get_fac(int n)
{
int i = 0;
int res = 1;
for (i = n; i >= 1; i--)
{
res *= i;
}
return res;
}
double get_num(double x, int n)
{
//在公式中唯一难点就是求2n-1的阶乘
//但其实我们只要再创建一个函数实现求n的阶乘功能即可
int ret = get_fac(2 * n - 1);//get_fac函数求(2n-1)的阶乘
double sympol = pow(-1, (double)n - 1);//(-1)^(n-1)
double x_n = pow(x, (double)2 * n - 1);//x^(2n-1)
double res = (sympol * x_n) / ret;
return res;
}
int main()
{
int n = 0;//正整数n
double x = 0.0;
printf("请输入弧度x和正整数n:");
scanf("%lf %d", &x, &n);
int i = 0;
double sum = 0.0;
for (i = 1; i <=n; i++)
{
double res = get_num(x, i);//创建一个函数得到第n个数的值为多少
sum += res;
}
printf("sinx=%.8f\n", sum);
return 0;
}
在此道题中,我们为了保证数据的准确性和一致性,应该将浮点型变量用double来设置
效果如下👇🏻👇🏻👇🏻
整数出现次数
#include <stdlib.h>
int judge(int a, int* p, int sz)
{
int count = 0;
while (sz)
{
if (a == *p)
{
count++;
}
p++;
sz--;
}
if (count == 1)
return 1;//也就是说只出现过一次
else
return 0;
}
int change(const void* p1, const void* p2)
{
return (*(int*)p1 - *(int*)p2);
}
int main()
{
int n;
printf("请输入你要输入整数的个数:");
scanf("%d", &n);
int i = 0,j=0;
int arr1[30] = { 0 };//输入整数数组
int arr2[30] = { 0 };//这个数组存放第一次出现的数字
int arr3[30] = { 0 };//这个数组存放第一次出现数字的重复次数
int count = 0;
int arr2_len = 0;
int tmp = 0;
printf("请输入%d个整数:", n);
for (i = 0; i < n; i++)
{
scanf("%d", &arr1[i]);//输入整数
}
//接下来要存放第一次出现的数字
for (i = 0; i < n; i++)
{
//此时我们要创建一个函数判断这个数字在之前,是否已经出现过了
if (judge(arr1[i], arr1, i + 1))
{
arr2[j] = arr1[i];//存放到新数组中去
j++;
arr2_len++;
}
}
//我们存放新数组后,还要再给这个新数组整顿一下,给其排序(升序)
qsort(arr2, arr2_len, sizeof(arr2[0]), change);//进行升序排序
//此时要开始为其计数了,看看重复了几次
for (i = 0; i < arr2_len; i++)
{
for (j = 0,count=0; j < n; j++)
{
if (arr2[i] == arr1[j])
{
count++;
}
}
arr3[i] = count;
}
//此时准备工作结束后,我们就要进行分行打印了
//首先我们用挑战赛法得到最多的次数
for (i = 0; i < arr2_len; i++)
{
if (arr3[i] > tmp)
tmp = arr3[i];
}
//此时我们遍历整个arr3,若发现等于最大数次的值,将其打印出来
for (i = 0; i < arr2_len; i++)
{
if (tmp==arr3[i])
{
printf("%2d %d\n", arr2[i], arr3[i]);
}
}
return 0;
}
效果如下👇🏻👇🏻👇🏻
求两个整数的交集
int change(const void* p1, const void* p2)
{
return (*(int*)p2 - *(int*)p1);
}
int main()
{
int arr1[30] = { 0 };
int arr2[30] = { 0 };
int arr3[30] = { 0 };
int a, b;
int i = 0,j=0,k=0;
int sz_arr3 = 0;
printf("请输入第一整数组的个数:");
scanf("%d", &a);
for (i = 0; i < a; i++)
{
scanf("%d", &arr1[i]);
}
printf("请输入第二整数组的个数:");
scanf("%d", &b);
for (i = 0; i < b; i++)
{
scanf("%d", &arr2[i]);
}
//此时开始判断是否有交集元素
for (i = 0; i < a; i++)
{
for (j = 0; j < b; j++)
{
if (arr1[i] == arr2[j])
{
arr3[k] = arr1[i];
k++;
sz_arr3++;
}
}
}
//接下来进行降序排序
qsort(arr3, sz_arr3, sizeof(arr3[0]), change);
for (i = 0; i < sz_arr3; i++)
{
printf("%d ", arr3[i]);
}
return 0;
}
字符串分隔
//字符串分隔
//思路:字符串str中,我们在输入完之后,我们要做的事情就是知道哪些字母被非字母的字符分隔了
//知道后,我们才开始输入第二行tok的字符,因为第二行其实就是个摆设,比如我们知道第一行字母一共被分隔了n个,那么我们第二行只要输入n个字符就好了
//所以我们该如何知道在哪里开始分隔呢
//我们可以用指针去遍历字符串
//当我们遇到第一个字母时,直到遇到非字母的,我们进行计数+1,说明该处被分隔了
//然后接下来我们又要继续遍历下去,又要遇到一个字母(前提条件),直到又遇到非字母,再进行计数+1,直到全部遍历完
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int judge(const char* p)
{
if ((*p >= 'A' && *p <= 'Z') || *p >= 'a' && *p <= 'z')
return 1;
else
return 0;
}
int main()
{
char arr1[30] = { 0 };
char arr2[30] = { 0 };
int n = 0;
int i = 0;
printf("请输入字符串str:");
scanf("%[^\n]", arr1);//%[^\n]这样空格才能输入进去
//printf("请输入你要输入的字符数:");
//scanf("%d", &n);
while (getchar() != '\n')
{
;
}
/*for (i = 0; i < n; i++)
{
scanf("%c", &arr1[i]);
}*/
char* p = arr1;
int count = 0;
while (*p != '\0')
{
//我们需要创建一个函数判断是不是字母
if (judge(p - 1) == 1 && judge(p) == 0)
{
count++;
}
p++;
}
//由此我们知道了第二行该打多少个字符
printf("请输入tok字符(字符数为%d):", count);
p = arr1;//此时要将p的地址更新一下;
//输入第二行的字符
//while (getchar() != '\n')
//{
// ;
//}
for (i = 0; i < count; i++)
{
scanf("%c", &arr2[i]);
}
//此时开始正式打印
while (*p != '\0')
{
if (judge(p))
{
printf("%c", *p);
}
if (judge(p - 1) == 1 && judge(p) == 0)
{
printf("\n");
}
p++;
}
return 0;
}
效果如下👇🏻👇🏻👇🏻
计算星期
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//计算星期
//思路:我们首先要先输入年月日
//在这里,我们已知1980年1.1号是星期二,当我们输入了年份的时候,我们首先要先对1980年到所输入年份之间所有年份进行遍历判断闰年和平年
//我们这么做的目的是为了最后求出它们之间的天数差,年之间的天数差求出来后
//还有月和日的
//而且对于月和日的输入我们也有要求,月不能超过12,日不能超过当月的天数
//我们知道平年的2月是28天,闰年2月是29天。
//4月、6月、9月、11月各是30天。
//1月、3月、5月、7月、8月、10月、12月各是31天。
int judge(int n)
{
if ((n % 100 == 0 && n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))
return 1;
else
return 0;
}
int judge_day(int a,int b,int c)
{
if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)
{
if (c <=31&&c>0)
return 1;
else
return 0;
}
if (b == 4 || b == 6 || b == 9 || b == 11 )
{
if (c<=30&&c>0)
return 1;
else
return 0;
}
if (b == 2&&judge(a)==1)//2月为29时
{
if (c <=29 && c > 0)
return 1;
else
return 0;
}
if (b == 2 && judge(a) == 0)//二月为28时
{
if (c <= 28 && c > 0)
return 1;
else
return 0;
}
}
int ret_mon(int b,int a)
{
if (b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12)
{
return 31;
}
if (b == 4 || b == 6 || b == 9 || b == 11)
{
return 30;
}
if (b == 2 && judge(a) == 1)//2月为29时
{
return 29;
}
if (b == 2 && judge(a) == 0)//二月为28时
{
return 28;
}
}
int count_day(int n,int a,int b, int c)
{
int i = 0;
int res = 0;
int sum = 0;
if (n == 1800)//如果为1800年,只需要返回月日的天数
{
//此时需要再创建一个函数返回月份的天数
if (b == 1)
{
return c;
}
else
{
for (i = 1; i <b; i++)
{
res = ret_mon(i, n);
sum += res;
}
return sum + c;
}
}
if (n > 1800)
{
//if (judge(a) == 1)//为闰年时
//{
// return 365 ;//1801年,返回年的天数是1800年闰年的天数,366
//}
if (judge(n) == 0 && judge(n - 1) == 1)
{
return 366;
}
else
{
return 365 ;
}
}
}
void print_week(int n,int a,int b,int c)
{
if (n % 7 == 0)
printf("%d年%d月%d日为:Tuesday\n",a,b,c);
if (n % 7 == 1)
printf("%d年%d月%d日为:Wednesday\n", a, b, c);
if (n % 7 == 2)
printf("%d年%d月%d日为:Thursday\n", a, b, c);
if (n % 7 == 3)
printf("%d年%d月%d日为:Friday\n", a, b, c);
if (n % 7 == 4)
printf("%d年%d月%d日为:Saturday\n", a, b, c);
if (n % 7 == 5)
printf("%d年%d月%d日为:Sunday\n", a, b, c);
if (n % 7 == 6)
printf("%d年%d月%d日为:Monday\n", a, b, c);
}
int main()
{
while (1)
{
int a, b, c;//分别为年,月,日
int sum = 0;//与1980年1月1号之间相差天数
int i = 0;
int day_sum = 0;
int ret = 0,res=0, sum1 = 0, sum2 = 0;
again:
printf("请输入年-月-日:");
scanf("%d-%d-%d", &a, &b, &c);
//判断年月份是否输入合理
if (a < 1800 || a>3000 || b < 1 || b>12)
{
printf("您输入的日期不合理,请重新输入\a\n");
goto again;
}
//确定年月份合理后,判断日是否合理,我们需要创建一个函数判断闰年和平年
if (judge_day(a, b, c) == 0)
{
printf("您输入的日期不合理,请重新输入\a\n");
goto again;
}
//在将所有的输入值合理之后,我们要开始计算该年月份与1980年1月1号之间相差多少天了
//我们通过创建循环遍历得到每一年的天数
if (a == 1800)//只需要算月日
{
for (i = 1; i < b; i++)
{
res = ret_mon(i,a);
sum1 += res;
}
day_sum = sum1 + c;
}
else
{
res = 0, sum1 = 0;
for (i = 1; i < b; i++)//先算出月天
{
res = ret_mon(i, a);
sum1 += res;
}
for (i = 1801; i <= a; i++)//再算出年天
{
ret = count_day(i, a, b, c);
sum2 += ret;
}
day_sum = sum1 + sum2 + c;
}
//现在再创建一个函数判断星期并打印
print_week(day_sum, a, b, c);
}
return 0;
}
效果如下👇🏻👇🏻👇🏻😃😃😃