Ex08Ans
From Prog0
演習第 8 回 解答
Contents |
解答例
A問題
A-1 つるかめむし算問題の再定義
ファイル名: ex08a1.txt
- 与えられた情報
- 鶴、亀、てんとう虫あわせて20匹(羽)
- 足の合計本数は ashi_total
- 与えられていないが常識として知っている事
- 鶴の脚は2本
- 亀の足は4本
- てんとう虫は昆虫なので、脚は6本
- 個体数は自然数(0以上、解釈によっては1以上の整数)
- 求めるもの
- 条件を満たす鶴、亀、てんとう虫それぞれの数の組み合わせ全て(複数の可能性あり。また、一つも無い可能性もあり)
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 平均・分散
配列を用いて,データ入力,平均の計算,分散の計算を,複数の for ループを使ってプログラミングすることも考えられるが,(分散) = (二乗の平均) - (平均の二乗) を使えば,配列を使わず,しかも,1つのループで書ける.
ファイル名: ex08b2.pdf
ファイル名: ex08b2.c
#include <stdio.h> #define N 10 /* データの個数をマクロで定義.マクロは第9回に出てくる(それまでは定数でもよい)*/ int main () { int i; int data; int sum, square_sum; double ave, var; sum = square_sum = 0; printf ("%d個のデータを入力してください: ", N); for (i=0; i<N; i++) { scanf ("%d", &data); sum += data; square_sum += data*data; } ave = (double) sum / N; var = (double) square_sum / N - ave*ave; printf ("平均: %f\n", ave); printf ("分散: %f\n", var); return 0; }