#include <stdio.h>typedef enum{Sun,Mon,Tue,Wed,Thu,Fri,Sat} Weekday;Weekday zeller(int y,int m,int d){int c;Weekday w;c=y/100 ;y=y%100;w=(c/4-2*c+y+y/4+13*(m+1)/5+d-1)%7;return w;}int main(){int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};char months[12][17]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};char weeks[7][3]={"日","一","二","三","四","五","六"};int y,m,w,i;printf("请输入一个年月(yyyy-mm):");scanf("%d-%d",&y,&m);w=zeller(y,m,1);if(y%400==0||y%4==0&&y%100!=0) days[1]=29;printf("%8s%s\n"," ",months[m-1]);for(i=0;i<7;i++) printf("-%3",weeks[i]);printf("\n");for(i=0;i<w;i++) printf("%3s"," ");for(i=1;i<=days[m-1];i++){ printf("%2d",i); if((i+w)%7==0) printf("\n");}return 0;}main函数的第九行调用Zeller函数计算星期值的日期是哪一天,第17行中使用%3d为什么不行,第十八行中i+w的作用是什么
时间: 2023-07-19 08:54:00 浏览: 92
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
1. 第9行调用zeller函数计算的是该年该月的第一天是星期几,而不是某一天的星期值。
2. 第17行使用%3d是不行的,因为%3d表示输出一个占3个字符宽度的十进制整数,但是需要加上格式控制符"\n"表示换行。
3. 第18行中i+w的作用是为了控制输出格式,让每个数字都能在对应的星期位置上输出。当i+w能够被7整除时就要换行输出下一行。
阅读全文