6-2 实验5_3_设计函数getDays (100 分)

本文档介绍了如何设计一个C语言函数getDays,该函数接受年份和月份作为参数,用于计算并返回指定月份的天数,特别强调了闰年的判断。内容包括函数接口定义、输入输出要求以及裁判测试程序样例。
摘要由CSDN通过智能技术生成

设计函数int getDays(int year,int month),根据给定的年year和月份month,计算该月的天数并返回。 提示:注意闰年的判断。

输入与输出要求: 输入两个整数y,m,即年份与月份。输出该年内该月的天数,占一行。 测试用例保证输入合法。

函数接口定义:

函数原型如下:
int getDays(int year,int month);

其中 year 和 month 都是用户传入的参数,分别代表年份和月份。函数须返回该月的天数。

裁判测试程序样例:

函数被调用的例子如下:
#include<stdio.h>

int    getDays(int,int) ;

int main()
{
    int    year, month ;

    scanf("%d%d",&year,&month);
    printf("There are %d days in month %d year %d.",getDays(year,month), month, year) ;

    return 0 ;    
}

/* 请在这里填写答案 */

输入样例:

1995 7

输出样例:

There are 31 days in month 7 year 1995.

代码实现:

int    getDays(int year,int mon
第十四章 函数进阶 14.1 解与抽象 案例 日期运算 给定日期由日(3个整数,的取值在1970~2050间)组成,完成以下功能: (1)判定给定日期的合法性。 (2)计算两个日期相差的天数。 (3)计算一个日期加上一个整数后对应的日期。 (4)计算一个日期减去一个整数后对应的日期。 (5)计算一个日期是星期几。 析: 1.判断给定日期的合法性 首先判断份是否在1970~2050之间,然后判断份是否在1~12之间,最后判断日的合法性。当份为1、3、5、7、8、10、12时,日在1~31之间;份为4、6、9、11时,日在1~30之间;份为2时,若为闰,日在1~29之间,不为闰在1~28之间。 闰:year%4==0&&year0;!=0||year@0==0 2.计算两个日期相差的天数 计算日期A和日期B相差天数,A小于B且A与B不在同一时,把天数为三段: (1)A到A所在份1231日的天数; (2)A所在份后整(A、B在相邻份时无整); (3)B所在份11日到B的天数。 若A小于B且A、B在同一,直接在计算。 3.计算一个日期加上一个整数后对应的日期。 4.计算一个日期减去一个整数后对应的日期。 5.计算一个日期是星期几。 计算日期A为星期几,先找一个知道为星期几的参照日期B,通过计算A和B的相差天数,就可计算出日期A星期几。 例:日期综合运算。 #include #include /*日期结构体*/ struct date { int year; int month; int day; }; /*二维数组,第0行是闰天数,第1行是非闰天数 */ int m[2][12]= {{31,29,31,30,31,30,31,31,30,31,30,31}, {31,28,31,30,31,30,31,31,30,31,30,31}}; /*判断闰,是返回1,不是返回0*/ int leap(int y) { if(y%4==0&&y0;!=0||y@0==0) return 1; else return 0; } /*将给定日期转换成从197011日到该日期经过的天数*/ int dateToDays(struct date d) { int sum=0,i; /*把整天数累加到sum中*/ for(i=1970; i<d.year; i++) sum+=leap(i)+365; /*闰返回1,多加一天*/ /*不够整的month之前的整天数累加到sum中*/ if(leap(d.year)) for(i=0; i<d.month-1; i++) sum+=m[0][i]; else for(i=0; i<d.month-1; i++) sum+=m[1][i]; sum+=d.day; return sum; } /*将给定天数转换成从197011日经过该天数的日期*/ struct date daysToDate(int days) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值