题目:
描述
KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。
输入描述:
多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。
输出描述:
针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。
示例1
输入:
2008 2输出:
29
=========================================================================
思路一:使用 switch语句 进行日期分类
总体思路:
(一).
写一个函数 get_days_of_month 返回对应月份天数:
函数参数:
int y -- 年份;
int m -- 月份;
使用 switch语句,根据月份返回该月天数:
如果 m(月份),
是 1、3、5、7、8、10、12 月 -- 不论平年还是闰年,该月都有31天,返回31天;
是 4、6、9、11 月 -- 不论平年还是闰年,该月都有30天,返回30天;
如果是 2月 ,则单独判断:
是 平年 则返回 28 天,
是 闰年 则返回 28+1 天,即29天
(二).
主函数:
定义变量:
int y = 0; -- 年份
int m = 0; -- 月份
使用 while循环 进行多组输入:
输入一次就调用一次 get_days_of_month函数 返回天数,
获得 返回天数后 ,进行打印
第一步:
写一个函数 get_days_of_month 返回对应月份天数:
(1).
函数参数:
int y -- 年份;
int m -- 月份;
(2).
使用 switch语句,根据月份返回该月天数:
如果 m(月份),
是 1、3、5、7、8、10、12 月 -- 不论平年还是闰年,该月都有31天,返回31天;
是 4、6、9、11 月 -- 不论平年还是闰年,该月都有30天,返回30天;
如果是 2月 ,则单独判断:
是 平年 则返回 28 天,
是 闰年 则返回 28+1 天,即29天
实现代码:
#include <stdio.h> //写一个函数返回对应月份天数: int get_days_of_month(int y, int m) { int d = 0; //该年该月天数 //使用 switch循环,根据月份返回该月天数: switch (m) { //1 3 5 7 8 10 12 -- 返回31天 case 1: case 3: case 5: case 7: case 8: case 10: case 12: { d = 31; break; } //4 6 9 11 -- 返回30天 case 4: case 6: case 9: case 11: { d = 30; break; } //2月看平年还是闰年返回天数: case 2: { d = 28; //平年 if ((y%4==0 && y%100!=0) || (y%400==0)) { d += 1; //闰年,28+1天,即29天 } } } return d; //返回天数 } int main() { return 0; }
实现图片:
第二步:
主函数:
(1).
定义变量:
int y = 0; -- 年份
int m = 0; -- 月份
(2).
使用 while循环 进行多组输入:
输入一次就调用一次 get_days_of_month函数 返回天数,
获得 返回天数后 ,进行打印
实现代码:
#include <stdio.h> //写一个函数返回对应月份天数: int get_days_of_month(int y, int m) { int d = 0; //该年该月天数 //使用 switch循环,根据月份返回该月天数: switch (m) { //1 3 5 7 8 10 12 -- 返回31天 case 1: case 3: case 5: case 7: case 8: case 10: case 12: { d = 31; break; } //4 6 9 11 -- 返回30天 case 4: case 6: case 9: case 11: { d = 30; break; } //2月看平年还是闰年返回天数: case 2: { d = 28; //平年 if ((y%4==0 && y%100!=0) || (y%400==0)) { d += 1; //闰年,28+1天,即29天 } } } return d; //返回天数 } int main() { //定义变量: int y = 0; //年 int m = 0; //月 //使用while循环,进行多组输入: while (scanf("%d %d", &y, &m) == 2) //输入了 年 和 月 两个变量后就进行获取天数 { //调用函数 get_days_of_month 并获取返回天数: int d = get_days_of_month(y, m); //获取天数后,进行打印: printf("%d\n", d); } return 0; }
实现图片:
思路一:最终代码和实现效果
最终代码:
#include <stdio.h> //写一个函数返回对应月份天数: int get_days_of_month(int y, int m) { int d = 0; //该年该月天数 //使用 switch循环,根据月份返回该月天数: switch (m) { //1 3 5 7 8 10 12 -- 返回31天 case 1: case 3: case 5: case 7: case 8: case 10: case 12: { d = 31; break; } //4 6 9 11 -- 返回30天 case 4: case 6: case 9: case 11: { d = 30; break; } //2月看平年还是闰年返回天数: case 2: { d = 28; //平年 if ((y%4==0 && y%100!=0) || (y%400==0)) { d += 1; //闰年,28+1天,即29天 } } } return d; //返回天数 } int main() { //定义变量: int y = 0; //年 int m = 0; //月 //使用while循环,进行多组输入: while (scanf("%d %d", &y, &m) == 2) //输入了 年 和 月 两个变量后就进行获取天数 { //调用函数 get_days_of_month 并获取返回天数: int d = get_days_of_month(y, m); //获取天数后,进行打印: printf("%d\n", d); } return 0; }
实现效果:
=========================================================================
思路二:用数组存储各月的日期
总体思路:
(一).
写一个函数 get_days_of_month 返回对应月份天数:
定义天数变量:
int d = 0; -- 天数
定义一个数组,存放 一年12个月的天数:
int days[ ] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
下标0的元素随便放一个数,让1月下标为1,2月下标为2,以此类推
让传进来的月份对应数组中的该月份下标
d = days[m];
数组中的二月是28天,是平年的,
判断 int y 是不是闰年,m 是不是二月,
是则 d += 1; 即 29 天
返回天数 d
(二).
主函数 和 思路一 一样
第一步:
写一个函数 get_days_of_month 返回对应月份天数:
(1).
定义天数变量:
int d = 0; -- 天数
(2).
定义一个数组,存放 一年12个月的天数:
int days[ ] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
下标0的元素随便放一个数,让1月下标为1,2月下标为2,以此类推
(3).
让传进来的月份对应数组中的该月份下标
d = days[m];
(4).
数组中的二月是28天,是平年的,
判断 int y 是不是闰年,m 是不是二月,
是则 d += 1; 即 29 天
(5).
返回天数 d
实现代码:
#include <stdio.h> //写一个函数 get_days_of_month 返回对应月份天数: int get_days_of_month(int y, int m) { //定义天数变量: int d = 0; //定义一个数组(平年),存放一年12个月的天数: int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; // 下标(月份) 0 1 2 3 4 5 6 7 8 9 10 11 12 //让传进来的月份对应数组中的该年份下标: d = days[m]; //判断是不是闰年的二月: if (((y%4==0 && y%100!=0) || (y%400==0)) && m==2) //如果是 闰年,并且是 二月 { d += 1; //在数组中平年二月28天的基础上+1变成29天 } //返回天数: return d; } int main() { return 0; }
实现图片:
第二步:
主函数 和 思路一 一样
实现代码:
#include <stdio.h> //写一个函数 get_days_of_month 返回对应月份天数: int get_days_of_month(int y, int m) { //定义天数变量: int d = 0; //定义一个数组(平年),存放一年12个月的天数: int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; // 下标(月份) 0 1 2 3 4 5 6 7 8 9 10 11 12 //让传进来的月份对应数组中的该年份下标: d = days[m]; //判断是不是闰年的二月: if (((y%4==0 && y%100!=0) || (y%400==0)) && m==2) //如果是 闰年,并且是 二月 { d += 1; //在数组中平年二月28天的基础上+1变成29天 } //返回天数: return d; } int main() { //定义变量: int y = 0; //年 int m = 0; //月 //使用while循环,进行多组输入: while (scanf("%d %d", &y, &m) == 2) //输入了 年 和 月 两个变量后就进行获取天数 { //调用函数 get_days_of_month 并获取返回天数: int d = get_days_of_month(y, m); //获取天数后,进行打印: printf("%d\n", d); } return 0; }
实现图片:
思路二:最终代码和实现效果
最终代码:
#include <stdio.h> //写一个函数 get_days_of_month 返回对应月份天数: int get_days_of_month(int y, int m) { //定义天数变量: int d = 0; //定义一个数组(平年),存放一年12个月的天数: int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; // 下标(月份) 0 1 2 3 4 5 6 7 8 9 10 11 12 //让传进来的月份对应数组中的该年份下标: d = days[m]; //判断是不是闰年的二月: if (((y%4==0 && y%100!=0) || (y%400==0)) && m==2) //如果是 闰年,并且是 二月 { d += 1; //在数组中平年二月28天的基础上+1变成29天 } //返回天数: return d; } int main() { //定义变量: int y = 0; //年 int m = 0; //月 //使用while循环,进行多组输入: while (scanf("%d %d", &y, &m) == 2) //输入了 年 和 月 两个变量后就进行获取天数 { //调用函数 get_days_of_month 并获取返回天数: int d = get_days_of_month(y, m); //获取天数后,进行打印: printf("%d\n", d); } return 0; }
实现效果: