C语言实现万年历小程序分享!

一、杂谈

大一学了C之后一直困惑,C到底怎么用?它不像HTML那么直观,也没有SQL那么常用,更没有Java那么功能强大,那他为何还存在,并依然火热呢?

答案很简单:编程语言是一家,C语言结构简单,但所蕴含的逻辑思维和其他语言大致相同,适合初学者。

编程不是一蹴而就,能力需要日积月累,推荐想我一样的初学者,大家自己动手玩玩简单的C程序!

二、万年历

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

C语言实现万年历小程序

程序如下:

设定日历大小:

  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...");

结果为

C语言实现万年历小程序

完整代码:

  #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...");  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

—-想了解C语言实现万年历小程序分享!全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/483210.html

(0)
上一篇 2020年11月9日
下一篇 2020年11月9日

精彩推荐