2021-03-23 循环运用
发布日期:2021-05-14 23:42:25 浏览次数:23 分类:精选文章

本文共 2546 字,大约阅读时间需要 8 分钟。

2021-03-23 C语言题目记

第一题 输入年月日,判断当年是否闰年,当日是当年的第几天

思考:

  • 闰年的定义:闰年是指能被4整除但不能被100整除,或者能被400整除的年份。
  • 计算天数:将当月前一个月到一月的天数累加,最后加上输入的天数,得到当天是当年的第几天。

方法一:巧用switch语句

知识:switch-case语句中case语句在遇到break前会默认执行所有case语句。

/*闰年:年份可整除4,不可整除100,可以整除400*/  
/*计算当天是当年的第多少天*/
#include
int MonthDay(int);
static int run; //全局静态变量
int main(){
int year, month, day, dayof;
printf("请按顺序输入年份,月份,日期:");
scanf("%d%d%d",&year,&month,&day);
if((year%4==0 && year%100!=0) || year%400==0){
run=1;
printf("该年是闰年。\n");
} else{
run=0;
printf("该年是平年。\n");
}
switch(month){
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
printf("该月有31天。\n");
break;
case 4: case 6: case 9: case 11:
printf("该月有30天。\n");
break;
case 2:{
if(run)printf("该月有29天。\n");
else printf("该月有28天。\n");
break;
}
default:
printf("error\n");
break;
}
dayof=MonthDay(month);
if(run==0 && month==2 && day==29)
printf("该年没有2月29日!\n");
else printf("这是%d年的第%d天。\n",year,dayof+day);
return 0;
int MonthDay(int month){
/累加当月前一个月到一月的天数/
int sum=0;
switch(month-1){
case 11: sum+=30;
case 10: sum+=31;
case 9: sum+=30;
case 8: sum+=31;
case 7: sum+=31;
case 6: sum+=30;
case 5: sum+=31;
case 4: sum+=30;
case 3: sum+=31;
case 2: {
if(run)sum+=29;
else sum+=28;
}
case 1: sum+=31;
case 0: break;
}
return sum;
}

方法二:使用递归函数累加

/*闰年:年份可整除4,不可整除100,可以整除400*/  
/*计算当天是当年的第多少天*/
#include
int MonthDay(int);
static int daymonth, run;
int main(){
int year, month, day;
printf("请按顺序输入年份,月份:");
scanf("%d%d%d",&year,&month,&day);
if((year%4==0 && year%100!=0) || year%400==0){
run=1;
printf("该年是闰年。\n");
} else{
run=0;
printf("该年是平年。\n");
}
MonthDay(month-1);
printf("这是%d年的第%d天。\n",year,daymonth+day);
return 0;
int MonthDay(int month){
int n=0;
switch(month){
case 1: case 3: case 5: case 7:
case 8: case 10: case 12: n=31; break;
case 4: case 6: case 9: case 11: n=30; break;
case 2: {
if(run)n=29;
else n=28;
break;
}
}
if(month!=0) daymonth = n + MonthDay(month-1);
return daymonth;
}

第二题 将输入数从大到小排列输出

思考:

  • 数组的输入和输出
  • 按大小排序的方法

知识:

  • for循环的使用
  • 数组的定义
  • 指针交换位置
  • bubble sort排序算法
/*文件:排序.c功能:比大小交换位置*/  
void max(float *p1, float *p2){
float temp;
if(*p1 < *p2){
temp=*p1;
*p1=*p2;
*p2=temp;
}
}
/文件:数组排序.c功能:将输入数组冒泡排序后输出/
#include
extern float max(float *, float *);
int main(void){
int x, y, i, num;
printf("数组长度:");
scanf("%d",&num);
float a[num];
for(i=0; i
a[y])
max(&a[x], &a[y]);
printf("从大到小排列后的数组:\n");
for(i=0; i

上一篇:C语言基础条件和循环
下一篇:C函数高级

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月21日 18时35分50秒