您的位置:首页 > 编程语言 > C语言/C++

C++:输出日历的算法

2012-04-16 23:06 344 查看
功能:只要输入四位数的年份和该年的元旦是星期几,就可以输出全年的日历。

思路提示:

(1)一年有12个月,所以,输出年历的算法是:

int month=1;

while (month<=12)

{

计算第month月的天数MAX_DAY;

输出天数是MAX_DAY的第month月的年历;

month++;

}

(2)根据大月、小月、闰年、平年,计算year第month月的天数MAX_DAY,算法是:

switch (month)

{

case 1:case3:case 5:case7:case 8:case10:case 12:

MAX_DAY=31;break;

case 2:

if (((year%4)= =0)&&((year%100)!=0)||(year%400= =0))

MAX_DAY=29;

else

MAX_DAY=28;

break;

case 4:case 6:case 9:case 11:

MAX_DAY=30;

break;

}

(3)输出日历

printf(“\n= = = = = = = = = =%2d月份= = = = = = = = = =\n”,month);

printf(“ SUN MON TUE WED THU FRI SAT\n”);

for (i=0;i<week;i++)

printf(“%4c”,’ ’);

for (day=1;day<=MAX_DAY;day++)

{

printf(“%4d”,day);

week++;

week%=7;

if (week= =0)

printf(“\n”);

}

#include"stdio.h"

#include"stdlib.h"

void setmonth(int r);

void main(void)

{

int year,month,day,a,b,i,j,d,x,mon,k;

printf(" 时间:2009-7-4 21:47 完成\n");

printf("----------------------------------------------------\n");

printf(" 如果你想选择输出全年的日历,请选1!\n");

printf(" 如果你想选择输出某个月的日历,请选2!\n");

printf("如果你想知道某年某月某日的具体是星期几,请选择3!\n");

printf(" 你还要继续吗?请选择4!\n");

printf(" 如果你要退出,请选择5!\n");

printf("-----------------------------------------------------\n");

do

{

printf("请选择:");

scanf("%d",&x);

if(x==1) //判断输出全年日历的条件

{

month=12;

printf("请输入年:");

scanf("%d",&year);

}

if(x==2) //判断输出某个月的日历的条件

{

printf("请输入年、月:");

scanf("%d%d",&year,&month);

}

if(x==3) //判断输出具体某天是星期几的条件

{

printf("请输入年、月、日:");

scanf("%d%d%d",&year,&mon,&day);

month=mon-1;

}

if(x==5) //退出的条件

exit(100);

a=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400)%7; //判断某年的第一天是星期几

for(i=1,d=0;i<=month;i++)

{

switch(i)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:d=31;break;

case 2:if(!(year%4)&&(year%100)||!(year%400)) //判断是否是闰年

d=29;

else

d=28;

break;

case 4:

case 6:

case 9:

case 11:d=30;

}

b=a%7; //判断某月的第一天是星期几

a+=d; //求总的天数

if(x==1) //判断输出全年的日历

{

printf("========================================================\n");

setmonth(i); //调用输出的月份

printf("************************************************\n");

printf("========================================================\n");

printf(" 星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");

for(j=1;j<=b;j++)

printf("%8c",' ');

for(j=1;j<=d;j++)

{

printf("%8d",j);

if((j+b)%7==0)

printf("\n");

}

}

if(x==1) //跟随条件一,每个月的末尾换行

printf("\n");

}

if(x==2) //输出一个月的日历

{

printf("========================================================\n");

setmonth(i-1); //调用月份的输出

printf("************************************************\n");

printf("========================================================\n");

printf(" 星期一 星期二 星期三 星期四 星期五 星期六 星期日\n");

for(j=1;j<=b;j++)

printf("%8c",' ');

for(j=1;j<=d;j++)

{

printf("%8d",j);

if((j+b)%7==0)

printf("\n");

}

printf("\n");

}

if(x==3) //输出具体某天是星期几

{

a+=day;

a%=7;

switch(a)

{

case 0:printf("%d-%d-%d是星期天!",year,mon,day);break;

case 1:printf("%d-%d-%d是星期一!",year,mon,day);break;

case 2:printf("%d-%d-%d是星期二!",year,mon,day);break;

case 3:printf("%d-%d-%d是星期三!",year,mon,day);break;

case 4:printf("%d-%d-%d是星期四!",year,mon,day);break;

case 5:printf("%d-%d-%d是星期五!",year,mon,day);break;

default:printf("%d-%d-%d是星期六!",year,mon,day);

}

printf("\n");

}

printf("请选择继续还是要退出:"); //条件的判断

scanf("%d",&k);

}while(k==4);

if(k==5)

exit(100);

}

void setmonth(int r)

{

switch(r)

{

case 1:printf("%4c一月份",' ');break;

case 2:printf("%4c二月份",' ');break;

case 3:printf("%4c三月份",' ');break;

case 4:printf("%4c四月份",' ');break;

case 5:printf("%4c五月份",' ');break;

case 6:printf("%4c六月份",' ');break;

case 7:printf("%4c七月份",' ');break;

case 8:printf("%4c八月份",' ');break;

case 9:printf("%4c九月份",' ');break;

case 10:printf("%4c十月份",' ');break;

case 11:printf("%2c十一月份",' ');break;

default:printf("%2c十二月份",' ');

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