例:キーボードから「1→0→0→1→1」と入力すると、二進数10011は、十進数では
問1
int power(int n)は、1つの整数n(≧1)を入力すると、2のべき乗
問2
main()中において、5桁目から順番に1桁目まで、キーボードから0または1の整数を読み込みます。変数nが何桁目かを表すとして、題意に沿うよう[空欄4]を埋めなさい。
問3
キーボードから入力する整数値を、変数aに格納します。変数aは0または1でなければなりません(二進数)。正しい値が入力された場合は演算を実行、「0または1」以外の値が読み込まれた場合は、「正しい値を入力せよ」と画面に表示します。題意に沿うよう[空欄5],[空欄6]を埋めなさい。
問4
関数int power(int n)を呼び出し、何桁目かを表す変数nの値を引き渡します(実引数)。関数power()の返り値(戻り値)2n-1を変数ansに代入します。題意に沿うよう[空欄7]を埋めなさい。
問5
変数sumに変数ansの値を加え、新たなsumの値とします。題意に沿うよう[空欄8]を埋めなさい。
(プログラム内左端の行番号は便宜上付けたにすぎません。第2問も同様)
1:#include <stdio.h> /* 二進数を十進数へと変換する */
2:int power(int n) /* 2のべき乗2(n-1)計算用関数 */
3:{
4: int i,ans;
5: ans=1;
6: if([空欄1]){
7: for([空欄2]){
8: [空欄3] /* 2のべき乗計算 */
9: }
10: }
11: return ans;
12:}
13:int main() /* main */
14:{
15: int n,a,ans,sum;
16: sum=0;
17: n=5; /* 入力値は5桁目からスタート */
18: while([空欄4]){ /* 5桁目から1桁目までwhileループ */
19: printf("2進数(0または1)を入力\n");
20: [空欄5] /* キーボードから変数aへ入力 */
21: if([空欄6]){
22: printf("%d桁目:%d\n",n,a);
23: if(a==1){ /* aが1の場合 */
24: ans=[空欄7]
25: [空欄8]
26: }
27: n--;
28: }
29: else{
30: printf("正しい値を入力せよ\n");
31: }
32: }
33: printf("入力値を十進数で表す:%d\n",sum);
34: return 0;
35:}

問1
本プログラム中において数学ライブラリーを利用します。題意に沿うよう [空欄1]に必要なヘッダーファイル名を書きなさい。
問2
区分求積法(後述する「参考」参照のこと)を利用するため、積分区間0≦x≦πを変数Nを用いてN等分し、変数dx=π/Nとします(等分数N)。題意に沿うよう[空欄2]を埋めなさい。なお、円周率πの値を表すのに、本プログラム中で設定したマクロpi、もしくは、マクロM_PI(gccコンパイラにおいてあらかじめ設定されているマクロの一つ)を利用してよい。
問3
forループ内にて変数kの値を0からN-1まで一つづつ増加させ、区分求積法により、

問4
ファイルkekka.datを書き込みモードで開きます。題意に沿うよう[空欄5]を埋めなさい。
問5
解析値2、等分数の値N、区分求積法による計算値sumを、画面に表示、同様に、ファイルkekka.datへと書き出します。題意に沿うよう[空欄6]を埋めなさい。
問6
等分数の値としてN=10,N=100と2通り設定した場合の計算値sumを、解答欄にそれぞれ書きなさい。
1:#include<stdio.h> /* 区分求積法 */
2:#include<stdlib.h>
3:#include<[空欄1]> /* 数学ライブラリー利用 */
4:#define pi 3.1415926 /* 円周率πの値としてマクロpiを設定 */
5:int main()
6:{
7: FILE *fp; /* ファイルポインタ */
8: int N,k;
9: double dx,sum;
10: N=10; /* 積分区間をN等分、Nの値は10とする */
11: dx=[空欄2] /* Δxの値設定 */
12: sum=0; /* 計算された積分値を格納する変数sum */
13: for([空欄3]){
14: [空欄4] /* 敗in(k・Δx)・Δxを計算 */
15: }
16: fp=[空欄5] /* ファイルkekka.datオープン */
17: if(fp==NULL){
18: printf("Can not open kekka.dat!\n");
19: exit(1);
20: }
21: printf("解析値=2,等分数=%d,区分求積値=%lf\n",N,sum);
22: [空欄6] /* ファイルkekka.datへ出力 */
23: fclose(fp); /* ファイルクローズ */
24: return 0;
25:}
(参考:関数f(x)をa≦x≦bの範囲で区分求積する場合は以下の通りになります。積分区間をN等分し、Δx=(b-a)/Nと与えます。分点をa,a+Δx,a+2・Δx,・・・,a+(N-1)・Δxとします。その結果、積分値を


区分求積法では、和の範囲を0≦k≦N-1ではなく、1≦k≦Nと設定した、


http://www.tuat.ac.jp/~kamelab/gcc/index.html コンピュータプログラミング演習II 亀田・佐藤クラスのページへ