プログラミング実習II (2025) 課題

[E2] 第4章 制御の流れ(1)


(本実習の課題ページ上で問題の一部として記載されたサンプルプログラムは,特に指示がない限りコピー・ペーストして使用して構いません.ただし,必要に応じて,インデントなど調整を行うこと)

(E2_1) p.110 の [リスト 4.1] と p.117 の [リスト 4.3] を参考に,次のようなプログラムを作成せよ.

(E2_2) 教科書4.2.5項「多岐条件文」を参考に,if(), else if(), elseをすべて用いて次のようなプログラムを作成し,コンパイル・実行せよ.

実行時にキーボードから 17, 21, 25, 30, 48, 50, 55, 60 をそれぞれ入力し,実行結果が正しいことを確認せよ(各数字に対して出力されるべき文字は自分で考えること).

(E2_3) 2次方程式の実数解を求める [リスト 4.9] を入力し,コンパイル・実行せよ.[実行結果 4.9] に示される数値を入力し,正しく表示されることを確認すること. また,異なる 2 個の実数解を持つような a, b, c を自分で作成して入力し,解が正しく表示されることを確認せよ.

《以下もできるだけ取り組むこと.難しい場合は,[リスト 4.9]のプログラムを提出してよい.》

次に,異なる 2個の実数解が存在する場合にはそれらの正負に基づいて,

のいずれかを表示するプログラムを if(),else if(),else をすべて用いて作成せよ. [リスト 4.9]で2個の実数解を表示している printf 文の部分を変更すればよい.

(scanf で 実数を受け取るときの書式 %lf は,「パーセント エル エフ」です.真ん中の文字は数字の 1 ではありません.)

(E2_4) キーボードから 2 個の整数を受け取り,それぞれ int 型変数 a および b に代入する. a 以上 b 未満 の整数のうち 3 または 5 で割り切れるものをすべて表示するプログラムを for 文を用いて作成せよ.論理演算子は教科書 p. 124 以降を参照せよ.
for 文のループ内で if 文を書けばよい.

作成したプログラムの動作を検証するのに適した数値の組をキーボードから 5 組程度入力することで,それぞれについて,実行結果が正しいことを確認せよ(例えば,a = 10,b = 27 の場合は,10, 12, 15, 18, 20, 21, 24, 25).結果はレポートに記すこと.

(E2_5) キーボードから受け取った整数を a および b とする.a 以上 b 未満の正の整数のうち, 3 の倍数であるが 5 の倍数ではない整数の個数を求めるプログラムを作成して,コンパイルと実行を行え.
for 文のループ内で if 文を書き,条件式が真ならば変数 cnt をインクリメント(1だけ増やす)すればよい.

作成したプログラムの動作を検証するのに適した数値の組をキーボードから 5 組程度入力することで,それぞれについて,実行結果が正しいことを確認せよ(例えば,a = 10,b = 32 の場合は,12, 18, 21, 24, 27 であるため,5 個).結果はレポートに記すこと.

(E2_6) [リスト 4.11] を入力し,コンパイル・実行せよ.
このプログラムは,望ましくない例として挙げられており,数値計算の誤差を防ぐためカウンタ変数は整数とすべきことが説明されている.
この説明に従って,[リスト 4.11] のカウンタ変数 t を int 型に変更(double t; → int t;)した上で,[実行結果 4.11] と同じ出力が得られるようにプログラムを変更せよ.
( t と 0.1 の乗算の際には,混合演算(3.2.6項)が行われることに注意)

(E2_7) [リスト 4.11] を参考にして,t = 0, 15, 30, 45, 60, 75, 90 () における正弦(sin)と余弦(cos)を表示するプログラムを作成せよ.for 文を用いること.
p. 139 に述べられている通り,数学関数 sin() および cos() へ渡す際,角度をラジアン(度ではない)に変換する必要があることに注意.

 
表示例:
 t      cos        sin
-------------------------
 0   1.000000   0.000000
15   0.965926   0.258819
30   0.866025   0.500000
45   0.707107   0.707107
60   0.500000   0.866025
75   0.258819   0.965926
90   0.000000   1.000000

(E2_8) 以下のプログラムについて考える.*=, -= 等の代入演算子については教科書pp. 90〜92を参照せよ.
実行すると,キーボードから入力する値に依存して,表示される x と y の値が一致しない場合がある.

#include <stdio.h>

int main( void )
{
	int a, x, y;

	printf("整数を入力して下さい\n");
	scanf("%d", &a);

	x = a;
	y = a;

	if( a % 2 == 0 )
		x *= 5;
	if( a % 3 == 0 )
		x -= 2;


	if( a % 2 == 0 )
		y *= 5;
	else if( a % 3 == 0 )
		y -= 2;

	printf("x = %d, y = %d です.", x, y);

	return 0;
}

(E2_A) 「キックオフ C言語」の p. 71,第 4 章,章末問題 2([2要素による分岐], 「あるお化け屋敷では…」)を解答せよ.