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");
}
}

posted @ 2018-05-08 10:05  我喜欢空格键  阅读(132)  评论(0编辑  收藏  举报