C言語プログラミング 変数と代入文 変数の型

C言語プログラミング
変数と代入文
変数の型
コンピュータ内部では,整数(小数部のない数)と実数(小数部のある数)
の表現形式は異なる
整数と実数の扱いは異なる
整数(整数型)
実数(実数型)
宣言
int a, b ;
宣言
float x, y ;
出力
printf(”%d %d”, a,b);
出力
printf(”%f %f ”, x, y);
入力
scanf(”%d”, &a );
scanf(“%d”, &b ) ;
入力
scanf(” %f ”, &x );
scanf(” %f ”, &y );
float : floating point
(浮動小数点)
2
12.34 → 0.1234×10
コンピュータ内部では
(0.1234,2)という組
で実数を保持している
実数型の配列Xならば float X[5] ;
1
2次方程式の解を求めるプログラム
ax2+bx+c=0 の解 (ただし,a≠0, b2-4ac>0 とする)
x1=
-b + b2-4ac
2a
x2=
-b - b2-4ac
2a
z 平方根(ルート)を求めるには sqrt 関数を使う
- 最初に #include <math.h> と書く
- 例えば, 4 の平方根は sqrt(4),
変数a (一般には式) の平方根は sqrt(a) と書く
- sqrt 関数は実数の値をもつことに注意
sqrt関数を使った式の値を表示するには %f を指定する
z 式の表記
(-b+sqrt(b*b-4*a*c))/2/a
(-b-sqrt(b*b-4*a*c))/2/a
※ C言語では2乗の演算は用意さ
れていない
2次方程式の解を求めるプログラム(改良の余地あり)
/*
2次方程式の解を求める
*/
#include<stdio.h>
#include<math.h>
sqrt 関数を使うための
オマジナイ
int main(void)
{
float a, b, c ;
puts("2次方程式a*x*x+b*x+c=0の解を求めます(ただし a≠0,b*b-4*a*c>0)");
printf("係数a="); scanf("%f",&a);
printf("係数b="); scanf("%f",&b);
printf("係数c="); scanf("%f",&c);
printf("解1は%f ¥n", ( -b + sqrt(b*b - 4*a*c))/2/a);
printf("解2は%f ¥n", ( -b - sqrt(b*b - 4*a*c))/2/a);
return 0 ;
}
2
どこを改良すべきか...
◆ 人間が計算する場合を考えると…
b2-4ac
を2回計算するのは無駄,
人間なら,1回だけ計算し,メモしておく。
コンピュータも同様
⇒ 無駄な計算をさせなければ,それだけ実行速度を速くすることができる。
どこにメモして(格納して)おくか ?
例えば,変数 d に
→
変数
b2-4ac の値を格納しておくには,次のように書く。
d = sqrt( b*b - 4*a*c ) ;
変数
式
「=」の左辺の変数に,右辺の式の値が格納(代入)される
代入文
‹ 「変数 = 式 ; 」 の形の文を「代入文(assignment statement)」という。
◆ 代入文は,「左辺の変数に右辺の式の値を格納(代入)する」という作用をもつ。
(注意:「左辺と右辺は等しい」という「関係」を意味するものではない)
式(expression) :
z 定数や変数,及びそれらを演算子で結合したもの。
z 単独の定数や変数も式に含まれる。
z 式は「値(value)」をもたなければならない。
d = sqrt(b*b - 4*a*c) ;
変数 a,b,c の値はあらかじめ
定まっていなければならない
例えば,a=2,b=5,c=2 とすると
d=3.0;
d = sqrt( 5*5-4*2*2 ) ;
d
3.0
「d=3.0;」 と等価
3
変数dに値「3.0」が代入される
記号 「=」 について
z 数学では,記号「=」は左辺と右辺が「等しい」という「関係」を表わす。
z 一方,プログラミング言語では,記号「=」は 『変数 = 式』 という形式で記述され,
右辺の式の「値」を左辺の変数に「代入(格納)する」という「作用(演算)」を表わす。
※1 「=」 を 英語では ”becomes” と読むことがある。
※2 意味的には記号「←」が適当だが,半角文字にはない
ので,多くのプログラミング言語では「=」を用いている。
2次方程式の解を求めるプログラムを改良する
(1) 2次方程式の係数に相当する三つの変数(a,b,c)を float 型で,平方根の値
を代入する変数(d)と二つの解の値を代入する変数(x1,x2)も float 型で宣
言する。(変数の名前は各自で決めてよい)
(2) 2次方程式の係数 a,b,c の値をscanf 関数を使って得る。
(ただし,入力される値は a≠0,b2-4ac>0 の関係を満たすと仮定する)
(3) 代入文を使って,変数 d に
b2-4ac
の値を代入する。
(4) 変数 d を使って解を求める式を書き,変数 x1 と x2 に代入する。
(5) 変数 x1 と x2 を表示する。
4