£Ã¥×¥í¥°¥é¥ß¥ó¥°ÆþÌç (2018) - Â裶²ó ¨¡ À©¸æ¹½Â¤¡§·«¤êÊÖ¤· ¨¡

52 

Loading....

Loading....

Loading....

Loading....

Loading....

全文

(1)

. .

Cプログラミング入門

(2018)

第6回 ─ 制御構造:繰り返し ─ 松田七美男 2018年5月24日

(2)

繰り返し

.

.

パラメータを変化させながら同じ様な処理

を繰り返し実行する機構

必要な構成要素

I

制御変数

:初期化,

(

継続

)

判定,調整

I

構文:

while (

判定

)

do

while (

判定

);

for (

初期化

;

判定

;

調整

)

(3)

繰り返し

.

.

パラメータを変化させながら同じ様な処理

を繰り返し実行する機構

必要な構成要素

I

制御変数

:初期化,

(

継続

)

判定,調整

I

構文:

while (

判定

)

do

while (

判定

);

for (

初期化

;

判定

;

調整

)

(4)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(5)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(6)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(7)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(8)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(9)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(10)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(11)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(12)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(13)

while

. .

int i = 0;

while (

i < 100

) {

printf("i = %3d\n", i);

i++;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出.

(14)

例題:

ex15.c

 

int main(int argc, char **argv) {

int i = 10, imax; printf("imax = "); scanf("%d", &imax); while (i <= imax) {

printf("i = %3d\t i**2 = %5d\n", i, i * i); i++; } return 0; }   . コンパイル命令 . . .

(15)

例題:

ex15.c

 

int main(int argc, char **argv) {

int i = 10, imax; printf("imax = "); scanf("%d", &imax); while (i <= imax) {

printf("i = %3d\t i**2 = %5d\n", i, i * i); i++; } return 0; }   . コンパイル命令 . . .

(16)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(17)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(18)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(19)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(20)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(21)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(22)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(23)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(24)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(25)

do while

. .

int i = 0;

do {

printf("i = %3d\n", i);

i++;

} while (

i < 100

) ;

. . 制御変数

i

の初期化 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 継続条件の判定:

2<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=3

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 内容本体の処理 3 制御変数 i の調整(1増加) 4 継続条件の判定 以下継続条件が真である限り2 – 4を繰り返す 4’ 継続条件が偽となって,ループから脱出

(26)

例題:

ex16.c

 

int main(int argc, char **argv) {

int i = 10, imax; printf("imax = "); scanf("%d", &imax); do {

printf("i = %3d\t i**2 = %5d\n", i, i * i); i++; } while (i <= imax); return 0; }   . コンパイル命令 . . .

(27)

例題:

ex16.c

 

int main(int argc, char **argv) {

int i = 10, imax; printf("imax = "); scanf("%d", &imax); do {

printf("i = %3d\t i**2 = %5d\n", i, i * i); i++; } while (i <= imax); return 0; }   . コンパイル命令 . . .

(28)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(29)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(30)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(31)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(32)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(33)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(34)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(35)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(36)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(37)

for

. .

for (

i = 0

;

i < 100

;

i++

) {

printf("i = %3d\n", i) ;

}

. . 制御変数

i

の初期化 . 継続条件の判定:

0<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=1

. 継続条件の判定:

1<100

より真 . 内容本体の処理 . 制御変数

i

の調整:

i=2

. 継続条件の判定:

100>=100

より偽 1 制御変数 i の初期化 2 継続条件の判定 3 内容本体の処理 4 制御変数 i の調整(1増加) 以下継続条件が真である限り2 – 4を繰り返す 2’ 継続条件が偽となって,ループから脱出

(38)

例題:

ex17.c

 

int main(int argc, char **argv) {

int i, imax;

printf("imax = "); scanf("%d", &imax);

for (i = 10; i <= imax; i++) {

printf("i = %3d\t i**2 = %5d\n", i, i * i); } return 0; }   . コンパイル命令 . . .

(39)

例題:

ex17.c

 

int main(int argc, char **argv) {

int i, imax;

printf("imax = "); scanf("%d", &imax);

for (i = 10; i <= imax; i++) {

printf("i = %3d\t i**2 = %5d\n", i, i * i); } return 0; }   . コンパイル命令 . . .

(40)

例題:

ex18.c

二重ループ

 

int main(int argc, char **argv) { int i, j, n; for (i = 0; i < 16; i++) { for (j = 0; j < 8; j++) { n = 8 * i + j; printf("%3d(x%02x) ", n, n); } printf("\n"); } return 0; }  

(41)

無条件分岐

. .

判定なしに,無条件で指定された場所に制御を移す

命令

return 関数の実行を終了して呼び出し元に戻る. break 繰り返し文やswitch文の外側(直後の文)に抜 ける. continue 繰り返し文において,繰り返し本体の残り部分を 飛ばす. goto 同じ関数内の任意の位置(ラベル名で指定)に 跳ぶ.

(42)

無条件分岐

. .

判定なしに,無条件で指定された場所に制御を移す

命令

return 関数の実行を終了して呼び出し元に戻る. break 繰り返し文やswitch文の外側(直後の文)に抜 ける. continue 繰り返し文において,繰り返し本体の残り部分を 飛ばす. goto 同じ関数内の任意の位置(ラベル名で指定)に 跳ぶ.

(43)

例題:

ex19.c

 

int main(int argc, char **argv) { char c; while (1) { printf("Input a character "); scanf(" %c", &c); if (c == ’q’ || c == ’Q’) break; printf("%c\n", c); } printf("Now quit\n"); return 0; }  

(44)

増分演算子,減分演算子

.

変数

x

の値を

±

1

変える演算

. . .

++x

x++

- -x

x- -

の4種類

I ++1増やす.- -1減らす. I 前置(++x- -x)式は変化後の値を持つ. I 後置(x++x- -)式は変化前の値を持つ. I 便利な記法だが思わぬ副作用を生ずる場合があるので, 式の値を用いる場合は慎重に考える必要がある.

(45)

増分演算子,減分演算子

.

変数

x

の値を

±

1

変える演算

. . .

++x

x++

- -x

x- -

の4種類

I ++1増やす.- -1減らす. I 前置(++x- -x)式は変化後の値を持つ. I 後置(x++x- -)式は変化前の値を持つ. I 便利な記法だが思わぬ副作用を生ずる場合があるので, 式の値を用いる場合は慎重に考える必要がある.

(46)

浮動小数点数による判定

数値の内部表現

I

整数:正確な値を表現

I

浮動小数点数:特別な場合を除いては近似値

à

. 浮動小数点数を用いて一致の判定を行なってはならない . . . 等値とその否定の==!=ではなく, 比較 >=<=>< を用いた判定を行う

(47)

浮動小数点数による判定

数値の内部表現

I

整数:正確な値を表現

I

浮動小数点数:特別な場合を除いては近似値

à

. 浮動小数点数を用いて一致の判定を行なってはならない . . . 等値とその否定の==!=ではなく, 比較 >=<=>< を用いた判定を行う

(48)

浮動小数点数による判定

数値の内部表現

I

整数:正確な値を表現

I

浮動小数点数:特別な場合を除いては近似値

à

. 浮動小数点数を用いて一致の判定を行なってはならない . . . 等値とその否定の==!=ではなく, 比較 >=<=>< を用いた判定を行う

(49)

浮動小数点数による判定

数値の内部表現

I

整数:正確な値を表現

I

浮動小数点数:特別な場合を除いては近似値

à

. 浮動小数点数を用いて一致の判定を行なってはならない . . . 等値とその否定の==!=ではなく, 比較 >=<=>< を用いた判定を行う

(50)

宿題1:概要

. 2次方程式の解法 . . . 定数p, q を入力し,正規化された2次方程式 x2+ px + q = 0 の実数解を出力するプログラムを作成しなさい. . . 1 公式による(方法1)解と,根と係数の関係を用いた(方法2) 解の2通り求めなさい.小数点以下15桁まで表示させなさい. . . 2 入力する定数pは,学籍番号としなさい. 例) 1Y17B023⇒ p = 23 . . 3 入力する定数qは任意に定めてよいが,q = 1.0× 10−12の場 合を必ず確かめること. . . 4 解が実数でない場合には,"Imaginary roots."と表示させな さい.

