トピック:
説明
KiKi は特定の年と月の日数を取得したいと考えています。プログラムを手伝ってください。年と月を入力して、この年と月の日数を計算します。
説明を入力してください:
複数の入力セット。1 行には、年と月をそれぞれ表す2 つの整数がスペースで区切られています。
出力の説明:
入力のセットごとに、出力は 1 行で、この年と月に何日あるかを示す整数が表示されます。
例1
入力:
2008年2月出力:
29
================================================= =======================
アイデア 1: 日付分類に 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 関数を 1 回呼び出して、 1 回入力した後の日数を返します。
返却日数を取得後、印刷します。
最初の一歩:
対応する月の日数を返す関数 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; }
イメージを実現してください:
ステップ2:
メイン機能:
(1)。
変数を定義します。
int y = 0 ; --年
int m = 0 ; --月
(2)。
複数の入力セットに対してwhile ループを使用します。
get_days_of_month 関数を 1 回呼び出して、 1 回入力した後の日数を返します。
返却日数を取得後、印刷します。
実装コード:
#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; }
イメージを実現してください:
アイデア 1: 最終的なコードと実装効果
最終コード:
#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; }
効果を実感してください:
================================================= =======================
アイデア 2: 配列を使用して各月の日付を保存する
一般的なアイデア:
(一)。
対応する月の日数を返す関数 get_days_of_month を作成します。
日数変数を定義します。
int d = 0 ; --日
1 年の 12 か月の日数を格納する配列を定義します。
int days[ ] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
添字が 0 の要素に乱数を入力し、1 月の添字を 1、2 月の添字を 2などとします。
受信月を配列内の月の添字に対応させます。
d = 日[m];
配列内の 2 月は 28 日あり、これは通常の年です。
int y が閏年かどうか、m が 2 月かどうかを判断します。
はい、d += 1、 つまり29 日です
日数 d を返します
(二)。
主な機能はアイデアと同じです
最初の一歩:
対応する月の日数を返す関数 get_days_of_month を作成します。
(1)。
日数変数を定義します。
int d = 0 ; --日
(2)。
1 年の 12 か月の日数を格納する配列を定義します。
int days[ ] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
添字が 0 の要素に乱数を入力し、1 月の添字を 1、2 月の添字を 2などとします。
(3)。
受信月を配列内の月の添字に対応させます。
d = 日[m];
(4)。
配列内の 2 月は 28 日あり、これは通常の年です。
int y が閏年かどうか、m が 2 月かどうかを判断します。
はい、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; }
イメージを実現してください:
ステップ2:
主な機能はアイデアと同じです
実装コード:
#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; }
イメージを実現してください:
アイデア 2: 最終的なコードと実装効果
最終コード:
#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; }
効果を実感してください: