• 検索結果がありません。

xxx 302010  

N/A
N/A
Protected

Academic year: 2021

シェア "xxx 302010  "

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)

7

プログラミング 第07回

プログラミング

05/31

5限にはじまります。

本日の教材は、大久保のページにあります。

Googleで、「静岡県立大 大久保のページ」で検索。

[大久保のページTOP]をクリック。

[授業関係]→[プログラミング]とリンクを辿る。

~s-okubo/prog21/ にある、

0006.txt

を、自分のホームの

~/prog21/report/ 以下にコピー

しておいてください。

先週の復習と回答例

前回のお話一覧

浮動小数点数とfloat, double。

配列:

int

配列名[個数] で宣言。

配列名[番号] で参照したりする。

個数個まで使える。

配列名[0]から配列名[番号- 1]

例:

int x[10];

x[0]からx[9] まで使える。

演習

1

s0006a.c

#include<stdio.h>

int main(void){

int x[4];

x[2]=2;

x[3]=x[2];

x[0]=x[3]+x[2];

x[1]=x[0]*x[2];

printf("%d %d %d %d¥n",x[0], x[1] , x[2] , x[3]);

}

#include<stdio.h>

int main(void){

int x[4];

x[2]=2;

x[3]=x[2];

x[0]=x[3]+x[2];

x[1]=x[0]*x[2];

printf("%d %d %d %d¥n",x[0], x[1] , x[2] , x[3]);

}

2 2 2 2

? x[2]

2 8

4

?

?

?

? x[1]

x[0] x[3]

? ?

? ?

? 2

4 2

それぞれの行が実行されたとき、

変数の値がどうなるか、記入する。

0006.txtに答える

演習

2

以下のプログラムを0006a.cとして作成しなさい。

1. int型の配列x を、サイズ100で宣言する。

2.

キーボードからint型の値を3つ読み込み、x[10]と

x[20]とx[30]に保存する。

3.

以下の計算式を実数として行った結果を、表示す る。式中のx[10]やx[20]は、配列の値の意味。

   

 

3020

10 32 x

xx 1,2,3と入力したら、

1.6666になるはず。

(2)

演習

2

0006a.c

#include<stdio.h>

#include<math.h>

int main(void){

int x[100];

scanf("%d%d%d",&x[10],&x[20],&x[30]);

printf("%f¥n",

pow(x[10],2.0/3.0) +(double)x[20]/x[30]);

}

#include<stdio.h>

#include<math.h>

int main(void){

int x[100];

scanf("%d%d%d",&x[10],&x[20],&x[30]);

printf("%f¥n",

pow(x[10],2.0/3.0) +(double)x[20]/x[30]);

}

2/3だけだと、int型に

なり、0になってしまう。

x[20]/x[30]だけだと、

int型になってしまう。

演習

2

の補足

2/3だと、int型/int型になるので、結果が0になる。

(double)2/3 とか2.0/3 とか2/3.0 とかにする。

x[20]/x[30] だと、int型/int型になるので、結果もint

型になる。

(double)x[20]/x[30]

(1.0*x[20])/(1.0*x[30])

演習

3

以下のプログラムを0006b.cとして作成しなさい。

1. int型、float型、double型が、それぞれ何バイト使

用するかを表示する。

また、それぞれのバイト数を、0006.txtに答えなさい。

演習

3

0006b.c

#include<stdio.h>

int main(void){

printf("int¥t: %u¥n",sizeof(int));

printf("float¥t: %u¥n",sizeof(float));

printf("double¥t: %u¥n",sizeof(double));

}

#include<stdio.h>

int main(void){

printf("int¥t: %u¥n",sizeof(int));

printf("float¥t: %u¥n",sizeof(float));

printf("double¥t: %u¥n",sizeof(double));

}

int : 4

float : 4 double : 8

実行結果

¥tは、見栄えの

ために入れたタ ブ文字です。

float

double

の補足

IEEE 754で決められているのは、以下の通り

32bit単精度浮動小数点の場合

符号部:1bit

指数部:8bit

仮数部:23bit

64bit倍精度浮動小数点の場合

符号部:1bit

指数部:11bit

仮数部:52bit

0006.txt

%3%

から

%5%

%3% 変数xのアドレスを表示するprintfを書け。

printf("%p¥n",&x);

%4% 配列xの先頭のアドレスを表示するprintfを書け。

printf("%p¥n", x);

printf("%p¥n", &x[0]);

%5% 配列xの4番目の要素x[4]のアドレスを表示する

printfを書け・

printf("%p¥n",&x[4]);

変数名に

&

配列名自体がアドレス

配列名自体がアドレス

(3)

0006.txt

%6%

から

%7%

%6% ワークディレクトリを、1つ上の階層に変更するシ

