c语言编万年历,运行后只能出现开头的星期几,出不了下面的日期,求大神解答

2025-02-27 05:27:19
推荐回答(2个)
回答1:

原来的思路太复杂了,整理了一个供参考

#include
#include
// 判断某年是否闰年的函数
int IsLeapYear (int year)

 if  ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
  return 1; 
 return 0; 
}
void main() 
{    
 int year, month, i, x; // x 用于计算输入月份的1号是星期几
 // 定义数组保存1~12每个月的天数。
 // 因为数组下标从0开始,为直观起见,定义了13个,DaysOfMonth[1]为1月天数....
 int DaysOfMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
 printf("input: year month\n");    
 scanf("%d %d", &year, &month); // 改用空格分隔了,输入方便一点 
 // 计算依据是:1900年1月1日为星期一
 x = 1;
 // 普通年份365天,正好是52周加上1天,马上就知道1901年1月1日是星期二
 // 由此可以推断对于普通年份,下一年的元旦的星期数是上一年元旦的星期数加1
 // 如果碰上闰年,则全年多1天,下一年的元旦星期数再多加1
 // 以下计算输入年份的1月1日是星期几
 for(i=1900;i {    
  x++;    // 普通年份,下一年元旦星期数加1
  if (IsLeapYear(i)) // 如果碰上闰年就多加1
   x++;
 } 
 x = x % 7; // 求余后得到输入年份元旦是星期几
 // 如果输入年份是闰年,则2月天数为29天
 if (IsLeapYear(year))
  DaysOfMonth[2] = 29;
 // x 累加 month 前各月份的天数
 for (i = 1; i < month; i++)
  x += DaysOfMonth[i];
 x = x % 7;   // 求余后得到 month 月 1日是星期几
 // 以下输出月历
 printf(" 日 一 二 三 四 五 六\n");  
 for (i = 1; i <= x; i++)
  printf("   "); // 根据 x 的值输出前导空格,每天占3个空格  
 for (i = 1; i <= DaysOfMonth[month]; i++)
 {
  printf("%3d",i);
  if ((i + x) % 7 == 0)
   printf("\n");   
 }
 getch();

回答2:

第4句 int year,month,sum=0,week,i,days; 要对days变量初始化
改为int year,month,sum=0,week,i,days=0;