第6回演習問題


問1(基礎):while, do〜while, for それぞれの制御構造を使って,10回ずつ繰り返すプログラムを作成せよ.ただし,一回繰り返すごとに何回繰り返したかをprintf文で表示すること.

問2(基礎):ユーザが0を入力する間での間,何度もユーザからの数字の入力を受けつけ,0が入力されたらそれまで入力された値の和を出力するプログラムをdo〜whileループを用いて作成せよ.

問3(応用):入力された値が素数かどうかを判定するプログラムをforループを用いて作成せよ.
ヒント
素数は1とその値以外では割り切れない数.素数であるかどうかを判別するには,1とその値以外の数で割り切れるかどうかを調べればよい.

問4(応用):1000以下の素数を小さい順に出力するプログラムを作成せよ
ヒント
2の倍数や,3の倍数などを省くことで高速化できる.

問5(基礎): 2個の整数の加減乗除ができる電卓のプログラムをswitch文を用いて作成せよ.
加減乗除は'+', '-', '*', '/'であらわす.
例1) 入力: 3 + 5 出力: 8
例2) 入力: 4 * 6 出力: 24
ヒント
入力を受け付けるためのコードの例を以下に示す.
int x, y;
char c;
scanf("%d %c %d", &x, &c, &y);
この例では,人間が3 + 5と入力すると,xに3が入り,cに'+'が入り,yに5が入る.

問6(応用):二つの3*3の行列を足し算するプログラムをforループを用いて作成せよ.

問7(応用):二つの3*3の行列を掛け算するプログラムをforループを用いて作成せよ.

問8(応用):文字列を入力し,その中に含まれるコンマとピリオドの数を数えるプログラムを作成せよ.ただし,文字列を分類するためにswitch関数を使うこと.

問9(応用):カンマ演算子を用いて10個の整数配列 num[10] から,
sum = num[0] * num[9] + num[1] * num[8] + ・・・ + num[4] * num[5] を求めるプログラムを作成せよ.
ヒント
for文を用い,iはインクリメント,jはデクリメントして使う

問10(応用):5人の学生の学籍番号と点数をまず入力して貰う.それに続けてユーザが点数を入力すると,その点数を取得した学生の学籍番号を求めるプログラムを作成せよ.
ヒント
int gakusei[5][2];という2次元配列を作成し,学籍番号と点数を入力せよ.

問11(発展):第5回の52枚のトランプをシャッフルして5枚ずつ表示する問題を利用して,ユーザが配布された5枚のトランプのうち,任意のものを選択して交換できるようなプログラムを作成せよ.

出力例:
ハート クローバー ハート クラブ     ダイヤ
  K       10        6        7        K
Trade(1~5)?, End(9)?:2,4      ←ユーザ入力
ハート ハート    ハート クローバー ダイヤ
  K        7        6        Q        K
Trade(1~5)?, End(9)?:

全てのトランプが無くなるかEndを選択すると終了

masa-n@cs.kobe-u.ac.jp
(C) Masahide Nakamura, Kobe University