试 题 一
参考答案与评分标准
一、单项选择题:(10分,每题2分)
1.对于一个正常运行和正常退出的C程序,以下叙述正确的是 。
√A)程序是从main函数第一条可执行语句开始执行,在main函数结束
B)程序的执行总是从程序的第一个函数开始,在main函数结束
C)程序的执行总是从main函数开始,在最后一个函数中结束 D)从程序的第一个函数开始,在程序的最后一个函数中结束 2.在turbo C2.0编程环境下有如下程序片段:
#include
int a = 5, b = 4, x, y; x = 2 * a++;
printf(\a=%d, x=%d\\n\, a, x); y = --b * 2;
printf(\b=%d, y=%d\\n\, b, y); }
则正确的执行结果是 。 A) a=6, x=10
b=3, y=8 √B) a=6, x=10
b=3, y=6 C) a=6, x=12
b=3, y=6 D) 以上均不对
3.在turbo C2.0编程环境下有以下程序片断:
typedef struct
第1页(共6页) 班级: 学号: 姓名: {
int b; int p; }TYPEA;
void f(TYPEA c) {
c.b += 1; c.p += 2; } main() {
TYPEA a ={1, 2}; f(a);
printf(\%d,%d\\n\, a.b, a.p); }
则程序运行后的输出结果是 。
A) 2,3 B)2,4 C)1,4 √D)1,2
4.对于以下程序片段,描述正确的是 。
int x= -1; do {
x=x*x; }while(!x);
A)是死循环 B)循环执行两次 √C)循环执行一次 D)有语法错误
5. 一个指针数组的定义为 。
A) int (*ptr)[5]; √B) int *ptr[5]; C) int *(ptr[5]); D) int ptr[5]; 二、 1、2008
2、 a=2, b=1 a=3, b=2 3、9
4、1 2 3 4 5 6 7 8 9 10
2 班级: 学号: 姓名: 1 3 5 7 9 5、The Result is : 9
三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(8分,评分标准:每空1分,正确得1分,错误扣1分)
1. 以下程序将输入的十进制数以十六进制的形式输出。
#include
char b[17]= {\ int c[64],d, i=0, base = 16; long number;
printf(\请输入一个十进制数\\n\ scanf(\
do {
c[i] = number % base; number = number / base;
printf(\对应的十六进制数为: \\n\ for(--i; i>=0; --i)
{
d = c[i];
printf(\ }
}
printf(\
i++;
}while (number != 0);
2.用户从键盘任意输入一个数字表示月份值n,程序显示该月份对应的英文表示,若n不在1~12之间,则输出“Illegal month”。
#include
3 班级: 学号: 姓名: int n;
static char monthName[][20]={ \
\ \\\
\\ };
printf(\ scanf(\
if ((n <= 12) && (n >= 1)) {
printf(\%d is %s\\n\n, monthName[n]); }
else {
printf(\ } }
四、在下面给出的4个程序中,有15处错误(包括语法错误和逻辑错误),请找出其中的错误,并改正之。(30分,评分标准:实际错误有16个,只要找对15个即可,多找不加分。每找对1个错误,加1分,每修改正确1个错误,再加1分。)
1. 折半查找。
#include
int up=9, low=0, mid,found=0, find;
int a[10]={1, 5, 6, 9, 11, 17, 25, 34, 38, 41};
scanf(\ printf(\
while (up>=low && !found) {
mid=(up+low)/2; if(a[mid]==find) {
found=1; break; }
else if(a[mid]>find) up=mid-1; 4 班级: 学号: 姓名: else
low=mid+1; }
if(found) printf(\number is %dth\else printf(\}
2.下面程序模拟了骰子的6000次投掷,用rand函数产生1~6之间的随机数face,然后统计1~6每一面出现的次数存放到数组frequency中。
#include
main() {
int face, roll, frequency[7] = {0};
srand(time(NULL));
for (roll=1; roll<=6000; roll++); {
face = rand()%6 + 1; ++frequency[face]; }
printf(\ for (face=1; face<=6; face++) {
printf(\frequency[face]); } }
3. 计算十个数据的平均值。
#include
int i, sum=0;
float avg;
int sc[10], *p=sc;
for (i=0; i<10; i++) {
scanf(“%d”, p); p++; sum+= *(p-1); 5