• 検索結果がありません。

CプログラミングⅠ 式と演算子 式と演算子

N/A
N/A
Protected

Academic year: 2021

シェア "CプログラミングⅠ 式と演算子 式と演算子"

Copied!
26
0
0

読み込み中.... (全文を見る)

全文

(1)

CプログラミングⅠ

式と演算子 型変換

(2)

式って何?

数式などの計算式

プログラムは式を「計算」して処理を行う.

C言語の式

式と演算子

オペランド 演算子

評価

計算の対象

計算(演算)の記号

計算結果(値)を得ること

(3)

式と演算子

式の評価

実行結果

1 + 2 は,3 です.

3 x 4 は,12 です.

式の計算をさせる 1:

2:

3:

4:

5:

6:

7:

8:

9:

#include <stdio.h>

int main(void) {

printf("1 + 2 は,%d です.¥n", 1 + 2 );

printf("3 x 4 は,%d です.¥n", 3 * 4 );

return 0;

}

式を評価した結果の 値3が出力

式を記述

(4)

変数の値を使う 1:

2:

3:

4:

5:

6:

7:

8:

int main(void) {

int num1 = 3;

int num2 = 5;

printf("num1 + num2 は,%d です.¥n", num1 + num2 );

return 0;

}

式と演算子

いろいろな演算

変数の値を使う

num1

3

8

変数の値を用いて 評価する

実行結果

num1 + num2 は,8 です.

式の中に変数を書くと,

変数の値を用いて演算を行える num2

5

(5)

式と演算子

いろいろな演算

変数に式の計算結果を代入する

計算した結果を 変数に代入

変数に式の計算結果を代入する 1:

2:

3:

4:

5:

6:

7:

8:

9:

int main(void) {

int num1 = 3, num2 = 2;

int sum;

sum = num1 + num2;

printf("num1 + num2 は,%d です.¥n", sum );

return 0;

}

num1

3

5

num2

2

変数 sum の値 を出力

num1 + num2 評価結果を 変数 sum に代入

実行結果

num1 + num2 は,5 です.

(6)

式と演算子

いろいろな演算

変数の値の更新

計算結果を再度 num1 に代入

( num1 の値を更新できる)

変数の値の更新 1:

2:

3:

4:

5:

6:

7:

8:

int main(void) {

int num1 = 3;

num1 = num1 + 1;

printf("num1に1を足すと %d です.¥n", num1 );

return 0;

}

num1

3

4

1

変数 num1 1 を足した結果を 再度,変数 num1 に代入

実行結果

num1に1を足すと 4 です.

(7)

式と演算子

いろいろな数値を入力して,

演算ができる

キーボードから入力した値を足し算 1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

13:

int main(void) {

int num1, num2;

printf("整数1を入力.¥n");

scanf("%d", &num1 );

printf("整数2を入力.¥n");

scanf("%d", &num2 );

printf("二つの数の和は,%dです.¥n", num1 + num2 );

return 0;

}

scanf関数を用いて 変数に値を 読み込んでおく

実行結果

整数1を入力.

10[enter]

整数2を入力.

20[enter]

二つの数の和は,30です.

num1 num2 和を出力

いろいろな演算

キーボードから入力した値を足し算する

(8)

演算子の種類

いろいろな演算子

演算子 名前 優先順位 結合規則

( ) 関数呼び出し

1 左から右(→)

[ ] 添字(配列添字)

. メンバ参照(ドット)

-> メンバ間接参照(アロー)

++ 後置インクリメント -- 後置デクリメント

! 論理否定

2 右から左(←)

~ ビット反転

++ 前置インクリメント -- 前置デクリメント

+ 単項+

- 単項-

(9)

演算子の種類

いろいろな演算子

演算子 名前 優先順位 結合規則

* 間接参照

2 右から左(←)

& アドレス

sizeof サイズ

(type) キャスト 3 右から左(←)

* 乗算

4 左から右(→)

/ 除算

% 剰余

+ 加算

5 左から右(→)

- 減算

<< 左シフト

6 左から右(→)

>> 右シフト

(10)

演算子の種類

いろいろな演算子

演算子 名前 優先順位 結合規則

< より大きい

7 左から右(→)

<= 以上

> 未満

>= 以下

== 等価

8 左から右(→)

!= 不等価

& ビット論理積 9 左から右(→)

^ ビット排他的論理和 10 左から右(→)

| ビット論理和 11 左から右(→)

&& 論理積 12 左から右(→)

|| 論理和 13

? : 条件 14 右から左(←)

(11)

演算子の種類

いろいろな演算子

演算子 名前 優先順位 結合規則

= 代入

15 右から左(←)

+=

複合代入 -=