ェルのコマンドを書け。

cd ..

%7% ワークディレクトリを、自分のホームに変更する

シェルのコマンドを書け。

cd

もしくは

cd ~

構造化プログラミングと 構成要素

構造化プログラミング

全体の処理を、複数のサブルーチンの組み合わ せとして記述するプログラミング手法。

構造化プログラミングでは、処理は上から順番に 実行されていく。

プログラムの流れは、基本的に次の3つしかない。

1.

順次:順番に実行していく

2.

分岐:条件に従って、行う処理内容を変える。

3.

反復:ある条件が満たされている間、繰り返す。

構造化プログラミングのメリット

全体の処理を、複数のサブルーチンの組み合わせと して記述できるので、書く際にわかりやすい。

順次・分岐・反復しかないため、人間がプログラムの 処理の流れを追うときに、わかりやすい。

int main(void){

int i;

for(i=0;i<10;i++) printf("%d¥n",i);

if(i==10)

printf("%d¥n",i);

} 略

int main(void){

int i;

for(i=0;i<10;i++) printf("%d¥n",i);

if(i==10)

printf("%d¥n",i);

}

10 for i=0 to 10 20 print i 30 next i 40 end 50 goto 10

60 if i=10 then 70 else 40 70 print i

10 for i=0 to 10 20 print i 30 next i 40 end 50 goto 10

60 if i=10 then 70 else 40 70 print i

構造化プログラミングの場合の例 構造化プログラミング以外の場合の例

基本的に、

上から下に 流れる

上から下に 流れるとは 限らない

C

言語における分岐、反復

C言語におけて、分岐・反復を行うには、次のような制

御命令を使用する。

反復:

for

while

分岐:

if

switch

順次・分岐・反復の枠に入らない

goto

もあるが、普通 は使用しない。

for(式1;式2;式3){

}

for

以下のように実行される

1.

式1を行う。

2.

式2を評価した結果が 真であるなら3に進む。

偽ならfor文を終了する。

3.

文を実行する。

4.

式3を行い、2に戻る。

break があると、そこからfor

の外までジャンプする。

式2 式1

文 式3 Yes

No

(4)

演習

1

for

#include<stdio.h>

int main(void){

int i,x;

x=0;

for(i=0;i<4;i++){

x=x+i;

}

printf("%d %d ¥n",i,x);

}

#include<stdio.h>

int main(void){

int i,x;

x=0;

for(i=0;i<4;i++){

x=x+i;

}

printf("%d %d ¥n",i,x);

} 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

どのように処理が流れていくかを 表に書きましょう。

それぞれの行が実行されたとき、

変数の値がどうなるか、表に書き ましょう。

i x i x i x i x i x

0007.txtに答える s0007a.c

演習

1

for

#include<stdio.h>

int main(void){

int i,x;

x=0;

for(i=0;i<4;i++){

x=x+i;

}

printf("%d %d ¥n",i,x);

}

#include<stdio.h>

int main(void){

int i,x;

x=0;

for(i=0;i<4;i++){

x=x+i;

}

printf("%d %d ¥n",i,x);

} 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

どのように処理が流れていくかを 表に書きましょう。

それぞれの行が実行されたとき、

変数の値がどうなるか、表に書き ましょう。

i x

? 0 0 0 0 0 0 0 1 0

i x

1 0 1 1 2 1

i x

2 1 2 3 3 3

i x

3 3 3 6 4 6

i x

4 6

while( 式 ){

}

while

以下の様に実行される。

1.

式を評価する。結果が、

真なら2に進む。

偽ならwhileを終了する。

2.

文を実行する。

3. 1に戻る。

文中にbreak があると、

while を終了する。

式1 文 Yes

No

演習

2

while

#include<stdio.h>

int main(void){

int i,x;

i=1;

x=1;

while(i<5){

x*=i;

i++;

}

printf("%d %d ¥n",i,x);

}

#include<stdio.h>

int main(void){

int i,x;

i=1;

x=1;

while(i<5){

x*=i;

i++;

}

printf("%d %d ¥n",i,x);

} 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

i x i x i x i x i x i x

どのように処理が流れていく かを表に書きましょう。

それぞれの行が実行された とき、変数の値がどうなるか、

表に書きましょう。

0007.txtに答える s0007b.c

演習

2

while

#include<stdio.h>

int main(void){

int i,x;

i=1;

x=1;

while(i<5){

x*=i;

i++;

}

printf("%d %d ¥n",i,x);

}

#include<stdio.h>

int main(void){

int i,x;

i=1;

x=1;

while(i<5){

x*=i;

i++;

}

printf("%d %d ¥n",i,x);

} 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

どのように処理が流れていく かを表に書きましょう。

それぞれの行が実行された とき、変数の値がどうなるか、

