2000年度初级程序员级下午试卷
试题一 (15分)
阅读以下C代码,将应填人 __(n)__ 处的字句写在答卷的对应栏内。
[程序1.1]
#include <stdio.h>
void nextS(int *h, int *m, int *s)
{ if (++*s < 60) return;
*s = O;
if (++*m < 60) return;
*m = O;
*h = (*h + 1) % 24;
}
void main 0
int hour = 23, minute = 59, second = 59;
nextS(&hour, &minute, &second);
printf("%d\t%d\t%d\n", hour, minute, second);
程序1.1的输出结果是 __(1)__ 。
[程序1.2]
#include <stdio. h>
int digit( long n, int k )
{ while ( n != 0 && k-- > 1 )
n / = 10;
return n%lO;
}
main()
{ printf ( "%d,%d\n",digit( 123456789L, 2 ), digit( 123.456789L, 9 ));
}
程序1.2的输出结果是 __(2)__ , __(3)__ 。
[程序1.3]
#include <stdio.h>
void s(int a[], int n)
{ int i, j, t, flg;
for(i = O; i < n-1; i++) {
for(flg = O, j = O; j < n-i-l: j++)
if(a[j] > a[j+l]) {
t = a[j]; a[j] = a[j+l]; a[j+i] = t;
fig = 1;
}
if (!fig) return;
}
)
void main( )
{ int i, cji= {15, 3, 8, 9, 6, 2};
s(c, 6);
for (i = O; i < 6; i++)
printf ("%4d\t", c[i]);
printf ('\n');
}
程序1.3的输出结果是 __(4)__ ;函数s(int[],int h)的功能是 __(5)__ 。
试题二 (15分)
阅读下列程序说明和 C 代码,将应填人 __(n)__ 处的字句写在答卷的对应栏内。
[程序 2 说明)
本程序从键盘输入 n(0<n<100) 个整数,计算并输出其中出现次数最多且数值最大的
元素及其出现次数。
[程序 2]
#include <stdio. h>
#define N 100
void main ( )
{ iht a[N] , n, i, j, ind, cl, c2;
do { printf(" 输入 n(O < n < lO0):\n");
scanf ("%d", &n);
}while (n 4= 0 || __(1)__ )
printf (" 输人数组元素:\n");
for(i = O; i < n; i++)
scanf ("%d", &a[i]);
for(c2 = i = O; i < n; i++) {
for(cl = 1, j = i+l; j < n; j++)
if(a[j] == a[i]) __(2)__ ;
if( __(3)__ I| cl == c2 && a[i] > a[ind]) {
c2 = cl; __(4)__
}
}
printf (" 其中%d出现%d次\n", a[ind], __(5)__ )
}
试题三 (15分)
阅读下列程序说明和 C 代码,将应填入 __(n)__ 处的字句写在答卷的对应栏内口
[程序3说明]
幼儿园有 n(<20) 个孩子围成一圈分糖果。老师先随机地发给每个孩子若干颗糖果,
然后按以下规则调整:每个孩子同时将自己手中的糖果分一半给坐在他右边的小朋友。如共
有 8 个孩子,则第 1 个将原有的一半分给第 2 个,第 2 个将原有的一半分给第3个,......,
第 8 个将原有的一半分给第 1 个,这样的平分动作同时进行。若平分前,某个孩子手中的糖
果是奇数颗,则必须从老师那里要一颗,使他的糖果数变成偶数。小孩人数和每个小孩的初
始糖果数由键盘输入。下面的程序可求出经过多少次上述这样的调整,使每个孩子手中的糖
果—样多,调整结束时每个孩子有糖果多少颗,在调整过程中老师又新增发了多少颗糖果。
[程序3]
#include <stdio. h>
#define N 20
int allEqual (int a[ ], int n) /* 检查每个孩子手中的糖果是否一样多 */
{ iht i;
for(i = 1; i < n; i++)
if(a[O] != a[i]) return O;
return 1;
}
int a[N], b[N];
void main ( )
{ int i, n, addk, loopc;
printf("Enter n((20)\n"); scanf("%d", &n);
printf ("Enter data\n");
for(i = O; i (n; i++) scanf("%d", &a[i]);
addk = O; __(l)__ ;
while ( __(2)__ ) { /* 平分循环 */
loopc++;
for ( i = O; i ( n; i++) { /* 为一次调整作准备 */
if(a[i]%2) { a[i]++; __(3)__ ;}
if (i < n-l) b[i+l] = a[i]/2; else __(4)__
a[i] /= 2;
}
for(i = O; i < n; i++) __(5)__ ; /* 完成一次调整 */
}
printf ("调整 %d 次\n",loopc);printf( "每个孩子有 %d 颗糖果\n", a[O]);
printf ("调整过程中新增发 %d 颗糖果。\n",addk);
}
试题四 (15分)
阅读下列程序说明和C代码,将应填人 __(n)__ 处的字句写在答卷的对应栏内。
[程序 4 说明]
本程序用于从键盘读人整数,插入到链表,·或从链表删除一个整数。
[程序 4]
#include <stdio. h>
#include <malloc. h>
typedef struct node { int val;
struct node *next;
} NODE;
NODE *ins(NODE ,list, iht x) /* 将 x 按从小到大的次序插入链表 */
{ NODE *u, *v = list, *p;
for(; v != NULL && x < v->val; u = v, v = v->next );/* 找插入位置 */
if (v != NULL && x == v->val) return list; /* 已有,被忽略 */
p = (NODE *)malloc(sizeof(NODE)); p->val = x; /* 生成新表元 */
if (v == list) list = p; else __(1)__ ;
__(2)__
return 1 ist;
}
NODE *del (NODE ,1 ist, int x) /* 从链表中删除值为 x 的表元 */
{ NODE *u, *v;
for(v = list; v != NULL && x < v->val; u = v, v = v->next)
if (v != NULL && x == v->val) { /* 找到值为 x 的表元 */
if(v == list) list = list->next; else __(3)__ ;
__(4)__ ; /* 释放空间 */
} else printf(" 没有找到! \n");
return list;
}
void main( )
{ iht x, ans; NODE *list = NULL, .p;
while(l) {
printf("\n输入1:将整数插入到链表。\n输入2:从链表删除一个整数。\n ");
printf ("其它整数,结束程序。\n\t 请输人选择! "); scanf("%d", &ans);
if( __(5)__ ) return;
printf(" 输入整数 "); scanf ("%d", &x);
if(ans == 1) list = ins(list, x);
else list = del (list, x);
for(p=list; p!=NULL; p=p->next) printf(" %4d",p->val);
}
}