一、选择题(每空6分,共30分)
1. 以下语言中,可移植性最好的是( )6分
A. 汇编语言
B. 机器语言
C. C语言
D. 二进制指令
2. 将十进制数 125 转换为二进制的结果是( )6分
A. 01111101
B. 01111100
C. 01111011
D. 01111001
3. 已知 int a=3, b=5, c=2;,表达式 a>b?a:(c==b?c:b) 的值是6分
4. 若有定义 int arr[4][4];,按内存顺序其第10个元素是( )6分
A. arr[2][1]
B. arr[2][2]
C. arr[1][2]
D. arr[1][3]
5. 已知 int x=1, y=2;,表达式 (x^y) & 2 的值是( )6分
二、程序补全(每空5分,共20分)
以下程序统计n个学生成绩中高于平均分的人数,请补全代码:
#include <stdio.h>
int main() {
int n = 5, i, count = 0;
① // 声明成绩数组
float sum = 0.0, avg;
printf("输入%d个成绩:\n", n);
for (i = 0; i < n; i++) {
② // 输入成绩
sum += score[i];
}
③ // 计算平均分
for (i = 0; i < n; i++)
if (④) // 判断是否高于平均分
count++;
printf("高于平均分人数: %d", count);
return 0;
}
三、程序填空(每空10分,共50分)
下列程序用于判断一个三位数是否为水仙花数(水仙花数是指一个三位数,其各位数字立方和等于该数本身,如153=1³+5³+3³)。请补全代码:
#include <stdio.h>
int main() {
int num, digit, sum = 0, temp;
printf("请输入一个三位数: ");
scanf("%d", &num);
①; // 你猜猜这里写什么
for (int i = 0; i < 3; i++) {
digit = ②; // 有意思,干啥用的
sum = ③; // 有意思,不知道干啥用的
temp = ④; // 去掉temp的最后一位
}
if (⑤) // 判断是否为水仙花数
printf("是水仙花数\n");
else
printf("不是水仙花数\n");
return 0;
}
四、程序分析(共50分)
1. 下列程序输出结果是 ①10分
#include <stdio.h>
int main() {
char s[] = "Hello";
printf("%d ", sizeof(s));
printf("%d", strlen(s));
return 0;
}
2. 下列程序输出结果是 ②10分
#include <stdio.h>
void swap(int *a, int *b) {
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
int main() {
int x = 5, y = 3;
swap(&x, &y);
printf("%d,%d", x, y);
return 0;
}
3. 下列递归程序输出 f(5) 的结果是 ③10分
#include <stdio.h>
int f(int n) {
return (n == 0) ? 0 : n + f(n-1);
}
int main() {
printf("%d", f(5));
return 0;
}
4. 下列程序输出结果是 ④10分
#include <stdio.h>
int main() {
char str[] = "abc\0def";
printf("%d", strlen(str));
return 0;
}
5. 下列函数调用 func("AABBAA", 'A') 的返回值是 ⑤10分
int func(char *s, char c) {
int cnt = 0;
while (*s) {
if (*s == c) cnt++;
s++;
}
return cnt;
}