day3——C语言

day3——C语言,第1张

day3——C语言

头哥网第四关打印日历

// 包含两种I/O库,可以使用任一种输入输出方式
#include 
#include 
using namespace std;

// 函数printMonth:按要求的格式打印某年某月的日历
// 参数:year-年,month-月
// 返回值:无
void printMonth(int year, int month);

// leapYear:判断闰年
// 参数:y-年
// 返回值:1-是闰年,0-不是闰年
int leapYear(int y)
{
    if(y % 4 == 0 && y % 100 != 0 || y % 400 == 0)
        return 1;
    return 0;
}

// 函数whatDay:计算某年某月的1号是星期几
// 参数:year-年,month-月
// 返回值:1到7--星期1到星期日
int whatDay(int year, int month)
{
    // 1年月日是星期一
    int w = 1;
    int i;

    // 1到year-1都是全年
    for(i = 1; i < year; i++)
    {
        if(leapYear(i))
            w += 366;
        else
            w += 365;
    }
    switch(month)
    {
    case 12: // 加月的
        w += 30;
    case 11: // 加月的
        w += 31;
    case 10: // 加月的
        w += 30;
    case 9:  // 加月的
        w += 31;
    case 8:  // 加月的
        w += 31;
    case 7:  // 加月的
        w += 30;
    case 6:  // 加月的
        w += 31;
    case 5:  // 加月的
        w += 30;
    case 4:  // 加月的
        w += 31;
    case 3:  // 加月的
        if(leapYear(year))
            w += 29;
        else
            w += 28;
    case 2:  // 加月的天
        w += 31;
    case 1:  // 1月不加了
        ;
    }

    // 得到-6,其中为星期天
    w = w % 7;

    // 调整星期天
    if(w == 0)
        w = 7;
    return w;
}

// 请在下面补充代码,实现函数printMonth

//返回一个月有多少天 
int month_day(int year, int month) {
	switch (month)
	{
	case 2:
		if (leapYear(year)) {
			return 29;
		}
		else {
			return 28;
		}
		break;
	case 4:
	case 6:
	case 9:
	case 11:
		return 30;
		break;
	case 1:
	case 3:
	case 5:
	case 7:
	case 8:
	case 10:
	case 12:
		return 31;
		break;
	default:
		break;
	}
}

void printMonth(int year, int month)
{
	int days, day_week;
	int i = 1;
	int day = 1;
	printf("  一  二  三  四  五  六  日n");
	days = month_day(year, month);
	day_week = whatDay(year, month);
	if (day_week == 0) {
		day_week = 7;
	}
	while (i < day_week) {
		printf("    ");
		i++;
	}
	while (day <= days) {
		printf("%4d", day);
		day++;
		i = i % 7;
		if (i == 0) {
			printf("n");
		}
		//i = i % 7;
		i++;
	}
	if (i != 0) {
		printf("n");
	}
} 


int main()
{
    // 年、月
    int y, m;

    // 输入年月
    cin >> y >> m;

    // 输出该年月的日历
    printMonth(y,m);

    return 0;
}

可以不用我上述的代码来得到某月的第一天是星期几

int month_first_day_week(int year, int month) {

	int week = 1;
	for (int i = 1900; i < year; i++) {  
		++week;    //  365 % 7 = 1
		if (isleap(i)) {
			++week;
		}
	}
	for (int i = 1; i < month; i++) {

		week += month_day(year, i);
	}
	week %= 7;
	return week;
}

这里可以直接得到某年某月的第一天是星期几。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5691296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存