32
C 言言言言 言言言言言言言言言

6_C言語入門 - 式と演算子について

  • Upload
    bcrikko

  • View
    596

  • Download
    2

Embed Size (px)

Citation preview

Page 1: 6_C言語入門 - 式と演算子について

C 言語入門~ 式と演算子について ~

Page 2: 6_C言語入門 - 式と演算子について

2本日の目標

• 式のしくみを覚える

• 演算子の使い方を覚える

Page 3: 6_C言語入門 - 式と演算子について

計算するときは「式」を使う

Page 4: 6_C言語入門 - 式と演算子について

4「式」を使う

「やさしい C 」 p.76

1 2 3+ =

オペランド オペランド演算子

計算することを「式を評価する」という

Page 5: 6_C言語入門 - 式と演算子について

基本的には算数の四則演算と同じ

Page 6: 6_C言語入門 - 式と演算子について

6式の値を出力する①

「やさしい C 」 p.77

#include <stdio.h>

int main(void) { printf("1+2 は %d です。 \n", 1 + 2); printf("3×4 は %d です。 \n", 3 * 4);

/* おまけ */ // 引き算 printf("5-6 は %d です。 \n", 5 - 6); // 割り算 printf("7÷8 は %d です。 \n", 7 / 8); // ←0 になる printf("7÷8 は %f です。 \n", 7 / 8); // ←0.000000 になる printf("7÷8 は %f です。 \n", 7.0 / 8.0); // ←0.875000 になる

return 0; }

入力するプログラム( Sample1.c )

(解に小数が含まれる)割り算の場合は、要注意!!

Page 7: 6_C言語入門 - 式と演算子について

7式の値を出力する②

// 割り算 printf("7÷8 は %d です。 \n", 7 / 8); // ←0 になる

printf("7÷8 は %f です。 \n", 7 / 8); // ←0.000000 になる

printf("7÷8 は %f です。 \n", 7.0 / 8.0); // ←0.875000 になる

入力するプログラム( Sample1.c )変換仕様が「 %d 」のため、小数点以下が表示されない

変換仕様を「 %f 」に変えたが、整数型どうしの割り算のため小数点以下が切り捨てられる

7.0 や 8.0 は小数型小数型どうしの割り算のため

小数点以下も計算される

Page 8: 6_C言語入門 - 式と演算子について

87 と 7.0 の違い

printf(“7 のバイト数 :%d byte\n", sizeof(7)); // → 4 byte

printf(“7.0 のバイト数 :%d byte\n", sizeof(7.0));// → 8 byte

「 7 」は C 言語には整数型 (int) と認識されている

「 7.0 」は C 言語には小数型 (double) と認識されてい

る※sizeof は、型や式のサイズを調べる関数 詳しくは p.92 「 sizeof 演算子」で学ぶ

Page 9: 6_C言語入門 - 式と演算子について

変数どうしの計算もできる

Page 10: 6_C言語入門 - 式と演算子について

10変数どうしの計算①

「やさしい C 」 p.78

入力するプログラム( Sample2.c )

#include <stdio.h>   int main(void) { int num1 = 2; int num2 = 3; int sum = num1 + num2;

printf(" 変数 num1 の値は %d です。 \n", num1); printf(" 変数 num2 の値は %d です。 \n", num2); printf("num1+num2 の値は %d です。 \n", sum);

num1 = num1 + 1;   printf(" 変数 num1 の値に 1 をたすと %d です。 \n", num1);

return 0; }

num1

2

num2

3

sum

5

Page 11: 6_C言語入門 - 式と演算子について

11変数どうしの計算②

「やさしい C 」 p.78

入力するプログラム( Sample2.c )

#include <stdio.h>   int main(void) { int num1 = 2; int num2 = 3; int sum = num1 + num2;

printf(" 変数 num1 の値は %d です。 \n", num1); printf(" 変数 num2 の値は %d です。 \n", num2); printf("num1+num2 の値は %d です。 \n", sum);

num1 = num1 + 1;   printf(" 変数 num1 の値に 1 をたすと %d です。 \n", num1);

return 0; }

num1

2

1

num1

3

変数と値でも計算できる

Page 12: 6_C言語入門 - 式と演算子について

演算子はいっぱいある

Page 13: 6_C言語入門 - 式と演算子について

13いろいろな演算子

• 「やさしい C 」 p.82

「やさしい C 」 p.82

Page 14: 6_C言語入門 - 式と演算子について

14よく使われる演算子

  記号 種類 使用例

算術演算子

+ 加算 x + y- 減算 x - y* 乗算 x * y/ 除算 x / y% 剰余 x % y

比較演算子

> より大きい x > y>= 以上 x >= y< より小さい x < y

<= 以下 x <= y== 等価 X == y!= 非等価 X != y

論理演算子&& 論理積( AND ) x && y|| 論理和( OR ) x || y! 否定( NOT ) !x

算術演算子は、計算でよく使われる

※ 「 * 」はポインタでも使われるので注意!

比較演算子と論理演算子は、条件分岐でよく使われる

「やさしい C 」 p.82

Page 15: 6_C言語入門 - 式と演算子について

ある演算子は式を省略してくれる

Page 16: 6_C言語入門 - 式と演算子について

16インクリメントとデクリメント

「やさしい C 」 p.84

// インクリメント int a = 0; a = a + 1; a++; ++a;

  // デクリメント int b = 0; b = b - 1; b--; --b;

ぜんぶ同じ意味

