プログラミング論 第十回 If文を使ったプログラミング 本日の内容 言葉の学習としてのプログラミング (復習) if文を使ったプログラミング(一部復習) 関係演算子と等価演算子 言語の学習としてのプログラミング (復習) 基本文型を覚えよう – 英語には「基本5文型」があります。 S+V S+V+C S+V+O S+V+O+O S+V+O+C – プログラミング言語に基本文型はあるのでしょ うか? あります! 言語の学習としてのプログラミング (復習) 基本文型を覚えよう – 「制御構造」とも呼ばれます。文(処理)の並べ方 の決まりです。次の3つです。 順次構造 – 順番に処理を実行していく構造。 選択構造 – もしAならば処理Bを実行し,そうでない場合処理Cを実行す る。 繰り返し構造 – Aが成り立っている間,処理Bを繰り返し実行する。 – 全てのプログラムは,この3つの構造で書かれ ています 言語の学習としてのプログラミング (復習) 基本文型を覚えよう – 「制御構造」とも呼ばれます。文(処理)の並べ方 の決まりです。次の3つです。 順次構造 – 順番に処理を実行していく構造。 選択構造 – もしAならば処理Bを実行し,そうでない場合処理Cを実行す る。 繰り返し構造 – Aが成り立っている間,処理Bを繰り返し実行する。 – 全てのプログラムは,この3つの構造で書かれ ています if文を使ったプログラム(復習) 次の処理を考えましょう。 「定価が10000円以上なら 1000円引き,そうでないと きは500円引きする」 これが,条件処理の基本 形になります。 これは,右の図のように図 式化すると分かり易くなり ます。 これをフローチャートと言 います。 プログラムは,このように 各部の処理を図式化して ,これを組みあわせて作る と作りやすくなります。 条件 真 処理1 1000円引き 10000円 以上 偽 処理2 500円引き if文を使ったプログラム(復習) 条件 真 処理1 1000円引き 10000円 以上 if( 偽 処理2 条件 処理1 } else{ 処理2 500円引き } ){ if文を使ったプログラム(復習) ensyu28.c #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { teika = teika - 500; } printf("代金=%d\n",teika); return 0; } この部分ですね if文を使ったプログラム(復習) #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { teika = teika - 500; } printf("代金=%d\n",teika); return 0; } 条件の設定です。 「teikaが10000以上」 は,このように表現 します。 >=のように,二つの数値の 大小関係を判定する演算子 を「関係演算子」といいます 関係演算子と等価演算子(復習) 二つの値の大小関係を判定する演算子です。 関係演算子 演算子 > >= < <= 説明 記述例 記述の意味 より大きい if(a>100) より大きいか等しい if(a>=100) aが100以上なら より小さい if(a<100) より小さいか等しい if(a<=100) aが100以下なら aが100より大きいなら aが100未満なら 等価演算子 演算子 説明 記述例 記述の意味 == 等しい if(a==100) aが100なら != 等しくない if(a!=100) aが100でないなら if文を使ったプログラム(復習) #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { teika = teika - 500; } printf("代金=%d\n",teika); return 0; } 条件が「真」(成り立つ) 場合の処理を記述します この時,「どこからどこまで を実行するのか」分かる ように,{ }で囲みます。 if文を使ったプログラム(復習) #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } 条件が「偽」(成り立たない) else { 場合の処理も同様です teika = teika - 500; } printf("代金=%d\n",teika); return 0; } if文を使ったプログラム 先ほどの問題をもう一度よく考えてみまし ょう。 定価として300円を入力するとどうなりま すか? -200円,という答えになりますよね。 どうすればよいでしょう? if文を使ったプログラム 次のように考えなおしましょう。 – 定価が10000円以上なら1000円引き – そうでないとき(else) 定価が1000円以上なら500円引き そうでないとき(else) タダにする フローチャートにすると分かり易くなりま す。 if文を使ったプログラム 条件1 真 偽 定価が 10000円以上 処理1 条件2 真 1000円引き 定価が 1000円以上 偽 処理2 500円引き 処理3 タダ if文を使ったプログラム 一見難しく見えますが。。。。 条件1 真 定価が 10000円以上 処理1 偽 このように考えれば, 既に学んだif文ですね 処理4 そして,処理4も 通常のif文なわけ です。 条件2 真 1000円引き 定価が 1000円以上 偽 処理2 500円引き 処理3 タダ つまり,2つのif 文を組みあわせ ればいいんです if文を使ったプログラム まず,このように考えてみましょう。 if( 条件1 条件1 処理1 } else{ 処理1 処理4 処理4 } ){ if文を使ったプログラム 次に,このように考えてみましょう。 if( 条件1 条件1 処理1 処理4 } else{ 処理1 処理4 } ){ if文を使ったプログラム 要するに,処理4の所にもう一つif-elseが入ればいいんです。 if( 条件1 ){ 条件1 処理1 } else{ 条件2 if( 処理1 処理2 条件2 処理2 処理3 } else{ 処理3 } } ){ if文を使ったプログラム ensyu30.cがこのプログラムになります。確認しましょう。 #include <stdio.h> int main(void) { int teika; printf("定価= "); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { if(teika>=1000){ teika = teika-500; } else{ teika=0; } } printf("代金=%d\n",teika); return 0; } if文を使ったプログラム else if 文を使うと,このように書く事も出来ます。 #include <stdio.h> int main(void) { int teika; printf("定価= "); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else if(teika>=1000){ teika = teika-500; } else{ teika=0; } printf("代金=%d\n",teika); return 0; } 問題 右のフローチ ャートは,入力 された点数の 成績判定をす るものです。こ のチャートに 従ってプログ ラムを作成し て下さい。 ensyu31.cを 完成させ,提 出して下さい。 90以上 S 考え方としては。。 80以上 70以上 A 60以上 B C E ヒント こんなプログラムの構成になります。 if( ){ } else{ if( ){ } else{ if( ){ else{ *ここにもう一つif-else文が入る } } } 演習 前述の問題は, 右のフローチャー トでも同じように 実行出来ます。 このフローチャー トに従ったプログ ラムリスト ensyu32.cを完成 させ,ensyu31.c と同じ動作をする 事を確認して下さ い。 70以上 80以上 90以上 S 60以上 B A C E if文を使ったプログラム 今の問題の場合,「このように書けたら便 利なんじゃないか?」と思いませんか? if(70 > tokuten >= 60){ seiseki = ‘C’; } ensyu33.cは,この考え方で書いたプロ グラムです。ビルド,実行してみましょう。 if文を使ったプログラム 90以上,または60未満の点数を入力すると,きちんと 結果が出力されますが,それ以外の入力では正しい成 績は出力されません。 つまり,このような書き方はできない,と言う事です。 if(70 > tokuten >= 60){ seiseki = ‘C’; } それでは,この表現をするためには,どのような書き方 をすればよいのでしょうか? 論理演算子 (70>tokuten>=60)というのは,「tokutenは, 70点未満であり,かつ,60点以上」という意味 ですね。 この,「~かつ~」のような表現を表す演算子を 論理演算子といいます。 演算子 説明 記述例 記述の意味 && 論理積(かつ,and) a==3 && b==4 aが3かつbが4 || 論理和(または,or) a==3 || b==4 aが3またはbが4 ! 否定(でない,not) !(a==3&&b==4) Aが3かつbが4,でない ensyu33.cを,論理演算子を使って書き直してみましょう。 *ensyu31.cとは,どちらが「良い」プログラムでしょうか? if文を使ったプログラム フローチャートを比較してみましょう。 90以上 90以上 S 80以上 S 80以上90未満 C 60以上 B B 60以上70未満 70以上 A 70以上80未満 A C E *何回のif判定が必要になるでしょう? 60未満 E if文を使ったプログラム 西暦から,うるう年を判定するプログラム を作りましょう。 うるう年の定義は,次のようになります。 – 4で割り切れ,かつ,100で割り切れない年 – または – 400で割り切れる年 ensyu34.cを完成させて下さい。 関係演算子,等価演算子, 論理演算子の優先順位 高 優 先 順 位 低 ! <, <=, >, >= ==, != && || 同じ優先順位(式の左側から順に演算)
© Copyright 2024 ExpyDoc