49
C 言言言言 言言言言言言

5_C言語入門 - 変数について

  • Upload
    bcrikko

  • View
    599

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 5_C言語入門 - 変数について

C 言語入門~ 変数について ~

Page 2: 5_C言語入門 - 変数について

2本日の目標

• 変数のしくみを理解する

• scanf 、 getchar の使い方を理解する

Page 3: 5_C言語入門 - 変数について

データを記憶したい

Page 4: 5_C言語入門 - 変数について

変数を使えば記憶できる

Page 5: 5_C言語入門 - 変数について

5変数とは

• データを一時的に記憶するためのしくみ

• 文字、整数、小数なんでも記憶できる

• メモリが許す限りいくらでも使える

「やさしい C 」 p.46

変数

10.5123‘A’

Page 6: 5_C言語入門 - 変数について

変数がいっぱいあったらどれがどれかわからない?

Page 7: 5_C言語入門 - 変数について

変数には名前がつけられる

Page 8: 5_C言語入門 - 変数について

8変数に名前をつける

「やさしい C 」 p.47

血液型 値段 距離

10.5123‘A’

箱に何が入っているか、ひと目でわかる!変数の名前のことを「識別子」と呼ぶ

Page 9: 5_C言語入門 - 変数について

9変数の型(形式)

• 変数には種類がある

• 種類のことをデータの「型」と呼ぶ

「やさしい C 」 p.49

血液型 値段 距離

10.5123‘A’

char :文字を記憶

int :整数を記憶 float :小数を記憶double :小数を記憶

Page 10: 5_C言語入門 - 変数について

なんで「型」が必要なの?

Page 11: 5_C言語入門 - 変数について

11データ型の必要性①

• メモリ上の「箱」を効率的に使うため

1 番地 2 番地 3 番地 4 番地 5 番地 6 番地… …

文字型は 1 個あれば OK 整数型は 4 個必要

「型」が決まっていないと、多めにメモリ上の「箱」を用意しなければならない

Page 12: 5_C言語入門 - 変数について

12データ型の必要性②

• 変数の整合性を保つため

値段

123

値段

‘A’

値段

‘A’

「値段」を計算したい 誰かが「値段」に血液型(’ A’ )を入れた

「値段 (‘A’) 」 ×10個→ 計算ができない ?!「型」が決まっていないと、想定外の「値」になってしまう

Page 13: 5_C言語入門 - 変数について

13型の種類①

• 「やさしい C 」 p.49• 「型」は必要に応じて選択する

–記憶できるサイズが大きければ

良いわけではない

「やさしい C 」 p.49

Page 14: 5_C言語入門 - 変数について

14型の種類②

float 型

double型

はどっちがいいか?

double 型 が良く使われる

Page 15: 5_C言語入門 - 変数について

15型の種類③

• double 型のメリット

–精度が高い(誤差が少ない)

–計算が速い

• double 型のデメリット

– float 型の倍のメモリが必要

Page 16: 5_C言語入門 - 変数について

変数を使うためには「宣言」が必要

Page 17: 5_C言語入門 - 変数について

17変数の宣言

• 変数を使うためには、用意が必要

• 用意することを「変数を宣言する」とい

「やさしい C 」 p.53

型 変数名 ; int price;

Page 18: 5_C言語入門 - 変数について

18メモリ上の変数のイメージ

1 番地 2 番地 3 番地 4 番地 5 番地 6 番地… …

メモリ

3 ~ 6 番地を「値段」という名前の変数で使います!

int price;

Page 19: 5_C言語入門 - 変数について

変数に値を記憶させたい

Page 20: 5_C言語入門 - 変数について

20値の代入

• 変数に値を記憶させることを

「値を代入する」という

「やさしい C 」 p.55

変数名 = 値 ; price = 123;

「 = 」は、 price と 123 が等しいわけではない値を代入することを「 = 」と表す

Page 21: 5_C言語入門 - 変数について

変数を使ってみる

Page 22: 5_C言語入門 - 変数について

22変数を使ってみる

「やさしい C 」 p.56

変数 num の値は 3 です。 続行するには何かキーを押してください . . .

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

実行結果

#include <stdio.h>   int main(void) { int num; num = 3; printf(“ 変数 num の値は %d です。 \n”, num);

return 0; }

Page 23: 5_C言語入門 - 変数について

