8週目 課題

問題 1
キーボードから 10 人の成績(100 点満点の整数値)を配列に読み込み、1) 平
均点、2) 分散、及び 3) 標準偏差を計算・表示するプログラム
% ./a.out
学籍 No. 0 の成績:80
学籍 No. 1 の成績:70
学籍 No. 2 の成績:95
学籍 No. 3 の成績:90
...
学籍 No. 8 の成績:90
学籍 No. 9 の成績:40
平均点は 85.5 点です。
分散は 246.25 です。
標準偏差は 15.69 点です。
%
データ {n1, n2, n3, n4, n5, ..., nk} の
平均は
分散は
標準偏差は
1
問題 2
キーボードからアルファベットを 1 文字ずつ読み込み、入力したアルファベットの数
を数えるプログラム。入力の中断は Ctrl-D とする。数字や記号は無視する。
ただし、大文字と小文字の区別はしない。
% ./a.out
アルファベットを入力(Ctrl-D で終了)
We had the world cup last year. [Enter]
[Crtl-D]
a は 3 文字。
b は 0 文字。
c は 1 文字。
...
z は 0 文字。
%
26 個のアルファベットの出現回
数を数える配列を用いる。
int count[26];
2
問題 3
3 行 3 列の行列を入力し、その和を計算するプログラム。
% ./a.out
行列 A の成分を入力せよ。
a[0][0] = 3
a[0][1] = 4
a[0][2] = 5
a[1][0] = -3
a[1][1] = 0
...
行列 B の成分を入力せよ。
b[0][0] = 1
b[0][1] = -6
...
行列 A
4 -2
-2 2
1 0
n × n 行列 A = (aij), B = (bij)
について、和 C = A+B の (i, j) 成分は
cij = aij + bij
+ B は
6
4
3
3
問題 4
成績のデータから、各人の合計点および全体の平均点を計算するプログラムを作れ。
平均点は、少数以下を四捨五入すること。
成績は初期値として与えておく。
int seiseki[6][4] = {85,70,77,0},
{68,75,63,0},{55,80,60,0},
{75,63,91,0},{47,53,70,0},
{0,0,0,0}};
合計と平均点を格納する場所を
用意しておく。初期値として0。
情報
数学
英語
85
70
77
68
75
63
55
80
60
75
63
91
47
53
70
% ./a.out
情報 数学 英語 合計
85 70
77
232
68 75
63 206
55 80
60
195
75 63
91
229
47 53
70
170
66 68
72
206
4
エラトステネスのふるい
N 以下の素数を求めるアルゴリズムとして、エラトステネスのふるいがある。
アルゴリズム
◎ 2 から N までの数を並べる。全ての数に印(例えば int 1 )を割り振っておく。
◎ 2 の倍数(2 自身は除く)に印(例えば int 0)を割り振る。
◎ 印 1 が着いている最小の数は 3 である。3 の倍数(3 自身は除く)に印(0)を割り振る。
◎ 印 1 が着いている最小の数は 5 である。5 の倍数(5 自身は除く)に印(0)を割り振る。
◎ 印 1 が着いている最小の数は 7 である。7 の倍数(7 自身は除く)に印(0)を割り振る。
...
◎ 以上の操作を繰り返す。最後に印 1 が着いている数が素数である。
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
全ての数に印を付ける
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
2 を除く偶数(2の倍数)を候
補から除く
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, ...
奇数かつ 3 の倍数は素数ではない
ので 3 の倍数を除く
5
問題 5
エラトステネスのふるいを用いて、1000 以下の素数を全て表示せよ。
ただし表示形式として、1 行に 10 個ずつ表示されるようにすること。
% ./a.out
2 3 5 7 11 13 17 19 23 29
31 37 ...
947 953 967 ... 983 991 997
%
印 1 が付いている、値 start 以降で最
も小さな添え字の探索方法
i = start;
while( a[i]==0 ) i++;
このとき、a[i]が全て0であれば繰り
返しが終了しない。最後には0以外
が入っていることが必要(番兵センチ
ネル)
ヒント
int a[1001] を宣言 素数の候補に印 int 1 を付ける。
a[0] = 0, a[1] = 0, a[2] = 1, a[3] = 1, a[4] = 1, ...
印 1 が着いている最も小さな添え字は 2。
2 の倍数は素数ではないので、4, 6, 8, ... に
印 0 をつける。
a[4] = 0, a[6] = 0, a[8] = 0, a[10] = 0, ...
for(i=4; i < 1000; i += 2)
a[i] = 0;
印 1 が着いている最も小さな添え字は 3。
3 の倍数は素数ではないので、6, 9, 12, ... に
印 0 をつける。
a[6] = 0, a[9] = 0, a[12] = 0, a[15] = 0, ...
6