只用IF和SWITCH写出输入年月日判断星期几的程序

本文介绍了一个C语言程序,用于计算输入的年月日对应当年的第几天,并判断这一天是星期几。程序首先判断是否为闰年,然后根据月份和日期计算累计天数,最后通过天数模7得出星期几。

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

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int year = 0;
	int a = 0;
	int b = 0;
	int Y;
	int F;
	int ry;
	int YH;
	int FH;
	int rz;
//
	int a1, a2, a3, a4, a5, a6, a7, a8,a9,a10,a11,a12;
	a1 = 0; a2 = 31; a3 = 31 + 29; a4 = 31 + 29 + 31; a5 = 31 + 29 + 31 + 30; a6 = 31 + 29 + 31 + 30 + 31;
	a7 = 31 + 29 + 31 + 30 + 31 + 30; a8 = 31 + 29 + 31 + 30 + 31 + 30 + 31; a9 = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31;
	a10 = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30; a11 = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
	a12 = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
	int sum;

	//输入年份
	printf("请输入年份:\n");
	scanf(" %d", &year);
	//在此输入月和日期
	printf("请输入第几月:\n");
	scanf(" %d", &a);
	printf("请输入第几日:\n");
	scanf(" %d", &b);

	////判断该年月日是从公元元年开始的第几日
	////计算1年1月1日到100年12月31日是多少天
	//    YH = 100 * 365 + 25 - 1;
	////YH=146097

	////计算1年1月1日到400年12月31日是多少天
	//	FH = 400*365+100-3;
	////FH=146097

	////判断是否是闰年
	if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
	{
	//	//计算闰年第几天
		switch (a)
		{
		case 1:
			sum = a1 + b;
			printf("此日期是该年第%d天。\n",sum ); break;
		case 2:
			sum = a2 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 3:
			sum = a3 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 4:
			sum = a4 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 5:
			sum = a5 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 6:
			sum = a6 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 7:
			sum = a7 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 8:
			sum = a8 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 9:
			sum = a9 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 10:
			sum = a10 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 11:
			sum = a11 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 12:
			sum = a12 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		default:break;
		}
	
	//计算1年1月1日到year年12月31日是多少天
	ry = year * 365 + year / 4 - year / 100 + year / 400;
	//输入月份和日分,求该日到元年一月一日的天数,闰年是366天
	rz = ry - (366 - sum);
	//判断星期几
	switch (rz % 7 )
	{
	case 6:printf("周六\n"); break;
	case 5:printf("周五\n"); break;
	case 4:printf("周四\n"); break;
	case 3:printf("周三\n"); break;
	case 2:printf("周二\n"); break;
	case 1:printf("周一\n"); break;
	case 0:printf("周日。\n"); break;
	default:	break;
	}

}
	else {
	//计算非闰年的第几天
		switch (a)
		{
		case 1:
			sum = a1 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 2:
			sum = a2 + b;
			printf("此日期是该年第%d天。\n", sum); break;
		case 3:
			sum = a3 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 4:
			sum = a4 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 5:
			sum = a5 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 6:
			sum = a6 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 7:
			sum = a7 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 8:
			sum = a8 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 9:
			sum = a9 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 10:
			sum = a10 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 11:
			sum = a11 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		case 12:
			sum = a12 + b-1;
			printf("此日期是该年第%d天。\n", sum); break;
		default:break;
		}
		//计算1年1月1日到year年12月31日是多少天
		ry = year * 365 + year / 4 - year / 100 + year / 400;
		//输入月份和日分,求该日到元年一月一日的天数
		rz = ry - (365 - sum);
		//判断星期几
		switch (rz % 7 )
		{
		case 6:printf("周六\n"); break;
		case 5:printf("周五\n"); break;
		case 4:printf("周四\n"); break;
		case 3:printf("周三\n"); break;
		case 2:printf("周二\n"); break;
		case 1:printf("周一\n"); break;
		case 0:printf("周日。\n"); break;
		default:	break;
		
		}
}
	return 0;
}
#include <stdio.h> #include <stdlib.h> typedef struct { int month; // 份 float income; // 收入 float food; // 伙食消费 float daily; // 常用品费用 float utilities; // 水电费 float medical; // 医疗费 float entertainment; // 娱乐费用 float total; // 总开支 } Expense; //声明函数 void inputExpense(Expense expenses[]);//初始输入函数 void modifyExpense(Expense expenses[]);//修改函数 void sortExpenses(Expense expenses[]);//排序函数 void queryExpense(Expense expenses[]);//查询函数 void printExpenses(Expense expenses[]);//排列后开支情况总表打印函数 void saveExpensesToFile(Expense expenses[]);//文件写入 void loadExpensesFromFile(Expense expenses[]);//文件读取 void initExpenses(Expense expenses[]) { int i; for (i = 0; i < 12; i++) { expenses[i].month = i + 1; // 初始化份为1到12 expenses[i].income = 0.0f; // 初始化收入为0 expenses[i].food = 0.0f; // 初始化伙食消费为0 expenses[i].daily = 0.0f; // 初始化常用品费用为0 expenses[i].utilities = 0.0f; // 初始化水电费为0 expenses[i].medical = 0.0f; // 初始化医疗费为0 expenses[i].entertainment = 0.0f; // 初始化娱乐费用为0 expenses[i].total = 0.0f; // 初始化总开支为0 } } void saveExpensesToFile(Expense expenses[]) { FILE *file = fopen("expenses.txt", "w"); // 打开文件用于写入 if (file == NULL) { perror("无法打开文件"); return; } int i; for (i = 0; i < 12; i++) { fprintf(file, "%d %.2f %.2f %.2f %.2f %.2f %.2f %.2f\n", expenses[i].month, expenses[i].income, expenses[i].food, expenses[i].daily, expenses[i].utilities, expenses[i].medical, expenses[i].entertainment, expenses[i].total); } fclose(file); // 关闭文件 printf("数据已保存到文件\n"); } void loadExpensesFromFile(Expense expenses[]) { FILE *file = fopen("expenses.txt", "r"); // 打开文件用于读取 if (file == NULL) { perror("无法打开文件"); printf("将创建一个新文件\n"); return; } int i; for (i = 0; i < 12; i++) { if (fscanf(file, "%d %f %f %f %f %f %f %f", &expenses[i].month, &expenses[i].income, &expenses[i].food, &expenses[i].daily, &expenses[i].utilities, &expenses[i].medical, &expenses[i].entertainment, &expenses[i].total) != 8) { fprintf(stderr, "文件格式错误或数据不完整\n"); fclose(file); return; } } fclose(file); // 关闭文件 } void inputExpense(Expense expenses[]) { int month = 0; printf("请输入份(1-12):"); scanf("%d", &month); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入收入:"); scanf("%f", &expenses[month - 1].income); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入伙食消费:"); scanf("%f", &expenses[month - 1].food); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入常用品费用:"); scanf("%f", &expenses[month - 1].daily); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入水电费:"); scanf("%f", &expenses[month - 1].utilities); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入医疗费:"); scanf("%f", &expenses[month - 1].medical); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入娱乐费用:"); scanf("%f", &expenses[month - 1].entertainment); while (getchar() != '\n'); // 清除输入缓冲区 expenses[month - 1].month = month; expenses[month - 1].total = expenses[month - 1].food + expenses[month - 1].daily + expenses[month - 1].utilities + expenses[month - 1].medical + expenses[month - 1].entertainment; } void modifyExpense(Expense expenses[]) { int month = 0; printf("请输入要修改的份(1-12):"); scanf("%d", &month); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入新的收入:"); scanf("%f", &expenses[month - 1].income); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入新的伙食消费:"); scanf("%f", &expenses[month - 1].food); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入新的常用品费用:"); scanf("%f", &expenses[month - 1].daily); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入新的水电费:"); scanf("%f", &expenses[month - 1].utilities); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入新的医疗费:"); scanf("%f", &expenses[month - 1].medical); while (getchar() != '\n'); // 清除输入缓冲区 printf("请输入新的娱乐费用:"); scanf("%f", &expenses[month - 1].entertainment); while (getchar() != '\n'); // 清除输入缓冲区 expenses[month - 1].total = expenses[month - 1].food + expenses[month - 1].daily + expenses[month - 1].utilities + expenses[month - 1].medical + expenses[month - 1].entertainment; } void sortExpenses(Expense expenses[]) { int i, j, maxIndex;//选排 Expense temp; for (i = 0; i < 11; i++) { // 找到未排序部分的最小元素的索引 maxIndex = i; for (j = i + 1; j < 12; j++) { if (expenses[j].total > expenses[maxIndex].total) { maxIndex = j; } } // 将找到的最小元素与未排序部分的第一个元素交换 if (maxIndex != i) { temp = expenses[i]; expenses[i] = expenses[maxIndex]; expenses[maxIndex] = temp; } } } void queryExpense(Expense expenses[]) { int month = 0; printf("请输入要查询的份(1-12):"); scanf("%d", &month); while (getchar() != '\n'); // 清除输入缓冲区 if (month < 1 || month > 12) { printf("无效的份\n"); return; } printf("份:%d\n", expenses[month - 1].month); printf("收入:%.2f\n", expenses[month - 1].income); printf("伙食消费:%.2f\n", expenses[month - 1].food); printf("常用品费用:%.2f\n", expenses[month - 1].daily); printf("水电费:%.2f\n", expenses[month - 1].utilities); printf("医疗费:%.2f\n", expenses[month - 1].medical); printf("娱乐费用:%.2f\n", expenses[month - 1].entertainment); printf("总开支:%.2f\n", expenses[month - 1].total); } void printExpenses(Expense expenses[]) { printf("排序后的开支情况:\n"); int i; for (i = 0; i < 12; i++) { printf("份:%d, 收入:%.2f, 伙食消费:%.2f, 常用品费用:%.2f, 水电费:%.2f, 医疗费:%.2f, 娱乐费用:%.2f, 总开支:%.2f\n", expenses[i].month, expenses[i].income, expenses[i].food, expenses[i].daily, expenses[i].utilities, expenses[i].medical, expenses[i].entertainment, expenses[i].total); } } int main() { Expense expenses[12]; //假设一有12个 int j; for (j = 0;j <= 11;j++) { expenses[j].month= 0 ; } initExpenses(expenses); int choice; // 从文件加载数据 loadExpensesFromFile(expenses); do { printf("\n"); printf("1. 输入收支情况\n"); printf("2. 修改收支情况\n"); printf("3. 排序开支\n"); printf("4. 查询收支情况\n"); printf("5. 保存退出\n"); printf("请输入您的选择:"); scanf("%d", &choice); while (getchar() != '\n'); // 清除输入缓冲区 switch (choice) { case 1: inputExpense(expenses); break; case 2: modifyExpense(expenses); break; case 3: sortExpenses(expenses); printf("开支已排序\n"); printExpenses(expenses);//打印排序后的结果 break; case 4: queryExpense(expenses); break; case 5: saveExpensesToFile(expenses); printf("退出系统\n"); return 0; default: printf("无效的选择,请重新输入\n"); } } while (choice != 5); return 0; }修改成按照天去统计收支,但是最后按照的总计去显示
06-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值