電子情報4年情報構造論96年度前期期末試験
(追試)


1.評価順とトレース

	int i , j ;

	for( i = 0 ; i < 3 ; i++ ) {
	     ~~~~A   ~~~~B   ~~C
	    for( j = 0 ; j < 3 ; j++ ) {
	         ~~~~D   ~~~~E   ~~F
	        if ( j > i )
	             ~~~~G
	            break ;

	        printf( "%d\n" , i + j ) ;
	        ~~~~~~~~~~~~~~~~~~~~~~~H
	    }
	}
	

上記のプログラムにおいて、式A〜Hまでの評価の順序に記号を次々と書き並べ、 その下に変数の内容の変化を書き加えよ。

なお、追試の際には(これと同程度の内容の)違うプログラムを 1つ出題する。


2.組み合わせ処理

2つのサイコロで、2つの目の差が、 ちょうど3になる 組み合わせを(3,6),(1,4),...の様に、表示するプログラムを作成せよ。

ただしプログラムはすべての組み合わせを、しらみ潰しに試し、 条件に合うものだけ、表示するようなプログラムとすること。

追試の時には、条件部を少し替えて出題する。 ただし、回答は実行結果とプログラムリストとする。


3.プログラム作成

データ件数が最大20件の数値の集合について、以下のようなデータ構造で プログラムを作成する。

	#include <stdio.h>
	#define MAX 20
	/* 集合 a */
	int  asize = 5 ;
	int  aarray[ MAX ] = { 1,2,8,3,19 } ;
	/* 集合 b */
	int  bsize = 8 ;
	int  barray[ MAX ] = { 2,4,8,12,16,18,19,20 } ;

	void main() {
	    /* 集合 a,b の和,差,積 集合の要素を印刷 */
	}
	
上記のような配列asize,aarray[] , bsize,barray[]において、 下記のプログラムについて出題する。
和集合
どちらか(もしくは両方)に含まれるデータを、すべて表示せよ。
差集合
aに含まれ、かつ、bに含まれないデータを、すべて表示せよ。
積集合
両方に共通に含まれるデータを、すべて表示せよ。

追試の時には、上記集合演算のうちの1つを出題する。 ただし、実際にコンピュータに打ち込み、 出来上がったプログラムリストを印刷して、 実行結果とともに出力し回答とする。
(ただしこの出題に対する回答には、 新たな関数や構造体等は一切、使用しないこと)


4.構造体

前述のプログラムのデータ構造を、次のような構造体を使って書き換えよ。

	struct Vector {
	    int  size ;
	    int  array[ 20 ] ;
	} ;	
	struct Vector a = { 5 , { 1,2,8,3,19 } } ;
	struct Vector b = { 8 , { 2,4,8,12,16,18,19,20 } } ;

	void main() {
	    /* 集合 a,b の和,差,積 集合の要素を印刷 */
	}
	
ただし、この出題に対する回答には、新たな関数を定義せずに、記述せよ。

5.サブルーチンとポインタ引数

前述のプログラムをさらに書き換え、集合の演算部分をサブルーチンとせ よ。
	void conj( struct Vector* ans , struct Vector* x , struct Vector* y ) {
	    /* 集合 x と y の和集合を ans に格納せよ */
	}