情報ネットワーク導入ユニットⅠ
C言語
• 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章:プログラムの流れの分岐
#include <stdio.h>
int main(void) {
int vx;
printf("整数を入力:");
scanf("%d", &vx );
printf("5で割ったあまり%d¥n",
vx%5 );
return(0);
}
■
C言語のプログラムの流れの基本
mainから始まり上→下に順番に実行
される.
■ 上→下 の単純な流れを変えたい
場合がある.例えば,
・条件によって実行したり,
しなかったり
→
if文, switch文
・同じようなプログラムを繰返す
→
do文,while文,for文
実行の方向
C言語のプログラムの流れの基本と条件分岐,繰り返し
if(条件) ~ else ~
#include <stdio.h> int main(void){ int vx; printf("整数を入力:"); scanf("%d", &vx ); if( vx % 2 == 0 ) { printf("偶数です %d¥n",vx ); } else { printf("奇数です %d¥n",vx ); } printf("終了! ¥n"); return(0); }
if文 基本形① (if ~ else ~ )
if( 条件 ) {
}
else {
}
条件が成立した場合に, 実行するプログラムを書く 条件が成立しない場合に, 実行するプログラムを書くif( x == y ) xとyは等しい if( vx%3 == 0 ) if( x!= y ) xとyは等しくない if( dx%2 != 0 )
if( x > y ) xはyより大きい if( x1-x2 > 0 ) if( x >= y ) xはy以上(大きいか等しい) if( x1 >= 0.5 ) if( x < y ) xはyより小さい if( 0 < sum ) if( x <= y ) xはy以下(小さいか等しい) if( sum <= 100 )
いろいろな条件
整数を入力:10 偶数です. 10 終了! 整数を入力:11 奇数です. 11 終了! 実行結果1 実行結果2 整数を読込み, 2で割った余りが0なら 偶数です そうでないなら 奇数です と表示する#include <stdio.h> int main(void){ int vx; printf("整数を入力:"); scanf("%d", &vx ); if( vx % 2 == 0 ) { printf("偶数です %d¥n",vx ); } printf("終了! ¥n"); return(0); }
if文 基本形②(ifだけ)
if( 条件 ) {
}
条件が成立した場合に, 実行するプログラムを書く 整数を入力:10 偶数です. 10 終了! 整数を入力:11 終了! 実行結果1 実行結果2 整数を読込み, 2で割った余りが0なら 偶数です と表示する *そうでない場合は何も しない vx%2は0か? 奇数です 偶数です 終了 Yes No vx%2は0か? 偶数です 終了 Yes Noif ~ else ~
ifだけ
#include <stdio.h> int main(void){ int vx; printf("整数を入力:"); scanf("%d", &vx ); if( vx >= 90 ) { printf("%dは90以上です¥n",vx ); } else if( vx >= 80 ) { printf("%dは80以上です¥n",vx ); } else if( vx >= 70 ) { printf("%dは70以上です¥n",vx ); } else { printf("%dは69以下です¥n",vx ); } printf("終了! ¥n"); return(0); }
if文 基本形③ (if ~ else if ~ else if ~ else )
if( 条件1 ) {
}
else if( 条件2 ){
}
else if( 条件3 ){
}
else {
}
条件1が成立した場合に, 実行するプログラムを書く 整数を入力:10 10は69以下です. 終了! 実行結果1 条件1が成立しないで, 条件2が成立する場合に, 実行するプログラムを書く 条件1も2も成立しないで, 条件3が成立する場合に, 実行するプログラムを書く どの条件も成立しない場合に, 実行するプログラムを書く教科書
List3-1 if(式)
#include<stdio.h> int main(void){ int vx; printf("整数を入力:"); scanf("%d", &vx ); if( vx % 5 ) { printf("その数は5で割り切れません¥n"); } return(0); }教科書:
p.42の List 3-1
キーボードから読込んだ
整数値が5で割りきれな
いかを調べる
割り切らないならば「割り
切れない」表示して,そう
でないなら何もしない.
整数を入力:17 その数は5で割り切れません 整数を入力:15 実行結果1 実行結果2if(
式
)・・・
式の値が
0以外なら
次のプログラムを実行,
0なら
次をとばす.
教科書
List3-2 if(式)
#include<stdio.h> int main(void){ int no; printf("整数を入力:"); scanf("%d", &no ); if( no % 2 ) { // if( no % 2 != 0 )でも同じ printf("その数は奇数です¥n"); } return(0); }教科書:
p.43の List 3-2
キーボードから読込んだ
整数値が奇数かを調べる
整数を入力:17 その数は奇数です 整数を入力:10 実行結果1 実行結果2if(
式
)・・・
式の値が
0以外なら
次のプログラムを実行,
0なら
次をとばす.
教科書
List3-3 if(式) ~ else
#include<stdio.h> int main(void){ int vx; printf("整数を入力:"); scanf("%d", &vx ); // if( vx % 5 ) { if( vx % 5 != 0) { //5で割ったあまりが0でない printf("その数は5で割り切れません¥n"); } else { printf("その数は5で割り切れます¥n"); } return(0); }教科書:p.44の List 3-3
キーボードから読込んだ
整数値が5で割りきれな
いか,割り切れるかを調
べる
整数を入力:17 その数は5で割り切れません 整数を入力:35 その数は5で割り切れます 実行結果1 実行結果2if(
式
)~
else ・・・
式の値が
0以外なら
次のプログラムを実行,
0なら
elseの次を実行.
教科書
List3-6 ==, !=
#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.48の List 3-6
キーボードから読込んだ2
つの整数値が等しいかど
うか?
2つの整数を入力: 整数1:-5 整数2:-5 それらの値は同じです. 2つの整数を入力: 整数1:40 整数2:45 それらの値は違います. 実行結果1 実行結果2if( a==b )
・・・
aとbが等しいなら
次のプログラムを実行,
if( a!=b )
・・・
aとbが等しくないなら
次のプログラムを実行.
教科書
List3-7 ==, !=
#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 実行結果2if( a==b )
・・・
aとbが等しいなら
次のプログラムを実行,
if( a!=b )
・・・
aとbが等しくないなら
次のプログラムを実行.
教科書
p.48~50 いろいろな条件
if( x == y )
xとyは等しい
if( vx%3 == 0 )
if( x != y )
xとyは等しくない
if( dx%2 != 0 )
if( x > y )
xはyより大きい
if( x1-x2 > 0 )
if( x >= y )
xはy以上(大きいか等しい)
if( x1 >= 0.5 )
if( x < y )
xはyより小さい
if( 0 < sum )
if( x <= y )
xはy以下(小さいか等しい)
if( sum <= 100 )
教科書:
p.48~50
• 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文 : 場合分けに便利な方法
条件演算子
a
?
b
:
c
#include<stdio.h> int main(void){
int n1, n2, max;
printf("2つの整数を入力¥n");
printf("整数1:"); scanf("%d", &n1 ); printf("整数2:"); scanf("%d", &n2 ); max = ( n1 > n2 ) ? n1 : n2; printf("大きい方の値は%dです¥n", max); return(0); }
教科書:
p.56
読込んだ2つの整数値の
大きい方を求めて表示
2つの整数を入力 整数1:83 整数2:45 大きい方の値は83です 実行結果1a
?
b
:
c ・・・ aが0でなければb,そうでなければcの値
(条件)
?
b
:
c ・・・ 条件が成立すればb,そうでなければcの値
教科書:
p.56 List3-14
if( n1 > n2 ) { max = n1; } else { max = n2; }条件演算子
a
?
b
:
c
教科書:
p.56
a
?
b
:
c ・・・ aが0でなければb,そうでなければcの値
(条件)
?
b
:
c ・・・ 条件が成立すればb,そうでなければcの値
vx = (n1 > n2) ? n1-n2 : n2-n1;
n1とn2の大きい方から小さい方を引いた値をvxに代入.
if (n1 > n2)
{
vx = n1 - n2;
}
else
{
vx = n2 - n1;
}
条件演算子を使ったプログラムと同じものは,
if文でプログラムできる.
複合文 (ブロック)
教科書:
p.58
{ } で囲むことで単一の文とみなされる
{
printf("ABC ¥n");
printf("DEF ¥n");
}
{
int x;
x = 5;
printf(" x = %d¥n", x );
}
if( 条件 )
文1
else
文2
条件が成立すれば
文1を実行
不成立なら
文2を実行
if( n1 > n2 )
max = n1;
else
max = n2;
if( n1 > n2 )
max = n1;
min = n2;
else
max = n2;
min = n1;
if( n1 > n2 )
{
max = n1;
min = n2;
}
else
{
max = n2;
min = n1;
}
エラー
正しい
if( n1 > n2 )
{
max = n1;
}
else
{
max = n2;
}
正しい
教科書:
p.58 List3-16
論理演算子
&&, ||
#include<stdio.h> int main(void){ int n; printf("整数nを入力:"); scanf("%d", &n ); if( (n%2 == 0) && (n %3 == 0) ) { printf("成立¥n"); } else { printf("不成立¥n"); } return(0); }教科書:
p.60
読込んだ整数値
nが
・偶数で,
かつ
3で割り切れる
ならば,「成立」と表示する.
そうでなければ「不成立」と表
示する.
整数を入力:6 成立 実行結果1if( 条件A
&&
条件
B ) ・・・ 条件A,条件Bともに成立するなら.
AND
if( 条件A
||
条件
B )
・・・ 条件
A,条件Bのどちらかが成立するなら.
OR
整数を入力:8
不成立
整数を入力:9
不成立
論理演算子
&&, ||
#include<stdio.h> int main(void){ int n; printf("整数nを入力:"); scanf("%d", &n ); if( (n%2 == 0) || (n %3 == 0) ) { printf("成立¥n"); } else { printf("不成立¥n"); } return(0); }教科書:
p.60
読込んだ整数値
nが
・偶数
または
3で割り切れる
ならば,「成立」と表示する.
そうでなければ「不成立」と表
示する.
整数を入力:6 成立 実行結果if( 条件A
&&
条件
B ) ・・・ 条件A,条件Bともに成立するなら.
AND
if( 条件A
||
条件
B )
・・・ 条件
A,条件Bのどちらかが成立するなら.
OR
整数を入力:8
成立
整数を入力:7
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 ) { //余り1 printf("1余る¥n"); } else {
//余り2
printf("2余る¥n"); } return(0); }教科書:
p.64
読込んだ整数値を
3で割った
あまりで分類
整数を入力:6 3で割切れる 実行結果 整数を入力:40 1余るif文によるプログラム
switch文 (switch~case文)
#include<stdio.h> int main(void){ int num; printf("整数を入力:"); scanf("%d", &num ); switch( num % 3 ) { case 0 : printf("3で割り切れる¥n"); break; case 1 : printf("1余る¥n"); break; default: printf("2余る¥n"); break; //この行にはbreakは不要! } return(0); }教科書:
p.64
読込んだ整数値を
3で割った
あまりで分類
整数を入力:6 3で割切れる 実行結果 整数を入力:40 1余るswitch文によるプログラム
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 : prnitf("E¥n"); break;
default : printf("F¥n"); break; //この行はbreak不要
} return(0); }