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

[E3] 第4章 制御の流れ(2)

(E3_1)

大学生協アプリに5000円チャージした.その翌日から昼食を毎日とるが,いつもランチセット390円を購入する.日々のアプリ残額を表示するプログラムを while 文を用いて作成せよ.ただし,残額がランチセットの値段を下回った日までで表示を終了する.

本問では break 文(4.3.5項)は使用せず,while 文の条件式で繰り返しの継続/終了を判定すること.

次の結果が得られることを確認せよ.
0日目残額 5000円
1日目残額 4610円
2日目残額 4220円
3日目残額 3830円
4日目残額 3440円
5日目残額 3050円
6日目残額 2660円
7日目残額 2270円
8日目残額 1880円
9日目残額 1490円
10日目残額 1100円
11日目残額 710円
12日目残額 320円
(E3_2)

大学生協アプリに5000円チャージした.その翌日から昼食を毎日とるが,いつもランチセット390円を購入する.日々のアプリ残額を表示するプログラムを while 文を用いて作成せよ.ただし,残額がランチセットの値段を下回った日までで表示を終了する.

本問では while 文の無限ループ(4.3.6項)を用い,if 文と break 文(4.3.5項)により繰り返しを終了すること.

(E3_3)

for 文の 2 重ループを使って,掛け算の九九の表を下記のように表示するプログラムを作成せよ.なお,printf の書式は printf("%2d ", ?? ); または printf("%3d", ?? );を使用せよ.

さらに,この九九の表を上下反転して表示するプログラムを追加せよ.また,可能であれば,上下のみならず左右も反転した表を表示するプログラムを追加せよ.

(余裕があれば,%d%-3d%03d, %4d についても試し,違いを確認せよ.これらの書式は右詰め,左詰め,ゼロ埋めなどを表す).

     1  2  3  4  5  6  7  8  9
     2  4  6  8 10 12 14 16 18
     3  6  9 12 15 18 21 24 27
     4  8 12 16 20 24 28 32 36
     5 10 15 20 25 30 35 40 45
     6 12 18 24 30 36 42 48 54
     7 14 21 28 35 42 49 56 63
     8 16 24 32 40 48 56 64 72
     9 18 27 36 45 54 63 72 81

なお本問は,「キックオフ C言語」の p. 1046.5節 練習問題 2([逆ループ or 計算],97ページのソースコード6.3…)を一部として含む.

(E3_4)

0 ≤ i < j < 7 を満たす整数の組 (i, j) を以下の順番で表示するプログラムを for 文の 2 重ループを用いて作成したい.本問題では if 文を使用せず,for 文の初期値と継続条件を適切に与えて解答すること.

 ( 0, 1 )
 ( 0, 2 )
 ( 0, 3 )
 ( 0, 4 )
 ( 0, 5 )
 ( 0, 6 )
 ( 1, 2 )
 ( 1, 3 )
 ( 1, 4 )
 ( 1, 5 )
 ( 1, 6 )
 ( 2, 3 )
 ( 2, 4 )
 ( 2, 5 )
 ( 2, 6 )
 ( 3, 4 )
 ( 3, 5 )
 ( 3, 6 )
 ( 4, 5 )
 ( 4, 6 )
 ( 5, 6 )

次に,以下の表示をするプログラムを追加せよ.

 ( 0, 1 ) ( 0, 2 ) ( 0, 3 ) ( 0, 4 ) ( 0, 5 ) ( 0, 6 )
 ( 1, 2 ) ( 1, 3 ) ( 1, 4 ) ( 1, 5 ) ( 1, 6 )
 ( 2, 3 ) ( 2, 4 ) ( 2, 5 ) ( 2, 6 )
 ( 3, 4 ) ( 3, 5 ) ( 3, 6 )
 ( 4, 5 ) ( 4, 6 )
 ( 5, 6 )

