C&C++:计算某年某月的1号是星期几

C&C++函数实训-这天星期几?

任务描述

本关任务:编写函数 whatDay,计算某年某月的1号是星期几并返回。

相关知识

要知道某一天是星期几,可以用已知的某一天进行推导。

例如已知公元1年1月1日是星期一,公元2年1月1日则是在星期一基础上加上一整年的天数(要考虑闰年,闰年一年366天,非闰年365天),如果不是1月,例如7月,则要加上1到6月的所有天数,这里也要考虑闰年,因为闰年的二月是29天,非闰年是28天。

这样就可以算出从公元1年1月1日到该年月过了多少天,而过了7天星期不变,所以可以用这种方法推导出公元元年之后的任何一天是星期几。

下面的程序可以计算星期一过了 n 天后是星期几:

  1. w = 1; // 从星期一开始
  2. w = w + n; // n天后
  3. w = w % 7; // 得到0-6,其中0为星期天
  4. // 调整星期天
  5. if(w == 0) w = 7;

编程要求

计算输入数据年月份的1号是星期几并返回(周一到周日分别返回整数1到7)。

其中该函数的参数为输入的两个整数数据:年和月。

提示:由于判断是否闰年有多个地方需要用到,故已把该功能单独实现为一个函数。

 代码如下(已删去注释):

#include<iostream>
using namespace std;

int leapYear(int y){
    if (y%4==0 && y%100 !=0 || y%400==0 ) return 1;
    return 0;
}

int whatDay(int year,int month){
    int dyear=0,nd=0,w,lyear=0;
    if (year==1) nd = 0 ; else {
        for (int i=1;i<year;i++) {
            if (leapYear(i)) lyear+=1;
            else dyear+=1;
        }
        nd=dyear*365+lyear*366;
    }
    if (month==1) nd+=1; else {
        int monthl[]={1,31,0,31,30,31,30,31,31,30,31,30,31};
        for (int j=0;j<=month-1;j++) {
            nd+=monthl[j];
        }
    if (leapYear(year) && month >=3 ) nd+=29;
    if (leapYear(year)==0 && month >=3 ) nd+=28;
    }
    w=0;
    w+=nd;
    w=w%7;
    if (w==0) w=7;
    return w;
}

int main()
{
    int y , m , xq ;
    cin >> y >> m ;
    xq=whatDay(y,m);
    cout << y << "年" << m << "月1日是星期";
    if   (xq==7) cout << "日" << endl ;
    else         cout <<  xq  << endl ;
    return 0;
}

    原文作者:Luo86173
    原文地址: https://blog.csdn.net/EOF_230321/article/details/121285690
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