情報ネットワーク導入ユニットⅠ C言語 do・while・for
情報ネットワーク導入ユニットⅠC言語
do・while・for
• 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章:プログラムの流れの分岐復習
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が等しくないなら次のプログラムを実行.
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文によるプログラム
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;→ブロックを抜ける
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で確認!
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つ
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; )
プログラムの流れ:繰り返しの必要性
#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を書くことになる
繰返し(ループ)の書き方
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つ
繰返し(ループ)の書き方
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文
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,
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
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条件
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条件
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***************
【参考】文字定数
1, 10, -100 ・・・ 整数定数
1.2, 0.25 ・・・ 実数定数
'a','A','¥n' ・・・ 1文字定数 → ' 'で囲む1文字
"こんにちは" ・・・ 文字列定数→ " "で囲む(複数)文字
putchar('a'); ・・・ 文字定数を画面に出力puts("こんにちは"); ・・・ 文字列定数を画面に出力printf("こんにちは¥n"); ・・・ 文字列定数を画面に出力+%d, %f利用可
putchar('¥n'); printf("¥n"); ・・・ 結果は同じ
【例】
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ずつ変わる
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ずつ変わる
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ずつ減る
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ずつ減る
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ずつ変わる
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; )
多重ループの前に
教科書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
③更新処理
教科書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
多重ループ (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) 長方形を描画
多重ループ (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
多重ループ (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)
多重ループ (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