谁能帮我看看c语言代码?
/*1.公元1年1月1日,是星期一
2.累加至输入年份之前的所有年的天数
3.总天数模7,0(星期日)---6(星期六)
*/
int check_year(int year){//检查平年闰年函数
if((year%400==0)||(year%4==0&&year%100!=0)){
return 1;
}else{
return 0;
}
}
int week_f(int year){//返回xx年1月1日是星期几
if(year==1){
return 1;
}
int sum=0;
for(int i=1;i<year;i++){
if(check_year(i)==1){
sum=sum+366;
} else{
sum=sum+365;
}
}
//printf("sum=%d\n",sum);
return (sum+1)%7;
}
int month_run(int n){
switch(n){
case 1:return 31;
case 2:return 29;
case 3:return 31;
case 4:return 30;
case 5:return 31;
case 6:return 30;
case 7:return 31;
case 8:return 31;
case 9:return 30;
case 10:return 31;
case 11:return 30;
case 12:return 31;
}
}
int month_ping(int n){
switch(n){
case 1:return 31;
case 2:return 28;
case 3:return 31;
case 4:return 30;
case 5:return 31;
case 6:return 30;
case 7:return 31;
case 8:return 31;
case 9:return 30;
case 10:return 31;
case 11:return 30;
case 12:return 31;
}
}
///闰年输出函数
void run(int week){
int enter=0;//记录换行
int wee=week;
for(int i=1;i<=12;i++){//最外层遍历12个月
printf("------>%d月<------\n",i);
printf("日 一 二 三 四 五 六\n") ;//输出星期标头
for(int k=0;k<wee;k++){//输出空格
printf(" ");
enter++;
}
for(int j=1;j<=month_run(i);j++){//输出每月的天
if(enter%7==0){
printf("\n");
}
printf("%d ",j);
enter++;
}
wee=(wee+month_run(i))%7;
enter=enter-wee;
printf("\n\n\n");
}
}
///平年输出函数
void ping(int week){
int enter=0;//记录换行
int wee=week;
for(int i=1;i<=12;i++){//最外层遍历12个月
printf("------>%d月<------\n",i);
printf("日 一 二 三 四 五 六\n") ;//输出星期标头
for(int k=0;k<wee;k++){//输出空格
printf(" ");
enter++;
}
for(int j=1;j<=month_ping(i);j++){//输出每月的天
if(enter%7==0){
printf("\n");
}
printf("%d ",j);
enter++;
}
wee=(wee+month_ping(i))%7;
enter=enter-wee;
printf("\n\n\n");
}
}
int main(){
int year;
int week=0;
int sum=0;
printf("请输入年份:");
scanf("%d",&year);
week=week_f(year);
if(check_year(year)==1){
run(week);
} else{
ping(week);
}
return 0;
} 展开
这是一个输出某一年份日历的C语言程序。程序的主要思路是先计算输入年份的1月1日是星期几,然后按照每个月的天数输出整个年份的日历。程序中使用了两个函数来检查平年和闰年,并使用switch语句来输出每个月的天数。
以下是代码的一些详细解释和建议:
check_year函数:该函数用来检查一个年份是否是闰年。其中%运算符用来判断年份是否能够被4或者400整除,但不能被100整除。当函数返回1时,表示输入的年份是闰年,否则为平年。
week_f函数:该函数用来计算输入年份的1月1日是星期几。它首先遍历每一年,统计前面所有年的天数,然后再加上1,最后模7得到1月1日的星期几。例如,week_f(2019)将返回2,表示2019年1月1日是星期二。
month_run函数和month_ping函数:这两个函数用来返回每个月的天数,分别对应于闰年和平年。它们使用了switch语句来判断每个月有多少天。
run函数和ping函数:这两个函数用来输出整个年份的日历。它们都有一个参数week,表示输入年份的1月1日是星期几。每个函数都遍历12个月,输出每个月的日历。在输出日历之前,先输出星期标头,然后输出每个月的日期,需要计算每个月的起始位置,以及在星期六之后开始换行。
main函数:该函数是程序的主函数。它首先读取用户输入的年份,然后调用week_f函数来计算1月1日是星期几。如果输入的年份是闰年,调用run函数来输出日历;如果是平年,调用ping函数来输出日历。最后返回0表示程序正常结束。
代码的可读性较好,建议继续保持并加以改进。例如,可以添加注释来解释代码的逻辑。此外,可以考虑使用更好的函数名来提高代码的可读性。