300 likes | 388 Views
C 言語 第5講. 生物機能制御学講座 濱田 農学部7号館209室. 本日の講義内容. おさらい 式と演算子 計算プログラムの作成 場合に応じた処理 テキスト Lesson 5 アンケート. アンケート結果. 質問および要望 1.代入演算子の恩恵が? 2.キャスト演算子でなく、最初から変数の型を double にしていいか? 3.計算結果の出力方法が? 4.前回の問題の解答がほしい! 5.わかってきた! 8名 6.むずかしい ! 8名 7.ゲノム広場にいけなかった人は!. 式と演算子. 算術式 y = a + b ;
E N D
C言語第5講 生物機能制御学講座 濱田 農学部7号館209室
本日の講義内容 • おさらい 式と演算子 • 計算プログラムの作成 • 場合に応じた処理 テキスト Lesson 5 • アンケート
アンケート結果 質問および要望 1.代入演算子の恩恵が? 2.キャスト演算子でなく、最初から変数の型を doubleにしていいか? 3.計算結果の出力方法が? 4.前回の問題の解答がほしい! 5.わかってきた! 8名 6.むずかしい ! 8名 7.ゲノム広場にいけなかった人は!
式と演算子 算術式 y = a + b; において、プログラムでは、 式 : 右辺 a + b 演算子 : 右辺の四則演算子など + オペランド : 演算対象 a , b 値 : 左辺 y という。 コンピュータは、①右辺(a+b)を計算して、 ②左辺(y)に代入し、処理を終了する。
主な演算子 記号 名前 プログラム記述例 + 加算 y = a + b; ー 減算 y = a - b; * 乗算 y = a * b; / 除算 y = a / b; % 剰余算 y = a % b;(整数型) = 代入 y = a; ++ インクリメント y = a++; ーー デクリメント y = a--; See text p.82.
主な演算例 算術例 プログラム記述例 y = -a y = -a; y = a + 1 y = a + 1; y = a3 y = a*a*a; y = aX2+bX+c y = a*x*x+b*x+c; y = a ÷ b +1 y = a/b+ 1; y = (a-1)×(b-1) y = (a-1)*(b-1); y = a+1 y = a++; y = a‐1 y = a--;
代入演算子 記号 名前 プログラム記述例 += 加算代入 y += a; (y=y+a;) ー= 減算代入 y ー= a; (y=y-a;) *= 乗算代入 y *= a; (y=y*a;) /= 除算代入 y /= a; (y=y/a;) %= 剰余代入 y %= a; (y=y%a;) See text p.89. 同意 x = y + a; y = x; y = y + a;
型変換(問題提起) 数を格納する変数において 識別 記憶桁 小数有効桁 int ±E10 0 float ±E38 7 double ±E308 15 記憶桁 int < float < double 小数桁 int < float < double 記憶容量が異なる変数を混在して計算可能?
型変換が必要なわけ 記憶容量が小さい変数から大きい変数に値を代入 int i; float f; double d; f = i; d = f; d = i; 数値があふれない。小数点以下を切り捨てられない。 記憶容量が大きい変数から小さい変数に値を代入 int i; float f; double d; i = f; f = d; i = d; 数値があふれ、小数点以下を切り捨てられる懸念あり! いつも気を配ること!
異なる型の演算1 整数型と浮動小数点型の積算 int i; float f; double d, dd; dd = i * d; d = i * f; 演算は右辺から行なわれるので、整数型と小数点型の演算は小数点型にそろえられる 記憶容量の大きい型に変換してから演算される
異なる型の演算2 キャスト演算子 書式 : 変数の前に(型名)を添付 int i,j; double d,dd; i = 5; j = 4; d = i / j;/*←整数演算*/ 答え dd = (double)i / (double)j; dd = 1.25 d =1.0 d : 整数i,jの割り算(余りが捨てられる) dd: 倍精度浮動小数点i,jの割り算 キャスト演算子:演算前に一時的に型を変換する!
式と演算子 問題1 片道 A kmの道のりを往路は B km/hrで、復路は C km/hrで移動しました。平均時速(V_ave)を求めるプログラムを作成しましょう。 A=10km、B=10km/hr、C=5km/hrのとき、V_aveは?
距離 A、 往路速度 B、 復路速度 C を入力! 計算条件の入力 ①往復所要時間を算出 ②往復平均速度を算出 式の演算 式の計算 方程式・公式・四則演算 往復平均速度を出力! 計算結果の出力 演算のアルゴリズム プログラムの処理内容 手続き 問1 調和平均を算出するプログラム
計 算 条 件 の 入 力 式と演算子(参考) 問題1 プログラム例その1(入力部) float A,B,C,D,E,F,G,H;/*変数宣言*/ printf(“片道距離 A km = ”); scanf(“%f”,&A); printf(“往路速度 B km/hr = ”); scanf(“%f”,&B); printf(“復路速度 C km/hr = ”); scanf(“%f”,&C); 続く
式 の 演 算 出 力 式と演算子(参考) 続き 問題1 プログラム例その1(演算・出力部) D = A/B; /*往路所要時間 */ E = A/C;/*復路所要時間 */ F = D+E; /*往復所要時間 */ G = 2*A; /*往復距離 */ H = G/F; /*平均速度 */ printf(“V_ave=%6.3fkm/hr”,H); 答え V_ave = 6.667km/hr
演 算 出 力 式と演算子(参考) 問題1 プログラム例その2(演算・出力部) V_ave = 2*A/(A/B+A/C); /*往路距離/(往路所要時間+復路所要時間) */ printf(“V_ave=%6.3fkm/hr”,V_ave); 続き 答え V_ave = 6.667km/hr
演 算 出 力 式と演算子(参考) 問題1 プログラム例その3(演算・出力部) printf(“V_ave=%6.3fkm/hr”, 2*A/(A/B+A/C)); /*往路距離/(往路所要時間+復路所要時間) */ 続き 答え V_ave = 6.667km/hr
式と演算子 問題 2 最大反応速度(V_max)、ミカエリス定数(Km)をもつミカエリスーメンテンの式を用いて、反応速度(V)を算出するプログラムを作成しましょう。 V_max=0.1mg/min, Km=0.02mg/mLのとき、 S=0.0~0.20mg/mL において離散的にデータをサンプリングし、V=0.08mg/minになるSを求めましょう。SとVの関係はどんなグラフ形状になりますか?
計 算 条 件 入 力 演算 出力 式と演算子 問題 2 プログラム解答例(主要部のみ) printf(“V_max = ”); scanf(“%f”,&V_max); printf(“Km = ”); scanf(“%f”,&Km); printf(“S = ”); scanf(“%f”,&S); V = V_max*S/(Km+S); printf(“V = %6.4f\n”,V);
0.10 0.08 0.06 V [mg/min] 0.04 0.02 0.00 0.0 0.2 0.4 0.6 0.8 1.0 1.2 1.4 1.6 1.8 2.0 S×10[mg/mL] Profile of the reaction rate 離散的にサンプリングした反応速度を補間しV=0.08mg/minのSを推定した。
場合に応じた処理 もし、○○ならば・・・ △△の場合ならば・・・ など、条件分岐を考慮するとさらに汎用性の高いプログラムを作成できます。 これをC言語で記載すると、 ① if ○○{・・・} ② switch △△{case ・・・} となり、条件に合致した場合、特別な処理(・・・)を実行する。 ○○ : 条件式
条件式に用いる関係演算子 関係演算子の心得 (真偽を問う) 演算子 式が成立する(真)パターン A==B AはBに 等しい (=) A!=B AはBに 等しくない (≠) A>B AはBより 大きい (>) A>=B AはB 以上 (≧) A<B AはBより 小さい (<) A<=B AはB 以下 (≦)
if文(構文 その1) if (条件式) { /* 条件式が真の場合のみ実行*/ 文1; 文2; ・・・・・ } キーポイント 1.文の数はいくらでもよい 2.必ず{ }で挟むこと! 3.条件式は()で括ること! 4.{ }:ブロックという 条件式が偽の場合 { }内は無視される
if文(構文 その2) if (条件式) { /* 条件式が真の場合のみ実行*/ 文1;文2; ・・・・・ } else { /* 条件式が偽の場合のみ実行*/ 文3;文4; ・・・・・ } キーポイント 1.条件式の真偽で異なる処理を実行 キーポイント 2.else {…} を省略すると 構文その1
if文(構文 その3) if (条件式1) { /* 条件式1が真の場合のみ実行*/ 文1;文2; ・・・・・ } else if (条件式2) { /* 条件式2が真の場合のみ実行*/ 文3;文4; ・・・・・ } else{ /* 条件式1、2が偽の場合のみ実行*/ 文5;文6; ・・・・・ } キーポイント 1.else if は 複数設定 してよい
if文(適用例) 変数AおよびBの関係で次の演算が異なる場合 if (A==B) {/* A=Bならば実行*/ C=A+B; } else if (A>B) {/* A>Bならば実行*/ C=A-B; } elseif (A<B) {/* A<B ならば実行*/ C=A*B; } else{/* 上記に該当なし*/ C=A/B; }
場合に応じた処理 問題 四則2項演算プログラムを作成しましょう。 アルゴリズム(一例) 1.四則演算子(+,ー,*,/)をキーボード入力 2.もし、1で四則演算子以外が入力されたらはじく! 3.2項(a= ? b= ?)をキーボード入力 4.もし、加算なら a + b = ○ いや、減算なら a ー b = ○ そうでなくって、積算なら a * b = ○ それ以外は、除算ということで a / b = ○ と出力する。
次回の予定 ○ 場合に応じた処理 (テキスト:Lesson5) switch 文 !? 論理演算子 関係演算子を複数適用する方法
おわりに • さて、問題です。 1. 関係演算子をあげてください。 2. if文の構文を教えてください。 3. その他、質問など
開発の手続き プログラムの作成手順 キーワード 処理手順の流れを熟考 アルゴリズム・フローチャート 編集画面でソースコードを作成 コーディング・プログラミング ソースコードをコンパイル コンパイル (機械語へ翻訳) ソースコードのエラーを駆除 デバッグ a.out ・ エグゼ プログラムの実行 % mule prog1.c % cc prog1.c % a.out