鹿児島大学 プログラミング基礎演習 第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 理化学研究所
© Copyright 2024 ExpyDoc