プログラミング実習II (2025) 課題
[E10] 復習
(E10_1) double 型の変数を int 型にキャストすることで小数点以下は切り捨てられる.
double x = 12.45; int a = (int)x; printf("%d\n", a ); // 出力結果は 12 |
表示例: (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
(表示例) 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