小测试-04月04日

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

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

答案版
题型:单项选择题
题量:20 题
用途:课堂讲评
一、单项选择题(共20题)
第 1-12 题复习旧知识,第 13-20 题检查本节课函数、指针、结构体的基础掌握情况。每题有且仅有一个正确答案,绿色选项为正确答案。
1. 在 C++ 中,判断一个正整数 x 是否为奇数,条件写法正确的是( )。
A. x / 2 == 1
B. x % 2 == 1
C. x % 2 == 0
D. x == 1
答案:B。对于正整数,判断奇数最常见写法是 x % 2 == 1
2. 已知 int a = 17;float b = 5;,则表达式 a / b 的值是( )。
A. 3
B. 3.0
C. 3.4
D. 4
答案:C。因为 bfloat 类型,所以 a 会先转成浮点数,再进行浮点除法,结果是 17.0 / 5.0 = 3.4
3. 设有字符数组 char s[] = "hello";,执行 cout << s[1] + 3; 后,输出结果是( )。
A. e
B. h
C. 104
D. 101
答案:C。s[1] 是字符 'e',其 ASCII 码是 101,执行 s[1] + 3 后结果是整数 104,所以输出 104
4. 设有定义 char s[10] = "abc deg";,则 strlen(s) 的值是( )。
A. 6
B. 7
C. 8
D. 9
答案:B。字符串 "abc deg" 里有 7 个字符,其中中间的空格也要计入长度,strlen 不计算结尾的 '\0'
5. 阅读下面代码,程序输出结果是( )。
int i = 1, s = 0; while (i <= 5 && s < 7) { s += i; i++; } cout << s;
A. 3
B. 6
C. 10
D. 15
答案:C。循环过程中 s 依次变为 1, 3, 6, 10,当下一轮判断时 s < 7 不再成立,所以最终输出 10
6. 阅读代码,程序输出结果是( )。
int s = 0; for (int i = 1; i <= 5; i++) { if (i % 2 == 0) s += i; else s -= i; } cout << s;
A. -3
B. 3
C. 5
D. 15
答案:A。依次计算为 -1 + 2 - 3 + 4 - 5 = -3
7. 阅读代码,程序最终输出结果是( )。
for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 3; j++) { if (j == 2) continue; cout << i + j << ” “; } }
A. 2 3 4 5
B. 2 4 3 5 4 6 5 7
C. 2 3 4 5 6 7
D. 2 4 6 8
答案:B。每轮内层循环中 j=2 被跳过,所以每个 i 只会输出 i+1i+3,最终结果是 2 4 3 5 4 6 5 7
8. 设 bool a = true, b = false, c = true;,则逻辑表达式 (a && b) || (!b && c) 的值是( )。
A. true
B. false
C. 0
D. 无法确定
答案:A。前半部分是假,后半部分是真,所以整体为真。
9. 设有二维数组 int a[2][3] = {{1, 2, 3}, {4, 5, 6}};,则表达式 a[0][2] + a[1][0] 的值是( )。
A. 5
B. 6
C. 7
D. 8
答案:C。a[0][2] = 3a[1][0] = 4,所以结果是 3 + 4 = 7
10. 已知 string s = "abc";,执行 s += "de"; 后,s 的值是( )。
A. abc
B. deabc
C. abcde
D. abde
答案:C。+= 表示在原字符串后面拼接内容,所以结果是 abcde
11. 阅读代码,程序输出结果是( )。
char s[] = “abca”; int cnt = 0; for (int i = 0; s[i] != ‘\0’; i++) { for (int j = 0; j <= i; j++) { if (s[j] == ‘a’) cnt++; } } cout << cnt;
A. 4
B. 5
C. 6
D. 7
答案:B。外层循环依次枚举前缀,内层循环统计前缀中字符 'a' 的个数。四轮分别增加 1、1、1、2,总计为 5
12. 已知 string s = "hello";,则表达式 s.size() 的值是( )。
A. 4
B. 5
C. 6
D. 7
答案:B。size()string 类型自带的成员函数,用来返回字符串长度,"hello" 的长度是 5
13. 关于函数的说法,正确的是( )。
A. 函数必须写在 main 函数里面
B. 函数不能有返回值
C. 函数可以把重复功能封装起来
D. 一个程序只能写一个函数
答案:C。函数的核心作用之一就是封装重复功能。
14. 下列哪一行可以作为函数声明( )。
A. int maxv(int a, int b);
B. int maxv(int a, int b) return a;
C. maxv(int a, int b);
D. int maxv a, b;
答案:A。函数声明需要写明返回值类型、函数名、参数列表,并以分号结尾。
15. 下列函数定义中,能够正确返回两个整数较大值的是( )。
A. void maxv(int a, int b) { return a > b ? a : b; }
B. int maxv(int a, int b) { if (a > b) return a; else return b; }
C. int maxv(a, b) { return a; }
D. maxv(int a, int b) { return a; }
答案:B。返回值类型、参数类型和函数体都正确。
16. 若有定义 int a = 10;,则 &a 表示( )。
A. 变量 a 的值
B. 变量 a 的地址
C. 指针变量 a
D. a + 1
答案:B。& 是取地址运算符。
17. 若 int a = 10;int *p = &a;,则 *p 的值是( )。
A. a 的地址
B. 10
C. p 的地址
D. 不确定
答案:B。*p 表示取出指针所指向地址中的值。
18. 若要在函数中交换主函数里两个整型变量的值,下面更合适的函数头是( )。
A. void swap(int a, int b)
B. void swap(int *a, int *b)
C. int swap(int a)
D. void swap(int a)
答案:B。要修改外部变量,需要传地址。
19. 已定义结构体变量 stu,且有如下定义,下面哪组语句是正确的( )。
struct Student { string name; int score; };
A. stu-score = 95;
B. stu::score = 95;
C. stu.score = 95;
D. score.stu = 95;
答案:C。结构体变量访问成员要用点运算符 .
20. 阅读程序,程序输出结果是( )。
struct Student { string name; int score; }; int add(int x) { return x + 2; } int main() { Student s; s.name = “Tom”; s.score = 90; int *p = &s.score; *p = add(*p); cout << s.name << ” ” << s.score; }
A. Tom 90
B. Tom 92
C. 92 Tom
D. Tom 94
答案:B。结构体变量 s 的分数先设为 90,指针 p 指向 s.score,函数 add 返回参数加 2,所以最后 s.score 变成 92,输出 Tom 92