目次
序文
C言語演習・・・1ヶ月の日数を求める2つの方法をswitch文と配列の2つの側面から解説。
提示:以下是本篇文章正文内容,下面案例可供参考
1. 問題の説明
説明:
KiKi は特定の年と月の日数を取得したいと考えています。プログラムを手伝ってください。年と月を入力して、その年と月が何日あるかを計算します。
説明を入力してください:
複数の入力セット。1 行には年と月をそれぞれ表す 2 つの整数がスペースで区切られています。
出力の説明:
入力セットごとに、出力は 1 行で、この年と月に何日あるかを示す整数が表示されます。
例 1:
入力:
2008年2月出力:
29
2. 問題解決のアイデア
月ごとの日数の分布:
月 1 2 3 4 5 6 7 8 9 10 11 12 平年 31 28 31 30 31 30 31 31 30 31 30 31 うるう年 31 29 31 30 31 30 31 31 30 31 30 31 平年と閏年では2月の日数が違うだけで、それ以外は同じなのでswitchと配列を使えば解決できます。
3. 解決策 1 (switch ステートメント)
switch文を使用するとケースを1~12に分けます。
ケース 1、3、5、7、8、10、12 日はすべて 31 日です。
ケース 4、6、9、11 日はすべて 3 です。
ケース 2 は平年と閏年に分けられます。
コード例:
int main() { int y = 0; int m = 0; while (scanf("%d%d", &y, &m) == 2) { switch(m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("%d\n",31); break; case 4: case 6: case 9: case 11: printf("30\n"); break; case 2: { if (((y % 4 == 0) && (y % 100) != 0) || (y % 400) == 0) printf("29\n"); else printf("28\n"); } } } return 0; }
4. 解決策 2 (配列)
12 か月の日付を配列に順番に格納し、配列の添字に対応する要素 0 を追加します。
その年が通常の年であるか閏年であるかを決定します。
コード例:
int my_year(int y) { return (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0)); } int main() { int y, m; int arr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; while ((scanf("%d %d", &y, &m)) == 2) { int day = arr[m]; if (my_year(y) && m == 2) { day++; } printf("%d\n", day); } return 0; }
4. 走行結果
やっと
幸せな時間はいつも短い. 以上が今日私が話したいことです. この記事は, Xiao Zhao同志がC言語を学習する際に遭遇した演習を紹介し, その解決策と実装を表現します. 家族は批判や修正を歓迎します。Xiao Zhao同志は更新を続けています。継続的な学習の動機は、1つのボタンと3つの連続リンクによるBaoziのサポートです〜