23変数を使ってみる

「やさしい C 」 p.56

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

#include <stdio.h>   int main(void) { int num; num = 3; printf(“ 変数 num の値は %d です。 \n”, num);

return 0; }

num

整数型の変数「 num 」

Page 24: 5_C言語入門 - 変数について

24変数を使ってみる

「やさしい C 」 p.56

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

#include <stdio.h>   int main(void) { int num; num = 3; printf(“ 変数 num の値は %d です。 \n”, num);

return 0; }

num

3

変数 num に3 を代入する

Page 25: 5_C言語入門 - 変数について

25変数を使ってみる

「やさしい C 」 p.56 ~ 57

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

#include <stdio.h>   int main(void) { int num; num = 3; printf(“ 変数 num の値は %d です。 \n”, num);

return 0; }

num

3

変数 num を表示する

Page 26: 5_C言語入門 - 変数について

26変数を使ってみる

「やさしい C 」 p.56 ~ 57

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

#include <stdio.h>   int main(void) { int num; num = 3; printf(“ 変数 num の値は %d です。 \n”, num);

return 0; }

1 行で書ける ( 初期化 )「 int num = 3; 」

Page 27: 5_C言語入門 - 変数について

初期化の重要性

Page 28: 5_C言語入門 - 変数について

28初期化の重要性

「やさしい C 」 p.58

#include <stdio.h>   int main(void) { int num; printf(“ 変数 num の値は %d です。 \n”, num);

return 0; }

初期化しない場合

変数 num の値は 1989929336 です。 続行するには何かキーを押してください . . .

実行結果

メモリ上にゴミが残っており意図しない値が表示される

Page 29: 5_C言語入門 - 変数について

変数の変更・コピー

Page 30: 5_C言語入門 - 変数について

30変数の変更・コピー

• 「やさしい C 」 p.59 ~ 62

Page 31: 5_C言語入門 - 変数について

キーボードからの入力を受け取りたい

Page 32: 5_C言語入門 - 変数について

32キーボードからの入力

• 「やさしい C 」 p.65

「やさしい C 」 p.65

Page 33: 5_C言語入門 - 変数について

33キーボードからの入力①

「やさしい C 」 p.66

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

#include <stdio.h>   int main(void) { int num; printf(“ 整数を入力してください。 \n”); scanf("%d", &num);

printf(“%d が入力されました。 \n”); return 0; }

キーボードからの入力を受け取る処理(関数)

& については「 9.1 アドレス」で学ぶ

入力した値は変数 num に代入される

Page 34: 5_C言語入門 - 変数について

34scanf でエラーが出た場合

• scanf はセキュリティ上の問題がある

–使う場合は先頭に「 #define _CRT_SECURE_NO_WARNINGS 1 」と書く

• 仕事では絶対に使ってはダメ(学習なら OK )

– scanf_s などを代用する

Page 35: 5_C言語入門 - 変数について

35キーボードからの入力②

データ型 入力( scanf ) 出力( printf )

int

float

double

「やさしい C 」 p.66 ~ 68

scanf(“%d”, & 変数 );

scanf(“%f”, & 変数 );

scanf(“%lf”, & 変数 );

printf(“%d”, 変数 );

printf(“%f”, 変数 );

printf(“%f”, 変数 );

double 型の変換仕様は入力と出力で異なるので注意

Page 36: 5_C言語入門 - 変数について

文字の入力

Page 37: 5_C言語入門 - 変数について

37文字の入力

• 「やさしい C 」 p.69

「やさしい C 」 p.69

Page 38: 5_C言語入門 - 変数について

38文字の入力

「やさしい C 」 p.70

a が入力されました。 続行するには何かキーを押してください . . .

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

実行結果

#include <stdio.h>   int main(void) { char ch; printf(" 文字を入力してください。(英数字) \n"); ch = getchar(); printf("%c が入力されました。 \n", ch); return 0; }

キーボードからの入力を受け取る処理(関数)

入力した文字は変数 ch に代入される

Page 39: 5_C言語入門 - 変数について

演習の前に、プログラマの考え方

を学ぶ

Page 40: 5_C言語入門 - 変数について

40自分の年齢を入力し、表示させる( ex05-01.c )

#include <stdio.h>   int main(void) { printf(“ 私は 20 歳です。 \n"); return 0; }

