// 年組番号 明治太郎 // eval.cpp const int THRESHOLD = 60; int eval(int point) { ... } #if defined(TEST) #include ... int main(void) { int test_result = 0; printf("テストの点数:"); scanf("%d", &test_result); if(eval(test_result)){ printf("テストの結果は「合格」です.\n"); }else{ printf("テストの結果は「不合格」です.\n"); } } #endif
【ヒント】関数の中では計算処理だけを行います.
【ヒント】main関数では,関数を呼び出す前処理や結果の表示だけ行います.
【ヒント】2乗根の計算は,sqrt() を用います.使うには math.h が必要です.
【ヒント】コンパイル,実行まで出来たら既知の値を入れてみてプログラムが正しいかどうか確認します(評価テスト).下の例ではテストコードを挿入しています.
// 年組番号 明治太郎 // the Pythagorean theorem #include <math.h> float pythagorean(...) { ... } #if defined(TEST) // テストコード(プログラムの品質検査用コード) #include <stdio.h> int main(void) { for(float a=3; a<10; a+=2){ for(float b=4; b<10; b+=3){ float c = pythagorean(a, b); printf("a=%5g, b=%5g, c=%10g¥n", a,b,c); } } } #endif
// 年組番号 明治太郎 // 自乗和 int jijo(int x) { ... } int jijo_wa(int n) { ... } #if defined(TEST) #include <stdio.h> int main(void) { int n = 0; while(n<=0){ printf("n:"); scanf("%d",&n); } int sum = jijo_wa(n); printf("sum(n^2) = %d¥n", sum); } #endif
【ヒント】m, F はキーボードから入力して下さい.
【ヒント】打ち上げる場所は地球ではなくて,空気の無い軌道上です.空気抵抗は考えなくて結構です. 皆さんが知っている公式(あるいは積分した式)v=at+v0を使って構いません.
// 年組番号 明治太郎 // Rocket launch #include <math.h> float estimate_v(... { ... } #if defined(TEST) // テストコード(プログラムの品質検査用コード) #include <stdio.h> int main(void) { const float m = 10.0; // [kg] const float F = 100.0; // [N] float t = 60; float v = estimate_v(m,F,t); printf("v(%g) = %g [m/s]\n", t, v); } #elif defined(TEST2) // テストコード2(プログラムの品質検査用コード) #include <stdio.h> int main(void) { const float m = 10.0; // [kg] const float F = 100.0; // [N] float t_end = 60; float dt = 0.1; float t = 0; float v = 0; while(1){ printf("v(%.1f) = %7.1f [m/s]\n", t, v); v += estimate_v(m,F,dt); t += dt; if(t>=t_end) break; } } #endif
// 年組番号 明治太郎 #include ... double function(double x) { return sin(x*x); } double integrate(...) { ... } #if defined(TEST) // テストコード(プログラムの品質検査用コード) #include <stdio.h> int main(void){ int main(void){ const double dx = 0.00001; const double x1=1.0, x2=2.0, x3=3.0, x4=4.0, x5=5.0, x6=6.0; printf("%.1lfから%.1lfまでの積分値は%8.4lfです.\n",x1,x2,integrate(x1,x2,dx)); printf("%.1lfから%.1lfまでの積分値は%8.4lfです.\n",x3,x4,integrate(x3,x4,dx)); printf("%.1lfから%.1lfまでの積分値は%8.4lfです.\n",x5,x6,integrate(x5,x6,dx)); return 0; } #endif
//実行結果 1.0から2.0までの積分値は 0.4945です. 3.0から4.0までの積分値は -0.0264です. 5.0から6.0までの積分値は 0.1105です.
作成したプログラム(