输入年月日判断星期几C语言版-附带讲解

        今天是星期几?这个问题看着简单,但你会用C语言运算出来今天是星期几嘛?

首先给他一个值·,例:1945年的10月1日,判断它是星期几,那么只需要通过简单的公式判断出他是星期几,并且证明其正确性。

入格式:

输入数据的数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。

输出格式:

对于每组输入数据,输出一行,表示该日期是星期几英文单词。

输入样例:

2011/11/17

输出样例:

thursday

具体判断某一年的某月某日是星期几的话有专门的科学家做过研究并总结出了很多推算方法的,这个是比较简单的算法:
result=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+days)%7;
(其中的“/”是将除得的结果取整数部分,“%”是求余)
其中year是年份,days是某一年的天数,result得出的结果0,1,2,…,6分别对应的星期天,星期一,星期二,…,星期六;

同样,如果你想定位某年的任一天是星期几,这个公式同样适用的,不过此时的days则是这一天在这一年中的累积天数.
 

#include "stdio.h"
char ew[7][20]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};
int a[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};  //一年里面有7个月是31天的,有4个月是30天的,则2月是28天或29天的 
int main(){
	int y,m,d; 
	scanf("%d/%d/%d",&y,&m,&d);
	if(y%4==0&&y%100!=0||y%400==0)   
	a[2]=29;  
	int ans=d,i; 
	for(i=1;i<=m-1;i++){                    
		ans+=a[i];
	}
	int s,r;
	s=y-1+(y-1)/4-(y-1)/100+(y-1)/400+ans;
	r=s%7;
	for(i=0;i<=6;i++){
		if(r==i){
			printf("%s\n",ew[i]);
			break;
		}
	}
}

代码详解

int y,m,d;

这段代码的意思就是 y,m,d的类型为整数。 y是年份 m是月 d是日

if(y%4==0&&y%100!=0||y%400==0)
a[2]=29;

根据输入的年份判断2月是平月还是闰月 ,如果是平月是28月,如果是闰月则是29天.闰月29天赋值给变量a中的第二字符,,也就是“28”此时替换成了29   

	for(i=1;i<=m-1;i++){                        
		ans+=a[i];
	}

附带流程图,一看就懂    

 

int s,r;

定义整型 s,r 

	s=y-1+(y-1)/4-(y-1)/100+(y-1)/400+ans;

根据运算顺序进行运算

运算完之后再把值赋值给s 

	r=s%7;

 s内的值抹除7,剩下的余赋值给r

	for(i=0;i<=6;i++){
		if(r==i){
			printf("%s\n",ew[i]);
			break;

再次运行for循环


本期教程到此就结束了,希望这篇文章能够帮助大家更好的理解这段程序。

以下是一个简单的C语言程序,可以输入年月日,然后计算并输出对应的星期几。 ``` #include <stdio.h> int main() { int year, month, day; printf("请输入年月日,格式为YYYY-MM-DD:"); scanf("%d-%d-%d", &year, &month, &day); // 判断是否为闰年 int is_leap_year = 0; if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { is_leap_year = 1; } // 计算该月的天数 int days_in_month[] = {31, 28 + is_leap_year, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; int days = days_in_month[month - 1]; // 判断输入的日期是否合法 if (day < 1 || day > days || month < 1 || month > 12) { printf("输入的日期不合法!\n"); return 1; } // 计算该日期是一年中的第几天 int days_so_far = 0; for (int i = 0; i < month - 1; i++) { days_so_far += days_in_month[i]; } days_so_far += day; // 计算该日期是星期几 int weekday = (days_so_far + year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7; // 输出结果 char* weekdays[] = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"}; printf("%d年%d月%d日是%s。\n", year, month, day, weekdays[weekday]); return 0; } ``` 该程序首先从标准输入中读取年月日,然后判断该年是否为闰年,接着根据输入的月份计算该月的天数。如果输入的日期不合法,则输出错误信息并退出程序。 然后,程序计算该日期是一年中的第几天(需要考虑闰年的情况),最后用一个公式计算出该日期是星期几。最后,程序根据计算结果输出该日期对应的星期几。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值