温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言怎么实现万年历小程序

发布时间:2021-08-11 18:56:15 来源:亿速云 阅读:162 作者:chen 栏目:编程语言

这篇文章主要介绍“C语言怎么实现万年历小程序”,在日常操作中,相信很多人在C语言怎么实现万年历小程序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现万年历小程序”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

万年历

像这样一个简单的全年日历,仔细观察不难发现由每个月的日历组成,每个月有最多6行,占6周,每周7天;

程序如下:

设定日历大小:

int date[12][6][7];  //12个月,每月最多6行,每行7天int calendar[ ][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}};  //闰年int year;char title[]="SUN MON TUE WED THU FRI SAT";  //周几int sw,leap,i,j,k,wd,day;          //变量// sw 周几,leap 0平年 1闰年,i,j,k辅助变量,wd 第几周,day 日

提示用户输入想要查询的年份:(回车换行)

printf("Please input the year whose calendar you want to know: ");scanf("%d%*c",&year);

再计算该年1月1 日是起于周几:

(由于公元1月1日设为星期六,故3月1日为星期三。为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。

每 4年(3个平年+1个闰年)共208周+5天 =208*7+5=1461每百年共100*(208周+5天)-1天=5217周+5天 (整百年暂设为平年)每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天即400年一轮回!)

long int getyear(int year,int month){ if(month<3) return year-1;  //以元年3月为基石 else return year;}long int getmonth(int month){ if(month<3) return month+13; //将月份调至下个月 else return month+1;}long int getday(int year,int month,int day){ return 1461L*getyear(year,month)/4+153L*getmonth(month)/5+day;  //计算距离元年3月1日天数  //计算方法:每四年一周期1461天(相当于计算平均每年多少天)   //每五个月一周期153天(相当于计算平均每月多少天)  }int getweekday(int year,int month,int day){ return(int)((getday(year,month,day)%7-2+7)%7);        //得该日期的星期数  //得到的天数除以7天取余,减去3月1日周三,其他均为保证正数1-7的附加计算}

判断是否为闰年:

leap= year%4==0 && year%100||year%400==0 ;

将日历置为空:

for(i=0;i<12;i++) for(j=0;j<6;j++) for(k=0;k<7;k++)  date[i][j][k]=0;

填充该年日期:

sw=getweekday(year,1,1);for(i=0;i<12;i++) for(wd=0,day=1; day <= calendar[leap][i]; day++){  date[i][wd][sw]=day; sw = ++sw%7; if(sw==0)       wd++; }

格式化输出:

printf("\n|==================The Calendar of Year %d =====================|\n|",year); for(i=0;i<6;i++){ for(wd=0,k=0;k<7;k++)  wd+=date[i][5][k]+date[i+6][5][k]; wd=wd?6:5; printf("%2d %s %2d %s |\n|",i+1,title,i+7,title); for(j=0;j<wd;j++){ printf("  "); for(k=0;k<7;k++)  if(date[i][j][k])  printf("%4d",date[i][j][k]);  else printf("  "); printf("   "); for(k=0;k<7;k++)  if(date[i+6][j][k])  printf("%4d",date[i+6][j][k]);  else printf("  "); printf(" |\n|"); } scanf("%*c"); }  puts("=================================================================|"); puts("\n Press any key to quit...");

完整代码:

#include "stdio.h"long int getyear(int year,int month){ if(month<3) return year-1; else return year;} long int getmonth(int month){ if(month<3) return month+13; else return month+1;} long int getday(int year,int month,int day){ return 1461L*f(year,month)/4+153L*g(month)/5+day;} int getweekday(int year,int month,int day){ return(int)((n(year,month,day)%7-2+7)%7);} int date[12][6][7];int calender[ ][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}};main(){int sw,leap,i,j,k,wd,day; int year; char title[]="SUN MON TUE WED THU FRI SAT";printf("Please input the year whose calendar you want to know: ");scanf("%d%*c",&year);sw=w(year,1,1);leap=year%4==0&&year%100||year%400==0;for(i=0;i<12;i++) for(j=0;j<6;j++) for(k=0;k<7;k++)  date[i][j][k]=0;for(i=0;i<12;i++) for(wd=0,day=1;day<=day_tbl[leap][i];day++){ date[i][wd][sw]=day; sw=++sw%7; if(sw==0) wd++; } printf("\n|==================The Calendar of Year %d =====================|\n|",year);for(i=0;i<6;i++){ for(wd=0,k=0;k<7;k++) wd+=date[i][5][k]+date[i+6][5][k]; wd=wd?6:5; printf("%2d %s %2d %s |\n|",i+1,title,i+7,title); for(j=0;j<wd;j++) { printf("  "); for(k=0;k<7;k++)  if(date[i][j][k])  printf("%4d",date[i][j][k]);  else printf("  "); printf("   "); for(k=0;k<7;k++)  if(date[i+6][j][k])  printf("%4d",date[i+6][j][k]);  else printf("  "); printf(" |\n|"); } scanf("%*c"); }puts("=================================================================|");puts("\n Press any key to quit...");}

到此,关于“C语言怎么实现万年历小程序”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI