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

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

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

以下のプログラムを作成せよ.

 表示例:
 t = 1, 1, 1
 t = 2,  5, 5
 t = 3, 14, 14
 t = 4, 30, 30
 t = 10, 385, 385
 t = 100, 338350, 338350
(E2_2)

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

実行時に 17, 21, 25, 30, 48, 50, 55, 60 をそれぞれ入力し,実行結果が正しいことを確認せよ.

#include <stdio.h>

int main( void )
{
	int n;

	scanf( "%d", &n );

	return 0;
}
(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 以降を参照するとよい.動作を検証するのに適した数値の組を 5 組程度入力し,結果をレポートに記すこと.

#include <stdio.h>

int main(void)
{
	int a, b;

	scanf("%d", &a);
	scanf("%d", &b);

	return 0;
}
(E2_5)

キーボードから受け取った整数を a および b とする.a 以上 b 未満の正の整数のうち, 3 の倍数であるが 5 の倍数ではない整数の個数を求めるプログラムを作成せよ.

for 文のループ内で if 文を書き,条件式が真ならば変数 cnt をインクリメントすればよい.動作を検証するのに適した数値の組を 5 組程度入力し,結果をレポートに記すこと(例:a = 10, b = 32 の場合:5 個).

#include <stdio.h>

int main(void)
{
	int i, cnt;  /* cnt は,個数を数えるための変数 */
	int a, b;

	scanf("%d", &a);
	scanf("%d", &b);

	cnt = 0;     /* cnt を初期化 */

	printf( "答えは %d 個です\n", cnt );

	return 0;
}
(E2_6)

[リスト 4.11] を入力し,コンパイル・実行せよ.ただし,このプログラムは望ましくない例として挙げられており,数値計算の誤差を防ぐためには「カウンタ変数を整数とすべき」と説明されている.これに従い,カウンタ変数 tint 型に変更し,[実行結果 4.11]と同じ出力が得られるようにプログラムを変更せよ.

(注)課題ページにある教科書の正誤表を確認すること.変数 sinecosine は2箇所で定義されています.文法的に誤りとはいえませんが,2重に定義する必要はありません. プログラム 7行目の "double sine, cosine" を削除するか,もしくは 13行目 の "double", 14行目の "double" を削除することが望ましいようです.いずれの削除がよいかは考え方にも依存しますが,変数のスコープを狭くする意味で(「キックオフ C言語」, p. 43,コラム参照),前者の削除が推奨されるようになっているようです.
(E2_7)

[リスト 4.11] を参考にして,t = 0, 15, 30, 45, 60, 75, 90 (度) における正弦(sin)と余弦(cos)を表示するプログラムを for 文を用いて作成せよ.角度をラジアンに変換する必要があることに注意.

 
表示例:
 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)

以下のプログラムについて,キーボードから入力される値に依存して,表示される値が一致しないことがある.

  1. まず,(画面上でプログラムを読むことで)どのような場合に値が異なるか,その理由を考察してレポートに記せ.
  2. その後,コンパイル・実行することで結果を確認し,予想が正しくない場合はその理由をレポートに記せ.

#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.7節,練習問題 2([2要素による分岐], 「あるお化け屋敷では…」)を解答せよ.