Top Banner
情報ネットワーク導入ユニットC言語 dowhilefor
29

説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

Apr 04, 2018

Download

Documents

vothuan
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

情報ネットワーク導入ユニットⅠC言語

do・while・for

Page 2: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

• if文 if(条件) ・・・ 条件が成立すれば実行

• if(条件) ~ else ・・・ 場合分け(成立,不成立)

• if(条件A) ~ else if(条件B) ~ else if(条件C) ~ else・・・ 場合分け(複数の条件での場合分け)

• 等価演算子 : == (等しい) , != (等しくない)

• 関係演算子 : > < >= <=

• 論理演算子 : && (AND,かつ) || (OR,または)

• 条件演算子 : a==b ? a=10 : a=20;(aとbが等しいなら,aに10を,そうでないならaに20を代入)

• 複合文 (ブロック) : { } ← ひとつのかたまりとして扱われる

• switch – case文 : 場合分けに便利な方法

3章:プログラムの流れの分岐復習

Page 3: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

if(条件) ==, !=

#include<stdio.h>

int main(void){int x1, x2;

printf("2つの整数を入力:¥n");printf("整数1:"); scanf("%d", &x1 );printf("整数2:"); scanf("%d", &x2 );

if( x1 != x2 ){ //x1とx2は等しくないprintf("それらの値は違います¥n");

}else{printf("それらの値は同じです¥n");

}

return(0);}

教科書:p.49の List 3-7

キーボードから読込んだ2つの整数値が等しいかどうか?

2つの整数を入力:整数1:-5整数2:-5それらの値は同じです.

2つの整数を入力:整数1:40整数2:45それらの値は違います.

実行結果1

実行結果2

if( a==b ) ・・・ aとbが等しいなら次のプログラムを実行,if( a!=b ) ・・・ aとbが等しくないなら次のプログラムを実行.

Page 4: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

switch文 (switch~case文)

#include<stdio.h>

int main(void){int num;

printf("整数を入力:");scanf("%d", &num );

if( num %3 == 0 ){ //余り0 → 割り切れるprintf("3で割り切れる¥n");

}else if( num % 3 == 1 ){ //余り1printf("1余る¥n");

}else{ //余り2printf("2余る¥n");

}

return(0);}

教科書:p.64

読込んだ整数値を3で割ったあまりで分類

整数を入力:63で割切れる

実行結果

整数を入力:401余る

if文によるプログラム

Page 5: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

switch文 (switch~case文)

#include<stdio.h>

int main(void){

int num;

printf("整数を入力:");scanf("%d", &num );

switch( num % 3 ) { //numを3で割った余りが・・・case 0 : printf("3で割り切れる¥n");

break;case 1 : printf("1余る¥n");

break;default : printf("2余る¥n");

}

return(0);}

教科書:p.64

読込んだ整数値を3で割ったあまりで分類

整数を入力:63で割切れる

実行結果

整数を入力:401余る

switch文によるプログラム

break;→ブロックを抜ける

Page 6: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

switch文 (switch~case文)

#include<stdio.h>

int main(void){

int sw;

printf("整数を入力:");scanf("%d", &sw );

switch( sw ) {case 1 : printf("A¥n"); printf("B¥n"); break;case 2 : printf("C¥n");case 5 : printf("D¥n"); break;case 6 :case 7 : printf("E¥n"); break;default : printf("F¥n");

}

return(0);}

教科書:p.66 List3-20

switch文の動作を確認する

整数を入力:1AB

実行結果

整数を入力:2CD

整数を入力:3F

整数を入力:5D

整数を入力:6E 演習問題4-9で確認!

Page 7: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

switch文 (switch~case文)

#include<stdio.h>

int main(void){

int sw;

printf("整数を入力:");scanf("%d", &sw );

switch( sw ) {case >1 : printf("A"); printf("B"); break;case 2~3 : printf("C");case 2,3,4 : printf("D"); break;case 6 && 7 :

}

return(0);}

こんな風には書けない!

switch( )

整数型変数結果が整数の式

case :

整数1つ

Page 8: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

4章:プログラムの流れの繰返し

do文do {

sum += no;

no++;

} while( sum < 100 );

while文while( sum<100 ) {

sum += no;

no++;

}

for文for(i=0;i<100;i++) {

no += i;

sum += no;

}

■ 繰返し(ループ) の方法: 3つ

■ 初期化 : 変数宣言の際に初期値を設定 int no=1;

■ 複合代入演算子:計算と代入を混ぜたもの

no = no + a; → no += a; (no -= a, no*=a, no/=a, no%=a)

■ 増分・減分演算子 : ある変数の値を1つだけ増やす(減らす)no = no + 1; → no += 1; → no++;( no--; ++no; --no; )