*=

/=

%=

<<=

>>=

|=

^=

&=

, コンマ(順次) 16 左から右(→)

(12)

演算子の種類

演算子の種類

単項演算子

オペランドを1つとる演算子(負の数を表す - など)

-1 -num

2項演算子

オペランドを2つとる演算子(四則演算など)

3 + 5, num1 + num2

5 3

1

num1 num2

3 5

num

1

(13)

演算子の種類

算術演算子

四則演算(+,-,*,/)と剰余(%)など

10 % 3 は,10

3

で割った余り

式1 式2

式1 式2 式1 式2 式1 式2 式1 式2

式1と式2の和

式1と式2の差 (式1から式2を減じる)

式1と式2の積

式1と式2の商 (式1を式2で割る)

式1と式2の剰余 (式1を式2を割った余り)

(14)

複合代入演算子

算術演算子などと組み合わせた代入演算子

演算子の種類

演算子 説明 使用例 意味

+=

変数の値との加算を変数に代入する

a += 5; a = a + 5;

-=

変数の値との減算を変数に代入する

a -= 5; a = a - 5;

*=

変数の値との乗算を変数に代入する

a *= 5; a = a * 5;

/=

変数の値との除算を変数に代入する

a /= 5; a = a / 5;

%=

変数の値との余算を変数に代入する

a %= 5; a = a % 5;

a

10

15

a + 5 (すなわち,10 + 5)の評価結果 15 a に代入する(15 a に上書きする)

複合代入演算子の使用例 1:2:

3:4:

5:6:

7:8:

9:

int main(void) { int a = 10;

a += 5;

printf("a = %d¥n", a);

return 0;

}

実行結果 a = 15

(15)

演算子の種類

インクリメント演算子,デクリメント演算子

変数の値を1増やす、あるいは1減らすための演算子

繰り返し処理の回数を数える場合などによく利用される

演算子 呼び名 使用例 説明

++

インクリメント演算子

a++;

++a;

変数 a 1 を加える a = a + 1; とも書ける

--

デクリメント演算子

a--;

--a;

変数 a から 1 を引く a = a – 1; とも書ける

a

10 11

a + 1 (すなわち,10 + 1)の

評価結果 11 を a に代入する

インクリメント演算子の使用例 1:2:

3:4:

5:6:

7:8:

9:

int main(void) { int a = 10;

a++;printf("a = %d¥n", a);

return 0;

}

実行結果 a = 11

(16)

演算子の種類

インクリメント演算子,デクリメント演算子の注意点

インクリメント,デクリメントの結果を他の変数に代入する際,

演算子を前に置くか後ろに置くかで代入結果が違ってくる

b に a の値が代入されてから

a に +1 する

a に +1 してから その結果を b に代入する 前置インクリメント演算子の場合 1:2:

3:4:

5:6:

7:8:

9:10:

int main(void) { int a = 10,b;

b = ++a;

printf("a = %d¥n", a);

printf("b = %d¥n", b);

return 0;

} 後置インクリメント演算子の場合

1:2:

3:4:

5:6:

7:8:

9:10:

int main(void) { int a = 10,b;

b = a++;

printf("a = %d¥n", a);

printf("b = %d¥n", b);

return 0;

} 実行結果

a = 11 b = 10

実行結果 a = 11 b = 11 b = a;

a = a + 1;

a = a + 1;

b = a;

(17)

演算子の優先順位

優先順位

実際に演算を行う場合の優先順位のこと

1 + 2 * 3

のような演算子が複数ある式の場合,優先順位が

高い演算子から演算を実行していく

1 + 2 * 3

C言語では*が+よりも優先順位が高い

*の演算を先に実行

次に+の演算を実行

1 +

各演算子間の優先順位は,この資料の8~12ページの表を参照

(18)

演算子の優先順位

優先順位の変更

括弧( )を使って,先に計算したい部分式を括ると括弧内を 先に計算することができる

1 + 2 * 3

において,1 + 2 を先に計算したい場合

(1 + 2) * 3 とする

1つの式で複数の演算子を使う場合は括弧を用いて 演算の優先順位を明示すること

(19)

演算子の結合規則

優先順位が等しい場合

演算子が左結合か右結合かで処理が異なる

左結合: 左の演算子を先に計算する

右結合: 右の演算子を先に計算する

左結合の例:

a + b + c (a + b) + c

右結合の例:

a = b = c a = (b = c)

+ 演算子は左結合

= 演算子は右結合

左の演算子が先に計算される

右の演算子が先に計算される

演算子間の結合方向は,この資料の8~12ページの表を参照

aとbが加算されたあと その結果とcが加算される

cの値がbに代入されたあと bの値がaに代入される

