1997年1月20日実施
1.あるオフィスに勤める花子さんは、昼休みに昼食を食べに行きました。いつもは、安くてうまい定食屋で450円の定食を食べます。でも、人気なので並ばなくてはなりません。今日は忙しいので、10人以上ならんでいるなら、隣のちょっと高いレストランのランチにしようと思います。コーヒー付きで800円です。そうそう、安い定食屋で済むなら110円の缶コーヒーも買おうと思います。ちなみに、忙しくない日なら20人までの行列なら我慢して待ちます。
以上の文より花子さんの昼休みの行動と消費金額を if - then - else を使ったアルゴリズムの形で書き表しなさい。
2.次は自然数 N が平方数であるかどうかを判定する BASIC 言語によるプログラム (1997年入試センター試験)をそのまま C 言語に書き直したものである。
1: #include <stdio.h> 2: main() { 3: int i,j,k,n; 4: char buf[20]; 5: printf("N = "); 6: fgets(buf,18,stdin); 7: n = atoi(buf); 8: for (i = 1; i <= n; i++ ) { 9: j = i * i; 10: k = n - j; 11: printf("K = %d\n",k); 12: if (k <= 0) goto line80; 13: } 14: line80: 15: if (k < 0) goto line110; 16: printf("YES %d is %d * %d\n",n,i,i); 17: goto line120; 18: line110: 19: printf("NO\n"); 20: line120: 21: exit(0); 22: }
(1)ここでは BASIC の文番号への参照を lineXXX というラベルを使って表しているが、ラベルとgotoを使わずに書き直しなさい。(何行目から何行目をこのように書き直すという解答でよい)
(2)自然数 N の入力のところで 16, 13, -1 を入力すると、それぞれどのような出力が得られるか。
3.以下の2つのプログラムで使われているデータバッファのことを何と呼ぶか。また、それぞれのプログラムの実行で得られる出力を書きなさい。
プログラム1
#include <stdio.h> #define N 10 static int buffer[100]; static int *bp = buffer; void push(int n) { *bp++ = n; } int pop(void) { return(*--bp); } main() { int i; for ( i = 0; i < N ; i++ ) push(i*i); for ( i = 0; i < N ; i++ ) printf("%d ",pop()); }
プログラム2
#include <stdio.h> #define N 10 static int buffer[100]; static int *bh=buffer, *bt=buffer; qput(int n) { *bh++=n; } int qget() { if (bh > bt) return(*bt++); else { printf("Error!\n"); exit(1);} } main() { int i; for (i = 0; i < N; i++) qput(i*i); for (i = 0; i < N; i++) printf("%d ",qget()); }
4.リスト構造とはどのようなデータ構造か。また、リストの追加、削除に必要とされる操作を書きなさい。