Page 9: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

プログラムの流れ:繰り返しの必要性

#include<stdio.h>

int main(void){

printf("こんにちは¥n");printf("こんにちは¥n");printf("こんにちは¥n");

return(0);}

//mainから始まり上→下に順番に//実行される.

実行の方向

「こんにちは」を3回画面に表示

#include<stdio.h>

int main(void){

int i;

for(i=0;i<3;i++) { //i0~2で繰返しprintf("こんにちは¥n");

}

return(0);}

//同じプログラムを繰返し実行する

「こんにちは」を100回画面に表示・・・→ 左の書き方では100個のprintfを書くことになる

Page 10: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

繰返し(ループ)の書き方

do文 (List4-1,p.72)

do {

sum += no;

no++;

} while( sum < 100 );

while文 (List4-5,p.80)while( sum<100 ) {

sum += no;

no ++;

}

for文 (List4-11,p.90)

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

no += i;

sum += no;

}

do {

繰返すプログラム

} while( 条件 );

while( 条件 ) {

繰返すプログラム

}

for(初期設定;条件;更新式){

繰返すプログラム

}

条件が満たされる間は

繰返す*条件に関係なく

まず1回実行

条件が満たされる間は

繰返す*1回も実行されない場合もある

ある回数繰返す

■ 繰返し(ループ) の方法: 3つ

Page 11: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

繰返し(ループ)の書き方

do文 (List4-1,p.72)

do {

sum += no;

no++;

} while( sum < 100 );

while文 (List4-5,p.80)while( sum<100 ) {

sum += no;

no ++;

}

for文 (List4-11,p.90)

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

no += i;

sum += no;

}

do {

繰返すプログラム

} while( 条件 );

while( 条件 ) {

繰返すプログラム

}

for(初期設定;条件;更新式){

繰返すプログラム

}

条件が満たされる間は

繰返す*条件に関係なく

まず1回実行

条件が満たされる間は

繰返す*1回も実行されない場合もある

ある回数繰返す

■ 繰返し(ループ) の方法: 3つ

while文 for文

Page 12: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

do文(doループ) ・・・の前に初期化,複合演算子,増分・減分演算子

#include<stdio.h>

int main(void){int no = 1; //noを1で初期化int sum = 0; //sumを0で初期化

do {sum += no; //sumにnoを加えるno++; //noを1つ増やす

} while( no <= 5 );

printf("足した値は%d¥n", sum );

return(0);}

例) 1から5までの和を求めて表示

■初期化変数宣言で値を設定(代入)

■複合演算子演算と代入が合体

・sumにnoを加えるsum = sum + no;

→ sum += no;

+=, -=, *=, /=, %=

■増分演算子変数の値を1つ増やす(減らす)・noを1つ増やす

no = no + 1;→ no += 1;→ no++; no++,no--,++no,--no,

Page 13: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

do文(doループ) 条件が満たされる間は繰返すただし,最初に1回は実行

#include<stdio.h>

int main(void){int no = 1;int sum = 0;

do {sum += no;no++;

} while( no <= 5 );

printf("足した値は%d¥n", sum );

return(0);}

例) 1から5までの和を求めて表示

■プログラムの流れ①まず「中身」を実行②条件をチェック③条件OK「中身」を実行→②へ④条件NG → ループを終了

中身

条件 中身

条件

中身

OK

NG

Page 14: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

do文(doループ)

#include<stdio.h>

int main(void){int cont; //処理を続けるか?int no;

do {printf("整数を入力:");scanf("%d", &no);

if( no % 2 ){printf("奇数");

}else{printf("偶数");

}

printf("もう一度?Yes:0, No:9");scanf("%d", &cont );

} while( cont == 0 );return(0);

}

List4-1(p.72):キーボード入力,条件判断の繰返し

■プログラムの流れ①まず「中身」を実行②条件をチェック③条件OK「中身」を実行→②へ④条件NG → ループを終了

中身

中身

OK

NG条件

Page 15: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

while文(whileループ) 条件が満たされる間は繰返す.ただし,最初に1回は実行

#include<stdio.h>

int main(void){int no;

printf("整数を入力:");scanf("%d", &no );

while( no >= 0 ) {printf("%d ", no );no--;

}

printf("¥n");return(0);

}

List4-5(p.81) 読込んだ整数値を0までカウントダウン

■プログラムの流れ①まず条件をチェック③条件OK「中身」を実行→①へ④条件NG → ループを終了

中身

条件

中身

OK

NG条件

Page 16: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

while文(whileループ) 条件が満たされる間は繰返す.

#include<stdio.h>

