、电子万年历:用C语言设计一个年历系统,功能要求: (1)输入任一年将显示出该年的所有月份日期,对应的

2020-09-26 财经 115阅读
/*
1、闰年的算法:
如果某年能被4整除但不能被100整除,
或者能被400整除,
则该年是闰年.
用表达式表示就是
(year %4 == 0 && year%100 != 0) || (year%400 == 0)
2、计算某一天是星期几:
已知1900年的1月1号为星期一,
然后就可以用某一天和1900年的1月1号相差的天数对7取余来求星期,
本题是用的公元1年的1月1号作为基准
*/
#include
#include
#include
int IsLeapYear(int); //函数定义
void main()
{
int i;
int day;
int year;
int temp;
int temp_i;
long int Year_days = 0;
int Year_Start = 1;
int Per_Year_Days;
int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};
printf("Please enter the year: ");
scanf("%d",&year); //输入年份
while(Year_Start < year) //从公元1年开始执行while循环, 该年的一月一号为星期一
{
if( IsLeapYear( Year_Start ) )
Per_Year_Days = 366; //如果是闰年, 则一年有366天
else
Per_Year_Days = 365; //如果不是闰年, 则一年有365天
Year_days = Year_days + Per_Year_Days; //Year_days为从公元1年到输入年份的前一年的天数的总和
Year_Start++;
}
for( temp = 1; temp <=12; temp++ ) //temp从1到12, 对应一年内12个月
{
switch( temp ) //用switch语句将temp和12个月对应起来
{
case 1:
printf(" January(%d)\n",year); //一月
break;
case 2:
printf(" February(%d)\n",year); //二月
break;
case 3:
printf(" March(%d)\n",year); //三月
break;
case 4:
printf(" April(%d)\n",year); //四月
break;
case 5:
printf(" May(%d)\n",year); //五月
break;
case 6:
printf(" June(%d)\n",year); //六月
break;
case 7:
printf(" July(%d)\n",year); //七月
break;
case 8:
printf(" August(%d)\n",year); //八月
break;
case 9:
printf(" September(%d)\n",year); //九月
break;
case 10:
printf(" October(%d)\n",year); //十月
break;
case 11:
printf(" November(%d)\n",year); //十一月
break;
case 12:
printf(" December(%d)\n",year); //十二月
break;
}
i = Year_days % 7; //每个星期有7天, 故用每年的天数对7取余
printf("Mon\tTue\tWed\tThu\tFri\tSat\tSun\n");
if( i != 0 ) //如果余数不为零
for( temp_i = 0; temp_i < i; temp_i++)
printf("\t"); //则打印空格(这里用\t代替空格, 更加美观), 空格数为i
day = 1; //初始化day为1, 为下面的while循环做准备
if( IsLeapYear(year) && temp == 2) //如果输入的年份是闰年, 并且月份为2
while( day <= month_day[12] ) //day为一循环变量, 取值为1-365(闰年的话为1-366)
{
if( day >1 ) //如果天数大于一
if( Year_days % 7 == 0 ) //如果是星期日, 则换行
printf("\n");
if( day >= 10 )
printf("%d\t",day); //打印天数+空格
else
printf("%d\t",day);
Year_days++;
day++;
}
else //如果不满足"输入的年份是闰年, 并且月份为2"
while (day <= month_day[temp-1])
{
if( day > 1 )
if( Year_days % 7 == 0 )
printf("\n");
if( day >=10 )
printf("%d\t",day);
else
printf("%d\t",day);
Year_days++;
day++;
}
printf("\n");
if( getch() == 'q' ) //如果输入为q, 则退出程序
exit(0);
}
getch(); //每按一次键, 打印一个月份
}
int IsLeapYear( int year )
{
//判断是否是闰年, 是则返回1, 否则返回0
if ((year %4 == 0) && (year % 100 != 0) ||
(year % 400 == 0) )
return 1;
else
return 0;
}
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com