表に書きましょう。

i x 1 ? 1 1 1 1 1 1 2 1

i x

2 1 2 2 3 2

i x

3 2 3 6 4 6

i x

4 6 4 24 5 24

i x

5 24 i x

if(式1){

文1 }else{

文2 }

if

else

次のように実行される。

1.

式1を評価する。結果が、

真である場合、2に進む。

偽である場合、3に進む。

2.

文1を実行し、4に進む。

3.

文2を実行し、4に進む。

4. if文を終了する。

else 以降は省略しても良い。

式1 文1 Yes

No

文2

(5)

演習

3

if

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is odd ¥n",i);

}else{

printf("%d is even ¥n",i);

} } }

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is odd ¥n",i);

}else{

printf("%d is even ¥n",i);

} } } 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

どのように処理が流れていくか を表に書きましょう。

それぞれの行が実行されたとき、

変数の値がどうなるか、表に書 きましょう。

i i i i i

0007.txtに答える s0007c.c

演習

3

if

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is odd ¥n",i);

}else{

printf("%d is even ¥n",i);

} } }

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is odd ¥n",i);

}else{

printf("%d is even ¥n",i);

} } } 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

どのように処理が流れていくかを 表に書きましょう。

それぞれの行が実行されたとき、

変数の値がどうなるか、

表に書きましょう。

i 0 0

0 1

i

1 1 2

i 2

2 3

i

3 3 4

i 4

その他のこと

forやwhileの

ループ中、

break があると、

繰り返しが中止 される。

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is odd ¥n",i);

}else{

break;

} } }

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is odd ¥n",i);

}else{

break;

} } } 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

実行されると ループ終了

ブロック

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is even ¥n",i);

printf("-> %d is even ¥n",i);

}else

printf("%d is odd ¥n",i);

} }

#include<stdio.h>

int main(void){

int i,t;

for(i=0;i<4;i++){

if(i%2){

printf("%d is even ¥n",i);

printf("-> %d is even ¥n",i);

}else

printf("%d is odd ¥n",i);

} } 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

12:

13:

命令が1文の場合、

{}は無くても良い

命令が2文以上の場合、

{}が必須 s0007d.c

演習

4

for

#include<stdio.h>

int main(void){

int x,y,z;

x=0;

y=2;

for(z=1;z<3;z++){

x=z;

y=x*y;

} }

#include<stdio.h>

int main(void){

int x,y,z;

x=0;

y=2;

for(z=1;z<3;z++){

x=z;

y=x*y;

} } 01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

01:

02:

03:

04:

05:

06:

07:

08:

09:

10:

11:

y

x z x y z x y z

0007.txtに答える

s0007a.c

演習

5

以下のプログラムを0007a.cとして作成しなさい。

1.

キーボードから10回値を読み込む。読み込んだ毎

に、それぞれの値が偶数ならeven、奇数ならoddと

出力する。

(6)

演習

5

:ヒント

1

まず、実際に実行される順を考える。

1.

キーボードから1文字読み込む。

2.

値が偶数が奇数かを判断する。

3.

偶数ならeven、奇数ならoddと出力する。

4.

キーボードから1文字読み込む。

5.

値が偶数が奇数かを判断する。

6.

偶数ならeven、奇数ならoddと出力する。

7.

キーボードから1文字読み込む。

8.

値が偶数が奇数かを判断する。

9.

偶数ならeven、奇数ならoddと出力する。

繰り返しに なっている

演習

5

:ヒント

2

とうことは、以下のような構造で書ける。

1.

以下を10回繰り返す

1.

キーボードから1文字読み込む。

2.

値が偶数が奇数かを判断する。

偶数ならevenと出力する。

奇数ならoddと出力する。

forかwhile scanf

if~else

今日の回収

演習1から5を行いなさい。

0007.txtの質問に答えなさい。

回収するファイルは、以下の通りです。

0007.txt、0007a.c

今後の予定

構造化プログラミング2(配列とfor文)

既存の関数の利用2:疑似乱数

関数の自作

再帰

参照

関連したドキュメント

参考文献 1) K.Matsuoka: Sustained Oscillations Generated by Mutually.. 神経振動子の周波数が 0.970Hz

文字を読むことに慣れていない小学校低学年 の学習者にとって,文字情報のみから物語世界

グローバル化をキーワードに,これまでの叙述のス

90年代に入ってから,クラブをめぐって新たな動きがみられるようになっている。それは,従来の

わからない その他 がん検診を受けても見落としがあると思っているから がん検診そのものを知らないから

REC DATA MASTER L to SD CARD REC DATA MASTER R to SD CARD VOLUME SOUND

「兵庫県災害救援ボランティア活動支 援関係団体連絡会議」が、南海トラフ