分析
1.判断是否是闰年,2月天数是取决与是否闰年的;
2.计算年份的星期;
3.打印日历表
有点难,循环先不说,做这个作业的时候多半人数组都没学哈哈;
第一种做法
#include <stdio.h>
int year(int y)
{
if ((y%4==0) && (y%100!=0) || y%400==0)//判断闰年
return 366;
else
return 365;//不是闰年时
}
int main()
{
int y;
int i,j,sum=0;
int begin,week;
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};//每个月的日期
scanf("%d",&y);
for(i=1;i<y;i++)
sum+=year(i);
week=(sum+1)%7; //表示该年1月1日为星期几
if(year(y)==366)
days[1]=29;
printf("\n%d年日历如下:\n\n",y);
for(i=0;i<12;i++)
{
printf(" %d月 \n",i+1);
printf(" 7 1 2 3 4 5 6\n");
printf("=====================\n");
begin=1;
for(j=0;j<week;j++)
printf(" ");
while(begin<=days[i])
{
printf("%3d",begin);
begin++;
week=(week+1)%7;
if(week%7==0)
printf("\n");
}
printf("\n\n");
}
return 0;
}
第二种,大同小异
泰勒公式反而拖后腿,我们并不知道input的样例,不如从1开始。
#include <stdio.h>
#include<stdlib.h>
int year(int y)
{ //判断平年闰年
if ((y % 4 == 0) && (y % 100 != 0) || y % 400 == 0)
return 366; //闰年
else
return 365; //平年
}
void printfStar() //自定义函数
{
printf("*****************************\n");
}
int main()
{
int y;
int i,j,sum = 0;
int day ,week;
int month[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; //闰年中每个月的天数
//输入想知道哪一年的日历
printf("请输入年份:\n");
scanf("%d",&y);
if(year(y) == 366)
month[1] = 29; //平年中2月的天数
//判断某年中1月1日为星期几 (泰勒公式, 1900年1月1号 星期一)
for(i = 1990;i < y;i++)
sum += year(i);
week = (sum+1)%7;
printf("%d年日历如下:\n",y);
for(i = 0;i < 12;i++)
{
printf("\t %d月\n",i+1);
printf(" 日 一 二 三 四 五 六\n");
printfStar();
//每一天对应的星期输入
day = 1; //从某一年的某一个月的第一天开始算起
for(j = 0;j < week;j++)
printf(" ");
while(day <= month[i]) //每个月的天数
{
printf("%4d",day); // 对齐
day++;
week= (week+1)%7; //计算每一天星期几
//如果一行达到7个数就换行,对应一个星期
if(week % 7 == 0)
printf("\n"); //换行
}
printf("\n"); //月份与月份之间隔开
printfStar(); //打 “*” 边框
printf("\n");
}
system("pause"); //防止闪退
return 0;
}