すべての大きな設問の中から、4題以上について回答せよ。
採点は、各設問毎に行ない点数の高いものから4題について評価する。
4題よりより多く回答されている場合は、点数の 1/3 で加算する。
#include <stdio.h> int mat_a[ 4 ][ 4 ] = { { 32,-1,22,-1 } , /* +→ y */ { -1,-1,-1,12 } , /* ↓\ */ { -1,22,-1,-1 } , /* x */ { 30,-1,11, 0 } /* mat_a[3][0]=30 */ } ; int mat_b[ 4 ][ 4 ] = { { 33,-1,31,-1 } , { 13,-1,-1, 2 } , { 12,-1,10,-1 } , { 58,-1,-9,22 } } ; int foo( int mat44[ 4 ][ 4 ] ) { int xy = 0 , x = 0 , y = 0 ; while( mat44[ x ][ y ] >= 0 ) { xy = mat44[ x ][ y ] ; x = xy / 10 ; /* 10で割った数 */ y = xy % 10 ; /* 10で割った余り */ } return xy ; } void main() { printf( "%d\n" , foo( mat_a ) ) ; printf( "%d\n" , foo( mat_b ) ) ; }
#define NEW(T) (T*)malloc(sizeof(T)) struct List2 { struct List2* prev ; int data ; struct List2* next ; } ; struct List2 top = { NULL , 0 , NULL } , tail = { NULL , 99999 , NULL } ; void insert( struct List2* dest , int datum ) { struct List2* p = NEW( struct List2 ) ; struct List2* n = p->next ; p->prev = dest ; p->next = n ; dest->next = p ; n->prev = p ; } void del( struct List2* p ) { /* p の後ろにあるデータを消す */ /* この部分を記述せよ */ } void main() { insert( &top , 10 ) ; /* 処理1 */ insert( &top , 20 ) ; /* 処理2 */ del( &top ) ; /* topの次のデータを消したい */ del( &top ) ; /* さらにtopの次のデータを消したい */ }
#define MAXSIZE 200 typedef ...... SomeData ; /* 何らかのデータ構造の定義 */ SomeData[ MAXSIZE ] ; /* (a) 配列に昇順に格納し2分探索する */ int size ; /* データ件数:N */ struct SimpleList { /* (b) 単純リスト方式 */ SomeData data ; /* データ */ struct SimpleList* next ; /* 次のデータへのポインタ */ } ; struct Tree2 { /* (c) 2分木方式 */ SomeData data ; /* データ */ struct Tree2* left ; /* data より小さな2分木へのポインタ */ struct Tree2* right ; /* data より大きな2分木へのポインタ */ } ;
身長と名前のデータベースを、次のような構造体で定義し、
データベースの追加登録のプログラム insert(int,char*) を
作成した。この追加プログラムを参考に、このデータ構造の中から、
特定の身長の人をすべて表示するプログラムを作成せよ。
# 同じ身長の人は複数いる可能性があるとする。
#define NEW(T) (T*)malloc(sizeof(T)) struct NHList { int hight ; char name[ 20 ] ; struct NHList* next ; } ; struct NHList* table[26] ; void insert( int h , char* n ) { struct NameHight* p = NEW( struct NHList ) ; p->hight = h ; strcpy( p->name , n ) ; p->next = table[ h / 10 ] ; table[ h / 10 ] = p ; } void search( int h ) { /* h:身長 */ /* この部分を作ること */ } void main() { int i = 0 ; for( i = 0 ; i < 26 ; i++ ) table[ i ] = NULL ; /* 初期化 */ insert( 172 , "t-saitoh" ) ; insert( 194 , "c3p0" ) ; insert( 98 , "r2d2" ) ; insert( 191 , "obi-one" ) ; search( 194 ) ; /* c3p0 だけ表示される予定 */ }
#define NEW(T) (T*)malloc(sizeof(T)) struct Expr { char opr ; int x ; struct Expr* left ; struct Expr* right ; } ; struct Expr* num( int dat ) { struct Expr* p = NEW( struct Expr ) ; p->opr = 'N' ; p->x = dat ; p->left = p->right = NULL ; return p ; } ; struct Expr* op( char y, struct Expr* l, struct Expr* r ) { struct Expr* p = NEW( struct Expr ) ; p->opr = y ; p->x = 0 ; p->left = l ; p->right = r ; return p ; } ; int eval( struct Expr* p ) { switch( p->opr ) { case 'N' : return p->x ; case '+' : return eval( p->l ) + eval( p->r ) ; case '*' : return eval( p->l ) * eval( p->r ) ; } } void main() { struct Expr* t = op( '+' , num( 2 ) , op( '*' , num( 3 ) , num( 4 ) ) ) ; print( "%d\n" , eval( t ) ) ; } ;