Upload
bcrikko
View
599
Download
0
Embed Size (px)
Citation preview
C 言語入門~ 変数について ~
2本日の目標
• 変数のしくみを理解する
• scanf 、 getchar の使い方を理解する
データを記憶したい
変数を使えば記憶できる
5変数とは
• データを一時的に記憶するためのしくみ
• 文字、整数、小数なんでも記憶できる
• メモリが許す限りいくらでも使える
「やさしい C 」 p.46
変数
10.5123‘A’
変数がいっぱいあったらどれがどれかわからない?
変数には名前がつけられる
8変数に名前をつける
「やさしい C 」 p.47
血液型 値段 距離
10.5123‘A’
箱に何が入っているか、ひと目でわかる!変数の名前のことを「識別子」と呼ぶ
9変数の型(形式)
• 変数には種類がある
• 種類のことをデータの「型」と呼ぶ
「やさしい C 」 p.49
血液型 値段 距離
10.5123‘A’
char :文字を記憶
int :整数を記憶 float :小数を記憶double :小数を記憶
なんで「型」が必要なの?
11データ型の必要性①
• メモリ上の「箱」を効率的に使うため
1 番地 2 番地 3 番地 4 番地 5 番地 6 番地… …
文字型は 1 個あれば OK 整数型は 4 個必要
「型」が決まっていないと、多めにメモリ上の「箱」を用意しなければならない
12データ型の必要性②
• 変数の整合性を保つため
値段
123
値段
‘A’
値段
‘A’
「値段」を計算したい 誰かが「値段」に血液型(’ A’ )を入れた
「値段 (‘A’) 」 ×10個→ 計算ができない ?!「型」が決まっていないと、想定外の「値」になってしまう
13型の種類①
• 「やさしい C 」 p.49• 「型」は必要に応じて選択する
–記憶できるサイズが大きければ
良いわけではない
「やさしい C 」 p.49
14型の種類②
float 型
double型
と
はどっちがいいか?
double 型 が良く使われる
15型の種類③
• double 型のメリット
–精度が高い(誤差が少ない)
–計算が速い
• double 型のデメリット
– float 型の倍のメモリが必要
変数を使うためには「宣言」が必要
17変数の宣言
• 変数を使うためには、用意が必要
• 用意することを「変数を宣言する」とい
う
「やさしい C 」 p.53
型 変数名 ; int price;
18メモリ上の変数のイメージ
1 番地 2 番地 3 番地 4 番地 5 番地 6 番地… …
メモリ
3 ~ 6 番地を「値段」という名前の変数で使います!
int price;
変数に値を記憶させたい
20値の代入
• 変数に値を記憶させることを
「値を代入する」という
「やさしい C 」 p.55
変数名 = 値 ; price = 123;
「 = 」は、 price と 123 が等しいわけではない値を代入することを「 = 」と表す
変数を使ってみる
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; }
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 」
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 を代入する
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 を表示する
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; 」
初期化の重要性
28初期化の重要性
「やさしい C 」 p.58
#include <stdio.h> int main(void) { int num; printf(“ 変数 num の値は %d です。 \n”, num);
return 0; }
初期化しない場合
変数 num の値は 1989929336 です。 続行するには何かキーを押してください . . .
実行結果
メモリ上にゴミが残っており意図しない値が表示される
変数の変更・コピー
30変数の変更・コピー
• 「やさしい C 」 p.59 ~ 62
キーボードからの入力を受け取りたい
32キーボードからの入力
• 「やさしい C 」 p.65
「やさしい C 」 p.65
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 に代入される
34scanf でエラーが出た場合
• scanf はセキュリティ上の問題がある
–使う場合は先頭に「 #define _CRT_SECURE_NO_WARNINGS 1 」と書く
• 仕事では絶対に使ってはダメ(学習なら OK )
– scanf_s などを代用する
35キーボードからの入力②
データ型 入力( scanf ) 出力( printf )
int
float
double
「やさしい C 」 p.66 ~ 68
scanf(“%d”, & 変数 );
scanf(“%f”, & 変数 );
scanf(“%lf”, & 変数 );
printf(“%d”, 変数 );
printf(“%f”, 変数 );
printf(“%f”, 変数 );
double 型の変換仕様は入力と出力で異なるので注意
文字の入力
37文字の入力
• 「やさしい C 」 p.69
「やさしい C 」 p.69
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 に代入される
演習の前に、プログラマの考え方
を学ぶ
40自分の年齢を入力し、表示させる( ex05-01.c )
#include <stdio.h> int main(void) { printf(“ 私は 20 歳です。 \n"); return 0; }
私は 20 歳です。 続行するには何かキーを押してください . . .
実行結果
プログラマの考え方①
まずは出力から(問題を分割する)
求められる結果を出力する(問題を単純化する)
41自分の年齢を入力し、表示させる( ex05-01.c )
#include <stdio.h> int main(void) { printf(“ 私は %d 歳です。 \n", 20); return 0; }
私は 20 歳です。 続行するには何かキーを押してください . . .
実行結果
プログラマの考え方②
変換仕様を使ってみる
結果は変わらない
42自分の年齢を入力し、表示させる( ex05-01.c )
#include <stdio.h> int main(void) { int myAge; myAge = 20; printf(“ 私は %d 歳です。 \n", myAge); return 0; }
私は 20 歳です。 続行するには何かキーを押してください . . .
実行結果
プログラマの考え方③
変数を使ってみる
結果は変わらない
43自分の年齢を入力し、表示させる( ex05-01.c )
#include <stdio.h> int main(void) { int myAge; scanf("%d", &myAge); printf(“ 私は %d 歳です。 \n", myAge); return 0; }
私は 20 歳です。 続行するには何かキーを押してください . . .
実行結果
プログラマの考え方④
キーボードからの入力に変えてみる
44プログラマの考え方⑤
1. 問題を分割する年齢を入力する、年齢を出力する
2. 知っているところから始める出力なので、 printf を使ってみる
3. 問題を簡略化するそのまま年齢を表示してみる
4. 類似点を探す過去の問題に似たような問題がなかったか探す
5. 実験する変換仕様に変えてみる、変数に変えてみる、他に良い方法がないか試してみる
6. イライラしないわかるものもわからなくなる。イライラしたら休憩、ストレッチをする
演習
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 )
47演習問題②
7. 底辺と高さを入力して、三角形の面積を表示させる(ファイル名: ex05-07.c )
8. 上底、下底、高さを入力して、台形の面積を表示させる※ヒント:台形の面積 = (上底 + 下底) × 高さ ÷ 2 (ファイル名: ex05-08.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 個使う
49特別問題②
• 入力した西暦がうるう年か判定する (ファイル名: LeapYear.c )
• 条件– 西暦が 4 で割り切れる場合は、うるう年
– 西暦が 100 で割り切れる場合は、うるう年ではない
– しかし、西暦が 400 で割り切れる場合は、うるう年
うるう年 ・ 2004 年 ・ 2000 年 ・ 1600 年
平年 ・ 2015 年 ・ 1900 年 ・ 2100 年