小测试-04月18日

朝外信奥2队 4月18号当堂测验 答案版

朝外信奥2队 4月18号当堂测验

答案版
题型:单项选择题 + 阅读程序题
题量:25 题
用途:课堂讲评
一、单项选择题(共15题)
每题有且仅有一个正确答案,绿色选项为正确答案。
1. 下面说法不正确的是( )。
A. bool 占 2 字节
B. int 占 4 字节
C. char 占 1 字节
D. double 占 8 字节
答案:A。在 C++ 中 bool 通常占 1 字节,不是 2 字节。
2. 下面表达式的值是( )。
sqrt(4) + pow(2, 5) + ceil(-1.2)
A. 33
B. 34
C. 35
D. 36
答案:A。sqrt(4)=2,pow(2,5)=32,ceil(-1.2)=-1,和为 33。
3. 下面表达式的值是( )。
max(3, min(5, 2 + 4)) + abs(-2)
A. 5
B. 6
C. 8
D. 7
答案:D。max(3, min(5, 6)) + abs(-2) = 5 + 2 = 7。
4. 下面表达式的值是( )。
‘A’ + 1 – ‘0’ + (int)(‘a’ – ‘A’)
A. 47
B. 48
C. 49
D. 50
答案:D。'A'=65,65+1-48+32=50。
5. 下列关于函数参数的说法,正确的是( )。
A. 形参和实参一定是同一个变量
B. 形参只能是整数
C. 实参不能是表达式
D. 形参是函数定义里的参数,实参是调用时传入的值
答案:D。形参是定义中的变量名,实参是调用时传入的数据。
6. 下列关于指针的说法,正确的是( )。
A. 指针变量存放的是地址
B. 指针只能存放整数
C. 指针和普通变量没有区别
D. 指针不能参与函数参数传递
答案:A。指针变量中保存的是地址值。
7. &a 的含义是( )。
A. 取变量 a 的地址
B. 取变量 a 的值
C. 取变量 a 的相反数
D. 取变量 a 的大小
答案:A。& 表示取地址。
8. *p 的含义是( )。
A. 乘法
B. 取地址
C. 解引用,访问指针指向的变量
D. 交换两个变量
答案:C。*p 表示访问 p 指向的内容。
9. 若要通过函数修改外部变量的值,通常可以使用( )。
A. 常量
B. 局部变量
C. 指针或引用
D. 宏定义
答案:C。要在函数中改到外部变量,一般用指针或引用传参。
10. 下列关于结构体的说法,正确的是( )。
A. 结构体只能有一个成员
B. 结构体不能作为函数参数
C. 结构体不能创建数组
D. 结构体适合组织多个相关数据
答案:D。结构体常用来把多个相关成员组织在一起。
11. 若已定义结构体 Student,并定义 Student s;,要访问它的成员 age,应写成( )。
A. s.age
B. s->age
C. *s.age
D. s&age
答案:A。普通结构体对象用点号访问成员。
12. 下面程序的输出结果是( )。
int a[5] = {1, 2, 3, 4, 5}; int *p = a; cout << *(p + 2);
A. 1
B. 2
C. 4
D. 3
答案:D。p+2 指向 a[2],其值是 3。
13. 从 6 名同学中选 2 名分别担任班长和副班长,再从剩下 4 名同学中选 1 名担任纪律委员,共有多少种安排?( )
A. 60
B. 90
C. 120
D. 180
答案:C。6×5×4 = 120。
14. 下面程序的输出结果是( )。
int sum = 0; for (int i = 1; i <= 5; ++i) { if (i == 2) continue; if (i == 4) break; sum += i; } cout << sum;
A. 1
B. 3
C. 4
D. 6
答案:C。累加 1、3,遇到 2 continue,遇到 4 break,所以 sum=1+3=4。
15. 若输入 8,程序输出( )。
#include <iostream> using namespace std; const int NUM = 5; int r(int n){ int i; if (n <= NUM) return n; for (i = 1; i <= NUM; i++) if (r(n – i) < 0) return i; return -1; } int main(){ int n; cin >> n; cout << r(n) << endl; return 0; }
A. 1
B. 2
C. 4
D. 3
答案:B。r(8) 会递归找到 i=2。
二、阅读程序选择题
每题只有一个正确选项,绿色选项为正确答案。
(1)阅读程序,回答 16~20 题
#include <bits/stdc++.h> using namespace std; void add(int &x) { x += 3; } void change(int *p) { *p += 2; } int main() { int a = 4, b = 5; add(a); change(&b); int c = a + b; cout << a << ' ' << b << ' ' << c << ' '; return 0; }
16. 执行 add(a) 后,a 的值是( )。
A. 4
B. 5
C. 7
D. 8
答案:C。add(a) 通过引用把 a 变成 7。
17. 执行 change(&b) 后,b 的值是( )。
A. 5
B. 6
C. 7
D. 8
答案:C。change(&b) 通过指针把 b 变成 7。
18. 变量 c 的值是( )。
A. 12
B. 13
C. 14
D. 15
答案:C。c = 7 + 7 = 14。
19. 程序最终输出什么?( )
A. 4 5 9
B. 7 5 12
C. 7 7 12
D. 7 7 14
答案:D。最终输出为 7 7 14。
20. 如果把 change(&b) 改成 change(b),程序会( )。
A. 正常运行且结果不变
B. 正常运行但结果改变
C. 编译出错
D. 运行但没有输出
答案:C。change 需要指针参数,传 b 会编译出错。
(2)阅读程序,回答 21~25 题
#include <bits/stdc++.h> using namespace std; struct Student { string name; int score; }; int main() { Student s[3] = {{"A", 85}, {"B", 92}, {"C", 78}}; int mx = s[0].score; int id = 0; for (int i = 1; i < 3; ++i) { if (s[i].score > mx) { mx = s[i].score; id = i; } } cout << s[id].name << ' ' << mx << ' '; return 0; }
21. Student 是什么类型?( )
A. 数组类型
B. 结构体类型
C. 指针类型
D. 字符串类型
答案:B。Student 是结构体类型。
22. 数组 s 中一共有多少个学生?( )
A. 2
B. 3
C. 4
D. 5
答案:B。数组 s 中定义了 3 个学生。
23. 初始时,mx 的值是多少?( )
A. 78
B. 85
C. 92
D. 0
答案:B。mx 初始等于 s[0].score,即 85。
24. 最终 id 的值是多少?( )
A. 0
B. 1
C. 2
D. 3
答案:B。最高分是 92,对应下标 1。
25. 程序最终输出什么?( )
A. A 85
B. B 92
C. C 78
D. B 78
答案:B。输出为 B 92。