打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
输入年份和月份,输出该月日历,复杂问题的分解

 

5.            输入年份和月份,输出该月日历,复杂问题的分解

 

/*输入年份和月份,输出该月月历*/

#include <stdio.h>

/*声明函数GetWeekDay求某年某月某日是星期几*/

int GetWeekDay(int,int,int);

/*声明函数GetMonthDays求某年某月共有几天*/

int GetMonthDays(int,int);

/*声明函数PrintMonthCalender打印某月日历*/

int PrintMonthCalender(int,int);

/*声明函数CheckLeap判断某年是否是闰年*/

int CheckLeap(int);

main()

{

       /*定义变量,startDay为要求月的第一天的星期数,

        *days为要求月的天数

        */

       int year,month,startDay,days;

       printf("input the year and month(YYYY-MM):");

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

       printf("\n\t\t\t%d-%d\n",year,month);

       /*引用函数GetWeekDay求要求月的首天是星期几*/

       startDay=GetWeekDay(year,month,1);

       /*引用函数GetMonthDays求要求月有多少天*/

       days=GetMonthDays(year,month);

       PrintMonthCalender(startDay,days);

       return(0);

}

/*定义函数GetWeekDay求某年某月某日是星期几*/

int GetWeekDay(int year,int month,int day)

{

       /*定义变量,days是从000111算起的天数,

        *weekday是星期数,i是控制月份的变量

        */

       int days,weekday,i;

       days=year*365+year/400+year/4-year/100;

       /*计算从000111到该月为止的天数*/

       for(i=12;i>=month;i--)

              days=days-GetMonthDays(year,i);

       /*计算从000111到该天为止的天数*/

       days=days+day;

       /*计算该天的星期数*/

       weekday=days%7;

       return weekday;

}

/*定义函数GetMonthDays求某年某月共有几天*/

int GetMonthDays(int year,int month)

{

       /*对天数不同的月份分开讨论*/

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

              return 30;

       else

       {

              /*单独对二月的讨论*/

              if(month==2)

              {

                     /*对闰年的判断*/

                     if(CheckLeap(year))

                            return 29;

                     else

                            return 28;

              }

              else

                     return 31;

       }

}

/*定义函数PrintMonthCalender打印某月日历*/

int PrintMonthCalender(int startDay,int days)

{

       int num,count;

       num=-startDay;

       printf("\nSun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");

       /*控制输出的天数*/

       while(num<=days)

       {

              printf("\n");

              /*对一个星期七天的控制*/

              for(count=1;count<=7;count++)

              {

                     num=num+1;

                     /*控制输出的天数*/

                     if(num>=1&&num<=days)

                            printf("%d\t",num);

                     else

                            printf("\t");

              }

       }

       printf("\n");

}

/*定义函数CheckLeap判断某年是否是闰年*/

int CheckLeap(int year)

{

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

              return 1;

       else

              return 0;

}

运行效果如图:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
计算某天是星期几【C代码】
用c语言写一个函数把十进制转换成十六进制
十进制数转化成相应的二、八、十六或其它进制
实现整数转化为字符串函数itoa()函数
c语言例题
c语言结构体和共用体1.有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服