余裕があれば,以下の表示をするプログラムも追加せよ(一手法として 2 番目のプログラムに微小な変更を加えるものがある).

 ( 0, 6 ) ( 0, 5 ) ( 0, 4 ) ( 0, 3 ) ( 0, 2 ) ( 0, 1 )
 ( 1, 5 ) ( 1, 4 ) ( 1, 3 ) ( 1, 2 ) ( 1, 1 )
 ( 2, 4 ) ( 2, 3 ) ( 2, 2 ) ( 2, 1 )
 ( 3, 3 ) ( 3, 2 ) ( 3, 1 )
 ( 4, 2 ) ( 4, 1 )
 ( 5, 1 )
《さらに余力があれば,他の規則的な数値組の表示を考えて,プログラムを追加するとよい(形状は上三角形でなくてもよい)》
(E3_5)

t = 1, ..., 20 のそれぞれについて順に,1 以上 t 以下の整数の 2 乗和 12 + 22 + … + t2 を求めて表示せよ. 2 乗和について,for 文により計算を行ったものと,公式 (1/6) × t × (t+1) × (2t+1) を用いて計算を行ったものを両方表示すること.

(表示例)
  t    for  公式
-------------------
  1     1    1
  2     5    5
  3    14   14
  4    30   30
       :
 20
(E3_6)

下の例題プログラムを入力, コンパイル, 実行し, どのような結果が得られるか観察せよ.表示内容の数字の増え方に注意すること.

次に, このプログラムを書き換えて,1 ≤ x ≤ y ≤ z < 5 を満たす (x, y, z) のみ表示するプログラムを作成してこちらを提出せよ.本問では if 文を使用せず,for 文の初期値(例えば"y = 1" の数値部分)を適切に与えることで解答すること.

#include <stdio.h>

int main( void )
{
	int x, y, z;
	for ( x = 1; x < 5; x++ ) {
		for ( y = 1; y < 5; y++ ) {
			for ( z = 1; z < 5; z++ ) {
				printf("( %d, %d, %d ) \n", x, y, z );
			}
		}
	}
	return 0;
}
( 1, 1, 1 )
( 1, 1, 2 )
( 1, 1, 3 )
( 1, 1, 4 )
( 1, 2, 2 )
( 1, 2, 3 )
( 1, 2, 4 )
( 1, 3, 3 )
( 1, 3, 4 )
( 1, 4, 4 )
( 2, 2, 2 )
( 2, 2, 3 )
( 2, 2, 4 )
( 2, 3, 3 )
( 2, 3, 4 )
( 2, 4, 4 )
( 3, 3, 3 )
( 3, 3, 4 )
( 3, 4, 4 )
( 4, 4, 4 )
(E3_7)

キーボードから正の整数 n を受け取り, a2+b2=c2, a < b を満たすような n 以下の正の整数の組 (a, b, c) がいくつあるかを求めて表示するプログラムを作成せよ.単に個数を求めるだけでなく,(a, b, c) を表示することで結果を確認するとよい.

n = 15 のとき 4 個,n = 250 のとき 165 個となることを確認せよ.

(E3_8*)

キーボードからまず2種類の文字 st を,次に正の整数 nm を受け取ると,2 種類の文字を n x m 個(縦に n 個,横に m個)並べたパターンを表示するプログラムを作成せよ.文字の並べ方は下のサンプルにこだわらず,自由に作成し,そのうちのひとつを提出せよ.

printf("s, t = ");
scanf("%c %c", &s, &t);
printf("n, m = ");
scanf("%d %d", &n, &m);
(表示例) s='o', t='.', n=4, m=5 のとき
o....
oo...
ooo..
oooo.

(表示例) s='^', t='v', n=6, m=13 のとき
^v^v^v^v^v^v^
v^v^v^v^v^v^v
^v^v^v^v^v^v^
v^v^v^v^v^v^v
^v^v^v^v^v^v^
v^v^v^v^v^v^v

(表示例) s='+', t='*', n=7, m=7 のとき
+++++++
+++*+++
++***++
+*****+
++***++
+++*+++
+++++++
(E3_A)

「キックオフ C言語」の p. 1046.5節 練習問題 1([3重ループ or 1重ループ+桁分解],153は特別な…)を解答せよ.3重ループを用いるプログラムを提出すればよいが,もし余力があれば 3 桁の数を桁分解することで 1 重ループのみを用いるプログラムも追加して提出せよ.