2 前回の練習問題と課題のプログラム例

2.1 練習問題プログラム例

前回の講義の練習問題のプログ ラム例を示す.ただし,練習1は3つのプログラムを書くことになっていたが,ここでは while文を使った例のみを載せる.他のプログラム例は,私のweb ページを見よ.

2.1.1 練習1


   1 #include <stdio.h>
   2 
   3 int main(void){
   4   int i, imax;
   5   int sum;
   6 
   7   printf("1からいくつまで加算しますか?\t");
   8   scanf("%d", &imax);
   9 
  10   sum = 0;
  11   i = 1;
  12  
  13   while(i<=imax){
  14     sum += i;
  15     i+=2;
  16   }
  17 
  18 
  19   printf("sum = %d\n", sum);
  20 
  21   return 0;
  22 }

2.1.2 練習2


   1 #include <stdio.h>
   2 #include <math.h>
   3 
   4 int main(void){
   5   int deg;
   6   double rad;
   7 
   8   printf("---------------------------------------------------------\n");
   9   printf("deg\tsin\t\tcos\t\ttan\n");
  10   printf("=========================================================\n");
  11 
  12   for(deg=0; deg<=360; deg++){
  13     rad = (double)deg/180*M_PI;
  14     printf("%d\t%f\t%f\t%f\n", deg, sin(rad), cos(rad), tan(rad));
  15   }
  16 
  17   printf("---------------------------------------------------------\n");
  18 
  19   return 0;
  20 }

2.1.3 練習3


   1 #include <stdio.h>
   2 
   3 int main(void){
   4   double x, dx, max_fx, max_x, new_fx;
   5   int change_max;              //0:最大値を更新  1:更新しない
   6 
   7   x = -100.0;                  // xの初期値
   8   dx = 0.001;                  // xの計算のきざみ幅
   9 
  10   max_fx = -3.0*x*x + 9.0*x - 6.0;    // とりあえずの最大値
  11 
  12 
  13   do{
  14     x+=dx;                             // 次の x
  15     new_fx = -3.0*x*x + 9.0*x - 6.0;   // f(x)の計算
  16 
  17     //---- 最大値か否かの検査 --------------
  18     if(max_fx < new_fx){        // 新たに最大値発見
  19       max_fx = new_fx;
  20       max_x = x;
  21       change_max = 0;
  22     }else{                      // 最大値でない場合
  23       change_max = 1;
  24     }
  25 
  26   }while(change_max==0);
  27 
  28 
  29   printf("x = %fのときf(x)=%fで最大です\n", max_x, max_fx);
  30 
  31   return 0;
  32 }

2.2 課題のプログラム例

本日提出締切の課題のプログ ラム例を示す.ただし,問2は練習1と似ているので省く.問2のプログラム例は, 私のwebページに載せている.

2.2.1 問3

抵抗の発熱量は,次のようにして求める.回路に流れる電流$ I$はオームの法則より

$\displaystyle I=\frac{10}{50+R}$ (1)

となる.これを,リスト4の16行目で計算している. 電流と電圧の積が発熱$ W$になる.抵抗の電圧はオームの法則より電流から求められるの で,抵抗での発熱は.

$\displaystyle W$ $\displaystyle =IV$    
  $\displaystyle =I^2R$ (2)

となる.これをプログラムの17行目で計算している.
   1 #include <stdio.h>
   2 
   3 int main(void){
   4   double V, R1, max_W, max_R, I, R, dR, W;
   5 
   6   V  = 10.0;
   7   R1 = 50.0;
   8   dR = 0.1;
   9 
  10   R = 0;
  11   max_W = 0;           // R=0の時の発熱.暫定最大値
  12 
  13   do{
  14     R+=dR;
  15    
  16     I=V/(R1+R);
  17     W = I*I*R;
  18 
  19     if(max_W < W){    // 最大発熱のときの処理
  20       max_W = W;
  21       max_R = R;
  22     }
  23 
  24   }while(R<=10000.0);
  25 
  26   printf("発熱が最大の時は,以下の通り\n");
  27   printf("\t抵抗\t%f\t[オーム]\n", max_R);
  28   printf("\t発熱\t%f\t[ワット]\n", max_W);
  29 
  30   return 0;
  31 }



ホームページ: Yamamoto's laboratory
著者: 山本昌志
Yamamoto Masashi
平成18年9月7日


no counter