程序【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;
}