学习完基础循环、选择语句,写一个日历检验水准。
日历核心:
1.选择基础参照,用来计算总天数和周几的参照(since 1900.1.1,这天是周一)
2.闰年平年的判断条件及循环结构
3.计算需要打印月份的天数、从周几开始的补充空格数、循环换行
代码参照如下,初级版本,有待进一步优化至万年历(1900年之前还没验证)
#include <stdio.h>
int main()
{
int basic_year = 1900;
int i,j,k,m;
int sum = 0;
int month_day;
int year,month;
int check_year,check_month;
printf("请输入年份:");
check_year = scanf("%d",&year);
while(0 == check_year)
{
getchar();
printf("年份输入错误,请重新输入:");
check_year = scanf("%d",&year);
}
printf("请输入月份(1~12):");
check_month = scanf("%d",&month);
while(0 == check_month || month < 1 || month > 12)
{
getchar();
printf("月份输入错误,请重新输入(1~12):");
check_month = scanf("%d",&month);
}
for(i=1900; i<year;i++)
{
if((i%100!=0) && (i%4==0) || (i%400==0) )
sum=sum+366;
else
sum=sum+365;
}
for(j=1;j<=month;j++)
{
if(j==1 || j==3 ||j==5 ||j==7 ||j==8 ||j==10 ||j==12)
{
sum=sum+31;
month_day=31;
}
else if(j==4 ||j==6 ||j==9 ||j==11)
{
sum=sum+30;
month_day=30;
}
else
{
if( (year%400==0) || ((year%100!=0) && (year%4==0)) )
{
sum=sum+29;
month_day=29;
}
else
{
sum=sum+28;
month_day=28;
}
}
}
printf("sum=%d
",sum);
printf("%d年%d月
",year,month);
printf("一 二 三 四 五 六 日
");
for(k=0;k<((sum-month_day)%7);k++)
printf(" ");
for(m=1;m<=month_day;m++)
{
if((m+k)%7==0)
printf("%d
",m);
else
printf("%d ",m);
}
return 0;
}