(51)

宿題1:実行画面例

実行画面例を示します. . 実行画面例 . . . $ ./hw2018-1 p, q = 101, 10 1.010000e+02, 1.000000e+01 Solution1: xp = -0.0991071507656756, xm = -100.900892849234 Solution2: xp = -0.0991071507656722, xm = -100.900892849234 $ ./hw2018-1 p, q = 101, 1e-12 1.010000e+02, 1.000000e-12 Solution1: xp = -7.105427357601e-15, xm = -101 Solution2: xp = -9.9009900990099e-15, xm = -101 $ ./hw2018-1 p, q = 101,2600 1.010000e+02, 2.600000e+03 Imaginary roots.

(52)

宿題1提出に関する注意

I

Waseda-net Web

メールサービスを用いて提出

しなさい.

I 宛先は matuda-namio@aoni.waseda.jp I 件名には,学生番号(英数半角),名前, 「宿題1」をこ の順に記述しなさい. 例)1Y14B999,松田七美男,宿題1 I 〆切は,5月30日 20:00 I 送信控えの保存を忘れずに I

ソースと実行画面をメール本文に含めること

添付は不可

I

ソースには空白を挿入したり,字下げをほどこ

すなど読みやすくなる工夫をしなさい.

Updating...

参照

Updating...

関連した話題 :