关于日历程序的设计
1.设计要求;输入一个年份要求输出打印该年每个月的日历。
2.设计思路:要输出某年的日历,先求出该年第一天是星期几;再从1月到12月执行一次循环,
考虑闰年2月29天,月份有大小,天数按星期排列的问题。
日历程序及部分注释
#include
int runnian(int);
/函数申明;
void main()
{
int a[12][42] =
{0}; /定义一个数组
long int days =
0; /定义长整型变量,赋初值为0;days
int
n=1; /定义变量,n=1表示初始第一年;
int
c; /c表每一年的天数;
int p; /表星期;
int x ,y,i,j,m,b;
printf("please input the
year:"); /打印输出
scanf("%6d",&b);
/输入的年份b;
while(n <
b) /循环求b年前的所有天数和;
{
if( runnian( n )
) /调用闰年的函数;
c = 366;
else
c = 365;
days = days + c;
n++;
}
p=days%7; /p为b年第一天的星期;
for(i=0;i<12;i++) /循环12个月份;
{
x=1;
if(i==0||i==2||i==4||i==6||i==7||i==9||i==11)
{
y=0;
for(j=p;j<42;j++)
{
a[i][j]=x++;
if(x>31)
{
y = j+1;
break;
}
}
p=y%7;
}
else
if(i==1&&runnian( b
)) /调用闰年函数;
{
int y=0;
for(j=p;j<42;j++)
{
a[i][j]=x++;
if(x>29)
{
y = j+1;
break;
}
}
p=y%7;
}
else
if(i==1)
{
int y=0;
for(j=p;j<42;j++)
{
a[i][j]=x++;
if(x>28)
{
y = j+1;
break;
}
}
p=y%7;
}
else
{
y=0;
for(j=p;j<42;j++)
{
a[i][j]=x++;
if(x>30)
{
y = j+1;
break;
}
}
p=y%7;
}
}
for(m=1;m<=12;m++)
/循环语句执行打印输出;
{
printf("%3dmonth\n",m);/输出打印12个月的月份
printf("MON TUS WED THU FRI SAT
SUN\n");/输出打印星期;
for(j=0;j<6;j++)
{ 两个嵌套循环将每个月按六行七列排列;
for(i=j*7;i
{
if(a[m-1][i]==0)
{
printf(" ");
}
else
{
printf("%3d
",a[m-1][i]);
}
}
printf("\n");
}
}
}
int runnian( int b
) /闰年函数定义;
{
if ((b %4 == 0) && (b %
100 != 0) ||
(b % 400 ==
0) )
return
1; /返回值
else
return 0;
}