判断某年某月一号是星期几,怎么判断??????????????

本文介绍了一种使用蔡勒公式计算指定日期是星期几的方法。适用于1582年10月15日之后的日期。通过具体示例演示了如何运用公式进行计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  计算星期可以用蔡勒(Zeller)公式(只适合于1582年10月15日之后的情形): w = y + [y / 4 ] + [c / 4 ] - 2c + [ 26 (m + 1 ) / 10 ] + d - 1 公式中的符号含义如下: c:世纪(年的高两位数); y:年(年的低两位数); m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月 来计算,比如2005年1月1日要看作2004年的13月1日来计算); d:日; []代表取整,即只要整数部分。 w:星期;w对7取模得: 0 - 星期日, 1 - 星期一, 2 - 星期二, 3 - 星期三, 4 - 星期四, 5 - 星期五, 6 - 星期六 以2005年2月14日为例:c = 20 ,y = 4 ,m = 14 ,d = 14 w = 4 + [ 4 / 4 ] + [ 20 / 4 ] - 2 * 20 + [ 26 * ( 14 + 1 ) / 10 ] + 14 - 1 = 4 + 1 + 5 - 40 + 39 + 14 - 1 = 22 (除以7余1) 所以2005年2月14日是星期一。
好的,以下是一个用 C 语言编写的万年历程序,代码较长,但尽力保证清晰易懂。 ```c #include <stdio.h> // 判断是否为闰年 int isLeapYear(int year) { return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)); } // 计算某一年某一月的天数 int getDaysOfMonth(int year, int month) { int days = 31; if (month == 2) { days = isLeapYear(year) ? 29 : 28; } else if (month == 4 || month == 6 || month == 9 || month == 11) { days = 30; } return days; } // 计算某一年某一月一号星期(0-6,0表示星期天) int getWeekday(int year, int month) { int century = year / 100; // 世纪数 int yearInCentury = year % 100; // 世纪内的年份 int weekday = (yearInCentury + yearInCentury / 4 + century / 4 - 2 * century + 26 * (month + 1) / 10 + 1) % 7; if (weekday < 0) { weekday += 7; } return weekday; } // 打印日历 void printCalendar(int year, int month) { int days = getDaysOfMonth(year, month); // 本月天数 int weekday = getWeekday(year, month); // 本月一号星期 printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n"); for (int i = 0; i < weekday; i++) { printf("\t"); } for (int i = 1; i <= days; i++) { printf("%d\t", i); if ((i + weekday) % 7 == 0) { printf("\n"); } } printf("\n"); } int main() { int year, month; printf("请输入年份:"); scanf("%d", &year); printf("请输入月份:"); scanf("%d", &month); printCalendar(year, month); return 0; } ``` 这个程序可以接受用户输入的年份和月份,然后输出该月的日历。其中使用了一些基本的数学公式计算,例如判断闰年、计算某年某月的天数、计算某年某月一号星期等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值