いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf ·...

21
1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算) 整数だけでなく小数データも!(int以外の変数の型) 前回 点数の合計 今回 平均点(小数データ) 演算と型の関係 条件分岐 If文による条件分岐の制御

Transcript of いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf ·...

Page 1: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

1

第2回 プログラミング入門2 2

  演算と変数の型   いろいろな演算(四則演算)   整数だけでなく小数データも!(int以外の変数の型)

  前回 → 点数の合計   今回 → 平均点(小数データ)

  演算と型の関係

 条件分岐   If文による条件分岐の制御

Page 2: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

2

第2回 プログラミング入門2 3

  キーボードから2つの整数を読み込み、和を表示するプログラムを作成せよ。

これに他の演算(差,積,商,剰余) を加えていく

第2回 プログラミング入門2 4

  コンピュータに様々な計算を実行させる → 四則演算が基本 (和、差、積、商)

  四則演算を実現する演算子(演算の働きを持った記号)

演算子 用法 説明

+ a + b aとbの和 ー a - b aとbの差 * a * b aとbの積 / a / b aをbで割った商 % a % b aをbで割った剰余

+ 二項演算子

a 第一(左)オペランド

b 第二(右)オペランド

Page 3: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

3

第2回 プログラミング入門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回 プログラミング入門2 6

整数 / 整数 商の整数部

5 / 3 → 1, 3 / 5 → 0

整数 % 整数 剰余

5 % 3 → 2, 3 % 5 → 3

整数(int型)と整数(int型)の四則演算 結果も整数

Page 4: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

4

第2回 プログラミング入門2 7

  これまでの計算 → 整数のみ(int型)   実際の数値計算では、実数計算がほとんど   例)

  点数の平均点を求める

  平方根の計算

  sin, cos その他

第2回 プログラミング入門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); }

• 演算は、*, / (乗算、除算)が優先される

• +, ‐を先に計算させる場合には、  半角( )でくくる

Page 5: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

5

第2回 プログラミング入門2 9

  ファイル名: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 → 2.0 に!

%d を %f に!

double heikin;

int を double に!

第2回 プログラミング入門2 10

  C言語 実数を 浮動小数点数で表す   整数 → int 型   浮動小数点 → double型,float型

型名 変数名

int sugaku; 宣言

型名 変数名

double heikin; 宣言

整数 変数の宣言

浮動小数点数 変数の宣言

double型

タコ焼のカタ (設計図)

int型 sugaku

heikin

タコ焼 (実体)

Page 6: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

6

第2回 プログラミング入門2 11

int型の場合 double型の場合

printf printf( “%d”, no ); printf( “%f ”, no );

scanf scanf( “%d”, &no ); scanf( “%lf ”, &no );

忘れずに! 忘れずに!

%lf (パーセント・エル・エフ)

第2回 プログラミング入門2 12

  ファイル名: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); }

Page 7: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

7

第2回 プログラミング入門2 13

  int型変数に小数値(double)を代入すると……

  double型に整数値(int)を代入すると…

nx int型

dx double型

9.99

小数点以下は切り捨て! 型に入らない!

9.99

OK!

dx double型

9 printf → 9.000000

第2回 プログラミング入門2 14

  同じ型どうし、異なる型どうしの演算

5  / 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

異なる型どうしの演算

格上げ 格上げ

Page 8: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

8

第2回 プログラミング入門2 15

異なる型どうしの演算では、

 小さい方の型のオペランドは、より大きい方の型に変換 された上で演算が行われる

重要

int 整数のみ

double 実数

第2回 プログラミング入門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); }

Page 9: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

9

第2回 プログラミング入門2 17

a (型) aの値を型名で指定された値に 変換したものを生成

例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型)

85.0(double型)

85.0 / 2 (double) / (int)

第2回 プログラミング入門2 18

 条件にもとづいて、プログラムの流れを変える  例えば、

キーボードから入力した整数値が…

 ・ もし、5で割り切れなかったら、“5の倍数でありません。”    と表示する。  ・ そうでなかったら(5で割り切れたら)、“5の倍数です。”    と表示する。

Page 10: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

10

第2回 プログラミング入門2 19

  ソースファイル名: list0301.c   概要: 読み込んだ整数値が5で割り切れないかどうか判定   目的: if 文の動作を確認

