教科書・ノート持ち込み不可。
解答に使用するプログラム言語は、
問題の趣旨に沿っていれば何を用いても良い。
解答を裏に書く場合、どの設問に対する答か解るようにすること。
ファイル名と そのファイルの作られた日付 のデータが、以下のような構造体と その配列struct fstat file_list[]で格納されている。
また、昨日の日付がstruct tm yesterday に格納されている。
ここで、日付 yesterday より古いファイルの内容をすべて印刷する 処理を main にて実行している。 プログラム中の3つの『未完成部分』と、2つの下線(___)の部分を 埋めて、プログラムを完成させよ。
解答は、下のプログラム中の余白部分などに、書き込むこと。
#include#define MaxFileNameLength 256 struct fstat { /* ファイル名と日付のデータ構造 */ char fs_name[ MaxFileNameLength ] ; /* ファイル名 */ int fs_day ; /* 日 */ int fs_mon ; /* 月 */ int fs_year ; /* 年 */ } ; struct tm { /* 日付だけのデータ構造 */ int tm_day ; /* 日 */ int tm_mon ; /* 月 */ int tm_year ; /* 年 */ } ; struct tm yesterday = { 25 , 2 , 1998 } ; struct fstat file_list[ 5 ] = { { "birthday.dat" , 7 , 2 , 1998 } , { "/etc/hosts" , 1 , 1 , 1985 } , { ".profile" , 24 , 12 , 1997 } , { "RMAIL" , 26 , 2 , 1998 } , { "/tmp/Ex1234" , 26 , 2 , 1998 } } ; int tm_cmp( struct tm* t , struct fstat* f ) { if ( t->tm_year != f->fs_year ) { if ( t->tm_year > f->fs_year ) return 1 ; else return -1 ; } else if ( t->tm_mon != f->fs_mon ) { /* 未完成部分(1) */ } else if ( t->tm_day != f->fs_day ) { /* 未完成部分(2) */ } else { return 0 ; } } int catalog_file( char* fn ) { /* 指定されたファイルの内容を表示する関数 */ FILE* fp ; if ( (fp = fopen( fn , "rt" )) == NULL ) { return -1 ; } else { int c ; printf( "::%s::\n" , fn ) ; while( (c = getc( fp )) != EOF ) putchar( c ) ; fclose( fp ) ; return 0 ; } } void main() { int i ; for( i = 0 ; i < 5 ; i++ ) { if ( tm_cmp( &yesterday , __________ ) ______ ) { /* 未完成部分(3) */ } } }
整数を扱うリスト構造が、以下に示すプログラムのように与えられた。 このリスト構造の中から、指定された数(min)以上でかつ 指定された数未満(max)のデータだけを表示したい。 関数 print_data_range() の内部の未完成を埋めよ。
データの表示には、通常の printf() を使用すれば良い。
#includestruct List { int data ; struct List* next ; } ; void print_data_range( struct List* p , int min , int max ) { /* 未完成部分 */ } void main() { struct List* p ; /* 何らかの処理で p に数値のデータを読み込む */ /* [例] p = ( -10 , 0 , 2 , 5 , 13 , 21 , 50 , 80 , 100 , 123 ) ; */ print_data_range( p , 10 , 22 ) ; /* 10≦data<22 を表示 */ /* 例: 13,21が表示される */ print_data_range( p , 0 , 100 ) ; /* 0≦data<100 を表示 */ /* 例:-10,100,123以外が表示 */ }
入力された1行の文字列の中に、特定の文字列が『何個』含まれているか 数えるための関数を作りたい。下記に示したプログラムの未完成部分を 作成せよ。
#includeint strcount( char* str1 , char* str2 ) { /* 未完成部分 */ } char string[] = "this is a pen. that is a pencil" ; /* is : ^^ ^^ ^^ */ /* pen : ^^^ ^^^ */ void main() { printf( "%d\n" , strcount( string , "is" ) ) ; /* 3が表示される */ printf( "%d\n" , strcount( string , "pen" ) ) ; /* 2が表示される */ }