プログラミング実習II (2025) 課題
[E4] 第5章 関数(1)
a1 = 0 a2 = 0 a3 = 2 a4 = 6 a5 = 12 a6 = 20 a7 = 30 a8 = 42 a9 = 56 a10 = 72 240
(E4_2) 約数の個数を表示するプログラムを以下のように作成せよ.
1 1 2 2 3 2 4 3 5 2 6 4 7 2 8 4 9 3 10 4 11 2 12 6
(E4_3) まず,5.3.2項(およびキックオフ C言語の 3.6節 )の void 型関数を読む.その上で,以下の通り, 月が指定された際に季節を表示する関数と,それを呼び出すプログラムを作成せよ.
void print_season( int m ) { // return 文はなし(または, "return ;" とする) } int main( void ){ return 0; } |
表示例 0 月はありません 1 月は冬です 2 月は冬です 3 月は春です 4 月は春です 5 月は春です 6 月は夏です 7 月は夏です 8 月は夏です 9 月は秋です 10 月は秋です 11 月は秋です 12 月は冬です 13 月はありません 14 月はありません 15 月はありません
(E4_4) 一辺の長さが t である正方形を底面とし,高さが h である四角錐の体積は t2h/3 である.
i pyramid 5 58.333 6 96.000 7 147.000 8 213.333 9 297.000 10 400.000
(E4_5) 正の整数 n が与えられたとき,i = 1, 2, 3, ..., n のそれぞれについて,1 以上 i 以下の整数の和を計算して表示したい.
i loop formula 1 1 1 2 3 3 3 6 6 4 10 10 5 15 15 6 21 21 :
(E4_6)
次のプログラムには色々な誤りがあって,コンパイルできない.
間違いを修正し,下の「期待する実行結果」と同じ出力が得られるようにせよ.
※ プログラムは, 手で打ち込んでもよいが,WWWブラウザで表示してコピー&貼り付けした方が効率的で間違いがない.
※ 「間違い探し」は関数の宣言だけでなく, main 関数の中の変数の型や printf のフォーマットにも注意せよ.
#include <stdio.h> int char_plus( int ); int main( void ) { char c, ck; int k; double x, y; double n; c = 'f'; k = 3; ck = char_plus( c, k ); printf( "'%c' の %d 個後の文字は '%c' です\n", c, k, ck ); x = 2.0; n = 5; y = ssum( x, n ); printf( "x = %d, n = %d, y = %f \n", x, n, y ); return 0; } /* 文字 c の k 個後の文字を返す */ char char_plus( char c, int k ) { return c + k; } /* 文字 c の ( k + 3 ) 個後の文字を返す */ char char_plus( char c , int k ) { return c + ( k + 3 ); } /* 1 + 1/x + 1/(x*x) + 1/(x*x*x) + ... + 1/x^k を計算して返す */ double ssum( double x, int k ) { int i; double s, r; s = 1; r = 1; for ( i = 1; i <= k; i++ ){ r /= x; s += r; } return s; } |
'f' の 3 個後の文字は 'i' です x = 2.000000, n = 5, y = 1.968750
(E4_7*) 本オプション課題は( main 以外の )関数を作成することを求めているわけではありません.
キーボードから自然数 n を受け取り,その素因数分解を行うプログラムを作成せよ.例えば,n = 340 を入力した場合,
#include <stdio.h> #include <math.h> double deg2rad( double deg ){ return ???????????????; } double rad2deg( double rad ){ return ???????????????; } double sin_deg( double deg ){ return ???????????????; } double asin_deg( double x ){ return ???????????????; } void print_deg( double deg ){ double rad, deg2; // 慣れている人は,これらの変数を削除してもよい // ここで,角度 deg を度数法で表示 // ここで,角度 deg を 適切な関数を用いてラジアン rad に変換し,それを表示 // ここで,ラジアン rad を 適切な関数を用いて度数法に変換して表示( deg と同じ数値となるはず ) } void print_sin( double deg ){ double sind, deg2; // 慣れている人は,これらの変数を削除してもよい // ここで,角度 deg を度数法で表示 // ここで,角度 deg の正弦を適切な関数を用いて求めて表示 // ここで,正弦 sind の逆正弦を 適切な関数を用いて度数法で求めて表示( deg と同じ数値となるはず ) } int main( void ){ print_deg( -90.0 ); print_deg( -45.0 ); print_deg( 0.0 ); print_deg( 30.0 ); print_deg( 60.0 ); print_deg( 90.0 ); printf("\n\n"); print_sin( -90.0 ); print_sin( -45.0 ); print_sin( 0.0 ); print_sin( 30.0 ); print_sin( 60.0 ); print_sin( 90.0 ); return 0; } |