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

More Related Content

What's hot

プログラミング技法特論第6回
プログラミング技法特論第6回プログラミング技法特論第6回
プログラミング技法特論第6回
Noritada Shimizu
 

What's hot (20)

Indeedなう 予選B 解説
Indeedなう 予選B 解説Indeedなう 予選B 解説
Indeedなう 予選B 解説
 
AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説AtCoder Regular Contest 034 解説
AtCoder Regular Contest 034 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
Abc009
Abc009Abc009
Abc009
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説
 
Arc015途中まで解説
Arc015途中まで解説Arc015途中まで解説
Arc015途中まで解説
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
プログラミング技法特論第6回
プログラミング技法特論第6回プログラミング技法特論第6回
プログラミング技法特論第6回
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
 
AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 

Viewers also liked

Viewers also liked (11)

7_C言語入門 - 型変換について
7_C言語入門 - 型変換について7_C言語入門 - 型変換について
7_C言語入門 - 型変換について
 
5_C言語入門 - 変数について
5_C言語入門 - 変数について5_C言語入門 - 変数について
5_C言語入門 - 変数について
 
1-2_C言語入門 - プログラマに必要な能力
1-2_C言語入門 - プログラマに必要な能力1-2_C言語入門 - プログラマに必要な能力
1-2_C言語入門 - プログラマに必要な能力
 
2_C言語入門 - VisualStudioについて
2_C言語入門 - VisualStudioについて2_C言語入門 - VisualStudioについて
2_C言語入門 - VisualStudioについて
 
9_C言語入門 - 条件分岐について(switch case)
9_C言語入門 - 条件分岐について(switch case)9_C言語入門 - 条件分岐について(switch case)
9_C言語入門 - 条件分岐について(switch case)
 
4_C言語入門 - n進数と基数変換について
4_C言語入門 - n進数と基数変換について4_C言語入門 - n進数と基数変換について
4_C言語入門 - n進数と基数変換について
 
1-1_C言語入門 - C言語について
1-1_C言語入門 - C言語について1-1_C言語入門 - C言語について
1-1_C言語入門 - C言語について
 
3_C言語入門 - C言語の基本
3_C言語入門 - C言語の基本3_C言語入門 - C言語の基本
3_C言語入門 - C言語の基本
 
11_C言語入門 - 繰り返し処理について
11_C言語入門 - 繰り返し処理について11_C言語入門 - 繰り返し処理について
11_C言語入門 - 繰り返し処理について
 
12_C言語入門 - 読みやすいソースコードを書く
12_C言語入門 - 読みやすいソースコードを書く12_C言語入門 - 読みやすいソースコードを書く
12_C言語入門 - 読みやすいソースコードを書く
 
C言語講習会資料(前半)
C言語講習会資料(前半)C言語講習会資料(前半)
C言語講習会資料(前半)
 

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

2011年11月11日
2011年11月11日2011年11月11日
2011年11月11日
nukaemon
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
 
2011年11月18日
2011年11月18日2011年11月18日
2011年11月18日
nukaemon
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
 
自然言語処理はじめました - Ngramを数え上げまくる
自然言語処理はじめました - Ngramを数え上げまくる自然言語処理はじめました - Ngramを数え上げまくる
自然言語処理はじめました - Ngramを数え上げまくる
phyllo
 

Similar to 6_C言語入門 - 式と演算子について (20)

ji-5. 繰り返し計算
ji-5. 繰り返し計算ji-5. 繰り返し計算
ji-5. 繰り返し計算
 
Algebraic DP: 動的計画法を書きやすく
Algebraic DP: 動的計画法を書きやすくAlgebraic DP: 動的計画法を書きやすく
Algebraic DP: 動的計画法を書きやすく
 
秀スクリプトの話
秀スクリプトの話秀スクリプトの話
秀スクリプトの話
 
第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)第15回 配信講義 計算科学技術特論B(2022)
第15回 配信講義 計算科学技術特論B(2022)
 
講座C入門
講座C入門講座C入門
講座C入門
 
C++によるソート入門
C++によるソート入門C++によるソート入門
C++によるソート入門
 
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISるC++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
 
2011年11月11日
2011年11月11日2011年11月11日
2011年11月11日
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
2011年11月18日
2011年11月18日2011年11月18日
2011年11月18日
 
Hupc 1
Hupc 1Hupc 1
Hupc 1
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
やさしく知りたいC言語
やさしく知りたいC言語やさしく知りたいC言語
やさしく知りたいC言語
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
C言語 学習教材
C言語 学習教材C言語 学習教材
C言語 学習教材
 
Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
JavaScriptクイックスタート
JavaScriptクイックスタートJavaScriptクイックスタート
JavaScriptクイックスタート
 
R言語勉強会#4.pdf
R言語勉強会#4.pdfR言語勉強会#4.pdf
R言語勉強会#4.pdf
 
自然言語処理はじめました - Ngramを数え上げまくる
自然言語処理はじめました - Ngramを数え上げまくる自然言語処理はじめました - Ngramを数え上げまくる
自然言語処理はじめました - Ngramを数え上げまくる
 

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