C语言经典例题100道

程序【4】

用的编译环境是vs2022,对于scanf()该函数有要求必须声明,scanf_s(),可根据自己环境要求自行去掉_s改成scanf()。

因为这题让我产生了很多的兴趣,在原来的基础上进行了扩展最后变成了一种简陋的【年份计算器】
原题:输入某年某月某日,判断这一天是这一年的第几天?

#include<stdio.h>
#include<time.h>
#include<windows.h>//该头文件包含着下面Sleep()函数
//年份计算器
//输入某年某月某日,判断这一天是这一年的第几天?
void CaculateWeekDay(int y, int m, int d)//声明定义日期寻找函数
{
	printf("这一天是");
	if (m == 1 || m == 2) {
		m += 12;
		y--;
	}
	int iWeek = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;
	// C语言根据日期判断星期几(使用基姆拉尔森计算公式)
	//算法如下:
	//	基姆拉尔森计算公式
	//	W = (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) mod 7
	//	在公式中d表示日期中的日数,m表示月份数,y表示年数。
	
	
	switch (iWeek)
	{
	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;
	default:
		printf("输入错误");
		break;
	}
}
int main() {
	int input = 0;
	do {//运用循环,当计算完一个后选择是否继续
		printf("输入是否开始计算(1/0)");
		scanf_s("%d", &input);
		switch (input) {
		case 1:
			printf("程序即将开始\n");
			Sleep(1000);//Sleep()函数是以毫秒为单位计算的
			goto tp1;
			break;
		case 0:
			printf("程序即将结束\n");
			Sleep(1000);//延迟1秒
			goto tp2;
			break;
		default:
			printf("输入错误,请重新输入!!!\n");
		}
	
		
	tp1:
		int year = 0;
		int day = 0;
		int month = 0;
		int sum = 0;
		int leap = 0;
		int week = 0;
		int weekend = 0;
		printf("输入对应的年:");
		scanf_s("%d", &year);
		if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
			leap = 1;
			printf("输入的年份为闰年,2月有29天\n");
		}
		else {
			printf("输入的年份为平年,2月有28天\n");
		}
		printf("\n");
		printf("输入对应的月:");
		scanf_s("%d", &month);
		printf("\n");
		printf("输入对应的日:");
		scanf_s("%d", &day);
		printf("\n");
		switch (month) {
		case 1:
			sum = 0;
			break;
		case 2:
			sum = 31;
			break;
		case 3:
			sum = 59;
			break;
		case 4:
			sum = 90;
			break;
		case 5:
			sum = 120;
			break;
		case 6:
			sum = 151;
			break;
		case 7:
			sum = 181;
			break;
		case 8:
			sum = 212;
			break;
		case 9:
			sum = 243;
			break;
		case 10:
			sum = 273;
			break;
		case 11:
			sum = 304;
			break;
		case 12:
			sum = 334;
			break;
		default:
			printf("data error");
			break;
		}
		sum += day;
		if (leap == 1 && month > 2) {
			sum++;
		}

		printf("这一天是这一年的第%d天", sum);
		printf("\n");
		if (sum % 7 == 0) {
			printf("这是一年中的第几周:%d", sum / 7);
		}
		else {
			printf("这是一年中的第几周:%d", sum / 7 + 1);
		}
		printf("\n");
		CaculateWeekDay(year, month, day);//调用星期寻找函数
	} while (input);
	tp2:
	return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值