C言語 第4講 生物機能制御学講座 濱田 農学部7号館209室 1 本日の講義内容 • • • • おさらい 変数 式と演算子 テキスト Lesson 4 計算プログラムの作成 アンケート 2 アンケート結果 質問および要望 1.授業内容がよくわからない! 2.終了時刻を守ってほしい! 3.いくつか組み合わせるのが難しい! 4.プログラムを打つのが大変! 5.前回の最後の問題の回答がほしい! 6.わかってきた! 7.進度が速い!! 3 本講義の第1目標 汎用性の高い計算プログラムの開発 適用例:ミカエリスーメンテン式など プログラムの処理内容 計算条件の入力 式の計算 計算結果の出力 キーワード 定数・係数・初期条件 printf scanf getchar 方程式・公式・四則演算 データ更新・結果表示 printf 4 変数 文字型 char 整数型 int まとめ ○ ○ ○ ○ ○ ○ ○ 浮動小 float 数点型 double 変数は、値を格納する 変数は、名前と型を指定して宣言する 変数名は、識別子を使う 変数に値を代入するときは‘=’を使う 変数に新しい値を代入すると、値が入れ替わる キーボード入力した数値を受入れる 「scanf」 キーボード入力した文字を受入れる 「getchar」 5 文字と数値と変数 問題 以下の出力を実行するプログラムを作成してください。 % a.out あなたの性別を入力してください printf 性別 (M/F) = M scanf あなたの年齢を入力してください getchar 年齢 (歳) = 21 あなたの身長を入力してください。 身長 (cm) = 160.5 ----------------------------------------------あなたは、性別M・年齢21歳・身長160.5cmです! % 6 文字と数値と変数(解答例) #include <stdio.h> main() { char c; int age; float height; printf(“あなたの性別を入力してください \n”); printf(“性別 (M/F) =”); c = getchar(); printf(“あなたの年齢を入力してください \n”); printf(“年齢 (歳) =”); scanf(“%d”,&age); 続く 変数宣言 気配り! 質問 ? 性別入力 気配り! 質問 ? 年齢入力 7 文字と数値と変数(解答例) 続き printf(“あなたの身長を入力してください \n”); printf(“身長 (cm) = ”); scanf(“%f”,&height); printf(“----------------------------------------------- \n”); printf(“あなたは、性別%c・年齢%d歳・身長%4.1f cmです!\n”,c,age,height); 気配り! 質問 ? 身長入力 結果出力 } printf() getchar() scanf() %4.1f 8 本講義の第1目標 汎用性の高い計算プログラムの開発 適用例:ミカエリスーメンテン式など プログラムの処理内容 計算条件の入力 式の計算 計算結果の出力 キーワード 定数・係数・初期条件 printf scanf getchar 方程式・公式・四則演算 方程式・公式・四則演算 データ更新・結果表示 printf 9 式と演算子 算術式 y = a + b; において、プログラムでは、 式 : 右辺 a + b 演算子 : 右辺の四則演算子など + オペランド : 演算対象 a , b 値 : 左辺 y という。 コンピュータは、①右辺(a+b)を計算して、 ②左辺(y)に代入し、処理を終了する。 10 主な演算子 記号 + ー * / % = ++ ーー 名前 加算 減算 乗算 除算 剰余算 代入 インクリメント デクリメント プログラム記述例 y = a + b; y = a - b; y = a * b; y = a / b; y = a % b; y = a; y = a++; y = a--; 11 See text p.82. 主な演算例 算術例 y = -a y = a + 1 y = a3 y = aX2+bX+c y = a ÷ b +1 y = (a-1)×(b-1) y = a+1 y = a‐1 プログラム記述例 y = -a; y = a + 1; y = a*a*a; y = a*x*x + b*x + c; y = a/b + 1; y = (a-1)*(b-1); y = a++; y = a--; 12 代入演算子 記号 += ー= *= /= %= 名前 加算代入 減算代入 乗算代入 除算代入 剰余代入 プログラム記述例 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. y = y + a; 同意 x = y + a; y = x; 13 演算子の優先順位 四則演算の優先順位 数学の演算と同じ ( )を使う場合も数学の演算と同じ y = a + b * (c + d) 1 2 3 優先順位が等しければ左から評価 y = a + b1 - d 2 14 演算子の優先順位 四則演算の優先順位 (その2) 演算は左からだが、 ( )の演算から開始 y = a * b + (c + d) 2 1 ()の必要性が ない式でも 3 代入の場合は右からである!(特例) y = a = b = 11 2 15 型変換(問題提起) 数を格納する変数において 識別 int float double 記憶桁 小数有効桁 ±E10 0 ±E38 7 ±E308 15 記憶桁 int < float < double 小数桁 int < float < double 記憶容量が異なる変数を混在して計算可能? 16 型変換が必要なわけ 記憶容量が小さい変数から大きい変数に代入 int i; float f; double d; f = i; d = f; d = i; 数値があふれない。小数点以下を切り捨てられない。 記憶容量が大きい変数から小さい変数に代入 int i; float f; double d; i = f; f = d; i = d; いつも気を 配ること! 数値があふれ、小数点以下を切り捨てられる懸念あり! 17 異なる型の演算1 整数型と浮動小数点型の積算 int i; float f; double d, dd; dd = i * d; d = i * f; 演算は右辺から行なわれるので、整数型と小 数点型の演算は小数点型にそろえられる 記憶容量の大きい型に変換してから演算される 18 異なる型の演算2 キャスト演算子 書式 : 変数の前に(型名)を添付 int i,j; double d,dd; i = 5; j = 4; d = i / j; /*←整数演算*/ dd = (double)i / (double)j; 答え d = 1.0 dd = 1.25 d : 整数i,jの割り算(余りが捨てられる) dd: 倍精度浮動小数点i,jの割り算 19 キャスト演算子:演算前に一時的に型を変換する! 式と演算子 問題 1 片道 A kmの道のりを往路は B km/hr で、復路は C km/hrで移動しました。平均 時速(V_ave km/hr)を求めるプログラム を作成しましょう。 A=10km、B=10km/hr、C=5km/hrのとき、 V_aveは? 20 式と演算子 問題 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の関係はどんなグラフ形状になります か? 21 Michaelis-Menten’s Eq. 基質濃度をS、反応速度をVとする ミカエリスーメンテンの式は以下の通りです。 V _ max S V Km S ここで、V_max は最大生成速度、 Km はミカエリス定数である。 22 次回の予定 ○ 場合に応じた処理 (テキスト:Lesson5) if 文 case 文 !? 23 おわりに • さて、問題です。 1. 「y=y+a」を代入演算子を用いて表すと? 2. 「a=1」のとき「y=a++」でyはいくら? 3. 「キャスト演算子」は何? 4. その他、質問など 24 式と演算子 問題 1 片道 A kmの道のりを往路は B km/hr で、復路は C km/hrで移動しました。平均 時速(V_ave)を求めるプログラムを作成し ましょう。 A=10km、B=10km/hr、C=5km/hrのとき、 V_aveは? 25 本講義の第1目標 汎用性の高い計算プログラムの開発 適用例:ミカエリスーメンテン式など プログラムの処理内容 計算条件の入力 式の計算 計算結果の出力 キーワード 定数・係数・初期条件 printf scanf getchar 方程式・公式・四則演算 方程式・公式・四則演算 データ更新・結果表示 printf 26 式と演算子 問題 1 プログラム解答例(主要部のみ) float A,B,C; printf(“片道距離 A km = ”); scanf(“%f”,&A); printf(“往路速度 B km/hr = ”); scanf(“%f”,&B); printf(“復路速度 C km/hr = ”); scanf(“%f”,&C); 続く 27 式と演算子 問題 1 プログラム解答例(主要部のみ) T_Ouro = A/B; /*往路所要時間 */ 続き T_Fukuro = A/C; /*復路所要時間 */ T_OandF = T_Ouro+T_Fukuro; /*往復所要時間 */ D_Kyori = 2*A; /*往復距離 */ V_ave = D_Kyori/T_OandF; /*平均速度 */ printf(“V_ave=%6.3fkm/hr”,V_ave); 答え V_ave = 6.66km/hr 28 式と演算子 問題 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の関係はどんなグラフ形状になります か? 29 式と演算子 問題 2 プログラム解答例(主要部のみ) printf(“V_max = ”); scanf(“%f”,&V_max); printf(“Km = ”); scanf(“%f”,&Km); printf(“S = ”); scanf(“%f”,&S); V = V_max*S/(Km+S); /*M-M Eq.*/ printf(“V_max = %6.4f\n”,V); 30 Profile of the reaction rate 離散的にサンプリングした反応速度を補間し V=0.08mg/minのSを推定した。 0.10 V [mg/min] 0.08 0.06 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] 31 開発の手続き プログラムの作成手順 キーワード 処理手順の流れを熟考 アルゴリズム・フローチャート 編集画面でソースコードを作成 コーディング・プログラミング ソースコードをコンパイル コンパイル (機械語へ翻訳) ソースコードのエラーを駆除 デバッグ プログラムの実行 a.out ・ エグゼ % mule prog1.c % cc prog1.c % a.out32
© Copyright 2024 ExpyDoc