情報理論2 第4回 小林 学 湘南工科大学 2011年11月1日 〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25 情報理論2 第4回 小林 学 〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25 Tel. 0466-30-0232(直通) Fax. 0466-34-5932 kobayasi@info.shonan-it.ac.jp
Page 2 [前回の課題2] (1) double 型の配列 x[5] を用意し,それぞれにキーボードから数字を入力する. (2) double 型の変数 sum を用意し,x[0]~x[4] の和を計算. (3) double 型の変数 ave を用意し, x[0]~x[4] の平均を計算. (4) double 型の変数 sig を用意し, x[0]~x[4] の分散を計算. (5) sum,ave,sig をそれぞれ表示するプログラム作成 [参考] 入力が 4 1 5 7 3 のとき sum = 4 + 1 + 5 + 7 + 3 = 20 ave = sum / 5 = 4 sig =( (4–ave)2+ (1–ave)2+ (5–ave)2+ (7–ave)2+ (3–ave)2 ) / 5 = 4
[前回の課題2の解答例] Page 3 #include<stdio.h> void main(void){ int i; double x[5], sum, ave, sig; printf("配列x:"); for(i=0;i<5;i++) scanf("%lf", &x[i]); sum = 0; for(i=0;i<5;i++) sum += x[i]; //和 ave = sum / 5; //平均 sig = 0; for(i=0;i<5;i++) sig += (x[i]-ave)*(x[i]-ave); sig = sig / 5; printf("sum=%f, ave=%f, sig=%f\n", sum, ave, sig); }}
Page 4 [前回の課題3] 100項までのフィボナッチ数列を表示するプログラム作成 フィボナッチ数列とは以下のように続く数列 0 1 1 2 3 5 8 13 21 34 55 89 144 (2) 100項までのフィボナッチ数列の和を表示するプログラム作成 [参考] フィボナッチ数列は,前の2項の和 0 13 = 5 + 8 1 21 = 8 + 13 1 = 0 + 1 34 = 13 + 21 2 = 1 + 1 55 = 21 + 34 3 = 1 + 2 89 = 34 + 55 5 = 2 + 3 144 = 55 + 89 8 = 3 + 5 233 = 89 + 144
Page 5 [前回の課題3の実行例]
[前回の課題3の解答例] Page 6 #include<stdio.h> void main(void){ int i, fibo[41], sum=0; fibo[0] = 0; fibo[1] = 1; for(i=2;i<=40;i++){ fibo[i] = fibo[i-1] + fibo[i-2]; sum += fibo[i]; printf("fibo[%d]=%d\n", i, fibo[i]); } printf("sum=%d", sum);
Page 7 [前回の課題1] int DataNo=0; :データの数を表す int 型変数 int Data[5]; :データを格納する int 型配列 上の定義に対して,以下の命令を実行したときの配列Data の内容と DataNo の変化,画面出力を示しなさい Input(2) → Output → Input(4) → Input(7) → Output (1)と同様に,以下の結果を示しなさい Input(4) → Input(12) → Input(22) → Output → Output → Output
Data [0] [1] [2] [3] [4] DataNo 画面出力 Input(2) 2 1 Output 2 Input(4) 4 Page 8 [前回の課題1の解答] (1) Data [0] [1] [2] [3] [4] DataNo 画面出力 Input(2) 2 1 Output 2 Input(4) 4 1
Data [0] [1] [2] [3] [4] DataNo 画面出力 4 1 Input(7) 4 7 2 Output 4 1 7 Page 9 Data [0] [1] [2] [3] [4] DataNo 画面出力 4 1 Input(7) 4 7 2 Output 4 1 7
Data [0] [1] [2] [3] [4] DataNo 画面出力 Input(4) 4 1 Input(12) 4 12 2 Page 10 [前回の課題1の解答] (2) Data [0] [1] [2] [3] [4] DataNo 画面出力 Input(4) 4 1 Input(12) 4 12 2 Input(22) 4 12 22 3 Output 4 12 2 22
Data [0] [1] [2] [3] [4] DataNo 画面出力 4 12 2 Output 4 1 12 Output 4 Page 11 Data [0] [1] [2] [3] [4] DataNo 画面出力 4 12 2 Output 4 1 12 Output 4
[前回の課題4] Page 12 スタック構造を実現するプログラムを作成しなさい [実行例]
Page 13 [前回の課題4の解答] #include<stdio.h> void main(void){ int select, i, DataNo=0, Data[5], input; while(1){ printf("\nInputならば0,Outputならば1を入力:"); scanf("%d",&select); if(select==0){ printf("入力データ:"); scanf("%d",&input); Data[DataNo] = input; DataNo++; }else{ DataNo--; printf("出力:%d\n",Data[DataNo]); } printf("Data="); for(i=0;i<DataNo;i++) printf(" %d",Data[i]);
[解答] 変数の値 画面出力 i siki 0 0 2 2 4 4 6 6 8 8 Page 14 [例題1] 次のプログラムの変数の値をトレースしなさい [解答] #include<stdio.h> void main(void){ int i, siki; for(i=0;i<5;i++){ siki = 2*i; printf("%d\n", siki); } 変数の値 画面出力 i siki 0 0 2 4 6 8 2 4 6 8
[解答] 変数の値 画面出力 i siki Page 15 [課題1] 次のプログラムの変数の値をトレースしなさい #include<stdio.h> void main(void){ int i, siki; for(i=0;i<5;i++){ siki = 2*i+1; printf("%d\n", siki); } 変数の値 画面出力 i siki
[解答] 変数の値 画面出力 i data[i] 0 1 1 4 4 7 7 10 10 13 13 Page 16 [例題2] 次のプログラムの変数の値をトレースしなさい [解答] #include<stdio.h> void main(void){ int i, siki, data[5]; for(i=0;i<5;i++){ data[i] = 3*i+1; printf("%d\n", data[i]); } 変数の値 画面出力 i data[i] 0 1 4 7 10 13 1 4 7 10 13
[解答] 変数の値 画面出力 i data[i] Page 17 [課題2] 次のプログラムの変数の値をトレースしなさい #include<stdio.h> void main(void){ int i, siki, data[5]; for(i=0;i<5;i++){ data[i] = 2*i+2; printf("%d\n", data[i]); } 変数の値 画面出力 i data[i]
[解答] 変数の値 画面出力 i data[i] siki 0 7 8 9 10 11 0 0 2 4 7 9 Page 18 [例題3] 次のプログラムの変数の値をトレースしなさい [解答] #include<stdio.h> void main(void){ int i, siki, data[5]; for(i=0;i<5;i++) data[i] = i+7; for(i=0;i<3;i++){ siki = 2*i; printf(“%d\n”, data[siki]); } 変数の値 画面出力 i data[i] siki 0 7 8 9 10 11 0 0 2 4 7 9 11 (注意)変更のない変数は書かなくてよい
[解答] 変数の値 画面出力 i data[i] siki (注意)変更のない変数は書かなくてよい Page 19 [課題3] 次のプログラムの変数の値をトレースしなさい [解答] #include<stdio.h> void main(void){ int i, siki, data[5]; for(i=0;i<5;i++) data[i] = 3*i; for(i=0;i<3;i++){ siki = i+2; printf(“%d\n”, data[siki]); } 変数の値 画面出力 i data[i] siki (注意)変更のない変数は書かなくてよい
[解答] 変数の値 画面出力 i data[i] 0 7 8 9 10 11 0 8 8 (注意)変更のない変数は書かなくてよい 9 10 Page 20 [例題4] 次のプログラムの変数の値をトレースしなさい [解答] #include<stdio.h> void main(void){ int i, data[5]; for(i=0;i<5;i++) data[i] = i+7; for(i=0;i<4;i++){ data[i] = data[i+1]; printf(“%d\n”, data[i]); } 変数の値 画面出力 i data[i] 0 7 8 9 10 11 0 8 8 9 10 11 (注意)変更のない変数は書かなくてよい
[解答] 変数の値 画面出力 i data[i] (注意)変更のない変数は書かなくてよい Page 21 [課題4] 次のプログラムの変数の値をトレースしなさい [解答] #include<stdio.h> void main(void){ int i, data[5]; for(i=0;i<5;i++) data[i] = 3*i; for(i=0;i<3;i++){ data[i] = data[2*i]; printf(“%d\n”, data[i]); } 変数の値 画面出力 i data[i] (注意)変更のない変数は書かなくてよい