user-0 提问: 万年历问题

回复:
user: user-0
content: 引用 2 楼 turingo 的回复:看的头晕就多在纸上画画，手眼结合比较好。 画了的啊，亲

user: user-1
content: 看的头晕就多在纸上画画，手眼结合比较好。

user: user-0
content: 帮忙一下啦。。。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。  #include <stdio.h>  int main(void) {     int a, i, j, n, k, t, w, x, y, z;     static int d[13][80];   //d[1..12][]对应12个月，d[月][10..17第一行，20..27第二行，……，60..67第六行共六行本月日期]     int m[14] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};     char wst[] = " Sun Mon Tue Wed Thu Fri Sat   ";     printf("Please enter the year: ");     scanf("%d", &y);      if(y%4==0 && y%100!=0 || y%400==0)  /*闰年的二月为29天*/         m[2] = 29;     w = (y+(y-1)/4-(y-1)/100+(y-1)/400)%7; /*计算y年元旦为星期w*/     for(i=1; i<=12; i++)   //月份     {         a = 1;     //记录日期         for(j=1; j<=6; j++)       //第一行到第六行         {             for(k=0; k<=6; k++)   //星期日～星期六             {                 while(k<w) k=w; //例如2013年元 旦为星期2，即w=2                 d[i][j*10+w] = a;    //填写a到对应本月本行对应星期位置                 a++;                 w++;                 if(w==7) w=0;                 if(a>m[i]) break;             }             if(a>m[i]) break;         }     }     printf("input (1,2,3,4,6): "); //输入分几排显示月历     scanf("%d", &x);     for(k=1; k<=16*x-3; k++)         printf(" ");     printf("=====%d=====\n", y);   /*打印年号*/     for(n=1; n<=12/x; n++)     {         t = x*(n-1)+1;       //每排开始的月数         printf("\n    ");         for(z=1; z<=x; z++)         {             for(k=1; k<=15; k++)     //调整格式                 printf(" ");             printf("%2d", t+z-1);   /*打印月号*/             for(k=1; k<=14; k++)     //调整格式                 printf(" ");         }         printf("\n      ");         for(z=1; z<=x; z++)      /*按一横排x个月格式打印*/             printf("%s", wst);   /*打印星期标题*/         for(j=1; j<=6; j++)       //同上         {             printf("\n  ");             for(i=t; i<=t+x-1; i++)             {                 printf("   ");                 for(k=0; k<=6; k++)                     if(d[i][j*10+k]==0) /*空缺日期位置打印空格*/                         printf("    ");                     else                         printf("%4d", d[i][j*10+k]);/*打印日期*/             }         }     }      return 0; } 恩，谢谢，今后我一定会做到的，真的感谢

user: user-2
content: 代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试是程序员必须掌握的技能之一。  #include <stdio.h>  int main(void) {     int a, i, j, n, k, t, w, x, y, z;     static int d[13][80];   //d[1..12][]对应12个月，d[月][10..17第一行，20..27第二行，……，60..67第六行共六行本月日期]     int m[14] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};     char wst[] = " Sun Mon Tue Wed Thu Fri Sat   ";     printf("Please enter the year: ");     scanf("%d", &y);      if(y%4==0 && y%100!=0 || y%400==0)  /*闰年的二月为29天*/         m[2] = 29;     w = (y+(y-1)/4-(y-1)/100+(y-1)/400)%7; /*计算y年元旦为星期w*/     for(i=1; i<=12; i++)   //月份     {         a = 1;     //记录日期         for(j=1; j<=6; j++)       //第一行到第六行         {             for(k=0; k<=6; k++)   //星期日～星期六             {                 while(k<w) k=w; //例如2013年元 旦为星期2，即w=2                 d[i][j*10+w] = a;    //填写a到对应本月本行对应星期位置                 a++;                 w++;                 if(w==7) w=0;                 if(a>m[i]) break;             }             if(a>m[i]) break;         }     }     printf("input (1,2,3,4,6): "); //输入分几排显示月历     scanf("%d", &x);     for(k=1; k<=16*x-3; k++)         printf(" ");     printf("=====%d=====\n", y);   /*打印年号*/     for(n=1; n<=12/x; n++)     {         t = x*(n-1)+1;       //每排开始的月数         printf("\n    ");         for(z=1; z<=x; z++)         {             for(k=1; k<=15; k++)     //调整格式                 printf(" ");             printf("%2d", t+z-1);   /*打印月号*/             for(k=1; k<=14; k++)     //调整格式                 printf(" ");         }         printf("\n      ");         for(z=1; z<=x; z++)      /*按一横排x个月格式打印*/             printf("%s", wst);   /*打印星期标题*/         for(j=1; j<=6; j++)       //同上         {             printf("\n  ");             for(i=t; i<=t+x-1; i++)             {                 printf("   ");                 for(k=0; k<=6; k++)                     if(d[i][j*10+k]==0) /*空缺日期位置打印空格*/                         printf("    ");                     else                         printf("%4d", d[i][j*10+k]);/*打印日期*/             }         }     }      return 0; }