根据年月日判断星期几的c程序

 /*2019年1月29日*/
 /*作者:石辅寸*/
 /*根據年月日計算星期幾*/
 /* S = {x - 1 [(x-1)/4] - [(x-1)/100] + [(x-1)/400] + C}%7 */
 /* S為星期序數,x為年份,C為當年元旦至當日(包含當日)的天數 */
 #include<stdio.h>
 main()
 {
 	int a,b,c,d,s;
 	printf("清輸入年月日:");
 	scanf("%d%d%d",&a,&b,&c);
 	/*檢驗輸入是否正確*/
 	if(b <= 0 || b > 12)
 	{
 		printf("月份輸入錯誤,請重新輸入!");
 	}
 	if(c <= 0)
 	{
 		printf("日期輸入錯誤,請重新輸入!");
 	}
 	if(c >= 31)
 	{
 		switch(b)
 		{
 			case 1: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 3: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 5: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 7: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 8: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 10:printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 12:printf("日期輸入錯誤,請重新輸入!");
 			break;
 		}
 	}
 	if(c >= 30)
 	{
 		switch(b)
 		{
 			case 4: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 6: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 9: printf("日期輸入錯誤,請重新輸入!");
 			break;
 			case 11: printf("日期輸入錯誤,請重新輸入!");
 			break;
 		}
 	}
 	if((a%4 == 0 && a%100 != 0) || (a%400 == 0))
 	{
 		if(b == 2)
 		{
 			if(c >= 29)
 			{
 			printf("日期輸入錯誤,請重新輸入!");
 			}
 		}
 	}
 	else
 	{
 		if(b == 2)
 		{
 			if(c >= 28)
 			{
 			printf("日期輸入錯誤,請重新輸入!");
 			}
 		}
 	}
 	/*閏年的情況*/
 	if((a%4 == 0 && a%100 != 0) || (a%400 == 0))
 	{
 		switch(b)
 		{
 			case 1: d = c;
 			break;
 			case 2: d = c + 31;
 			break;
 			case 3: d = c + 60;
 			break;
 			case 4: d = c + 91;
 			break;
 			case 5: d = c + 121;
 			break;
 			case 6: d = c + 152;
 			break;
 			case 7: d = c + 182;
 			break;
 			case 8: d = c + 213;
 			break;
 			case 9: d = c + 244;
 			break;
 			case 10:d = c + 274;
 			break;
 			case 11:d = c + 305;
 			break;
 			case 12:d = c + 335;
 			break;
 		}
 	}
 	/*平年的情況*/
 	else
 	{
 		switch(b)
 		{
 			case 1: d = c;
 			break;
 			case 2: d = c + 31 - 1;
 			break;
 			case 3: d = c + 60 - 1;
 			break;
 			case 4: d = c + 91 - 1;
 			break;
 			case 5: d = c + 121- 1;
 			break;
 			case 6: d = c + 152- 1;
 			break;
 			case 7: d = c + 182- 1;
 			break;
 			case 8: d = c + 213- 1;
 			break;
 			case 9: d = c + 244- 1;
 			break;
 			case 10:d = c + 274- 1;
 			break;
 			case 11:d = c + 305- 1;
 			break;
 			case 12:d = c + 335- 1;
 			break;
 		}
 	}
 	s = (a-1 + (a-1)/4 - (a-1)/100 + (a-1)/400 + d)%7;
 	switch(s)
 	{
 		case 0: printf("這一天是週日。\n");
         break;
 		case 1: printf("這一天為週一。\n");
 		break;
 		case 2: printf("這一天是週二。\n");
 		break;
 		case 3: printf("這一天是週三。\n");
 		break;
 		case 4: printf("這一天是週四。\n");
 		break;
 		case 5: printf("這一天是週五。\n");
 		break;
 		case 6: printf("這一天是週六。\n");
 		break;
 	}
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值