int main(void){int no;

printf("正の整数を入力:");scanf("%d", &no );

while( no-- > 0 ) {printf("*");

}

printf("¥n");return(0);

}

類題List4-8(p.84) 読込んだ整数値の個数*を表示

#include<stdio.h>

int main(void){int no;

printf("正の整数を入力:");scanf("%d", &no );

while( no > 0 ) {no--;printf("*");

}

printf("¥n");return(0);

}

正の整数:15***************

Page 17: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

【参考】文字定数

1, 10, -100 ・・・ 整数定数

1.2, 0.25 ・・・ 実数定数

'a','A','¥n' ・・・ 1文字定数 → ' 'で囲む1文字

"こんにちは" ・・・ 文字列定数→ " "で囲む(複数)文字

putchar('a'); ・・・ 文字定数を画面に出力puts("こんにちは"); ・・・ 文字列定数を画面に出力printf("こんにちは¥n"); ・・・ 文字列定数を画面に出力+%d, %f利用可

putchar('¥n'); printf("¥n"); ・・・ 結果は同じ

【例】

Page 18: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

for文(forループ) ある回数繰り返す初期値設定 ; 条件チェック ; 更新処理

#include<stdio.h>

int main(void){int i, no;

printf("正の整数:");scanf("%d", &no );

for( i = 1 ; i <= no ; i++ ) {printf("*");

}printf("¥n");

return(0);}

類題List4-12(p.92) 読込んだ整数の個数だけ*を表示

■プログラムの流れ

中身

①初期値設定

②条件

中身

OK

NG

正の整数:11*********** ③更新処理

for( i = 1 ; i <= no ; i++ )

①初期値設定 ②条件チェック

③更新処理

上の例ではiの値が1~noまで1ずつ変わる

Page 19: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

for文(forループ) ある回数繰り返す初期値設定 ; 条件チェック ; 更新処理

#include<stdio.h>

int main(void){int i, no;

printf("正の整数:");scanf("%d", &no );

for( i = 0 ; i < no ; i++ ) {printf("*");

}printf("¥n");

return(0);}

類題List4-12(p.92) 読込んだ整数の個数だけ*を表示

■プログラムの流れ

中身

①初期値設定

②条件

中身

OK

NG

正の整数:11*********** ③更新処理

for( i = 1 ; i <= no ; i++ )

①初期値設定 ②条件チェック

③更新処理

上の例ではiの値が0~(no-1)まで1ずつ変わる

Page 20: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

for文(forループ) ある回数繰り返す初期値設定 ; 条件チェック ; 更新処理

#include<stdio.h>

int main(void){int i, no;

printf("正の整数:");scanf("%d", &no );

for( i = no ; i > 0 ; i-- ) {printf("*");

}printf("¥n");

return(0);}

類題List4-12(p.92) 読込んだ整数の個数だけ*を表示

■プログラムの流れ

中身

①初期値設定

②条件

中身

OK

NG

正の整数:11*********** ③更新処理

for( i = no ; i >0 ; i-- )

①初期値設定 ②条件チェック

③更新処理

上の例ではcntの値がno~1まで1ずつ減る

Page 21: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

for文(forループ) ある回数繰り返す初期値設定 ; 条件チェック ; 更新処理

#include<stdio.h>

int main(void){int cnt, no;

printf("正の整数:");scanf("%d", &no );

for( cnt = no ; cnt > 0 ; cnt-- ) {printf("*");

}printf("¥n");

return(0);}

類題List4-12(p.92) 読込んだ整数の個数だけ*を表示

■プログラムの流れ

中身

①初期値設定

②条件

中身

OK

NG

正の整数:11*********** ③更新処理

for( cnt = 1 ; cnt <= no ; cnt++ )

①初期値設定 ②条件チェック

③更新処理

上の例ではcntの値がno~1まで1ずつ減る

Page 22: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

for文(forループ) ある回数繰り返す~更新処理で変わる変数を中身に利用~

#include<stdio.h>

int main(void){int i, no;

printf("正の整数:");scanf("%d", &no );

for( i = 0 ; i <= no ; i++ ) {printf("%d ", i);

}printf("¥n");

return(0);}

類題List4-12(p.92) 読込んだ整数値までカウントアップ

■プログラムの流れ

中身for文で変わる変数の値を利用

①初期値設定

②条件

中身

OK

NG

正の整数:50 1 2 3 4 5 ③更新処理

for( i = 1 ; i <= no ; i++ )

①初期値設定 ②条件チェック

③更新処理

上の例ではiの値が0~noまで1ずつ変わる

Page 23: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

4章:プログラムの流れの繰返し

do文do {

sum += no;

no++;

} while( sum < 100 );

while文while( sum<100 ) {

sum += no;

no ++;

}