/* 読み込んだ整数値は5で割り切れないか */

#include <stdio.h>

int main(void) {

int vx;

printf("整数を入力してください:"); scanf("%d", &vx);

if (vx % 5) puts("その数は5で割り切れません。");

return (0); }

if文

%: 余り

第2回 プログラミング入門2 20

if (vx % 5)

puts("その数は5で割り切れません。");

if ( 式 ) 文

構文

• (式)を評価 • 式の結果が非0だったら、文を実行 • 式の結果が0だったら、文を実行せず

vxが5の倍数 → vx%5 = 0 vxが5の倍数でない → vx%5 ≠0(非ゼロ) 

Page 11: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

11

第2回 プログラミング入門2 21

  ソースファイル名: 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回 プログラミング入門2 22

if ( 式 )

構文

  If(もしも~なら・・・),else(それ以外の時は・・・)という意味

文1

式if (vx % 5)

puts("その数は5で割り切れません。"); else

puts(“その数は5で割り切れます。"); 文2

else

Page 12: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

12

第2回 プログラミング入門2 23

  C言語における「式」

  x (int型変数)   38 (int型定数)   x + 38 (演算)

全てその値を評価できる 「式」

 X  +  38

15 38

X % 5

7 5 53 式全体の評価値

2 式全体の評価値

第2回 プログラミング入門2 24

  条件分岐における条件判定

  人間の日常生活の中での様々な判断は,1つの条件,またはいくつかの条件を総合して判断している。

 例えば…   只今の所持金は財布の中の2000円のみ   欲しい品物が2000円より高い → 買えない   2000円以下 → 買える!

  大学の成績評価   A(80~100),B(70~79),C(60~69),D(~59)

  駅から歩くか,学バスが来るまで待つか,タクシーに乗るか 判断要素: 天候,次のバスが来るまでの時間,所持金,疲労度,授業までの残り時間 など

  ある値の大小によって,処理を分岐する必要になる!

Page 13: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

13

第2回 プログラミング入門2 25

  ファイル名: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回 プログラミング入門2 26

  ファイル名: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); }

Page 14: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

14

第2回 プログラミング入門2 27

  2つの式の値が等しいか,等しくないかを判定

==演算子 a == b aとbの値が等しければ1,そうでなければ0

!=演算子 a != b aとbの値が等くなければ1,そうでなければ0

等価演算子

if (x1 == x2)

puts("それらの値は同じです。"); else

puts("それらの値は違います。");

値が1(等しい)

値が0 (等しくない)

※ != はこの逆

第2回 プログラミング入門2 28

  これまでは流れを2つに分岐 → 3つ以上の場合は?   例)

  所持金2,000円 (1) 商品が2,000円より高かったら,惜しくも買えない.   (2) 商品が2,000円ピッタリだったら,ビンゴ.   (3) 商品が2,000円より安ければ,余裕で買える.

  値が等しいかどうかを判定:等価演算子(==,!=)

値の大小を比較する演算子が必要!!

値の比較により,処理の流れを3つに分岐したい

Page 15: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

15

第2回 プログラミング入門2 29

  ファイル名:list0309.c /* 読み込んだ整数値の符号を判定 */

#include <stdio.h>

int main(void) {

int  no;

printf("整数を入力してください:"); scanf("%d", &no);

if (no == 0) puts("その数は0です。"); else if (no > 0) puts("その数は正です。"); else puts("その数は負です。");

return (0); }

第2回 プログラミング入門2 30

if (no == 0) puts("その数は0です。"); else if (no > 0) puts("その数は正です。"); else puts("その数は負です。");

  if(条件式1) 文1

  else if(条件式2) 文2   else

文3

If(もし) 条件1であれば,文1実行

①でなく,条件2であれば,文2実行

①, ②のどの条件にもあてはまらない場合

※else if は何個でも書ける.

③ ①,②以外,つまり,0でも正でもない場合

Page 16: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

16

第2回 プログラミング入門2 31

< 演算子 a < b aがbより小さければ1,そうでなければ0

>演算子 a > b aがbより大きければ1,そうでなければ0

<=演算子 a <= b aがb以下であれば1,そうでなければ0

>=演算子 a >= b aがb以上であれば1,そうでなければ0

if ( a >= b ) ○ → 値は1 × → 値は0

