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.リスト構造とはどのようなデータ構造か。また、リストの追加、削除に必要とされる操作を書きなさい。