C经典程序-万年历全集_第1页
C经典程序-万年历全集_第2页
C经典程序-万年历全集_第3页
C经典程序-万年历全集_第4页
C经典程序-万年历全集_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序可以实现如下三种功能:

求某个II期对应的星期

求某年某月有的天数

输出某年的日历.

例如,打印2006年日历如下:

2006年

-月二月

周日周一周二周三周四周五周六周日周一周二周三周四周五周六

1357911131357

14151617181920891011121314

2122232425262715161718192021

2829303122232425262728

三月性1月

周日周一周二周三周四周五周六周日周一同一周三周四周五周六

13571

8910111213142345678

151617181920219101112131415

2223242526272816171819202122

29303123242526272829

30

五月六月

周日周一周二周三周四周五周六周日周一周二周三周四周五周六

1357911135

121314151617186789101112

1920212223242513141516171819

26272829303120212223242526

27282930

七月八月

周日周一周二周三周四周五周六周日周一周二周三周四周五周六

113579

234567810111213141516

910111213141517181920212223

1617181920212224252627282930

2324252627282931

3031

九月十月

周日周一周二周三周四周五周六周日周一周二周三周四周五同八

456789101415

1112131415161721222324252627

1819202122232428293031

252627282930

-1—月十二月

周日周一周二周三周四周五周六周日周一周二周三周四周五周六

135713

89101112131445678910

1516171819202111121314151617

2223242526272818192021222324

293025262728293031

原代码如下:

一,非打印版(:即只能输出到屏幕,不可输出到文件)

/*万年历全集:程序可以实现如下三种功能:

求某个II期对应的星期

求某年某月有的天数

输出某年的日历

*/

A2006-1-2梁见斌*/

#include

#include

structmon

(

intmaxdata;

intdata;

};

voidSeekWeekDay(void);〃求某个日期对应的星期函数

intWeekDay(intyear,intmonth,intday);〃根据输入的日期,返回对应的星期

voidHowManyDays(void);〃求某年某月有的天数函数

intMonthDays(intyear,intmonth);〃根据输入的年号和月份,返回该月的天数

voidPrintWeek(intweekday);〃打印星期几

voidPrintMonth(intmonth);//打印月份

voidPrintDataO;〃打印日历

intmain(void)

(

intchoice;

while(l)

(

puts(〃-------------------------------------------〃);

puts(〃请输入您的选择:〃);

puts(〃输入1求某个日期对应的星期〃);

puts(〃输入2求某年某月有的天数〃);

puts("输入3输出某年的日历");

puts("输入4结束程序”);

puts(〃-------------------------------------------〃);

scanf(,z%d,z,&choice);fflush(stdin);

switch(choice)

(

case1:SeekWeekDay();break;

case2:HowManyDays();break;

case3:PrintDataO;break;

case4:return0;

default:puts("输入错误,请重新输入“);break;

)

printf(〃\n〃);printf(〃\n〃);

)

system("pause");

return0;

}

voidHowManyDays(void)〃求某年某月有的天数函数

(

intyear,month,days;

puts(〃请输入年号和月份:〃);

scanf(,,%d%d,/,&year,&month);fflush(stdin);

printf(〃你的输入为%d年%d月,〃,year,month);

days=MonthDays(year,month);〃根据输入的年号和月份,返回该月的天数

printf(/z%d年%:1月有%d天\n”,year,month,days);

}

voidSeekWeekDay(void)〃求某个日期对应的星期函数

(

intyear,month,day,weekday;

puts(〃请输入年,月,日:〃);

scanf(z,%d%d%dv,ftyear,&month,&day);fflush(stdin);

printf(〃你的输入为%d年%d月%d日\。〃,year,month,day);

weekday=WeekDay(year,month,day);〃根据printf(〃这天是〃);

PrintWeek(weekday);〃打印星期儿

)

voidPrintWeek(intweekday)〃打印星期几

(

switch(weekday)

{

case0:printf〃周日〃);break;

case1:printf(〃%s〃,〃周一〃);break;

case2:printf(〃%s〃,〃周二〃);break;

case3:printf(〃%s〃,〃周三〃);break;

case4:printf"周四〃);break;

case5:printf(〃%s〃,〃周五〃);break;

case6:printf(〃%s〃,〃周六〃);break;

)

}

voidPrintMonth(intmonth)〃打印月份

switch(month)

case1printf〃一月〃);break;

case2printf(〃%s〃,〃二月”);break;

case3printf(〃%s”,〃三月〃);break;

case4printf"四月〃);break;

case5printf〃五月〃);break;

case6printf〃六月〃);break;

case7printf(〃%s〃,“七月〃);break;

case8printf("%s〃,〃八月〃);break;

case9printf"九月〃);break;

case10printf(〃%s〃,〃十月〃);break;

case11printf(〃%s〃,—,月〃);break;

case12printf(〃%s〃,〃十二月〃);break;

)

)

intWeekDay(intyear,intmonth,intday)〃根据输入的日期,返回对应的星期

inti;

intrun=0,ping=0;

longsum;