第2回 プログラミング入門2 32

  ファイル名: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);

}

Page 17: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

17

第2回 プログラミング入門2 33

  ファイル名: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回 プログラミング入門2 34

  ファイル名:list0315.c /*  2つの整数の大きい方,小さい方の値両方を求める */ #include <stdio.h> int main(void) {

int   n1, 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つ(複数)

今までに無かった中括弧

} 文が2つ(複数)

Page 18: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

18

第2回 プログラミング入門2 35

単一の文が要求されるところで,複数の文を実行しなければ

ならない時には,{}の中にまとめて,複合文(ブロック)として実現.

重要

if (n1 > n2) { max = n1; min = n2;

}

例1)

複合文(ブロック)

※文が一つの場合,   {}は書いても書かなくてもOK.

実はこんなところにも… #include <stdio.h> int main(void) {     printf(“こんにちは。”);     return (0); }

複合文(ブロック)

第2回 プログラミング入門2 36

  一つの条件だけでなく,複数の条件が成立,またはどちらからかが成立した時,というように複数の条件から処理を判断.

  例)   とある飲み会へ参加しようかどうか迷っている

 (1)友人AとBが両方とも(AかつB)参加表明 → 私も参加  (2)友人AとBの少なくともどちらかが(AまたはB)参加表明 → 参加微妙  (3)友人AとB,両方とも不参加 → 私も不参加

論理演算子 の導入

Page 19: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

19

第2回 プログラミング入門2 37

  読み込んだ月から季節を判定するプログラム   仕様

  整数値(月:変数名 month )を入力   その数字が,

  3,4,5 → 春   6,7、8 → 夏   9,10,11 → 秋   12,1,2 → 冬

と判定したい

条件を ?以上?以下で表現できる

条件を 12または1または2 と表現できる

第2回 プログラミング入門2 38

  条件の「かつ」,「または」を表現

&&(and) 演算子 a && b aとbがどちらも非0であれば1,そうでなければ0

|| (or)演算子 a || b aとbの一方でも非0であれば1,そうでなければ0

例) もし,3月以上(かつ)5月以下だったら…

3 <= month <= 5 month >= 3 month <= 5 && 「かつ」

① ②

○(1:正) ×(0:誤) →×(0:誤) ×(0:正) ○(1:正) →×(0:誤) ×(0:誤) ×(0:誤) →×(0:誤)

○(1:正) ○(1:正) → ○(1:正)

①,②の両方成り立てば○

Page 20: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

20

第2回 プログラミング入門2 39

  条件の「かつ」,「または」を表現

&&(and) 演算子 a && b aとbがどちらも非0であれば1,そうでなければ0

|| (or)演算子 a || b aとbの一方でも非0であれば1,そうでなければ0

例) 12月,または1月だったら

month == 12 month == 1 || 「または」 ① ②

○(1:正) ×(0:誤) →○(1:正) ×(0:正) ○(1:正) →○(1:正) ×(0:誤) ×(0:誤) →×(0:誤)

○(1:正) ○(1:正) → ○(1:正)

①,②のどちらかが成り立てば○

第2回 プログラミング入門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); }

Page 21: いろいろな演算(四則演算) int以外の変数の型)yaoki/pro2/pro2-02.pdf · 2008-09-28 · 1 第2回 プログラミング入門2 2 演算と変数の型 いろいろな演算(四則演算)

21

第2回 プログラミング入門2 41

1.  身長を整数値として読み込んで(scanf)、それに対する標準体重を実数で表示(printf)するプログラムを作成せよ。なお、標準体重の計算式は以下で与えられるものとする。

標準体重 = (身長‐100)×0.9

2. あるサッカーチームのゴール決定率を計算・表示するプログラムを作成せよ。

 手順)

・チーム名を表示(printf) ・シュート数を入力

・ゴール数を入力

・ゴール決定率を計算(ゴール数÷シュート数)×100 (%)

・ゴール決定率を表示 

3.if文を用いて,点数を入力すると、その評価を出力するプログラムを作れ。   なお評価は、以下のとおりとする。

   ・80点以上: A(優), 70点以上80点未満: B(良),60点以上70点未満: C(可),      60点未満: D(不可)

kadai2-1.c

kadai2-2.c

Kadai2-3.c