编程序判断输入年份的 3 月 1 日 是星期几 ?

编程序判断输入年份的 3 月 1 日 是星期几 ?

1 ) 要求选取 2000 / 03 / 01 ( 周三 ) 为基准。

2 ) 同时必须考虑闰年的情况,思考计算 2000 年 前后年份的算法有何不同 。

3 ) 运行时分别输入 1988 ( 闰年 ) , 2100 ( 平年 ) 观察运行结果验证程序的正确性 。

#include <stdio.h>

int main() {
  int year = 2000;
  int month = 3;
  int day = 1;

  printf("请输入一个年份:");
  scanf("%d", &year);

  int diffDays = 0;
  for (int i = year > 2000 ? 2000 : year; i < (year > 2000 ? year : 2000); i++) {
    if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) {
      diffDays += 366;
    } else {
      diffDays += 365;
    }
  }

  int days = diffDays + (day - 1);
  for (int i = 1; i < month; i++) {
    if (i == 2) {
      if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        days += 29;
      } else {
        days += 28;
      }
    } else if (i == 4 || i == 6 || i == 9 || i == 11) {
      days += 30;
    } else {
      days += 31;
    }
  }
  int weekDay = (days % 7) + 2;

  printf("%d 年 3 月 1 日是星期 %d。\n", year, weekDay);
  return 0;
}

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/727332
  • 除此之外, 这篇博客: 输出1900-2000年中所有的闰年。每输出3个年号换一行。中的 思路:闰年是被4整除,但不能被100整除,或者能被400整除。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 程序代码:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    	int year;
    	for (year = 1900; year < 2001; year++)
    	{
    		if (year % 4 == 0 && year % 100 != 0)
    		{
    			printf("%d\n", year);
    		}
    		if (year % 100 == 0 && year % 400 == 0)
    		{
    			printf("%d\n", year);
    		}
    	}
    	system("pause");
    	return 0;
    }
    
    

    运行结果:在这里插入图片描述

利用蔡勒公式判断某天是星期几,供参考:

#include <stdio.h>
int Get_Week(int y, int m, int d)
{
    int week = -1;
    if (m == 1 || m == 2) {
        m += 12;  y--;
    }
    week = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
    return week;
}
int main()
{
    int y, m, d;
    char* week[7] = { "星期一","星期二","星期三","星期四","星期五","星期六","星期日" };
    printf("请输入(年/月/日):");
    scanf("%d/%d/%d", &y, &m, &d);
    printf("%d年%d月%d日是:%s", y, m, d, week[Get_Week(y, m, d)]);
    return 0;
}