私は 20 歳です。 続行するには何かキーを押してください . . .

実行結果

プログラマの考え方①

まずは出力から(問題を分割する)

求められる結果を出力する(問題を単純化する)

Page 41: 5_C言語入門 - 変数について

41自分の年齢を入力し、表示させる( ex05-01.c )

#include <stdio.h>   int main(void) { printf(“ 私は %d 歳です。 \n", 20); return 0; }

私は 20 歳です。 続行するには何かキーを押してください . . .

実行結果

プログラマの考え方②

変換仕様を使ってみる

結果は変わらない

Page 42: 5_C言語入門 - 変数について

42自分の年齢を入力し、表示させる( ex05-01.c )

#include <stdio.h>   int main(void) { int myAge; myAge = 20; printf(“ 私は %d 歳です。 \n", myAge); return 0; }

私は 20 歳です。 続行するには何かキーを押してください . . .

実行結果

プログラマの考え方③

変数を使ってみる

結果は変わらない

Page 43: 5_C言語入門 - 変数について

43自分の年齢を入力し、表示させる( ex05-01.c )

#include <stdio.h>   int main(void) { int myAge; scanf("%d", &myAge); printf(“ 私は %d 歳です。 \n", myAge); return 0; }

私は 20 歳です。 続行するには何かキーを押してください . . .

実行結果

プログラマの考え方④

キーボードからの入力に変えてみる

Page 44: 5_C言語入門 - 変数について

44プログラマの考え方⑤

1. 問題を分割する年齢を入力する、年齢を出力する

2. 知っているところから始める出力なので、 printf を使ってみる

3. 問題を簡略化するそのまま年齢を表示してみる

4. 類似点を探す過去の問題に似たような問題がなかったか探す

5. 実験する変換仕様に変えてみる、変数に変えてみる、他に良い方法がないか試してみる

6. イライラしないわかるものもわからなくなる。イライラしたら休憩、ストレッチをする

Page 45: 5_C言語入門 - 変数について

演習

Page 46: 5_C言語入門 - 変数について

46演習問題①

1. 自分の年齢を入力し、表示させる(ファイル名: ex05-01.c )

2. 円周率( π )の値を入力し、表示させる (ファイル名: ex05-02.c )

3. 今日の日付を入力し、表示させる (ファイル名: ex05-03.c )

4. 現在の消費税率を入力し、表示させる (ファイル名: ex05-04.c )

5. 税抜価格を入力し、税込価格を表示させる(ファイル名: ex05-05.c )

6. 体重( kg )と身長( m )を入力し、 BMI を表示させる※ヒント: BMI = 体重 (kg) ÷ ( 身長 (m) × 身長 (m)) (ファイル名: ex05-06.c )

Page 47: 5_C言語入門 - 変数について

47演習問題②

7. 底辺と高さを入力して、三角形の面積を表示させる(ファイル名: ex05-07.c )

8. 上底、下底、高さを入力して、台形の面積を表示させる※ヒント:台形の面積 = (上底 + 下底) × 高さ ÷ 2 (ファイル名: ex05-08.c )

Page 48: 5_C言語入門 - 変数について

48特別問題①

• 変数の中身を入れ替える(ファイル名: swap.c )#include <stdio.h>   int main(void) { int num1, num2; num1 = 1; num2 = 2; printf(“ 入れ替え前: num1 は %d 、 num2 は %d\n", num1, num2);

printf(“ 入れ替え後: num1 は %d 、 num2 は %d\n", num1, num2); return 0; }

入れ替え前: num1 は 1 、 num2 は 2 入れ替え後: num1 は 2 、 num2 は 1 続行するには何かキーを押してください . . .

実行結果

ここに処理を追加して、変数の値を入れ替える

ヒント:変数をもう 1 個使う

Page 49: 5_C言語入門 - 変数について

49特別問題②

• 入力した西暦がうるう年か判定する (ファイル名: LeapYear.c )

• 条件– 西暦が 4 で割り切れる場合は、うるう年

– 西暦が 100 で割り切れる場合は、うるう年ではない

– しかし、西暦が 400 で割り切れる場合は、うるう年

うるう年 ・ 2004 年 ・ 2000 年 ・ 1600 年

平年 ・ 2015 年 ・ 1900 年 ・ 2100 年