#GESP260602T1. 【GESP26年6月二级】单选题(每题 2 分,共 30 分)
- 学校组织同学参观科技展览,小明在排队等候时观察到前面的同学和后面的同学。对比各种数据结构,如果既需要通过前一个人找到后一个人,又需要通过后一个人找到前一个人,则使用链表可以模拟这种排队。然而如果需要能够同时向前和向后查找临近同学信息,则需要前驱和后继都能直接被查询到。更佳的数据结构应该是( )。
{{ select(1) }}
- 完全二叉树
- 双链表
- 队列
- 数组
- 中间位置的鸡蛋在被扔后还能蛋壳完好,则可以尝试更高的楼层。假设某鸡蛋在不超过 N 层高的楼上丢下不碎,现在有两枚鸡蛋和 N 层楼可供测试,下面某方法恰是二分查找。但它无法通过两枚鸡蛋程序验证的原因在于其假设鸡蛋是无限供应的不符合两枚鸡蛋的限制条件。对该方法这一不可行性的描述正确的是( )。
{{ select(2) }}
- 代码功能错误
- 逻辑描述正确
- 算法适用
- 条件不符
- 下面的 C++ 代码的运行结果是( )。
float x = 1 + 1.5;
cout << x;
{{ select(3) }}
- 代码内的计算值,如将 x = 3.5 改为 x = float(3) + 3.5 则正确执行。
- 代码功能正确,直接输出 2。
- 代码功能正确,将输出 6.5。
- 代码功能正确,将输出 2.5。
- 下面选择中,与 C++ 表达式 not (x > 5 or x < 10) 等价的是( )。
{{ select(4) }}
- x > 5 or x < 10
- x <= 5 and x >= 10
- x <= 5 or x >= 10
- not x > 5 and not x < 10
- 小明在某开发环境中执行 C++ 代码 cout << (2.5 + 2.25) << ' ' << (2.2 + 2.1) 时输出 4.75 4.30000000000001 ,其原因最可能是( )。
{{ select(5) }}
- C++ 的 + 运算符在处理浮点数时有时正确,有时错误
- 某些浮点数难以精确表示,导致微小误差
-
- 运算符不能用于浮点数,只能用于整数
- 因为 cout 函数难以输出太长的数值
- 执行如下 C++ 程序后,当输入 4 时,输出的最后一行是( )。
int n;
cin >> n;
for (int i = n; i > 0; i--) {
for (int j = 0; j < i; j++)
cout << j + 1 << ' ';
cout << endl;
}
{{ select(6) }}
- 0
- 1
- 1 2
- 1 2 3 4
- 下面的 C++ 代码执行后其输出是( )。
int tnt = 0;
for (int i = 1; i < 5; i += 3) {
for (int j = 0; j < i; j++)
tnt += 1;
cout << tnt << "#";
}
cout << tnt;
{{ select(7) }}
- 1#5#5
- 1#5#5#
- 1#5#12#12
- 0
- 下面的 C++ 代码执行之后的输出是( )。
int i;
for (i = -2; i < 2; i++)
if (not i % 3 == 0)
cout << i << "#";
cout << i;
{{ select(8) }}
- -2#-1#1#2
- -2#-1#1#2#3
- 1#2#3
- 0#1#2#3
- 下面的 C++ 代码执行后其输出是( )。
int cnt = 0, i, j;
for (i = 0; i < 3; i++) {
j = i;
while (j) {
cnt += 1;
j -= 1;
}
}
cout << i << ' ' << j << ' ' << cnt;
{{ select(9) }}
- 3 0 3
- 2 0 4
- 2 0 5
- 3 0 5
- 下面 C++ 代码执行后其输出是( )。
int count = 0, i, j;
for (i = 1; i < 4; i++)
for (j = 0; j < i; j++) {
if (j % 3 != 0)
continue;
count += 1;
break;
}
cout << i << ' ' << j << ' ' << count;
{{ select(10) }}
- 4 0 4
- 3 0 0
- 3 2 0
- 4 0 3
- 如下 C++ 代码执行后输出是 1 2 3 4 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7 8 9 10 11 5 6 7。横线处应该填入的运算符是( )。
int num = 1;
for (int i = 0; i < 35; i++) {
cout << num << " ";
if (num _______ 10)
num _______ 2;
else
num _______ 1;
}
{{ select(11) }}
- > /= +=
- >= %= +=
- > /= =+
- >= %= =+
- 如下数字图形在通过执行后续的 C++ 代码时,输入 10 来输出。横线处应填入的代码是( )。
1 1 1 1 1 1 1 1 1 1
1 1 0 0 0 0 0 0 0 1
1 0 1 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 1 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 0 0 1 1
1 1 1 1 1 1 1 1 1 1
int N;
cin >> N;
for (int i = 1; i < N + 1; i++) {
for (int j = 1; j < N + 1; j++)
if (________)
cout << "1 ";
else
cout << "0 ";
cout << endl;
}
{{ select(12) }}
- i == j and i == 1 and j == 1 and i == N and j == N
- i == j or i == 1 or j == 1 or i == N or j == N
- i == j or i == 0 or j == 0 or i == (N + 1) or j == (N + 1)
- i == j and i == 1 and j == 1 and i == (N + 1) and j == (N + 1)
- 英文 corner case 通常翻译为极端案例或边角案例,通常指正常范围以外的问题或者情形。在如下 C++ 代码中,变量都是整型,则 corner case 最应该是( )。
int tnt = 0, cnt = 0;
while (1) {
int score;
cin >> score;
if (score == -1)
break;
tnt += score;
cnt += 1;
}
cout << tnt / cnt;
{{ select(13) }}
- tnt = 0, cnt = 0 是 corner case ,应分为两行
- while(1) 是 corner case ,因为 while(1) 将会导致死循环
- cin >> score 是 corner case ,因为输入数据前应该提示整型数据
- cout << tnt / cnt 是 corner case ,因为如果直接输入 -1 ,将导致执行错误,虽然这种情况较为罕见
- 如下 C++ 代码执行后,输入 4 后,输出的数字图形是( )。
int n;
cin >> n;
for (int i = n; i > 0; i--) {
for (int j = 0; j < n - i; j++)
cout << "0 ";
for (int k = 0; k < i; k++)
cout << k + 1 << " ";
cout << endl;
}
{{ select(14) }}
- A.
1 2 3 4
1 2 3 0
1 2 0 0
1 0 0 0
- B.
1 2 3 4
0 1 2 3
0 0 1 2
0 0 0 1
- C.
1 2 3 4
2 3 4 0
3 4 0 0
4 0 0 0
- D.
0 0 0 1
0 0 1 2
0 1 2 3
1 2 3 4
- 某学校举办"校园演讲比赛",每位选手由 8 位评委打分(分数为 0 ~ 10 的整数),且每位评委必须打分。计分规则:去掉一个最高分,去掉一个最低分。如下程序通过键盘先输入选手编号,然后依次输入 8 个分数,并计算最终得分。下列说法正确的是( )。
for (int k = 0; k < 10; k++) {
int id, score;
printf("输入选手编号: ");
scanf("%d", &id);
int max_score = 0, min_score = 100; // 最高分和最低分初始化
int total_score = 0; // 总分
for (int j = 1; j <= 8; j++) {
printf("输入第%d位评委的分数: ", j);
scanf("%d", &score);
if (max_score < score)
max_score = score;
if (min_score > score)
min_score = score;
total_score += score;
}
total_score = total_score - max_score - min_score;
printf("选手编号是%d的最终得分: %.2f\n", id, max_score, min_score, total_score);
// 显示信息
printf("最高分: %d, 最低分: %d, 最终得分: %d\n", id, max_score, min_score, total_score);
}
{{ select(15) }}
- 主逻辑判断完全无误不需要修改
- max_score = 0, min_score = 100 这预设 max_score = 0, min_score = 0
- max_score + score 和 min_score > score 这两处的运算符应改为 >= 和 <=
- total_score = total_score - max_score - min_score 不适合这种写法,应按照如下方式修正:total = total - max total = total - min