情報科学概論II(実習) 3回目

課題提出はTACTにログインして行うこと。
課題の提出〆切はTACTを確認すること。

講義資料

今日やること


講義資料および以下のサンプルプログラムを参考にして、課題3-1,3-2,3-3のプログラムをそれぞれ作成し実行せよ。TACTを使用した課題の提出については、各設問の指示に従うこと。
(実際にコンパイル・実行してエラーのないことを確かめておくこと。)
作成したプログラムは、TACTのテキスト入力欄にcopy & pasteするか、ファイルを添付するか、どちらかで提出せよ。

Sample 1-1

0 - 9までの整数を表示させるプログラム(for を使用)
#include <stdio.h>

int main(void)
{
  int i; 
  for(i=0;i<10;i++){
    printf("%d\t",i);
  }
  printf("\n"); /*最後に改行*/
  return 0;
}

Sample 1-2

0 - 9までの整数を表示させるプログラム(while を使用)
#include <stdio.h>

int main(void)
{
  int i; 
  i=0; 
  while(i<10){
    printf("%d\t",i);
    i++; /* i=i+1 と同じ */
  }
  printf("\n"); /*最後に改行*/
  return 0;
}

Sample 2

ターミナルから数値を読み込み,正/0/負を判定し出力するプログラム.
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  char buf[50]; 
  int i;

  printf("please input signed integer i =  ");
  fgets(buf,sizeof(buf),stdin);  
  if (sscanf(buf,"%d",&i) != 1) { 
   fputs("input error\n", stderr);  
   exit(-1); 
  }
  if(i>0){ /* iが正の場合 */
    printf("i=%d is positive\n",i);
  }
  else if(i==0){ /* iが0の場合 */
    printf("i is %d\n",i);
  }
  else { /* 上記以外(すなわち負) */
    printf("i=%d is negative\n",i);
  }
  return 0;
}

課題3-1

(Sample-1参照)
for( ; ; )構文を用いて,以下の値 A,B,C,D を求めるプログラムを作成し,実行せよ. 但し,D は倍精度で計算せよ. 実際に作成したプログラムを使って計算したA,B,C,Dの値と,Dを計算したソースコードを提出せよ.

課題3-2

(Sample-2参照)
2次方程式 a x2+b x+c=0 の実数係数 a, b, c を入力し,解 xを求める プログラムを作成し,そのソースコードを提出せよ.
このプログラムを動かし,異なる2実数解、重解、複素数解のそれぞれで正しく動作することを確認せよ.
(なお表示形式は,「異なる2実数解」のときは例として "x=1, 2", 「重解」のときは"x=4 (double)",「複素数解」のときは"x=5+6i, 5-6i" のような形式にすること. ただし,「純虚数解」の際の"x=0+1i, 0-1i" となってもよい.)
このプログラムの作成・コンパイルの際、以下の点を参考にすること。

課題3-3

(関数の呼び出しは講義資料を見よ)
与えられた 5 個の実数(倍精度)について,その平均 (average) を戻り値とする関数, その分散 (variance) を返り値(戻り値)とする関数(いずれもユーザ定義の関数)を それぞれ作り, キーボードより入力された 5 個の実数の平均・標準偏差を、これらの関数 を用いて求めるプログラムを作成し,ソースコードを提出せよ.
但し,平均をμとすると標準偏差σは以下で与えられる. (σ2の平方根を取ること)
σ2 = < (x - μ)2 > = < x2 > - μ2

注: 引数が(変数) 5 個の関数でよい.

(上級者向け: ポインターを引数にすることもできる. func(double *x))

課題3-4 (追加課題; 必答ではないが取り組んだ場合は加点)

まず整数 n を入力する. 次に実数を n 個入力し,その n 個の実数の平均μ, 分散σ2,最大値 max,最小値 min を表示するプログラムを作成せよ.

このプログラムを使って,
   n = 10, 実数が 185, 64, 77, 496, 72, 436, 745, 9, 236, 121
の場合について実行した結果をソースプログラムとともに示せ。
できれば,配列など n 個分の変数を用意することなしに 計算できるプログラムにすること。