|
[8] 関数(1)【中級クラス】演習課題
提出〆切は 6/4(金)の 14:10 です.
-
演習 1
サンプルプログラム①を別名(ex01.c)にコピーし,
それを次のように編集しなさい:
- 関数の名前を print_all から print_sum へ変更する.
- 関数 print_sum の内容を変更して,1 から n までの合計を表示させ,
その後で改行するようにする.
具体的には,main の中身を
int main(void){
print_sum(5);
print_sum(10);
print_sum(15);
return 0;
}
として,実行結果が
1 から 5 までの合計は 15 です
1 から 10 までの合計は 55 です
1 から 15 までの合計は 120 です
となるようにしなさい.
【注意すべきこと】
print_sum での計算で,等差数列の和の公式を使ってはいけません.
また,繰り返しで合計を求める前に,合計値のための変数を 0 に初期化するのを忘れないこと.
ちなみに上の main の内容は
int main(void){
int i;
for ( i = 5; i <= 15; i+= 5){
print_sum(i);
}
return 0;
}
と書いてもよい(←演習 2 のヒント)
-
演習 2
サンプルプログラム②を別名(ex02.c)にコピーし,
それを次のように編集しなさい:
- 関数 power の内容は変更しない.
- main 内で power の呼出しを for 文か while 文で繰り返して,
x の 1 乗,x の 2 乗, x の 3 乗, ..., x の y 乗をすべて表示させなさい.(上のヒントを参照)
例えば,x = 5, y = 4 の場合,実行結果が
5 の 1 乗は 5 です
5 の 2 乗は 25 です
5 の 3 乗は 125 です
5 の 4 乗は 625 です
となるようにしなさい.
-
演習 3
サンプルプログラム③を別名(ex03.c)にコピーし,
それを次のように編集しなさい:
- 関数 print_array はサンプルプログラムでの動作に加え,
最後に全要素の合計値と平均値(小数点以下第 2 位まで)も表示する.
例えば,入力が 10, 5, 3, 8, 7 であった場合,
[0] 10
[1] 5
[2] 3
[3] 8
[4] 7
合計値は 33 です
平均値は 6.60 です
となるようにしなさい.
さらに,SIZE を 100 に変更してコンパイルをやり直し,以下のデータファイルでも実行してみなさい.
【実行方法】
a < data3-1.txt
data3-1.txt の場合の合計値は -641, 平均値は -6.41 である.
演習用データ 1 (data3-1.txt)
/
2 (data3-2.txt)
/
3 (data3-3.txt)
【注意すべきこと】
マクロ SIZE の定義以外の場所で 5 や 100 といった具体的な数値を書いてはいけません(すべて SIZE と書くこと).
そうしないとマクロを使う意味がなくなってしまいます.
なお,提出するプログラムでは SIZE を 100 としなさい.
-
演習 4
サンプルプログラム④を別名(ex04.c)にコピーし,
それを次のように編集しなさい:
- 関数 print_Y, print_N で表示される内容を
「合格」,「不合格」がより分かりやすいものに改良しなさい.
(内容は各自の自由とする)
余裕のある人は
-
演習 1【発展課題】
上の演習 1 で作った print_sum を改良し,
単に合計だけでなく,偶数のみの合計と奇数のみの合計も表示させなさい.
こちらはソースファイル名を ex01e.c としなさい.
(実行例)
1 から 5 までの合計は 15 です(偶数のみ 6, 奇数のみ 9)
1 から 10 までの合計は 55 です(偶数のみ 30, 奇数のみ 25)
1 から 15 までの合計は 120 です(偶数のみ 56, 奇数のみ 64)
-
演習 2【発展課題】
関数 power は y が負の整数の場合に対応できていない.
これにも対応できるように改良しなさい.ただし,x > 0 とする.
なお,この場合は答えが実数になることもあるので,計算結果は double 型で扱うことにし,表示は %f で行いなさい(桁数指定は不要).
こちらはソースファイル名を ex02e.c としなさい.
【ヒント】y < 0 の場合は割り算を繰り返すことになる.
(実行例)x = 5, y = -4 とした場合,
5 の -4 乗は 0.001600 です
-
演習 3【発展課題】
関数 print_array を改良し,上記の演習 3 の動作に加え,
各要素の順位(最大値が 1 位)も表示させなさい.
こちらはソースファイル名を ex03e.c としなさい.
(実行例)入力が 10, 5, 3, 8, 7 であった場合(ただし SIZE は 5),
10 5 3 8 7
[0] 10 (1位)
[1] 5 (4位)
[2] 3 (5位)
[3] 8 (2位)
[4] 7 (3位)
合計値は 33 です
平均値は 6.60 です
SIZE を 100 として,上の data3-1.txt で実行した場合,1 位は 488 となります.
【注意すべきこと】
提出するプログラムではマクロ SIZE を 100 としなさい.
|