Comments
Description
Transcript
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