1998年度「計算機基礎実験 II」期末試験 (菊地担当) 1999年 1月 22日実施

  1. 次の言葉の中からひとつ選んで簡単に説明せよ。
    構造型, オブジェクト指向, FIFO バッファ, LIFO バッファ, トップダウン, ボトムアップ
  2. 次のプログラムを読んで問に答えよ。
         1	main() {
         2	  float x=1.0,d=1.0,y=2.0;
         3	
         4	  while (y > x) {
         5	    d = d/2;
         6	    y = x + d;
         7	  }
         8	  printf("%e \n",d);
         9	}
    
  3. x, y, z の3つの変数があり、それぞれのはじめの値が X, Y, Z である。 プログラムによる一連の操作の後、x = Y, y = Z, z = X となるように したい。これを実現するアルゴリズムを書きなさい。
  4. 次のプログラムの終了時点で、a[]の内容はどのようになっているか。
         1	#define N 6
         2	static int a[N] = {5, 2, 3, 6, 1, 4};
         3	
         4	void swap(int*,int*);
         5	
         6	main(){
         7	  int i,j;
         8	
         9	  for (j=N-1;j>=1;j--) {
        10	    for (i=0; i<j; i++) {
        11	      if (a[i] > a[i+1]) swap(&a[i],&a[i+1]);
        12	    }
        13	  }
        14	}
        15	
        16	void swap(int *x, int *y) {
        17	  int z;
        18	
        19	  z = *x; *x = *y; *y = z;
        20	}
    

解答例:

  1. 省略
  2. (1)d が小さくなると 1+d の結果が有効桁数内に収まらなくなり、1になってしまう。
    (2)10-6程度 (210〜103)
  3. 一時変数を t とし、 t:=x; x:=y; y:=z; z:=t;
  4. {1,2,3,4,5,6}