for(i=l;i{

if(i%4==0&&i%100!=0IIi%400=0)

run++;

else

ping++;

}

sum=366*run+365*ping;

for(i=l;isum+二MonthDays(year,i);

sum+=day;〃计算总天数

return(int)sum%7;

}

intMonthDays(intyear,intmonth)〃根据输入的年号和月份,返回该月的天数

switch(month)

case1:

case3:

case5:

case7:

case8:

case10:

case12:return31;

case4:

case6:

case9:

case11:return30;

case2:if(year%4==0&&year%100!=0!!year%400z:=0)

return29;

else

return28;

default:puts(〃这是一个错误的月份!〃);system("pause");return0;

)

)

voidPrintData(void)〃打印日历,对输出格式的控制较复杂

(

structmonmonth[13];

inti,j,k;

intyear,mon,week;

puts(〃请输入年号:〃);

scanf(z,%d/z,&year);

for(i=l;i<13;i++)〃存储该年每个月的总天数和初始日期

(

month[i].data=1;

month[i].maxdata=MonthDays(year,i);

)

for(i=0;i<6;i++)〃总共输出6排

(

for(j=l;j<=2;j++)〃每排输出2个月

(

mon=2*i+j;

printf("%15s",";

PrintMonth(mon);〃第一行打印月份

printf;

if(j==l)

printf(〃\t〃);

printf("\n");printf;

for(j=l;j<=2;j++)

for(k=0;k<7;k++)

(

PrintWeek(k);〃第2行打印星期

}

printf;

}

printf("\n");

for(j=l;j<=2;j++)

(

mon=2*i+j;

week=WeekDay(year,mon,1);〃根据输入的II期,返回对应的星期

printfC%*d”,week*5+2,month[mon].data++);〃控制输出格式,把每月的1日打

印在对应星期的下面

week++;

while(week<7)//{

printf(z/%2d”,month[mon].data++);

week++;

)

if(j==l)

printf("\t");

}

printf("\n");printf("\n");〃从第4行起打印该月剩余的日期,每7个一行;直至该

月日期打印完毕

while(month[2*i+l].data<=month[2*i+l].maxdata

month[2*i+2],data<=month[2*i+2].maxdata)

(

for(j=l;j<=2;j++)

(

mon=2*i+j;

for(k=0;k<7;k++)

{//如果该月日期未打印完,打印该日期

if(month[mon].data<=month[mon].maxdata)

printf("%2d”,month[mon].data++);

else〃否则输出空格

printf(/z");

)

if(j==l)

printf("\t");

}

printf("\rT);printf("\n");

printf("\rT);

二,打印版(:即既能输出到屏幕,又可输出到文件)

/*万年历全集:程序可以实现如下三种功能:

求某个日期对应的星期

求某年某月有的天数

输出某年的日历

*/

/*2006-1-2梁见斌*/

Sinclude

ttinclude

structmon

{

intmaxdata;

intdata;

);

voidSeekWeekDay(void);〃求某个日期对应的星期函数

intWeekDay(intyear,intmonth,intday);〃根据输入的日期,返回对应的星期

voidHowManyDays(void);〃求某年某月有的天数函数

intMonthDays(intyear,intmonth);〃根据输入的年号和月份,返回该月的天数

voidPrintWeek(intweekday,FILE*fp);〃打印星期几

voidPrintMonth(intmonth,FILE*fp);//打印月份

voidPrintDataO;〃打印日历

intmain(void)

(

intchoice;

while(l)

(

puts(,z-------------------------------------------〃);

puts(〃请输入您的选择:〃);

puts(〃输入1求某个日期对应的星期〃);

puts(〃输入2求某年某月有的天数〃);

puts(〃输入3输出某年的日历〃);

puts(〃输入4结束程序〃);

puts(〃-------------------------------------------");

scanf(〃%d”,&choice);fflush(stdin);

switch(choice)

case1:SeekWeekDay();break;

case2:HowManyDays();break;

case3:PrintDataO;break;

case4:return0;

default:puts("输入错误,请重新输入〃);break;

}

printf(〃\n〃);printf(〃\n〃);

}

system("pause");

return0;

)

voidHowManyDays(void)〃求某年某月有的天数函数

(

intyear,month,days;

puts(〃请输入年号和月份:〃);

scanf(/z%d%dz/,&year,femonth);fflush(stdin);

printf(〃你的输入为%d年%(1月,",year,month);

days=MonthDays(year,month);〃根据输入的年号和月份,返回该月的天数

printf(,z%d年%(1月有%d天\n”,year,month,days);

}

voidSeekWeekDay(void)〃求某个日期对应的星期函数

(

FILE*fp;

intyear,month,day,weekday;

if((fp=fopen("wnlweek.txt","w+〃))==NULL)

(

fprintf(stderr,z,\nErroropeningfile\nz/);

exit(1);

)

puts(〃请输入年,月,日:〃);

scanf(/z%d%d%d/z,&year,ftmonth,&day);fflush(stdin);

printf(〃你的输入为%d年%(1月%d日\nweekday=WeekDay(year,month,day);〃根据

输入的日期,返回对应的星期

printf(〃这天是〃);

PrintWeek(weekday,fp);//打印星期几

)

voidPrintWeek(intweekday,FILE*fp)〃打印星期几

switch(weekday)

case0:fprintf(stdout,〃%s〃,〃周日〃)fprintf(fp,"%s","周日〃);break;

case1:fprintf(stdout,级s〃,〃周一〃)fprintf(fp,〃%s〃,〃周一〃);break;

case2:fprintf(stdout,〃%s〃,〃周二〃)fprintf(fp,〃%s”,〃周二〃);break;

case3:fprintf(stdout,〃%s”,〃周三〃)fprintf(fp,〃姻〃,〃周三,z);break;

case4:fprintf(stdout,〃%s〃,〃周四〃)fprintf(fp,”周四〃);break;

case5:fprintf(stdout,〃%s〃,〃周五〃)fprintf(fp,"%s〃,〃周五〃);break;

case6:fprintf(stdout,〃%s〃,〃周六〃)fprintf(fp,〃%s","周六〃);break;

)

voidPrintMonth(intmonth,FILE*fp)〃打印月份

(

switch(month)

{

case1:fprintf(stdout,〃%s〃,〃一月〃);fprintf(fp,〃%s〃,“一月〃);break;

case2:fprintf(stdout,级s〃,〃二月〃);fprintf(fp,〃%s〃,”二月;break;

case3:fprintf(stdout,〃%s〃,〃三月〃);fprintf(fp,〃%s〃,〃三月z,);break;

case4:fprintf(stdout,级s","四月〃);fprintf(fp,〃%s〃,〃四月9;break;

case5:fprintf(stdout,五月”);fprintf(fp,〃%s〃,〃五月〃);break;

case6:fprintf(stdout,”牺〃,〃六月〃);fprintf(fp,六月zz);break;

case7:fprintf(stdout,'s〃,〃七月〃);fprintf(fp,"%s","七月;break;

case8:fprintf(stdout,〃%s〃,〃八月”);fprintf(fp,〃%s〃,〃八月;break;

case9:fprintf(stdout,〃版〃,〃九月〃);fprintf(fp,"%s","九月");break;

case10:fprintf(stdout,级s”,〃十月”);fprintf(fp,〃%s",〃十月/z);break;

case11:fprintf(stdout,〃版〃1—1月〃);fprintf(fp,"%s〃,"H—,月〃);break;

case12:fprintf(stdout,〃%s〃,〃十二月〃);fprintf(fp,"%s",〃十二月〃);break;

}

I

intWeekDay(intyear,intmonth,intday)〃根据输入的日期,返回对应的星期

inti;

intrun=0,ping=0;

longsum;

for(i=l;i{

if(i%4==0&&i%100!=0设400=0)

run++;

else

ping++;

)

sum=366*run+365*ping;

for(i=l;isum+=MonthDays(year,i);

sum+二day;〃计算总天数

return(int)sum%7;

}

intMonthDays(intyear,intmonth)〃根据输入的年号和月份,返回该月的天数

(

switch(month)

(

case1:

case3:

case5:

case7:

case8:

case10:

case12:return31;

case4:

case6:

case9:

case11:return30;

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

return29;

else

return28;

default:puts("这是一个错误的月份!〃);system("pause");return0;

)

)

voidPrintData(void)〃打印日历,对输出格式的控制较复杂

(

FILE*fp;

structmonmonth[13];

inti,j,k;

intyear,mon,week;

if((fp=fopen("wnldata.txt","w+"))==NULL)

{

fprintf(stexit(1);

)

puts(〃请输入年号:〃);

scanf(〃%d〃,&year);

fprintf(stdout,

-----------------------------------------------------------------------------\n〃);

fprintf(fp,

-----------------------------------------------------------------------------\n〃);

fprintf(stdout,z,%35d%s\n,z,year,〃年“);fprintf(fp,〃%35d%s\n〃,year,〃年〃);

fprintf(stdout,

-----------------------------------------------------------------------------\n〃);

fprintf(fp,

〃---------------------------------------------------------------------------------\n〃);

for(i=l;i<13;i++)〃存储该年每个月的总天数和初始日期

(

month[i].data=1;

month[i].maxdata=MonthDays(year,i);

)

for(i=0;i<6;i++)〃总共输出6排

{

for(j=l;j<=2;j++)〃每排输出2个月

(

mon=2*i+j;

fprintf(stdout,/,%15s,/,〃〃);fprintf(fp,〃%15s〃,〃〃);

PrintMonth(mon,fp);〃第一行打印月份

fprintf(stdout,〃%15s〃,〃");fprintf(fp,〃%15s”,〃〃);

if(j==l)

{fprintf(stdout,〃\t");fprintf(fp,〃\t〃);}

}

fprintf(stdout,〃\n〃);fprintf(stdout,〃\n〃);fprintf(fp,"\n");fprintf(fp,

〃\n〃);

for(j=l;j<=2;j++)

(

for(k=0;k<7;k++)

(

PrintWeek(k,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论