Upload
bcrikko
View
596
Download
2
Embed Size (px)
Citation preview
C 言語入門~ 式と演算子について ~
2本日の目標
• 式のしくみを覚える
• 演算子の使い方を覚える
計算するときは「式」を使う
4「式」を使う
「やさしい C 」 p.76
1 2 3+ =
オペランド オペランド演算子
計算することを「式を評価する」という
値
基本的には算数の四則演算と同じ
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 )
(解に小数が含まれる)割り算の場合は、要注意!!
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 は小数型小数型どうしの割り算のため
小数点以下も計算される
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 演算子」で学ぶ
変数どうしの計算もできる
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
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
変数と値でも計算できる
演算子はいっぱいある
13いろいろな演算子
• 「やさしい C 」 p.82
「やさしい C 」 p.82
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
ある演算子は式を省略してくれる
16インクリメントとデクリメント
「やさしい C 」 p.84
// インクリメント int a = 0; a = a + 1; a++; ++a;
// デクリメント int b = 0; b = b - 1; b--; --b;
ぜんぶ同じ意味
※++ の場所によって 計算順序が変わる
ぜんぶ同じ意味
※-- の場所によって 計算順序が変わる
インクリメント、デクリメントは繰り返し処理の中でよく使う
17++ と -- の場所による違い
• 「やさしい C 」 p.86• 前置: a を 1 増やす → b に代入
• 後置: b に代入 → a を 1 増やす
「やさしい C 」 p.86
++ や -- 以外にも式を省略する演算子
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
20型や式のサイズを知りたい
• 「やさしい C 」 p.92• sizeof は型や式のメモリサイズを見る
• 配列の要素数を調べるときなどに使う
「やさしい C 」 p.92
21シフト演算子
• 「やさしい C 」 p.93• 2進数の値を左にずらす( 2 倍する)、
または右にずらす( 1/ 2する)ときに使
う
• 具体的にはフラグ管理や演算の高速化のた
めに使う
(よりハードウェアに近い実装になる)「やさしい C 」 p.93
演算子の評価順には注意
23演算子の優先順位
• 「やさしい C 」 p.96• 四則演算では × > ÷ > + > - の順で
計算したように、演算子には評価する優先
順位がある
• 優先順位があいまいなときは()でく
くった方が無難 [ 例: sum = (1 * 2) / (3 – 4)]「やさしい C 」 p.96
続きは次回以降
演習問題
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 の値)を考える
特別問題
28特別問題①
1. 数値を入力して、偶数なら「 even 」、奇数なら「 odd 」と表示する– 必要知識:条件分岐
2. ふたつの数値を入力して、大きい方を表示する。ただし、ふたつの値が同じなら「 equal 」と表示する– 必要知識:条件分岐
3. 10 個の数値を入力して、最大値と最小値を表示する– 必要知識:条件分岐、繰り返し処理
29特別問題②
4. FizzBuzz 問題
– 必要知識:条件分岐、繰り返し処理– 1 から 100 まで表示する– 3 で割り切れる場合は、「 Fizz 」と表示– 5 で割り切れる場合は、「 Buzz 」と表示– 3 でも 5 でも割り切れる場合は、「 FizzBuzz 」と
表示– 例: 1, 2, Fizz, 4, Buzz, Fizz, 7, ~ 14, FizzBuzz,
16
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, …
31特別問題④
8. 「*」を出力し、以下の図形を表示する
– 必要知識:繰り返し処理
図形1************************************
図形 2*********************
図形 3*********************
図形 4 * ** *** **** ***********
図形 5****************
32特別問題(提供問題)
1. 1 ~ 100 までの階差数列を表示する
必要知識:繰り返し処理
例: 1, 2, 4, 7, 11, 16, 22, 29 …2. 1 ~ 100 までの素数を表示する
必要知識:条件分岐、繰り返し処理
例: 2, 3, 5, 7, 11, 13, 17, …できたら性能(プログラムの効率)も考えてみてください
3. ふたつの数値を入力して、最大公約数と最小公倍数をそれぞれ表
示する
必要知識:条件分岐、繰り返し処理