※++ の場所によって 計算順序が変わる

ぜんぶ同じ意味

※-- の場所によって 計算順序が変わる

インクリメント、デクリメントは繰り返し処理の中でよく使う

Page 17: 6_C言語入門 - 式と演算子について

17++ と -- の場所による違い

• 「やさしい C 」 p.86• 前置: a を 1 増やす → b に代入

• 後置: b に代入 → a を 1 増やす

「やさしい C 」 p.86

Page 18: 6_C言語入門 - 式と演算子について

++ や -- 以外にも式を省略する演算子

Page 19: 6_C言語入門 - 式と演算子について

19代入演算子

• 「やさしい C 」 p.88• a = a + b → a += b• a = a – b → a -= b• a = a * b → a *= b• a = a / b → a /= b

「やさしい C 」 p.88

Page 20: 6_C言語入門 - 式と演算子について

20型や式のサイズを知りたい

• 「やさしい C 」 p.92• sizeof は型や式のメモリサイズを見る

• 配列の要素数を調べるときなどに使う

「やさしい C 」 p.92

Page 21: 6_C言語入門 - 式と演算子について

21シフト演算子

• 「やさしい C 」 p.93• 2進数の値を左にずらす( 2 倍する)、

または右にずらす( 1/ 2する)ときに使

• 具体的にはフラグ管理や演算の高速化のた

めに使う

(よりハードウェアに近い実装になる)「やさしい C 」 p.93

Page 22: 6_C言語入門 - 式と演算子について

演算子の評価順には注意

Page 23: 6_C言語入門 - 式と演算子について

23演算子の優先順位

• 「やさしい C 」 p.96• 四則演算では × > ÷ > + > - の順で

計算したように、演算子には評価する優先

順位がある

• 優先順位があいまいなときは()でく

くった方が無難 [ 例: sum = (1 * 2) / (3 – 4)]「やさしい C 」 p.96

Page 24: 6_C言語入門 - 式と演算子について

続きは次回以降

Page 25: 6_C言語入門 - 式と演算子について

演習問題

Page 26: 6_C言語入門 - 式と演算子について

26演習問題

(1) x = 1 + 2 + 3 ;(2) x = 1 + 2 - 3 ;

(4) x = 1 * 2 + 3 ;(5) x = 1 + 2 * 3 ;(6) x = 8 + 2 * 3 ;

(3) x = 1 - 2 - 3 ;

(7) x = 8 / 2 * 3 ;(8) x = 8 / 2 + 3 ;(9) x = 8 * 2 - 5 ;(10) x = 8 * 2 + 5 ;

(11) x = 8 * 2 / 3 ;(12) x = 8 % 3 ;

(14) x = 5.0 / 2.0 ;(15) x = 5 / 2.0 ;(16) x = 5.0 / 2 ;

(13) x = 8 * 2 % 3 ;

(17) x = 5 / 2 ;(18) x = 5 ; y = 3 ; x += y ;(19) x = sizeof ( int ) ;

計算結果( x の値)を考える

Page 27: 6_C言語入門 - 式と演算子について

特別問題

Page 28: 6_C言語入門 - 式と演算子について

28特別問題①

1. 数値を入力して、偶数なら「 even 」、奇数なら「 odd 」と表示する– 必要知識:条件分岐

2. ふたつの数値を入力して、大きい方を表示する。ただし、ふたつの値が同じなら「 equal 」と表示する– 必要知識:条件分岐

3. 10 個の数値を入力して、最大値と最小値を表示する– 必要知識:条件分岐、繰り返し処理

Page 29: 6_C言語入門 - 式と演算子について

29特別問題②

4. FizzBuzz 問題

– 必要知識:条件分岐、繰り返し処理– 1 から 100 まで表示する– 3 で割り切れる場合は、「 Fizz 」と表示– 5 で割り切れる場合は、「 Buzz 」と表示– 3 でも 5 でも割り切れる場合は、「 FizzBuzz 」と

表示– 例: 1, 2, Fizz, 4, Buzz, Fizz, 7, ~ 14, FizzBuzz,

16

Page 30: 6_C言語入門 - 式と演算子について

30特別問題③

5. 3 ごと増える等差数列を 1 から 100 まで表示

– 必要知識:繰り返し処理

– 例: 1, 4, 7, 10, 13, 16,  …

6. 3 倍ごと増える等比数列を 1 から 100 まで表示

– 必要知識:繰り返し処理

– 例: 1, 3, 9, 27, 81

7. フィボナッチ数列を 1 から 100 まで表示

– 必要知識:繰り返し処理

– 例: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …

Page 31: 6_C言語入門 - 式と演算子について

31特別問題④

8. 「*」を出力し、以下の図形を表示する

– 必要知識:繰り返し処理

図形1************************************

図形 2*********************

図形 3*********************

図形 4 * ** *** **** ***********

図形 5****************

Page 32: 6_C言語入門 - 式と演算子について

32特別問題(提供問題)

1. 1 ~ 100 までの階差数列を表示する

必要知識:繰り返し処理

例: 1, 2, 4, 7, 11, 16, 22, 29 …2. 1 ~ 100 までの素数を表示する

必要知識:条件分岐、繰り返し処理

例: 2, 3, 5, 7, 11, 13, 17, …できたら性能(プログラムの効率)も考えてみてください

3. ふたつの数値を入力して、最大公約数と最小公倍数をそれぞれ表

示する

必要知識:条件分岐、繰り返し処理