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

[E4] 第5章 関数(1)


(E4_1) 数列 {an} の第 n 項は,an = n2 - 3 n + 2 であるとする.

表示例(m = 10の場合)
a1 = 0
a2 = 0
a3 = 2
a4 = 6
a5 = 12
a6 = 20
a7 = 30
a8 = 42
a9 = 56
a10 = 72
240

(E4_2) 約数の個数を表示するプログラムを以下のように作成せよ.

表示例: n = 13の場合(右辺の数値は正しいとは限らない)
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 型関数を読む.その上で,以下の通り, 月が指定された際に季節を表示する関数と,それを呼び出すプログラムを作成せよ.

  • 引数 m が 0 以上 15 以下の整数であることを前提として,以下のように m 月の季節を表示する 関数 void print_season( int m ) を作成せよ. if, else if, else をすべて用いること.
  • main 関数内で for 文のカウンタ変数(ループ変数) i を 0 から 15 まで増やしながら,その都度 i を 引数として関数 print_season を呼び出し,実行結果を確認せよ.
  • 「 void 型関数」とはどのようなものであるか,また関数 print_season には戻り値がないがこれでよいのか,などをレポートに記せ.

    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 を入力した場合,

    のように表示されるようにせよ.
    (E4_A) 「キックオフ C言語」の 3.10節 練習問題 9(【関数の役割分担・逆関数の作成】次の関数を作れ.(標準ライブラリの…))を解答せよ.
    度数法とラジアン,および数学関数について,「C言語によるプログラミング」にも p. 139 に説明がある.

    #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;
    }
    

    (E4_B*) 「キックオフ C言語」の 12.1節 [3章] の課題( 関数 int sec2fee( int sec ) を作成)に解答せよ.
    作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.