2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C语言万年历 查询年历 月历 星期(日期)循环查询( 3 19更新)

C语言万年历 查询年历 月历 星期(日期)循环查询( 3 19更新)

时间:2021-06-24 01:36:06

相关推荐

C语言万年历 查询年历 月历 星期(日期)循环查询( 3 19更新)

C语言万年历

很多人都有做过万年历,于是想自己写一个。

万年历是我们日常生活中经常用到的一种非常实用的工具。

由于工作繁忙,人们常常忘记某一天是星期几,想要看看某个月的日历,或者一整年的。我把自己的想法实现如下:

1、任意年份日历的整体输出;

2、任意年任意月日历的单独输出;

3、任意年月日 查询星期几;

4、按任意键 退出;

5、循环查询,直到选择退出;

ps:

以上星期几的推算只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。

先来一些运行截图:

输入错误

输出全年的日历

任意年任意月日历的单独输出

**任意年月日 查询星期几 **

退出程序

ok 截图展示完了

双手奉上 全部代码

算法实现还是挺容易的,调整格式,修改代码很累人!

6月22日

重新调整输出格式(当月1日不是星期日的时候对齐问题,月末不是星期6末尾#对齐);

调整查询某月日历时输入方式并对输入月份数值做判断;

调整循环方式;

3月19日

修改星期显示,调整函数位置

修改后代码如下:

/*万年历输出小程序*/#include "stdio.h"#include "stdlib.h"int dateofmonth[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}};char *month1[]={"January","February","March","April","May","June","July","August","September","October","November","December"};char *month2[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};//char *week[7]={"sunday","monday","tuesday","wednesday","thursday","friday","saturday"};char *week[7]={"sun","mon","tue","wed","thu","fri","sat"};/*函数声明*/int pyear(int n);int xingqi(int year,int month,int data );void rili(int year,int month_a,int month_b);void xq();main(){int i,year,month;printf("*********万年历小程序*********\n\n");printf("请选择您要执行的操作(0-3)\n");printf("\n0:退出\n1:查询某年日历\n2:查询某月日历\n3:查询某日星期\n");printf("\n您选择要执行的操作是: ");scanf("%d",&i);printf("\n");switch(i){case 0: exit(i);break;case 1: printf("请输入要查询的年份:\n\n");scanf("%d",&year);rili(year,1,12);break;case 2: printf("请输入要查询的年份月份( 6):\n\n");scanf("%4d%2d",&year,&month);if(month>0&&month<13)rili(year,month,month);else {printf("\n\n\t输入错误,请重新输入\n\n\n\n\n");main();}break;case 3: xq();break;default:printf("\n\n\t输入错误,请重新输入\n\n\n\n");main();}}int pyear(int n){if(n%4==0&&n%100!=0||n%400==0)return 1;else return 0;}int xingqi(int year,int month,int data )//返回某年某月某日是星期几{int d=0,i,j;i=pyear(year);for(j=0;j<month-1;j++)d+=dateofmonth[i][j];d+=data;//int weekday=((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+d)%7 ;//return weekday==0?7:weekday;return ((year-1)+(year-1)/4-(year-1)/100+(year-1)/400+d)%7 ;}void rili(int year,int month_a,int month_b){int i,j,k,mlen,n,fweek;printf("\n\n\n\t———————————%d 年日历———————————\n\n\n",year);for(i=month_a-1;i<month_b;i++){fweek=xingqi(year,(i+1),1);mlen=dateofmonth[pyear(year)][i];printf("\t%-8s\t\t\t\t\t%6s\n",*(month1+i),*(month2+i));printf("\t______________________________________________________\n\t ");for(j=0;j<7;j++)printf("%s\t",*(week+j));printf("\n\n");printf("\t# ");if(fweek>0){for(n=0;n<fweek;n++)printf(" \t");printf(" ");}for(k=1;k<=mlen;k++){if(fweek==7){printf("\n\t# ");fweek=0;}if(fweek==6)printf("%2d #",k);else printf("%2d\t ",k);fweek++;}if(fweek<6) //以下部分处理月末不是星期6的情况下输出格式{while(fweek++!=6)printf(" \t");printf(" #");}else if(fweek==6)printf(" #"); //至此月末处理完毕printf("\n\t______________________________________________________\n");printf("\n\n\n\n\n");}main();}void xq(){int y,m,d;printf("请输入要查询的日期 年 月 日( 6 14):");scanf("%d%d%d",&y,&m,&d);char *weekday2[]={"日","一","二","三","四","五","六"};//星期中文printf("\n\n查询结果如下:\n\n\t%-5d年%3d 月%3d 日\t星期 %s\n\n\n\n\n",y,m,d,weekday2[xingqi(y,m,d)]);main();}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。