プログラミング基礎演習

鹿児島大学
プログラミング基礎演習
第5回
条件分岐、ifとswitch文
半田利弘
鹿児島大学 大学院理工学研究科 物理・宇宙専攻
理化学研究所
前回までのあらすじ
▶ 変数には種類がある
■
int, float, char
▶ 変数は使う前に型宣言が必要
▶ キーボードからの入力にはfgets
▶ 数値にするならatoiやatof
理化学研究所
制御構文
▶ 前から順番にやるだけだと応用が利かない
▶ 条件分岐と繰り返し
■
分岐 if, switch
 条件に当てはまったら{}内の部分をやれ
■
繰り返し for, while
 指定された順に{}内を繰り返せ
理化学研究所
if文
▶ 条件に合えば指定部分を実行する
if(xx>yy) {
printf("xxはyyより大きい。\n");
}
▶ その他の場合はelseを使う。
if(xx<yy) {
printf("xxはyyより小さい。\n");
} else {
printf("xxはyyより小さくはない。\n");
}
理化学研究所
条件の指定
▶ 基本的に、大小関係で指定する
■
■
■
a<b, ii>2, x<1.5, a>=b, x<=y
j==1 ←代入と区別するために2つ書く
x!=0.2 ←「等しくなければ」の意味
▶ 「かつ」&&と「または」||と「否定」!
■
■
■
■
a<b && x<1.5
j==0 || j>0
!(x>0.0)
()で括れば、そこの判断が優先
理化学研究所
if文の動作確認
■
p.83 list4-1傘プログラム(list1.c)
#include <stdio.h>
#include <stdlib.h>
int main(void);
int main(void)
{
char buffer[256];
int nn;
printf("降水確率は?\n");
fgets(buffer,256,stdin);
nn=atoi(buffer);
printf("降水確率は%d%%です。\n",nn);
if(nn>=50) {
printf("傘がいっよ。\n");
} else {
printf("傘はいらんがね。\n");
}
printf("いってらっしゃい。\n");
return(0);
}
理化学研究所
動かしてみよう
▶ 入力した降水確率の数値を変えると、
▶ 答えが変わる
▶ 変な数を入れるとどうなるか?
■
例えば、1500とか…。
理化学研究所
if文の動作確認
■
p.85 list4-2傘プログラムの改良(list2.c)
#include <stdio.h>
#include <stdlib.h>
int main(void);
int main(void)
{
char buffer[256];
int nn;
printf("降水確率は?\n");
fgets(buffer,256,stdin);
nn=atoi(buffer);
printf("降水確率は%d%%です。\n",nn);
if(nn>100) {
printf("確率は0~100じゃろ\n");
} else if(nn>=50) {
printf("傘がいっよ。\n");
} else {
printf("傘はいらんがね。\n");
}
printf("いってらっしゃい。\n");
理化学研究所
return(0);
}
動かしてみよう
▶ 入力した降水確率の数値を変えると、
▶ 答えが変わる
▶ 変な数を入れるとどうなるか?
■
■
例えば、1500とか…。
では、-100では?
理化学研究所
if文の動作確認
■
p.85 list4-3傘プログラムの改良2(list3.c)
#include <stdio.h>
#include <stdlib.h>
int main(void);
int main(void)
{
char buffer[256];
int nn;
printf("降水確率は?\n");
fgets(buffer,256,stdin);
nn=atoi(buffer);
printf("降水確率は%d%%です。\n",nn);
if(nn>100 || nn<0) {
printf("確率は0~100じゃろ\n");
} else if(nn>=50) {
printf("傘がいっよ。\n");
} else {
printf("傘はいらんがね。\n");
}
printf("いってらっしゃい。\n“);
理化学研究所
return(0);
}
ここまでのまとめ
▶ 条件に合うときだけ、次の{}内を実行する
if(xx==yy) {
printf("xxはyyと等しい。\n");
} else if(xx<0) {
else ifは何回でもかける
printf("xxは負。\n");
} else if(xx<yy) {
printf("xxはyyより小さい。\n");
} else {
printf("以上のどれでもない。\n");
}
理化学研究所
■
判断は前の行から順にやる
ここまでのまとめ
▶ 無意味な分岐も書けてしまう
if(xx==yy) {
printf("xはyと等しい。\n");
} else if(xx>yy) {
printf("xxはyyより大きい。\n");
} else if(xx<yy) {
printf("xxはyyより小さい。\n");
} else if(xx>yy) { /*次は決して実行されない */
printf("xxはyyより大きいって、もうないだろ。\n");
} else { /*次も決して実行されない */
printf("以上のどれでもない。\n");
printf("なわけあるかい!\n");
}
理化学研究所
switch文
▶ 条件によって分ける
switch(ii) {
case 0:
printf("ii isiszero.\n");
zero.\n");
case
1:
break;
printf("ii
is unity.\n");
case
1:
default:
printf("ii is unity.\n");
printf("the
other cases.\n");
break;
}default:
printf("the other cases.\n");
}
理化学研究所
switch文の動作確認
■
p.108 list5-1春巻きプログラム改(list1.c)
#include <stdio.h>
#include <stdlib.h>
int main(void);
int main(void)
{
char buffer[256];
int nn;
printf("どれが好き?\n");
printf("(1) ヤマト\n");
printf("(2) ガンダム\n");
printf("(3) どれでもない\n");
fgets(buffer,256,stdin);
nn=atoi(buffer);
switch(nn) {
case 1:
printf("やっぱ、ヤマトでしょ。\n");
break;
case 2:
printf("やっぱ、ガンダム。\n");
break;
default:
理化学研究所
printf("アニヲタじゃないって。\n");
}
return(0);
}
switch文の動作確認
■
p.111 list5-2春巻きプログラム改(list2.c)
#include <stdio.h>
#include <stdlib.h>
int main(void);
int main(void)
{
char cc;
int nn;
printf("どれが好き?\n");
printf("(y) ヤマト\n");
printf("(g) ガンダム\n");
printf("(x) どれでもない\n");
cc=getchar();
switch(cc) {
case 'y':
printf("やっぱ、ヤマトでしょ。\n");
break;
case 'g':
printf("やっぱ、ガンダム。\n");
break;
default:
理化学研究所
printf("アニヲタじゃないって。\n");
}
return(0);
}
switch文の動作確認
■
p.111 list5-3春巻きプログラム改(list3.c)
#include <stdio.h>
#include <stdlib.h>
int main(void);
int main(void)
{
char cc;
int nn;
printf("どれが好き?\n");
printf("(y) ヤマト\n");
printf("(g) ガンダム\n");
printf("(x) どれでもない\n");
cc=getchar();
switch(cc) {
case 'y':
case 'Y':
printf("やっぱ、ヤマトでしょ。\n");
break;
case 'g':
case 'G':
printf("やっぱ、ガンダム。\n");
break;
default:
理化学研究所
printf("アニヲタじゃないって。\n");
}
return(0);
}
switch文の動作確認
■
p.111 list5-2春巻きプログラム改悪(list4.c)
#include <stdio.h>
#include <stdlib.h>
int main(void);
int main(void)
{
char cc;
int nn;
printf("どれが好き?\n");
printf("(y) ヤマト\n");
printf("(g) ガンダム\n");
printf("(x) どれでもない\n");
cc=getchar();
switch(cc) {
case 'y':
printf("やっぱ、ヤマトでしょ。\n");
case 'g':
printf("やっぱ、ガンダム。\n");
break;
default:
printf("アニヲタじゃないって。\n");
}
理化学研究所
return(0);
}
まとめと注意
▶ switch文はbreakの入れ忘れに注意
▶ 条件分岐の判断は前の行から順番
理化学研究所
課題
▶ 以下の機能を持つプログラムを作る
次の動作指示を番号で入力すると、
その番号に従って異なる動作をする
■ 次の動作指示を1文字で指定すると、
その文字に従って異なる動作をする
■
■
例えば、こんなのbby01-bdg2.exe
理化学研究所