电子万年历——沐雨先生

目录

一、设计内容

二、概要设计

三、实验流程图

四、源程序

五、运行结果

六、总结反思


一、设计内容

用户有两个选择,可以输入某年某月输出单月的日历,也可以输入一个年份得到全年的

日历。

二、概要设计

1. 功能模块:if—else 语句实现功能选择

2. 各个模块详细的功能描述:

主函数运行后,程序提供给用户两个选项,用户可以输出某年某月的日历或某年全

年的日历。用户输入选择后,判断选择的合法性。根据用户的选择调用不同的函数实现

对应功能。

三、实验流程图

四、源程序

#include<stdio.h>

int firstdayofyear(int year);

int firstdayofmonth(int year ,int month );

int isleapyear(int year);

int dayofmonth(int year ,int month);

int main()//输入年打印出此年的日历。

{ int a[12][6][7]={0};

int year,yue;//年,月

int i,j,k,z,n,shu;//z标记星期,n为几号

printf("请输入年份:");

scanf("%d",&year);

printf("请输入月份:");

scanf("%d",&yue);

z=firstdayofyear(year);

//printf("%d",z);

for(i=0;i<12;i++)

{ k=z%7;//确定从周几开始

n=1;//每个月1号开始

for(j=0;j<6;j++)

{ for( ;k<7;k++,n++)

{ if(n>dayofmonth(year,i+1))//确保日期不超

break;

a[i][j][k]=n;//将日期赋给每天

//printf("%d",a[i][j][k]);

z=k+1;//记录明天是周几

}

k=0;//下一行周日开始

}

}

//printf("%d",z);

printf("-----------%d年%d月-----------\n",year,yue);//输出月历

printf("%3d SUN MON TUE WED THU FRI SAT\n",yue);

for(j=0;j<6;j++)

{ printf("    ");

for(k=0;k<7;k++)

{ if(a[yue-1][j][k]!=0)

printf("%2d  ",a[yue-1][j][k]);

else

printf("    ");//无日期的空格代替输出

}

printf("\n");

}

printf("\n-------------------------%d年的年历-------------------------\n",year);//输出年历

for(i=0;i<6;i++)//六次大输出

{ printf("%3d SUN MON TUE WED THU FRI SAT ",i+1);

printf("%3d SUN MON TUE WED THU FRI SAT \n",i+7);

for(j=0;j<6;j++)//每月6行

{ printf("    ");//对齐

for(k=0;k<7;k++)//每天

{ if(a[i][j][k]!=0)

printf("%2d  ",a[i][j][k]);//i+1月的日期

else

printf("    ");//无日期的空格代替输出

}

printf("    ");//对齐

for(k=0;k<7;k++)

{ if(a[i+6][j][k]!=0)

printf("%2d  ",a[i+6][j][k]);//i+7月日期

else

printf("    ");//无日期的空格代替输出

}

printf("\n");

}

}

return 0;

}

int firstdayofyear(int year) /*求某年的第一天是星期几*/

{ int i;

  long  n,days=year;

  days=days*365; /* printf("\n%ld",days);*/

  for(i=1;i<year;i++)days=days+isleapyear(i);  /*printf("\n%ld",days);*/

  n=days%7;

  return n;

}

int firstdayofmonth(int year ,int month ) /* 求某年某月的第一天是星期*/

{  int i,days=0, weekdays;

   weekdays=firstdayofyear(year);

   for(i=1;i<month;i++)days+=dayofmonth(year,i);

   return (days+weekdays)%7;

}

int isleapyear(int year)//编写函数int isleapyear(int year);判某年是否为闰年,如该年为闰年返回1,否则返回0。编写主函数输入年份给出该年是否为闰年。

{ int z;

if( (year%4==0 && year%100!=0) || year%400==0 )

z=1;

else

z=0;

//printf("%d",z);

return z;

}

int dayofmonth(int year ,int month)//编写函数int dayofmonth(int year ,int month);计算某年某月有几天。主函数中输入任意的年和月,给出此年该月有几天。

{ int z;

if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)

z=31;

else if(month==4||month==6||month==9||month==11)

z=30;

else if(month==2)

if(isleapyear(year))

z=29;

else

z=28;

return z;

}

五、运行结果

六、总结反思

问题不大,耐心写程序。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐雨先生

如果真的帮助到你了再打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值