小测试-04月18日
朝外信奥1队 4月18号当堂测验
答案版
一、单项选择题(共10题)
每题只有一个正确选项,绿色为正确答案。
1. 下列存储器按存取速度由快到慢排列,正确的是( )。
答案:B。寄存器最快,其次是高速缓存、内存,最后是硬盘。
2. 杨辉三角的思想与下列哪种算法最接近?( )
答案:B。杨辉三角每一项都由上一行相邻两项推出,属于递推。
3. 下列属于输入设备的是( )。
答案:B。麦克风用于向计算机输入声音。
4. 小写字母 z 的 ASCII 码值是( )。
答案:C。z 的 ASCII 码是 122。
5. IP 地址是每台上网计算机所必需的,下列 IP 地址中可以作为合法主机地址的是( )。
答案:C。192.168.1.12 在常见私有网段内,是合法主机地址。
6. 下列可以用作 C++ 程序中的标识符的是( )。
答案:D。them 不是关键字或保留字,可以作为标识符。
7. 快速排序在最坏情况下运行的时间复杂度是( )。
答案:C。当划分极不均匀时,快速排序退化为 O(n^2)。
8. 设字符串 a = "98",b = "123",使用 strcmp 函数比较两者大小的结果是( )。
答案:A。strcmp 按字典序比较,首字符 9 > 1,所以 a 更大。
9. 关于计算机网络,下面的说法正确的是( )。
答案:C。TCP/IP 是互联网最基础的协议族。
10. 关于信息安全与网络道德,下列做法正确的是( )。
答案:A。输入支付密码前确认环境安全是正确做法。
二、阅读程序题(共2题)
判断题说明:true → T,false → F。
(1)阅读程序,回答 11~15 题
01 #include <bits/stdc++.h>
02 using namespace std;
03 const int SIZE = 100007;
04 int a[SIZE], b[SIZE];
05 int main()
06 {
07 int n, m, p, q, count=0, ret=0;
08 cin >> n >> m;
09 for (int i = 1; i <= n; i++)
10 {
11 cin >> p >> q;
12 a[p]++;
13 a[q+1]–;
14 }
15 for (int i = 1; i <= m; i++)
16 {
17 count += a[i];
18 ret += count;
19 }
20 cout << ret;
21 return 0;
22 }
11. 将第 7 行中的 count=0 去掉,只定义 count 变量,程序的运行结果不会改变。
答案:B。count 若不初始化,其值不确定,结果可能变化。
12. 将第 17 行和第 18 行互换位置,程序的运行结果不会发生变化。
答案:B。累加与更新顺序不能互换,否则结果改变。
13. 将第 15 行中的 i = 1 改为 i = 0,程序的运行结果不会改变。
答案:A。a[0] 初值为 0,额外循环一轮不影响结果。
14. 将第 12~13 行中的 p 和 q+1 分别改为 p-1 和 q,则输出结果( )。
答案:D。修改后有的输入会不变,有的会变化。
15. 若输入为 4 4 1 2 2 3 3 3 1 3,则输出为( )。
答案:D。题目给定输入下输出为 8。
(2)阅读程序,回答 16~21 题
01 #include <bits/stdc++.h>
02 using namespace std;
03 bool fun(int n)
04 {
05 int i=7;
06 if(n==2 || n==3 || n==5)
07 return true;
08 if(n==1 || n%2==0 || n%3==0 || n%5==0)
09 return false;
10 while(i*i<=n)
11 {
12 if (n%i==0)
13 return false;
14 i += 4;
15 if (n%i==0)
16 return false;
17 i += 2;
18 }
19 return true;
20 }
21 int main()
22 {
23 int n,m;
24 cin>>n>>m;
25 if(fun(n) && fun(m) && fun(n+m+1))
26 cout<<"YES"<<endl;
27 else
28 cout<<"NO"<<endl;
29 return 0;
30 }
16. 程序中 n 和 m 只有输入正整数,程序的输出值才可能是 YES。
答案:B。n、m 取非正数时,fun 也可能返回 true。
17. 程序中用到了递归函数 bool fun(int n)。
答案:B。fun 是循环判断,不是递归。
18. 若输入 n 和 m 都是素数,程序的输出值一定是 YES。
答案:B。n、m 为素数时,n+m+1 不一定是素数。
19. 若输入 n 和 m 的值分别是 -1 和 2027,则程序的输出值是 YES。
答案:A。fun(-1) 会直接返回 true。
20. 若输出 YES,则输入可能为( )。
答案:A。23、29、53 都满足素数条件。
21. 若输出 NO,则输入可能为( )。
答案:C。2023 不是素数,因此输出 NO。
三、完善程序题(共4题)
根据题意和代码补全空格,绿色为正确答案。
阅读程序,本题目是使用栈求后缀表达式的值,根据题意和代码,完善程序。
01 #include <bits/stdc++.h>
02 using namespace std;
03
04 int main() {
05 stack<int> s;
06 char a[1005];
07 int back, front, result;
08 cin >> a;
09 for (int i = 0; i < strlen(a); i++) {
10 if (a[i] >= '0' && a[i] <= '9') {
11 s.push(a[i] – '0');
12 } else {
13 back = s.top();
14 s.pop();
15 front = s.top();
16 s.pop();
17 if (a[i] == '+')
18 result = front + back;
19 else if (a[i] == '-')
20 result = front – back;
21 else if (a[i] == '*')
22 result = front * back;
23 else if (a[i] == '/')
24 result = front / back;
25 else if (a[i] == '%')
26 result = front % back;
27 s.push(result);
28 }
29 }
30 cout << s.top() << endl;
31 return 0;
32 }
22. 第 9 行横线处应填( )。
答案:A。应从下标 0 开始遍历。
23. 第 10 行横线处应填( )。
答案:D。数字字符应到 '9'。
24. 第 17 行横线处应填( )。
答案:B。应判断加号运算。
25. 第 27 行横线处应填( )。
答案:D。压栈的是运算结果 result。
