PowerPoint プレゼンテーション

2011年11月1日
湘南工科大学
情報理論2
第4回
小林 学
〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25
Tel.
0466-30-0232(直通)
Fax.
0466-34-5932
[email protected]
[前回の課題2]
Page 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]
(1) 100項までのフィボナッチ数列を表示するプログラム作成
フィボナッチ数列とは以下のように続く数列
0 1 1 2 3 5 8 13 21 34 55 89 144
(2) 100項までのフィボナッチ数列の和を表示するプログラム作成
[参考] フィボナッチ数列は,前の2項の和
0
13 = 5
1
21 = 8
1 = 0 + 1
34 = 13
2 = 1 + 1
55 = 21
3 = 1 + 2
89 = 34
5 = 2 + 3
144 = 55
8 = 3 + 5
233 = 89
+
8
+ 13
+ 21
+ 34
+ 55
+ 89
+ 144
[前回の課題3の実行例]
Page 5
[前回の課題3の解答例]
#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 6
Page 7
[前回の課題1]
int DataNo=0;
int Data[5];
:データの数を表す int 型変数
:データを格納する int 型配列
(1) 上の定義に対して,以下の命令を実行したときの配列Data
の内容と DataNo の変化,画面出力を示しなさい
Input(2) → Output → Input(4) → Input(7) →
Output
(2) (1)と同様に,以下の結果を示しなさい
Input(4) → Input(12) → Input(22) → Output →
Output → Output
Page 8
[前回の課題1の解答] (1)
Data [0]
[1]
[2]
[3]
[4] DataNo 画面出力
0
Input(2)
1
2
Output
0
Input(4)
4
1
2
Page 9
Data [0]
4
[1]
[2]
[3]
[4] DataNo 画面出力
1
Input(7)
4
2
7
Output
4
1
7
Page 10
[前回の課題1の解答] (2)
Data [0]
[1]
[2]
[3]
[4] DataNo 画面出力
0
Input(4)
1
4
Input(12)
4
2
12
Input(22)
4
12
3
22
Output
4
12
2
22
Page 11
Data [0]
4
[1]
[2]
[3]
12
[4] DataNo 画面出力
2
Output
4
1
12
0
4
Output
[前回の課題4]
スタック構造を実現するプログラムを作成しなさい
[実行例]
Page 12
[前回の課題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]);
}
}
Page 13
[例題1] 次のプログラムの変数の値をトレースしなさい
#include<stdio.h>
void main(void){
int i, siki;
}
for(i=0;i<5;i++){
siki = 2*i;
printf("%d\n", siki);
}
Page 14
[解答]
変数の値
i
siki
0
1
2
3
4
0
2
4
6
8
画面出力
0
2
4
6
8
[課題1] 次のプログラムの変数の値をトレースしなさい
#include<stdio.h>
void main(void){
int i, siki;
}
for(i=0;i<5;i++){
siki = 2*i+1;
printf("%d\n", siki);
}
Page 15
[解答]
変数の値
i
0
1
2
3
4
siki
画面出力
[例題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]);
}
Page 16
[解答]
変数の値
i
data[i]
0
1
2
3
4
1
4
7
10
13
画面出力
1
4
7
10
13
[課題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]);
}
Page 17
[解答]
変数の値
i
0
1
2
3
4
data[i]
画面出力
[例題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]);
}
(注意)変更のない変数は
書かなくてよい
Page 18
[解答]
変数の値
i data[i] siki
0 7
1 8
2 9
3 10
4 11
0
0
1
2
2
4
画面出力
7
9
11
[課題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]);
}
(注意)変更のない変数は
書かなくてよい
Page 19
[解答]
変数の値
i data[i] siki
0
1
2
3
4
0
1
2
画面出力
[例題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]);
}
(注意)変更のない変数は
書かなくてよい
Page 20
[解答]
変数の値
i
0
1
2
3
4
0
1
2
3
data[i]
7
8
9
10
11
8
9
10
11
画面出力
8
9
10
11
[課題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]);
}
(注意)変更のない変数は
書かなくてよい
Page 21
[解答]
変数の値
i
0
1
2
3
4
0
1
2
data[i]
画面出力