1 / 50

プログラミング入門2

プログラミング入門2. 第2回 演算と型 条件分岐. 芝浦工業大学情報工学科 青木 義満. 今回の講義内容. いろいろな演算(四則演算) 整数だけでなく小数データも!( int 以外の変数の型) 前回  →  点数の合計 今回  →  平均点(小数データ) 演算と型の関係. これに他の演算(差 , 積 , 商 , 剰余) を加えていく. 前回の復習も兼ねて …. キーボードから2つの整数を読み込み、和を表示するプログラムを作成せよ。. +. a. b. 第一(左)オペランド. 第二(右)オペランド. 二項演算子. 四則演算.

Télécharger la présentation

プログラミング入門2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. プログラミング入門2 第2回 演算と型 条件分岐 芝浦工業大学情報工学科 青木 義満

  2. 今回の講義内容 • いろいろな演算(四則演算) • 整数だけでなく小数データも!(int以外の変数の型) • 前回 → 点数の合計 • 今回 → 平均点(小数データ) • 演算と型の関係 プログラミング入門2

  3. これに他の演算(差,積,商,剰余) を加えていく 前回の復習も兼ねて… • キーボードから2つの整数を読み込み、和を表示するプログラムを作成せよ。 プログラミング入門2

  4. + a b 第一(左)オペランド 第二(右)オペランド 二項演算子 四則演算 • コンピュータに様々な計算を実行させる →四則演算が基本 (和、差、積、商) • 四則演算を実現する演算子(演算の働きを持った記号) プログラミング入門2

  5. 四則演算の例題 • ソースファイル名:list0201.c • 目的: 四則演算を実行し、結果を確認する(特に / , % 演算子の結果に注意) /* 読み込んだ二つの整数値の和・差・積・商・剰余を表示 */ #include <stdio.h> int main(void) { int vx, vy; puts("二つの整数を入力してください。"); printf("整数vx:"); scanf("%d", &vx); printf("整数vy:"); scanf("%d", &vy); printf("vx + vy = %d\n", vx + vy); printf("vx - vy = %d\n", vx - vy); printf("vx * vy = %d\n", vx * vy); printf("vx / vy = %d\n", vx / vy); printf("vx %% vy = %d\n", vx % vy); return (0); } プログラミング入門2

  6. 商の整数部 剰余 整数(int型)と整数(int型)の四則演算 結果も整数 型と演算結果の関係 整数 / 整数 5 / 3 → 1, 3 / 5 → 0 整数 % 整数 5 % 3 → 2, 3 % 5 → 3 プログラミング入門2

  7. 整数演算から実数演算へ • これまでの計算 → 整数のみ(int型) • 実際の数値計算では、実数計算がほとんど • 例) • 点数の平均点を求める • 平方根の計算 • sin, cos その他 プログラミング入門2

  8. 演算は、*, / (乗算、除算)が優先される • +, -を先に計算させる場合には、 •  半角( )でくくる 平均値を求めるプログラム(整数版) • ファイル名:heikin_int.c /* 2科目の点数の平均を表示するプログラム  整数版*/ #include <stdio.h> int main(void) { int sugaku; int english; int heikin; printf(“数学の点数は?: ”); scanf(“%d”, &sugaku); printf(“英語の点数は?: ”); scanf(“%d”, &sugaku); heikin = (sugaku + english) / 2; /* 平均点を求める */ printf(“平均点は、%d 点 です。”, heikin ); return(0); } プログラミング入門2

  9. int を double に! double heikin; • 割る数を 2→2.0 に! %dを %f に! 平均値を求めるプログラム(実数版) • ファイル名:heikin_dbl.c /* 2科目の点数の平均を表示するプログラム  実数版*/ #include <stdio.h> int main(void) { int sugaku; int english; printf(“数学の点数は?: ”); scanf(“%d”, &sugaku); printf(“英語の点数は?: ”); scanf(“%d”, &sugaku); heikin = (sugaku + english) / 2.0; /* 平均点を求める */ printf(“平均点は、%f 点 です。”, heikin ); return(0); } プログラミング入門2

  10. 変数名 型名 タコ焼 (実体) int sugaku; タコ焼のカタ (設計図) 宣言 int型 sugaku 変数名 型名 double heikin; 宣言 heikin double型 解説 ~ 変数の”型”と”実体” • C言語 実数を 浮動小数点数で表す • 整数 →int 型 • 浮動小数点 →double型,float型 整数 変数の宣言 浮動小数点数 変数の宣言 プログラミング入門2

  11. 忘れずに! 忘れずに! %lf (パーセント・エル・エフ) int, double型に対するprintf, scanf関数 プログラミング入門2

  12. double型変数への値の入力と表示 • ファイル名:list0207.c • 目的: double型変数に対する printf, scanfの使い方をマスター /* 二つの実数値を読み込んで和・差・積・商を実数で表示 */ #include <stdio.h> int main(void) { double vx, vy; /* 浮動小数点数 */ puts("二つの数を入力してください。"); printf("実数vx:"); scanf("%lf", &vx); printf("実数vy:"); scanf("%lf", &vy); printf("vx + vy = %f\n", vx + vy); printf("vx - vy = %f\n", vx - vy); printf("vx * vy = %f\n", vx * vy); printf("vx / vy = %f\n", vx / vy); return (0); } プログラミング入門2

  13. 9.99 dx dx nx OK! 小数点以下は切り捨て! 型に入らない! int型 double型 double型 9 型と代入(重要!) • int型変数に小数値(double)を代入すると…… • double型に整数値(int)を代入すると… 9.99 printf →9.000000 プログラミング入門2

  14. 格上げ 格上げ 型と演算(重要!) • 同じ型どうし、異なる型どうしの演算 • / 2 →2 • int / int →int 5.0 / 2.0 →2.0 double / double →double 同じ型どうしの演算 5.0 / 2 double / int 5.0 / 2.0 → 2.5 double / double → double 5 / 2.0 int / double 5.0 / 2.0 → 2.5 double / double→ double 異なる型どうしの演算 プログラミング入門2

  15. 重要 異なる型どうしの演算では、 小さい方の型のオペランドは、より大きい方の型に変換 された上で演算が行われる 型と演算 int 整数のみ double 実数 < プログラミング入門2

  16. 例題(演算と型) • ソースファイル名:list0208.c (p.29) • 確認事項: 同じ型,異なる型どうしの演算結果 /* 型と演算について確認する */ #include <stdio.h> int main(void) { int n1, n2, n3, n4; double d1, d2, d3, d4; n1 = 5 / 2; n2 = 5.0 / 2.0; n3 = 5.0 / 2; n4 = 5 / 2.0; d1 = 5 / 2; d2 = 5.0 / 2.0; d3 = 5.0 / 2; d4 = 5 / 2.0; printf("n1 = %d\n", n1); printf("n2 = %d\n", n2); printf("n3 = %d\n", n3); printf("n4 = %d\n\n", n4); printf("d1 = %f\n", d1); printf("d2 = %f\n", d2); printf("d3 = %f\n", d3); printf("d4 = %f\n", d4); return (0); } プログラミング入門2

  17. aの値を型名で指定された値に 変換したものを生成 a 代入 85.0(double型) 85.0/ 2 (double) / (int) 45.2 (double) キャスト演算子 ~ 値の型を(強引に)変換 (型) 例1) (double) 5 →5.0 を生成 (int) 2.55 →2  を生成 例2) int na, nb; double heikin; na = 40; nb = 45; heikin = (double) (na + nb) / 2 ; 85(int型) プログラミング入門2

  18. if文による条件分岐 • 条件にもとづいて、プログラムの流れを変える • 例えば、 キーボードから入力した整数値が…  ・ もし、5で割り切れなかったら、“5の倍数でありません。”    と表示する。  ・ そうでなかったら(5で割り切れたら)、“5の倍数です。”    と表示する。 プログラミング入門2

  19. if文 例題 ~ 最初のif文プログラム • ソースファイル名: list0301.c • 概要: 読み込んだ整数値が5で割り切れないかどうか判定 • 目的: if 文の動作を確認 /* 読み込んだ整数値は5で割り切れないか */ #include <stdio.h> int main(void) { int vx; printf("整数を入力してください:"); scanf("%d", &vx); if (vx % 5) puts("その数は5で割り切れません。"); return (0); } %: 余り プログラミング入門2

  20. 文 例題解説(1)~if文の動作 if (vx % 5) puts("その数は5で割り切れません。"); vxが5の倍数 → vx%5 = 0 vxが5の倍数でない → vx%5 ≠0(非ゼロ)  構文 if ( 式 ) 文 • (式)を評価 • 式の結果が非0だったら、文を実行 • 式の結果が0だったら、文を実行せず プログラミング入門2

  21. 例題~if文プログラム(2) • ソースファイル名: list0303.c • 概要: 割り切れなくても,割り切れても,その結果を表示 • 目的: if ~else~文の動作を確認 #include <stdio.h> int main(void) { int vx; printf("整数を入力してください:"); scanf("%d", &vx); if (vx % 5) puts("その数は5で割り切れません。"); else puts(“その数は5で割り切れます。"); return (0); } If~else~文 プログラミング入門2

  22. if (vx % 5) puts("その数は5で割り切れません。"); else puts(“その数は5で割り切れます。"); 例題解説(2): if~else~文の動作 • If(もしも~なら・・・),else(それ以外の時は・・・)という意味 文1 vxが5の倍数 → vx%5 = 0 vxが5の倍数でない → vx%5 ≠0(非ゼロ)  文2 構文 if ( 式 ) 式を評価,その値が, もし(if),非0だったら・・・ →文1 を実行 そうでなければ(else),(0以外であれば) →文2 を実行 文1 else 文2 プログラミング入門2

  23. 全てその値を評価できる 「式」 38 15 7 53 5 式全体の評価値 「式の評価」とは?? • C言語における「式」 • x(int型変数) • 38 (int型定数) • x + 38 (演算) X  +  38 X % 5 2 式全体の評価値 プログラミング入門2

  24. 値を比較するには? ~ 等価演算子,関係演算子値を比較するには? ~ 等価演算子,関係演算子 • 条件分岐における条件判定 • 人間の日常生活の中での様々な判断は,1つの条件,またはいくつかの条件を総合して判断している。  例えば… • 只今の所持金は財布の中の2000円のみ   欲しい品物が2000円より高い → 買えない 2000円以下 → 買える! • 大学の成績評価 A(80~100),B(70~79),C(60~69),D(~59) • 駅から歩くか,学バスが来るまで待つか,タクシーに乗るか 判断要素: 天候,次のバスが来るまでの時間,所持金,疲労度,授業までの残り時間 など • ある値の大小によって,処理を分岐する必要になる! プログラミング入門2

  25. 値比較のプログラム(1) • ファイル名:list0306.c /* 読み込んだ二つの整数値は等しいか */ #include <stdio.h> int main(void) { int x1, x2; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &x1); printf("整数2:"); scanf("%d", &x2); if (x1 == x2) puts("それらの値は同じです。"); else puts("それらの値は違います。"); return (0); } プログラミング入門2

  26. 値比較のプログラム(2) • ファイル名:list0307.c /* 読み込んだ二つの整数値は等しいか */ #include <stdio.h> int main(void) { int x1, x2; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &x1); printf("整数2:"); scanf("%d", &x2); if (x1 != x2) puts("それらの値は違います。"); else puts(“それらの値は同じです。"); return (0); } プログラミング入門2

  27. 値が1(等しい) 値が0 (等しくない) 等価演算子 • 2つの式の値が等しいか,等しくないかを判定 等価演算子 if (x1 == x2) puts("それらの値は同じです。"); else puts("それらの値は違います。"); ※!= はこの逆 プログラミング入門2

  28. 3つ以上の条件分岐をするには? • これまでは流れを2つに分岐 → 3つ以上の場合は? • 例) • 所持金2,000円 (1) 商品が2,000円より高かったら,惜しくも買えない. (2) 商品が2,000円ピッタリだったら,ビンゴ. (3) 商品が2,000円より安ければ,余裕で買える. • 値が等しいかどうかを判定:等価演算子(==,!=) 値の大小を比較する演算子が必要!! 値の比較により,処理の流れを3つに分岐したい プログラミング入門2

  29. 値比較のプログラム(3) • ファイル名:list0309.c /* 読み込んだ整数値の符号を判定 */ #include <stdio.h> int main(void) { intno; printf("整数を入力してください:"); scanf("%d", &no); if (no == 0) puts("その数は0です。"); else if(no > 0) puts("その数は正です。"); else puts("その数は負です。"); return (0); } プログラミング入門2

  30. 3つ以上の分岐: if ~, else if ~, else ~ • if(条件式1) 文1 else if(条件式2) 文2 else 文3 ① If(もし) 条件1であれば,文1実行 ①でなく,条件2であれば,文2実行 ①, ②のどの条件にもあてはまらない場合 ② ③ ① if (no == 0) puts("その数は0です。"); else if (no > 0) puts("その数は正です。"); else puts("その数は負です。"); ② ③ ①,②以外,つまり,0でも正でもない場合 ※else if は何個でも書ける. プログラミング入門2

  31. ○→ 値は1 ×→ 値は0 大小関係を比較する ~ 関係演算子 if ( a >= b ) プログラミング入門2

  32. 2つの整数の大きい方の値を求める(1) • ファイル名:list0310.c /*2つの整数の大きい方の値を求める */ #include <stdio.h> int main(void) { int n1, n2; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2); if (n1 > n2) printf("大きい方の値は%dです。\n", n1); else printf("大きい方の値は%dです。\n", n2); return (0); } プログラミング入門2

  33. 2つの整数の大きい方の値を求める(2) • ファイル名:list0311.c • 求めた値を,後の処理のために変数に格納 /*2つの整数の大きい方の値を求める */ #include <stdio.h> int main(void) { int n1, n2, max; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2); if (n1 > n2) max = n1; else max = n2; printf("大きい方の値は%dです。\n", max); return (0); } プログラミング入門2

  34. 今までに無かった中括弧 今までに無かった中括弧 } } 文が2つ(複数) 文が2つ(複数) 大きい方の値, 小さい方の値両方を求める(3) • ファイル名:list0315.c /*2つの整数の大きい方,小さい方の値両方を求める */ #include <stdio.h> int main(void) { intn1, n2, max, min; puts("二つの整数を入力してください。"); printf("整数1:"); scanf("%d", &n1); printf("整数2:"); scanf("%d", &n2); if (n1 > n2) { max = n1; min = n2; } else { max = n2; min = n1; } printf("大きい方の値は%dです。\n", max); printf("小さい方の値は%dです。\n", min); return (0); } プログラミング入門2

  35. 重要 単一の文が要求されるところで,複数の文を実行しなければ ならない時には,{}の中にまとめて,複合文(ブロック)として実現. 複合文(ブロック) 複合文(ブロック) 複合文(ブロック) 例1) if (n1 > n2) { max = n1; min = n2; } ※文が一つの場合,   {}は書いても書かなくてもOK. 実はこんなところにも… #include <stdio.h> int main(void) { printf(“こんにちは。”); return (0); } プログラミング入門2

  36. 論理演算子の導入 複数の条件から判断 ~ 論理演算子 • 一つの条件だけでなく,複数の条件が成立,またはどちらからかが成立した時,というように複数の条件から処理を判断. • 例) • とある飲み会へ参加しようかどうか迷っている (1)友人AとBが両方とも(AかつB)参加表明 → 私も参加 (2)友人AとBの少なくともどちらかが(AまたはB)参加表明 → 参加微妙 (3)友人AとB,両方とも不参加 → 私も不参加 プログラミング入門2

  37. 条件を ?以上?以下で表現できる 条件を 12または1または2 と表現できる 論理演算子 ~ AかつB,AまたはB の実現 • 読み込んだ月から季節を判定するプログラム • 仕様 • 整数値(月:変数名 month )を入力 • その数字が, • 3,4,5 → 春 • 6,7、8 → 夏 • 9,10,11 → 秋 • 12,1,2 → 冬 と判定したい プログラミング入門2

  38. 「かつ」 && →○(1:正) ○(1:正) ○(1:正) →×(0:誤) ○(1:正) ×(0:誤) →×(0:誤) ×(0:正) ○(1:正) →×(0:誤) ×(0:誤) ×(0:誤) 論理演算子 • 条件の「かつ」,「または」を表現 例) もし,3月以上(かつ)5月以下だったら… ① ② month <= 5 month >= 3 3 <= month <= 5 ①,②の両方成り立てば○ プログラミング入門2

  39. →○(1:正) ○(1:正) ○(1:正) →○(1:正) ○(1:正) ×(0:誤) →○(1:正) ×(0:正) ○(1:正) →×(0:誤) ×(0:誤) ×(0:誤) 論理演算子 • 条件の「かつ」,「または」を表現 例) 12月,または1月だったら 「または」 ① ② ①,②のどちらかが成り立てば○ || month == 1 month == 12 プログラミング入門2

  40. 季節判定プログラム(論理演算子) • ファイル名:list0316.c /* 読み込んだ月の季節を表示 */ #include <stdio.h> int main(void) { int month; /* 月 */ printf("何月ですか:"); scanf("%d", &month); if (month >= 3&& month <= 5) puts("春です。"); else if (month >= 6 && month <= 8) puts("夏です。"); else if (month >= 9 && month <= 11) puts("秋です。"); else if (month == 1 || month == 2 || month == 12) puts("冬です。"); else puts("そんな月はありませんよ!!\a"); return (0); } プログラミング入門2

  41. 同じ式が2回登場 → 無駄? もう一つの条件分岐文 ~ switch 文 • ソースファイル名: list0317.c 読み込んだ整数値を3で割った剰余を表示(if文使用) /* 読み込んだ整数値を3で割った余りを表示 */ #include <stdio.h> int main(void) { intnum; printf("整数を入力してください:"); scanf("%d", &num); return (0); } if (num % 3 == 0) puts(“3で割った余りは0です"); else if (num % 3 == 1) puts(" 3で割った余りは1です"); else puts(“3で割った余りは2です"); 処理を自分で記述 プログラミング入門2

  42. switch 文 • 単一の条件式の値によって,処理を複数に分岐させる場合 →if文よりも簡潔に記述できる! • ソースファイル名: list0318.c /* 読み込んだ整数値を3で割った余りを表示 */ #include <stdio.h> int main(void) { intnum; printf("整数を入力してください:"); scanf("%d", &num); switch ( num % 3 ) { case 0 : puts(“3で割り切れます”); break ; case 1 : puts(“余りは1です”); break ; case 2 : puts(“余りは2です”); break ; } return (0); } プログラミング入門2

  43. 条件式① ①の値が 0の場合 1の場合 2の場合 switch文の構造 switch ( num % 3 ) { case 0 : puts(“3で割り切れます”); break ; case 1 : puts(“余りは1です”); break ; case 2 : puts(“余りは2です”); break ; } (Switch文終了) break で switch文を抜ける ()カッコ内の式を評価し,case で書かれた 値と一致するところにプログラムの流れを移行 プログラミング入門2

  44. break; がない break; がない 新しい default : switch文の break; と default : の役割 • ソースファイル名: list0319.c /*switch文の動作を確認するプログラム */ #include <stdio.h> int main(void) { int sw; printf("整数を入力してください:"); scanf("%d", &sw); switch (sw) { case 1 : puts("A"); puts("B"); break; case 2 : puts("C"); case 5 : puts("D"); break; case 6 : case 7 : puts("E"); break; default : puts("F"); break; } return (0); } switch文の動作を確認 プログラミング入門2

  45. “sw” が 1, 2, 5, 6, 7 以外の場合 switch (sw) { case 1 : puts("A"); puts("B"); break; case 2 : puts("C"); case 5 : puts("D"); break; case 6 : case 7 : puts("E"); break; default : puts("F"); break; } プログラミング入門2

  46. switch文 と if文 • Switch文 → 単一の式の値によって,プログラムの流れを分岐 • if 文 →複数の式の値によって,複雑な条件判断     を行い,処理を分岐することができる プログラミング入門2

  47. 演習課題(簡単な数値計算) • 身長を整数値として読み込んで(scanf)、それに対する標準体重を実数で表示(printf)するプログラムを作成せよ。なお、標準体重の計算式は以下で与えられるものとする。 標準体重 = (身長-100)×0.9 2. あるサッカーチームのゴール決定率を計算・表示するプログラムを作成せよ。   ただし、決定率は小数点2桁まで表示すること。  手順) ・チーム名を表示(printf) ・シュート数を入力 ・ゴール数を入力 ・ゴール決定率を計算(ゴール数÷シュート数)×100 (%) ・ゴール決定率を表示 (小数点2桁まで) kadai2-1.c kadai2-2.c プログラミング入門2

  48. 演習課題(条件分岐) 3.if文を用いて,点数を入力すると、その評価を出力するプログラムを作れ。   なお評価は、以下のとおりとする。    ・80点以上: A(優), 70点以上80点未満: B(良),60点以上70点未満: C(可),  60点未満: D(不可) 4.月を数字で読込み,その月が何日あるかを表示するプログラムを作れ。なお、1〜12以外の数字を入力した際には、”1〜12までの数字を入力してください”と表示すること。   ただし,    ・2月 →28日    ・ 4, 6, 9, 11 →30日    ・1,3,5,7,8,10,12→31日 kadai2-3.c kadai2-4.c プログラミング入門2

  49. プログラミング入門2 レポート課題(第1回目)プログラミング入門2 レポート課題(第1回目) • 演習課題1〜4のプログラムを作成し,動作確認した上で ソースファイル4つ(それぞれ,kadai2-1.c〜kadai2-4.c) をメールに添付して提出せよ。(授業中にできた課題は授業中にチェックしてもらうこと。) • 提出方法:   • メールの題名(subjet)を, “学籍番号”+”自分の苗字”(全て半角英数文字にて)とする。 例) L02001 aoki • 提出先: yaoki@sic.shibaura-it.ac.jp (青木アドレス) • 提出期限: 10月12日(金) 18:00まで(時間厳守) プログラミング入門2

  50. 次回の講義予定 • 繰り返し文 で、プログラミングの幅を広げよう! プログラミング入門2

More Related