使用C语言怎么编写一个万年历小程序-创新互联
这篇文章将为大家详细讲解有关使用C语言怎么编写一个万年历小程序,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
成都创新互联是一家专注于成都做网站、成都网站设计、成都外贸网站建设与策划设计,仁和网站建设哪家好?成都创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:仁和等地区。仁和做网站价格咨询:18980820575设定日历大小:
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结果为
完整代码:
#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关于使用C语言怎么编写一个万年历小程序就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:使用C语言怎么编写一个万年历小程序-创新互联
本文地址:http://ybzwz.com/article/jgjgs.html