星期几?C语言基础

题目标题:

星期几?(谌海军)

题目描述:

编一个程序,已知今天是星期几,计算出n天后是星期几。要求使用枚举变量。 提示:枚举变量的赋值只能用枚举常量来表示,但是枚举常量均有一个整形数代表,可将改整形数存入枚举变量地址以实现外部赋值的目的。如:enum day{Sun,Mon,Tue,Wed,Thu,Fri,Sat} d1; scanf("%d",&d1); 当键盘输入1时,相当于将d1赋值为Mon,即d1=Mon 枚举变量的输出,只能输出其代表的整形数,如需输出其对应的枚举常量,可借助字符串数组的方式处理;如:char *p[]={“Sun”,“Mon”,“Tue”,"Wed","Thu","Fri","Sat"}; printf("%s",*(p+2)); 其输出结果为:Tue

输入描述:

输入为两个正整数,第一个数n(n<=6)表示今天是星期几,第二个数m(m<=1000),表示求m天后是星期几;

输出描述:

输出为一个长度为3的字符串,表示星期几的名称;

样式输入:

1 4

样式输出:

Fri

include<stdio.h>
int main()
{
    int n,m,i;
    scanf("%d%d",&n,&m);
    i=(n+m)%7;
    switch(i)
    {
        case 1:printf("Mon");break;
        case 2:printf("Tue");break;
        case 3:printf("Wed");break;
        case 4:printf("Thu");break;
        case 5:printf("Fri");break;
        case 6:printf("Sat");break;
        case 0:printf("Sun");break;

    }
}
要使用C语言计算输入日期是星期,你可以利用Zeller's Congruence算法。这个算法基于公历日期(年份、月份和日)来确定星期。以下是一个简单的实现: ```c #include <stdio.h> int is_leap_year(int year) { return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); } int day_of_week(int y, int m, int d) { if (m < 3) m += 12, y--; int h = (y + floor((m - 1)/12)) + floor(d/4) + floor((m + 1) / 4) - 2 * floor(y / 100) + floor(y / 400); // Zeller's Congruence h %= 7; switch (h) { case 0: return "Sunday"; // 星期天 case 1: return "Monday"; // 星期一 case 2: return "Tuesday"; // 星期二 case 3: return "Wednesday"; // 星期三 case 4: return "Thursday"; // 星期四 case 5: return "Friday"; // 星期五 case 6: return "Saturday"; // 星期六 } } int main() { int year, month, day; printf("Enter the date (YYYY MM DD): "); scanf("%d %d %d", &year, &month, &day); // 检查月份是否有效(范围1-12) if (month < 1 || month > 12) { printf("Invalid month.\n"); return 1; } // 计算星期 char weekday[10]; strcpy(weekday, day_of_week(year, month, day)); printf("The date %d-%d-%d is a %s.\n", year, month, day, weekday); return 0; } ``` 这段码首先定义了一个辅助函`is_leap_year()`来判断给定的年份是否为闰年,然后根据Zeller's Congruence公式计算星期。主函中从用户那里获取输入的日期,调用`day_of_week()`函,并输出结果。 注意:Zeller's Congruence并不是最精确的方法,现计算机通常会直接依赖操作系统提供的API来获取准确的星期信息,但在学习或了解基础算法时,这是一个实用的练习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值