44.利用到数组打月历表
/*
m=10;
ms[12]={31,28,31,30,31,30,31,31,30,31,30,31}
0 m-1
*/
#include "stdio.h"
void main()
{
int ms[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int y,m;//用于存放年月
int i;//循环变量,用于记住数组的编号范围
int sum=0;//用于存放1900--输入那个年的某个月的1号为止的总天数
int w;//记住输入月的1号的星期数,也是1号之前要打的空格数
printf("请输入年份数:");
scanf("%d",&y);
if(y%4==0&&y%100!=0||y%400==0)
ms[1]=29;
printf("请输入月份数:");
scanf("%d",&m);
//求出1900年--y-1年所有完整年的总天数
for(i=1900;i<=y-1;i++)
{
if(i%4==0&&i%100!=0||i%400==0)
sum+=366;
else
sum+=365;
}
//求出y年的0月--m-2月所有完整月的总天数
for(i=0;i<=m-2;i++)
{
sum+=ms[i];
}
//再把m月的1号这一天加进去
sum+=1;
//求m月1号星期数(也是打印1号之前的空格数)
w=sum%7;
printf("\n\t\t%d年%d月的日历表如下:",y,m);
printf("\n\n日\t一\t二\t三\t四\t五\t六\n");
//先打1号之前的空格数
for(i=1;i<=w;i++)
printf("\t");
//输出m-1月的所有号数
for(i=1;i<=ms[m-1];i++)
{
if(i<10)
printf("0%d\t",i);
else
printf("%d\t",i);
if((w+i)%7==0)
printf("\n");
}
}