プログラミング基礎演習

鹿児島大学
プログラミング基礎演習
第4回
変数とはなにか?
半田利弘
鹿児島大学 大学院理工学研究科 物理・宇宙専攻
理化学研究所
前回やったこと
▶ 数値の計算結果を画面に書いた
▶ 常に同じ計算ならコンピュータは要らない
▶ 変数:時と場合によって示す値が変わる
▶ 運動エネルギー
理化学研究所
変数とは箱である
▶ 数値を入れる“容器”と考える
▶ 変数名
■
■
■
■
複数の容器を識別するために名前を付ける
定義・宣言:箱を用意する
代入:箱に入れる
参照:箱の中身を見る
理化学研究所
変数の種類:デジタルデータ
▶ あらゆるデータを2進数で表す
■
どう対応するかは規約で決める
▶ 数値:桁数が限られているのをどうするか?
■
■
■
整数:有効数字無限大、値の範囲が狭い
浮動小数点数:有効数字あり、値の範囲が広い
ビットパターン:8進数、16進数
理化学研究所
変数の種類:デジタルデータ
▶ 同じビットパターンでも状況が違うと違う意味
▶ 例えば00100000=0x20
■
■
整数だと 32
文字なら「 」
▶ 例えば01100011=0x63
■
■
整数だと 100
文字なら「c 」
理化学研究所
変数型
▶ ビットパターンと意味との対応を付ける
■
意味とビット長(大きさ)
▶ 多用される型
■
■
整数型、浮動小数点型、文字型
1バイト、単精度、倍精度、…
理化学研究所
変数の型宣言
▶ 変数を使う前に型を“宣言”する
■
■
コンピューターに箱を用意させる
種類は? 大きさは?
▶ 多用する型宣言
■
整数 int 、浮動小数点数 float、文字 char
理化学研究所
プログラムを作る
▶ 今日作ったものを入れるフォルダーを用意
▶ 例えば
■
■
■
■
e:
cd \
mkdir lesson3
cd lesson3
理化学研究所
1つ作ってみよう
▶ 整数の計算結果を画面に表示させる
■
■
p.55 List3-1 (list1.c)
整数を代入して、計算結果を表示する
#include <stdio.h>
int main(void);
int main(void)
{
int x;
x=4;
printf("%d\n",2*x+3);
return(0);
}
理化学研究所
変数の自由さ
▶ C言語では、基本的に、どんな変数名もOK
▶ 駄目な例
■
■
■
■
■
キーボードにない文字を使う(漢字などはだめ)
+-*/;など他の意味に使っている文字は使えない
先頭が数字
空白は使えない
長すぎるとだめ
▶ 注意:大文字と小文字は区別する
理化学研究所
実際にやってみよう
■
■
p.54 List3-1 (list1.c)
整数名を変えてみる
#include <stdio.h>
int main(void);
int main(void)
{
int x12_abc;
x12_abc=4;
printf("%d\n",2*x12_abc+3);
return(0);
}
理化学研究所
型宣言の効用
▶ いちいち面倒なようだが、
▶ 変数名を間違えたら教えてくれる
#include <stdio.h>
int main(void);
int main(void)
{
int x12_abc;
x12_abc=4;
printf("%d\n",2*x12-abc+3);
return(0);
}
理化学研究所
変数の代入
▶ 変数に値を代入する
■
x=4;
 「変数xに整数4を代入しなさい」
▶ 数学の=とはちょっとだけ違う。
■
■
x=x+2; と書ける
4=x; とは書けない
▶ これはOK?
■
x+y=y;
理化学研究所
変数2つ
■
p.55 List3-2 (list2.c)
 1文字の変数はなるべく使わない
#include <stdio.h>
int main(void);
int main(void)
{
int xx, yy;
xx=15;
yy=32;
printf("%d\n",(xx+yy)/2);
return(0);
}
理化学研究所
まとめて型宣言
▶ int xx, yy; ってなに?
■
int xx; int yy;と同じ
#include <stdio.h>
int main(void);
int main(void)
{
int xx;
int yy;
xx=15;
yy=32;
printf("%d\n",(xx+yy)/2);
return(0);
}
理化学研究所
整数ばかり、もう飽きた
■
p.57 List3-3 (list3.c)
#include <stdio.h>
int main(void);
int main(void)
{
float xx, yy;
xx=15.0;
yy=32.0;
printf("%f\n",(xx+yy)/2.0);
return(0);
}
理化学研究所
定数にもある型違い
▶ 定数は小数点の有無で整数かを区別する
■
■
15は整数
15.0は浮動小数点数
理化学研究所
floatの表示方法
▶ printfで浮動小数点数を画面表示させる
■
%dと類似
#include <stdio.h>
int main(void);
int main(void)
{ printf("%f\n",12.34);
printf("%6f\n",12.34);
printf("%6.0f\n",12.34);
printf("%6.1f\n",12.34);
printf("%0.1f\n",12.34);
return(0);
}
理化学研究所
キーボードから入力
▶ 実行時に変数値を与えたい
■
printf()に対応する関数としてfgets()を用いる
#include <stdio.h>
/* p.59, list3-2 (list2.c) */
#include <stdlib.h>
int main(void);
int main(void)
{ char buffer[256]; int age;
printf("あなたの名前は?");
fgets(buffer,256,stdin);
printf("%sさん、こんにちは。\n",buffer);
printf("年齢は?");
理化学研究所
fgets(buffer,256,stdin);
age=atoi(buffer);
printf("今、%d歳ということは、10年後には%d歳ですね。\n",age,age+10);
return(0);
}
fgetsとatoi
▶ fgets(buffer,256,stdin)
■
■
■
■
キーボード(stdin)から文字列を入力
第1引数に指定した文字列変数に代入
第2引数は入力可能最大文字数
第3引数は入力元。stdinはキーボードを指す。
▶ atoi()
■
引数の文字列を対応する整数に変換
▶ atof()
■
文字列を対応する浮動小数点数に変換
理化学研究所
課題
▶ 以下の機能を持つプログラムを作る
■
ゲームで次の動作指示を入力させる
発射角度をキーボードから入力させる
■
例えば、こんなのbby01bdg1.exe
■
理化学研究所