課題1

出題ページ

入力として与えた整数を 1 になるまで何回2で割れるかを求めるプログラム. 解答例はこんな感じ:

#include <stdio.h> #include <stdlib.h> int main(void); int main(void){ char buf[256]; int x; int c; gets(buf); x = atoi(buf); printf("%d\n", x); c = 0; while(x != 1){ c++; x /= 2; } printf("%d\n", c); return(0); }
c は割った回数を覚えておくためのカウンタの変数で, 最初に0にしておいて, x を2で割るたびに 1ずつカウントアップしている.

課題2 データの合計

出題ページ

-1 を終了の目印としてデータをいくつか読み込み, それらの合計を計算する. 解答例:

#include <stdio.h> #include <stdlib.h> int main(void); int main(void){ char buf[256]; int x; int s; gets(buf); x = atoi(buf); printf("%d\n", x); s = 0; while(x != -1){ s += x; gets(buf); x = atoi(buf); printf("%d\n", x); } printf("%d\n", s); return(0); }
s が合計を求めるための変数. このプログラムは前回説明したとおり, 個数の決まっていない入力データを処理する. そのために, まず最初のデータだけを繰り返しの前に読み込んでおき, 最初の繰り返しの終了判定に備える. 二番目以降のデータは繰り返しの内部で読み込む.

課題3 データの平均

出題ページ

#include <stdio.h> #include <stdlib.h> int main(void); int main(void){ char buf[256]; int x; int s; int c; gets(buf); x = atoi(buf); printf("%d\n", x); s = 0; c = 0; while(x != -1){ s += x; c ++; gets(buf); x = atoi(buf); printf("%d\n", x); } printf("%d\n", s/c); return(0); }
課題2のプログラムとの相違点を赤色で示す. 平均を求めるにはデータの個数がわからないといけないので, そのための変数 c を新たに定義し, データを読み込むたびに カウントアップしている.