プログラミング実習II (2026) 課題
[リスト 4.14] を入力し,コンパイル・実行し,計算結果を確認せよ.次にこのプログラムを("間違いバージョン"の while 文と,最後の printf 文を削除した上で)以下のように変更せよ.
while 文の外で)キーボードから正の整数 n を受け取る. int n;
scanf( "%d", &n );
while 文のループの中で,i と total の値を printf 文により表示する.total が n より小さい間はループを継続するように while 文の条件式を与えよ.表示された total の値が正しい値であること,および様々な n の値を試して,すべての場合について n を超えた時点で終了していることを確認すること.
(表示例)n = 20 のとき 1 1 2 3 3 6 4 10 5 15 6 21
i = 1, ..., 10 のようにカウンタ変数(ループ変数)の範囲が決まっている場合は,for 文を使用することがより一般的です.while 文の使用が適しています.[リスト 4.12]を入力し,実行せよ.さらに,数当てゲームに正解した場合には「 * 〇回目で大正解 * 」と表示されるように変更したプログラムを提出せよ.
int num = 2985; // 当たりの回数 → (正)int num = 2985; // 当たりの数値
[リスト 4.13] では,i = 1, 2, ..., 10 について,i の 逆数,2乗,平方根を表示するプログラムが示されている.本問では,これと同じ表示を行う for 文を用いたプログラムに書き換えることとする.
以下の ???? の部分に数式を補ってプログラムを完成せよ.ただし,本問では新たな変数は定義しないこと.
printf("%5.1f %5.3f %6.1f %6.4f \n", val, ????, ????, ???? );
i の範囲が 1 ~ 10 に確定しているため,for 文を使用することがより一般的です.printf文での表示の際に,変数だけでなく式を直接指定することが可能です.簡単な式の場合,わざわざ新たな変数を定義する必要はありません.double 型変数に代入する場合や,実数との混合演算を行う場合,整数を明示的にキャストするよう心がけて下さい.(例:double value = i;のように自動型変換に頼らず double value = (double)i;とする, 1 / value ではなく 1.0 / value とする,など)inv など).下の例題プログラムは,for 文による2重ループを使っている.これを入力,コンパイル,実行し,どのような結果が得られるか調べよ.特に i と j がどのように増える(減る)かを観察し,考察欄に記せ.
#include <stdio.h>
int main(void)
{
int i, j;
for ( i = 0; i < 4; i++ ){
for ( j = 0; j < 4; j++ ){
printf( "%d + %d = %d\n", i, j, i + j );
}
}
printf( "\n");
for ( i = 0; i < 4; i++ ){
for ( j = i+1; j < 4; j++ ){
printf( "%d + %d = %d\n", i, j, i + j );
}
}
printf( "\n");
for ( i = 0; i < 4; i++ ){
for ( j = 0; j < i+1; j++ ){
printf( "%d + %d = %d\n", i, j, i + j );
}
}
printf( "\n");
for ( i = 3; i >= 0; i-- ){
for ( j = i; j >= 0; j-- ){
printf( "%d + %d = %d\n", i, j, i + j );
}
}
return 0;
}
「キックオフ C言語」の p. 104,6.5節 練習問題 3([2重ループ,回数の変化するループ],2重ループを用いて…)を解答せよ.利便性のため,問題文(一部,改変あり)を以下に掲載する.
キーボードから正の整数 n を受け取る. 2 重ループを用いて * の文字を並べて,縦横 n 文字の * からなる長方形を表示せよ.また同様に、縦横 n 文字の直角三角形を表示せよ.以下は n = 5 の出力例である.
***** ***** ***** ***** *****
* ** *** **** *****
(直角三角形について授業中の解答が難しい場合は,長方形のみを表示するプログラムを提出して構わない.この場合,後で直角三角形に対するプログラムも作成しておくこと)