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

[E4] 第5章 関数(1)

(E4_1)

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

表示例
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~5.3.3項,およびキックオフ C 言語 3.6節を読んだ上で,以下を解答せよ.

キックオフC言語 p. 45,3.4節,ソースコード3.8 を参考にして,三角形の 3 辺の長さが与えられたとき,その三角形の面積を表示するプログラムを作成し,実行結果が正しいことを確認せよ.「void 型関数」とはどのようなものか,戻り値がないがこれでよいのかなどをレポートに記せ.

その上で,main 関数にて 3 個の正の整数をキーボードから受け取り,int 型変数 a, b, c に代入する.

するプログラムを追加せよ.なお,ある辺の長さが,その他の 2 辺の長さの和より大きければ(面積が正である)三角形はできない.関数を呼び出す際に,int 型変数はキャストすること.

(E4_4)

5.3.1項「関数の中から別の関数を呼び出す」,およびキックオフC言語 3.3節「複数の引数・関数の役割分担」を読んだ上で,以下に解答せよ.

キックオフ C 言語の p. 40,ソースコード 3.5 には,座標が与えられたとき,それらが作る三角形の面積を求める関数が示されている.

後者について,どのように三角形の面積が求められているか,関数が別の関数を呼び出していることも踏まえてレポートで説明せよ.

余力があれば,main関数内で (x1, y1)(x2, y2)(x3, y3)が与えられたとき,(面積が正である)三角形ができない場合は「三角形でない」,それ以外の場合は 3 点の座標とそれらがなす三角形の面積を表示するプログラムを追加せよ.両者について,正しい実行結果が確認できる数値例を与えること.

(E4_5)

正の整数 n が与えられたとき,t = 1, 2, ..., n のそれぞれについて和を計算したい.(nはできればキーボードから受け取ること)

表示例 ( n = 10 )
  t   loop  formula

  1     1     1
  2     3     3
  3     6     6
  4    10    10
  5    15    15
  6    21    21
         :
 10    55    55
(E4_6)

次のプログラムには色々な誤りがあって,コンパイルできない. 間違いを修正し,下の「期待する実行結果」と同じ出力が得られるようにせよ.「間違い探し」は関数の宣言だけでなく, main 関数の中の変数の型や printf のフォーマットにも注意せよ.

期待する実行結果
  'f' の 3 個後の文字は 'i' です
  x = 2.000000, n = 5, y = 1.968750
#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/(x2) + 1/(x3) + ... + 1/x3 を計算して返す */
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;
}
(E4_7*) (本オプション課題は,main 以外の関数の作成を求めているわけではありません)

キーボードから自然数 n を受け取り,その素因数分解を行うプログラムを作成せよ。素因数を重複を含めて表示すればよい.

表示例
n = 340 → 2 2 5 17
n = 7171 → 7171 -> 71 101
n = 340 → 340 -> 2 2 5 17
n = 756 → 756 -> 2 2 3 3 3 7
n = 13 → 13 -> 13
(E4_A)

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

#include <stdio.h>
#include <math.h>

void print_deg( double deg ){

	printf("deg  = %f \n", ???? );   // 角度(度数法)
	printf("rad  = %f \n", ???? );   // 角度(ラジアン)
	printf("deg2 = %f \n\n", ???? ); // ラジアンから度を求める

}

void print_sin( double deg ){

	printf("deg  = %f \n", ???? );    // 角度(度数法)
	printf("sin  = %f \n", ???? );    // 正弦
	printf("asin = %f \n\n", ???? );  // 逆正弦で角度(度数法)を求める

}

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節 の課題(関数 int sec2fee( int sec ) を作成)に解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.