(cの値がbとaに代入される)

(20)

型変換

型変換

データ型を変換すること

異なるデータ型の変数への代入

異なるデータ型の数値が混在した式の計算 などで使う

型変換には

式の計算や代入の処理の中で自動的に行われるもの

キャスト演算子を用いて明示的に型変換を指定するもの がある

(21)

自動的な型変換

異なるデータ型の数値の演算を行ったときに自動的に変換

1 + 0.5 1.0 + 0.5

1.5

型変換

自動的な型変換は、型変換によって情報が失われないように 大きな型(次ページ)にあわせて変換される

int型

double型に 変換される

double型

int型とdouble型の演算では int型の値がdouble型の値に

自動変換される

演算結果はdouble型となる

(22)

型変換

データ型間の大小関係

例 :

int型 と double型

int型のデータ(整数)は double型でも表現できる double型のデータ(小数)は

int型では表現できない

int型よりもdouble型の方が

「大きい」という

大きなサイズの型に変換しても情報は失われない

小さなサイズの型に変換すると情報が失われる場合がある

double型からint型に変換 1:

2:

3:

4:

5:

double a = 1.2;

int b;

b = a;

printf("b = %d¥n", b);

実行結果 b = 1

情報が失われる(0.2がカットされる)

int型からdouble型に変換 1:

2:

3:

4:

5:

int a = 3;

double b;

b = a;

printf("b = %lf¥n", b);

実行結果 b = 3.000000

情報は失われない

(23)

型変換

異なるデータ型での計算(1)

int main(void) {

short int a;

int b = 60000;

int c;

float d = 9.5;

a = b;

printf("a = %d¥n", a);

c = d;

printf("c = %d¥n", c);

return 0;

}

short int型の変数が格納できる値の範囲が int型の変数より小さいので

オーバーフローを起こす

float型の変数に格納されている値を int型の変数に代入すると

小数点以下が切り捨てられる

異なるデータ型での計算(1)

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

13:

14:

15:

int main(void) {

short int a;

int b = 60000;

int c;

float d = 9.5;

a = b;

printf("a = %d¥n", a);

c = d;

printf("c = %d¥n", c);

return 0;

}

実行結果 a = -5536 c = 9

(24)

型変換

異なるデータ型での計算(2)

c = a / b; において

① まず,int型変数 a,b の割り算を行う.

このとき,どちらも int型 なので,

5 / 2 の結果は 2.5 ではなく,

小数点以下が切り捨てられて 2 となる

② 計算結果 2 が float型 に変換されて 2.0 となり,float型変数 c に格納される

異なるデータ型での計算(2)

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

int main(void) {

int a = 5,b = 2;

float c;

c = a / b;

printf("c = %f¥n", c);

return 0;

}

実行結果 c = 2.00000

(25)

型変換

明示的な型変換 : キャスト演算子

強制的に(明示的に)変数(値)のデータ型を変換させる

c = (float)a / (float)b; において

int型変数 a,b に代入されている値が

それぞれ 5.0, 2.0 に変換される

5.0 / 2.0 の計算結果 2.5 float型変数 c に格納される 型変換(キャスト演算子の書式)

(変換したい型名)変数名(または値);

型変換(キャスト演算子)

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

int main(void) {

int a = 5,b = 2;

float c;

c = (float)a / (float)b;

printf("c = %f¥n", c);

return 0;

}

実行結果 c = 2.50000

(26)

講義のまとめ

式の評価

演算子

単項演算子,2項演算子

算術演算子

複合代入演算子

インクリメント演算子,デクリメント演算子

優先順位,結合規則

型変換

型の大小関係

自動変換,キャスト変換

参照

関連したドキュメント

7ORDER LIVE FACTORY 「脱色と着色」~FINAL~ 追加公演情報 11月3日(木・祝)【1回目】開場 13:00/開演 14:00 【2回目】開場 17:30/開演

上であることの確認書 1式 必須 ○ 中小企業等の所有が二分の一以上であることを確認 する様式です。. 所有等割合計算書

参加アーティスト 出演者 ソナーポケット 内容:14時30 開会式. 15:00

社会調査論 調査企画演習 調査統計演習 フィールドワーク演習 統計解析演習A~C 社会統計学Ⅰ 社会統計学Ⅱ 社会統計学Ⅲ.

ナレーション/竹下 恵  フルート/白木彩子 チェロ/井上 忍  ピアノ/安浪由紀子

地域の RECO 環境循環システム.. 小松電子株式会社

2022.7.1 東京電力ホールディングス株式会社 東京電力ホールディングス株式会社 渡辺 沖

概念と価値が芸術を作る過程を通して 改められ、修正され、あるいは再確認