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

[E10] 復習


(E10_1) double 型の変数を int 型にキャストすることで小数点以下は切り捨てられる.
    double x = 12.45;
    int a = (int)x;

    printf("%d\n", a );   // 出力結果は 12 

これを利用して以下のプログラムを作成せよ.
ある銀行口座では,毎年3月15日の時点でその時の預金残高の 2.5% 相当額の利息がつく.ただし,利息部分の小数点以下は切り捨てられた上で残高に加算されることとする.
この口座に,毎年4月1日に 55555 円を入金するとき,n = 1, ..., 20 について入金をはじめてから n 年後の3月31日の口座の預金残高を求めて表示するプログラムを作成せよ.
また,利息が加算されない場合の預金残高も合わせて表示せよ.

 表示例: (printf の書式は %2d %7d %7d)
 1    56943    55555
 2   115310   111110
 3   175136   166665
 4   236458   222220
 5   299313   277775
 6   363739   333330
 7   429776   388885
 8   497464   444440
 9   566844   499995
10   637958   555550
11   710850   611105
12   785565   666660
13   862148   722215
14   940645   777770
15  1021105   833325
16  1103576   888880
17  1188109   944435
18  1274755   999990
19  1363567  1055545
20  1454600  1111100

(E10_2) キーボードから正の整数 n を受け取る. 以下に示すように, 1 行めに '@' を 1 個,2 行めに '@' を 3 個, 3 行めに '@' を 9 個,...,n 行めに '@' を 3n-1個表示するプログラムを for 文の 2 重ループを用いて作成せよ. 3i の計算には,(T4_1) の powint 関数を用いよ. たとえば,n=4 のときは下記のパターンが表示される.

@
@@@
@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@

(E10_3) キーボードから正の整数 n を受け取る. 1 から t (t を正の整数)までの整数の 3 乗の和 (13+23+…+t3) が n を超えるような最小の t を求めて表示せよ.また,その t の値に対する 1 から t までの3乗の和も表示せよ.

(表示例)
n = 1000 のとき,8, 1296
n = 10000 のとき,14 11025
n = 10000 のとき,25 105625

(E10_4) 5000円札を1000円札,500円玉,100円玉の 3 種類に両替するとき, 紙幣数/硬貨数の組み合わせおよび組み合わせの数を求めて表示するプログラムを for 文の多重ループを使って作成せよ.

(表示例)
1000円が 5 枚,500円が 0 個,100円が 0 個
1000円が 4 枚,500円が 1 個,100円が 5 個
  :
総数は 36 通り

(E10_5) (数学的な意味での)関数 g は実数 x に対して x + 1.0 の平方根 (sqrt) を出力する. また,g1(x) = g(x),g2(x) = g( g(x) ),g3(x) = g( g2(x) ),…,gi(x) = g( gi-1(x) ),… と定義する.

x = 10.0 であるときの出力:

 i   g_i(x)

 1  3.316625
 2  2.077649
 3  1.754323
 4  1.659615
 5  1.630833
 6  1.621984
 7  1.619254
 8  1.618411
 9  1.618150
10  1.618070

(E10_6) 以下のプログラムでは,配列 a に正の整数が格納されている.ただし,データの個数は奇数個と仮定してよい. このデータの中央値を求めて表示せよ.
なお,データの個数が奇数である場合の中央値とは,昇順(または降順)に整列したときの順位がちょうど真ん中であるデータを指す.
(15個のデータがあるなら,小さい順に数えて 8 番目,大きな順に数えても 8 番目のデータが中央値)

#include <stdio.h>

int main( void )
{


	int a[] = { 75, 44, 98, 76, 87, 64, 88, 78, 55, 91, 69, 47, 84, 13, 63, 81, 29, 42, 53 };


	return 0;
}


(E10_7*) プログラム内で配列に 1 桁の整数が格納されている. 下のように隣合う要素同士で桁上がりを無視した加算を行って逆三角形を作り,最後に残った 2 桁 (ただし 3 桁で 1 0 0 が残ったときは満点なのでそこで終了) で運勢を占う,というプログラムを作成せよ.下のような逆三角形を表示すること.なお,入力される正の整数は 100 個よりも少ないものとしてよい.

0 7 9 5 6 5 7 7 4 2  // この行が配列の初期値の要素
 7 6 4 1 1 2 4 1 6
  3 0 5 2 3 6 5 7
   3 5 7 5 9 1 2
    8 2 2 4 0 3
     0 4 6 4 3
      4 0 0 7
       4 0 7
        4 7


(E10_A) 「キックオフ C言語」の第 5 章 章末問題 7(【数列の和・double型へのキャスト】S_n (n = 0, 1, 2, ...))を解答せよ.
作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.

さらに,できるだけ,同一プログラム内にて「キックオフ C言語」の第 6 章 章末問題 7(【数列の和】以下の数列…)も解答せよ.