for文for(i=0;i<100;i++) {

no += i;

sum += no;

}

■ 繰返し(ループ) の方法: 3つ

■ 初期化 : 変数宣言の際に初期値を設定 int no=1;

■ 複合代入演算子:計算と代入を混ぜたもの

no = no + a; → no += a; (no -= a, no*=a, no/=a, no%=a)

■ 増分・減分演算子 : ある変数の値を1つだけ増やす(減らす)no = no + 1; → no += 1; → no++;( no--; ++no; --no; )

多重ループの前に

Page 24: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

教科書4-4(p.96) 多重ループ~ 繰返しを繰返す~

#include<stdio.h>

int main(void){int i, j;

for( i=1 ; i<=9 ; i++ ) {for( j=1 ; j<=9 ; j++ ) {

printf("%3d", i*j );}printf("¥n");

}

return(0);}

List4-16(p.96) 九九の表を表示するプログラム

■プログラムの流れ

1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 6 9 12 15 18 ・・・4 8 12 :

①初期値設定

②条件

中身OK

NG

③更新処理

中身 中身

①初期値設定

②条件

OK

NG

③更新処理

Page 25: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

教科書4-4(p.96) 多重ループ~ 繰返しを繰返す~

#include<stdio.h>

int main(void){int i, j;

for( i=1 ; i<=9 ; i++ ) {for( j=1 ; j<=9 ; j++ ) {

printf("%3d", i*j );}printf("¥n");

}

return(0);}

List4-16(p.96) 九九の表を表示するプログラム

■iとjの変化

1 2 3 4 5 6 7 8 92 4 6 8 10 12 14 16 183 6 9 12 15 18 ・・・4 8 12 :

中身 中身

i j i*j

1 1 1

1 2 2

1 3 3

1 4 4

1 5 5

1 6 6

1 7 7

1 8 8

1 9 9

2 1 2

2 2 4

2 : :

2 9 18

3 1 3

Page 26: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

多重ループ (2)

#include<stdio.h>

int main(void){int i, j;int width, height;

puts("長方形を作ろう:");printf("横幅:"); scanf("%d",&width);printf("高さ:"); scanf("%d",&height);

for( i=1 ; i<=height ; i++ ) {for( j=1 ; j<=width ; j++ ) {

printf("*");}printf("¥n");

}

return(0);}

■ プログラムの流れ

長方形を作ろう横幅:5高さ:3***************

List4-17(p.98) 長方形を描画

Page 27: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

多重ループ (3)

#include<stdio.h>

int main(void){int i, j, ln;

puts("何段ですか:");scanf("%d",&ln);

for( i=1 ; i<=ln ; i++ ) {for( j=1 ; j<=i ; j++ ) {

printf("*");}printf("¥n");

}

return(0);}

■ プログラムの流れ

何段ですか:5***************

List4-18(p.99) 直角二等辺三角形(左下が直角)を描画

i j

1 1

2 1

2 2

3 1

3 2

3 3

4 1

4 2

Page 28: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

多重ループ (4)

#include<stdio.h>

int main(void){int i, j, ln;

puts("何段ですか:");scanf("%d",&ln);

for( i=1 ; i<=ln ; i++ ) {for( j=1 ; j<= ln-i ; j++ ) {

printf(" "); //空白}for( j=1 ; j<=i ; j++ ) {

printf("*");}printf("¥n");

}

return(0);}

■ プログラムの流れ

何段ですか:5***************

List4-19(p.99) 直角二等辺三角形(右下が直角)を描画

何段ですか:5____* 空白4 *1___** 空白3 *2__*** 空白2 *3_**** 空白1 *4***** 空白0 *5

(空白の数)+(*の数)=(段数:ln)

Page 29: 説明4 do・while・for(C guide4)【2015新教材対応確認 …jun/languages/kait/distfiles/C_guide4.pdf · switch( sw ) {case 1 : printf("A¥n"); printf ... printf("D"); break;

多重ループ (4)

#include<stdio.h>

int main(void){int i, j1, j2, ln;

puts("何段ですか:");scanf("%d",&ln);

for( i=1 ; i<=ln ; i++ ) {for( j1=1 ; j1<= ln-i ; j1++ ) {

printf(" "); //空白}for( j2=1 ; j2<=i ; j2++ ) {

printf("*");}printf("¥n");

}

return(0);}

■iとjの変化 (ln:5の場合)

何段ですか:5***************

List4-19(p.99) 直角二等辺三角形(右下が直角)を描画

i ln-i j1 J2

1 4 1

1 4 2

1 4 3

1 4 4

1 1

2 3 1

2 3 2

2 3 3

2 1

2 2

3 2 1

2 2

1