Ex08Ans
From Prog0
演習第 8 回 解答
Contents |
解答例
A問題
A-1 つるかめむし算問題の再定義
ファイル名: ex08a1.txt
- 与えられた情報
- 鶴、亀、てんとう虫があわせて 20
- 足の合計本数は ashi_total
- 与えられていないが常識として知っている情報
- 鶴の足は 2 本
- 亀の足は 4 本
- てんとう虫の足は 6 本
- 足の数、個体数ともに自然数
- 求めるもの
- 鶴、亀、てんとう虫はそれぞれ何羽・匹いるか
A-2 つるかめむし算問題のフローチャート
ファイル名: ex08a2.pdf
B問題
B-1 つるかめむし算プログラム
ファイル名: ex08b1.c
#include <stdio.h> /* 足の本数をマクロ定義 マクロは第9回に出てくる(それまでは定数でもよい) */ #define TURUASHI 2 #define KAMEASHI 4 #define MUSHIASHI 6 int main() { int turu, kame, mushi; int total = 20; int ashi; int ashi_total; int found_flag = 0; printf("Input ashi (total): "); scanf("%d", &ashi_total); // 足の合計本数を入力 for (turu = 0; turu <= total; turu++) { for (kame = 0; kame <= total - turu; kame++) { mushi = total - turu - kame; ashi = turu*TURUASHI + kame*KAMEASHI + mushi*MUSHIASHI; if (ashi == ashi_total) { printf("Turu:%d(%d)\tKame:%d(%d)\tTentoumushi:%d(%d)\n", turu, turu*TURUASHI, kame, kame*KAMEASHI, mushi, mushi*MUSHIASHI); found_flag++; } } } if (found_flag == 0) printf("NOT found!\n"); // 解なし return 0; }
B-2 フィボナッチ数列
ファイル名: ex08b2.c
#include <stdio.h> int main() { int fib[20]; int i; fib[0] = 1; fib[1] = 1; for (i = 0; i < 18; i++) fib[i + 2] = fib[i] + fib[i + 1]; for (i = 0; i < 20; i++) printf("%5d\n", fib[i]); return 0; }
B-3 歴史上の事件が起きた時代の判定
ファイル名: ex08b3.pdf
ファイル名: ex08b3.c
#include <stdio.h> int main() { int event[] = {1602, 1395, 987, 1215, 1591, 2000, 645, 1776, 1415, 1333}; int i; for (i=0; i<10; i++) { if (event[i] >= 1185 && event[i] <= 1333) printf("%d年は 鎌倉時代です\n", event[i]); else if (event[i]>=1336 && event[i] <= 1573) printf("%d年は 室町時代です\n", event[i]); else if (event[i]>=1576 && event[i] <= 1600) printf("%d年は 安土桃山時代です\n", event[i]); else if (event[i]>=1603 && event[i] <= 1868) printf("%d年は 江戸時代です\n", event[i]); else printf("%d年は 4つの時代以外です\n", event[i]); /* 4つの時代以外を正しく表示するためには、条件分岐をelseで続けていく必要がある */ } return 0; }