プログラミング実習II (2026) 課題
数列 {an} の第 n 項は,an = n2 - 3n + 2 であるとする.
n を引数とし,数列の第 n 項 an を戻り値とする関数 int term( int n ) を作成せよ.main 関数において以下を行え.
1 項から第 10 項をそれぞれ関数 term により求めた上で表示せよ.カウンタ変数を i とした for 文を用いること.1 項から第 10 項の和 a1 + a2 + … + a10 を表示せよ.表示例 a1 = 0 a2 = 0 a3 = 2 a4 = 6 a5 = 12 a6 = 20 a7 = 30 a8 = 42 a9 = 56 a10 = 72 240
約数の個数を表示するプログラムを以下のように作成せよ.
a を引数とし,a の約数の個数を求めて戻り値とする関数 int divisors( int a ) を作成せよ.(例:a = 12 のとき、約数は 1, 2, 3, 4, 6, 12 で個数は 6)main 関数においてキーボードから正の整数を受け取り,int 型の変数 n に代入する.1 以上 n 未満の正の整数について,それぞれの約数の個数を表示せよ。関数 divisors を利用すること.表示例: 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
5.3.2~5.3.3項,およびキックオフ C 言語 3.6節を読んだ上で,以下を解答せよ.
キックオフC言語 p. 45,3.4節,ソースコード3.8 を参考にして,三角形の 3 辺の長さが与えられたとき,その三角形の面積を表示するプログラムを作成し,実行結果が正しいことを確認せよ.「void 型関数」とはどのようなものか,戻り値がないがこれでよいのかなどをレポートに記せ.
その上で,main 関数にて 3 個の正の整数をキーボードから受け取り,int 型変数 a, b, c に代入する.
a, b, cを辺長とする三角形が存在しない場合は「三角形ではない」と表示
a, b, c の値と,それらを辺長とする三角形の面積を計算・表示
int 型変数はキャストすること.
5.3.1項「関数の中から別の関数を呼び出す」,およびキックオフC言語 3.3節「複数の引数・関数の役割分担」を読んだ上で,以下に解答せよ.
キックオフ C 言語の p. 40,ソースコード 3.5 には,座標が与えられたとき,それらが作る三角形の面積を求める関数が示されている.
(x1, y1) と (x2, y2) の値をプログラム内で与え,原点とこれら 2 点がつくる三角形の面積を求めて表示せよ.2 点の座標も表示すること.
(x1, y1),(x2, y2),(x3, y3) の値をプログラム内で与え,3 点がつくる三角形の面積を求めて表示せよ.3 点の座標も表示すること.
後者について,どのように三角形の面積が求められているか,関数が別の関数を呼び出していることも踏まえてレポートで説明せよ.
余力があれば,main関数内で (x1, y1),(x2, y2),(x3, y3)が与えられたとき,(面積が正である)三角形ができない場合は「三角形でない」,それ以外の場合は 3 点の座標とそれらがなす三角形の面積を表示するプログラムを追加せよ.両者について,正しい実行結果が確認できる数値例を与えること.
正の整数 n が与えられたとき,t = 1, 2, ..., n のそれぞれについて和を計算したい.(nはできればキーボードから受け取ること)
1 以上 t 以下の整数の和を for 文を用いて計算して戻り値とする関数 int sum_by_loop( int t ) を作成せよ。for 文を用いること.t×(t+1)÷2 を用いて計算して戻り値とする関数 int sum_by_formula( int t ) を作成せよ.main 関数で両方の関数を呼び出し、結果が一致することを確認せよ.
表示例 ( 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
次のプログラムには色々な誤りがあって,コンパイルできない. 間違いを修正し,下の「期待する実行結果」と同じ出力が得られるようにせよ.「間違い探し」は関数の宣言だけでなく, 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;
}
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
「キックオフ 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;
}
「キックオフ C言語」12.1節 の課題(関数 int sec2fee( int sec ) を作成)に解答せよ.作成した関数を利用し,動作が確認できるような C 言語のプログラムを作成して提出すること.