c语言年历编程

c语言年历编程,第1张

#include<stdio.h>

static int year

static int weekDay

bool isLeapYear(int y)  //判断是否是闰年

{

  return(y%4==0&&y%100!=0||y%400==0) //闰年的条件就是年份同时能被4和100整除或

                                      // 者能被400整除

}

long firstDayOfYear(int y)   //求出输入的那年第一天是星期几

{

   long n

   n=y*365

   for(int i=1i<yi++)

   if(isLeapYear(i)) 

   n+=1

   return n%=7

}

void printHead(int m)  //打印每个月的标题

{

   if(m<10)

 printf("    %d月   日   一   二   三   四   五   六\n",m)

   else 

 printf("   %d月   日   一   二   三   四   五   六\n",m)

   printf("       ")

   for(int i=0i<weekDayi++)  

   printf("     ")

 }

int daysOfMonth(int m)  // 判断每个月有多少天

{

   switch(m)

   {

       case 1:

       case 3:

       case 5:

       case 7:

       case 8:

       case 10:

       case 12: return 31

       case 4:

       case 6:

       case 9:

       case 11: return 30

       case 2:if(isLeapYear(year)) 

  return 29

               else 

   return 28

     }

     return 0

}

void printMonth(int m)  //打印每月的日历

{

   printHead(m)

   int days=daysOfMonth(m)

   for(int i=1i<=daysi++)

   {

      if(i<10) 

     printf("    %d",i)

      else 

 printf("   %d",i)

      weekDay=(weekDay+1)%7

      if(weekDay==0)

  {

        printf("\n")

        printf("       ")

       }

    }

 }

void main()  //主程序入口,接收输入的年份,调用函数打印日历

{

    int y

printf("请输入年份:")

    scanf("%d",&y)

    year=y

    if(year<1)

{

       printf("输入年份不能小于1\n")

       return

     }

     weekDay=(int)firstDayOfYear(year)

     printf("                   %d年\n",year)

     printf("   ========================================\n")

     for(int i=1i<=12i++)

 {

       printf("\n")

       printMonth(i)

       printf("\n")

     }

}

可以显示公元1世纪以后的所有年份的日历,第2和第3问其实都包含在第1问里,程序看懂了自然也就会了(话说为什么不能上传附件?)

/*C语言编程万年历

要求输入年月,判断是否闰年;

输入年月日,判断星期几;

输入年份,打出12个月的月历

输入年份,月份,打印出本月日历;

要求用多个函数实现。*/

#include<stdio.h>

#include<time.h>

#include<string.h>int calendar[12][6][7]/*月历*/

char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Satarday"}

char* Monthname[]={"January","February","March","April","May","June","July",

"August","September","October","November","December"}

int monthday[]={31,28,31,30,31,30,31,31,30,31,30,31}

char* menu[]={/* *** 作菜单*/

"1.Input a year number,check whether it's a leap year.\n",

"2.Input year,month,day,check the weekday.\n",

"3.Input year,month,output the calendar of that month.\n",

"4.Input year,output all the month calendar.\n",

"0.Exit.\n"

}/*判断参数year传递的年份是否是闰年*/

int IsLeapyear(int year)

{

if(!(year%4)&&year%100||!(year%400)) return 1

else return 0

}/*输入年月日,判断星期几,利用Zeller公式w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

w是结果星期数,y是年份的后两位,c是年份的前两位,m是月份,3≤m≤14,也就是当

m≤2时,要算到前一年的13月份和14月份,最后要将w对7取模

*/

int WeekDay(int year,int month,int day)

{

int w,y,c,m,d

c=year/100

if(month<3){

m=12+month

y=year%100-1

}

else{

m=month

y=year%100

}

d=day

w=y+y/4+c/4-2*c+26*(m+1)/10+d-1

return (w%7+7)%7

}/*输入年份,月份,打印出本月的日历*/

void Monthly(int year,int month)

{

int weekday,i,j

if(month==2)

if(IsLeapyear(year)) monthday[1]+=1

weekday=WeekDay(year,month,1)

printf("%s\n",Monthname[month-1])

printf("Sun. Mon. Tue. Wed. Thu. Fri. Sat.\n")

for(i=1,j=weekdayi<=monthday[month-1]i++,j++){

calendar[month-1][j/7][j%7]=i

}

for(i=0i<6i++){

for(j=0j<7j++)

{

if(calendar[month-1][i][j]==0) printf("%5c",' ')

else printf("%-5d",calendar[month-1][i][j])

}

printf("\n")

}

}void allMonth(int year) /*输入年份,打印出12个月的月历*/

{

int i

for(i=1i<=12i++){

Monthly(year,i)

getch()/*按任意键继续执行*/

}

}void main(void)

{

int year,month,day,i,n,weekday

memset(&calendar,sizeof(calendar),0) /*初始化月历*/

for(i=0i<5i++)

printf("%s",menu[i])

while(1){

printf("Please choose the menu:")

scanf("%d",&n)

printf("\n")

switch(n){

case 1:

printf("Please input year:")

scanf("%d",&year)

if(IsLeapyear(year)) printf("\n%d is leap year.\n",year)

else printf("%d isn't leap year.\n",year)

break

case 2:

printf("Please input year month day:")

scanf("%d%d%d",&year,&month,&day)

printf("\n")

weekday=WeekDay(year,month,day)

printf("That day is %s\n",week[weekday])

break

case 3:

printf("Please input year month,then it output a calendar of that month:")

scanf("%d%d",&year,&month)

printf("\n")

Monthly(year,month)

break

case 4:

printf("Please input year,then it will output the calendar of that year:")

scanf("%d",&year)

printf("\n")

allMonth(year)

break

case 0:

return

default:

printf("The number you input is invalid.\n")

break

}

}

getch() /*按任意键,程序退出*/

}这个程序是可用的~~希望能帮到你~~~


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11075960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存