跳到正文
OJ
佛大附属信奥
在线评测 · 分级学习
学习
题库
测验
提交
作业
留言
登录
菜单
学习
题库
测验
提交
作业
留言
登录
GESP C++ 二级 · 2025 年 3 月认证理论卷
登录
后作答才能记录成绩
一、单选题(每题 2 分)
1.
2025年春节有两件轰动全球的事件,一个是DeepSeek横空出世,另一个是贺岁片《哪吒2》票房惊人,入了全球票房榜。下面关于DeepSeek与《哪吒2》的描述成立的是( )。
A. 《哪吒2》是一款新型操作系统
B. DeepSeek是深海钻探软件
C. 《哪吒2》可以生成新的软件
D. DeepSeek可以根据《哪吒2》的场景生成剧情脚本
2.
对整型变量N,如果它能够同时被3和5整除,则输出N是含有至少两个质因数。如果用流程图来描述处理过程,则输出语句应该在哪种图形框中( )。
A. 圆形框
B. 椭圆形框
C. 平行四边形框
D. 菱形框
3.
下面C++代码执行,其输出是( )。 ```cpp int a=3, b = 4; a == b; b == a; cout << a << ' ' << b << endl; ```
A. 3 4
B. 3 3
C. 4 4
D. 4 3
4.
求三色彩球的颜色。有数量无限的红(Red)绿(Green)蓝(Blue)三种彩球排成一行,每组先为5个红色球,随后3个绿色,最后为2个蓝色。每个球都有编号,从左到右依次为1,2,3……。输入整数代表编号,求该编号球的颜色。下面是C++代码是实现,正确说法是( )。 ```cpp int N, remainder; cin >> N; remainder = N % 10; // remainder变量保存余数 if((1 <= remainder) && (remainder<= 5)) cout << "Red"; else if ((6 <= remainder) && (remainder <= 8)) cout << "Green"; else if ((remainder == 9) || (remainder == 0)) cout << "Blue"; ```
A. 将`else if ((remainder == 9) || (remainder == 0))`修改为`else`效果相同
B. 将`((1 <= remainder) && (remainder<= 5))`修改为`(remainder <= 5)`效果相同
C. `else if ((6 <= remainder) && (remainder <= 8))`写法错误,应修改为`else if (6 <= remainder <= 8)`
D. 根据题意`remainder = N % 10`应修改为`remainder = N / 10`
5.
下面C++代码执行后其输出是( )。 ```cpp int tnt = 0; for (int i = 0; i < 10;i ++) if (i % 3) tnt += 1; else tnt += 2; cout << tnt; ```
A. 18
B. 17
C. 16
D. 14
6.
下面C++代码执行后输出是( )。 ```cpp int i; for (i = 10; i > 0; i -= 2) break; cout << i; ```
A. 10
B. 8
C. 0
D. 因为循环执行时会执行break语句而终止循环,所以i的值不确定
7.
下面C++代码执行后输出是( )。 ```cpp int i; for (i =0; i < 10; i++){ if (i % 3 == 0) continue; cout << "0" << "#"; } if (i >= 10) cout << "1" << "#"; ```
A. 0#0#0#0#0#0#
B. 0#0#0#0#0#0#0#1#
C. 0#0#0#0#1#
D. 0#0#0#0#0#0#1#
8.
下面C++代码执行后的输出是( )。 ```cpp int i,j; for (i = 0; i < 5; i++) for (j = i; j > 0; j -= 1) printf("%d-",j); ```
A. 1-2-1-3-2-1-4-3-2-1-
B. 1-2-1-3-2-1-4-3-2-1
C. 0-0-1-0-1-2-0-1-2-3-
D. 0-0-1-0-1-2-0-1-2-3
9.
下面C++代码执行后,将输出能被2整除且除以7余数为2的数。下列选项不能实现的是( )。 ```cpp for (int i = 0; i < 100; i++) if _______________________ cout << i << " "; ```
A. `((i % 2 == 0) && (i % 7 == 2))`
B. `((!(i % 2)) && (i % 7 == 2))`
C. `((!(i % 2)) && (!(i % 7)))`
D. `((i % 2 != 1) && (i % 7 == 2))`
10.
下面C++代码用于求1到N之间正整数中含有3的数的个数,比如123和32都是符合条件的数。则前后两处横线应填入代码分别是( )。 ```cpp int i,j; int cnt = 0, N; cout << "请输入正整数N:"; cin >> N; for (i = 1; (j=i) < N; i++) while (j != 0) if (j % 10 == 3){ cnt +=1; __________; } else __________; cout << cnt << " "; ```
A. 1. `continue` 2. `j /= 10`
B. 1. `break` 2. `j /= 10`
C. 1. `continue` 2. `j %= 10`
D. 1. `break` 2. `j %= 10`
11.
在数学中N!表示N的阶乘,即1到N的乘积,如3!=1\*2\*3,且0! = 1。下面的两段C++代码用于求1到N的阶乘之和,如N为3,则结果是9(1!+2!+3!的值)。选项中的说法正确的是( )。 ```cpp // 实现1 int i,N; cin >> N; int tnt = 0, last = 1; for (i = 1; i < N + 1; i++){ last *= i; tnt += last; } cout << tnt << endl; ``` ```cpp // 实现2 int i,N; cin >> N; int tnt = 0, tmp; for (i = 1; i < N + 1; i++){ tmp = 1; for (int j = 1; j < i + 1; j++) tmp *= j; tnt += tmp; } cout << tnt << endl; ```
A. 虽然实现1的代码短小,但效率并不高
B. 实现2的代码效率更高,且更易于理解
C. 实现1因为应用了前项计算结果,计算量更小,因此效率高
D. 两种实现,效率几乎一致
12.
哥德巴赫猜想是指大于2的偶数都可以分解为两个质数之和,下面的代码用于验证4-1000之内的偶数能否分解为两个质数之和。下面C++代码中假设`isPrime()`是已经定义好用于判断正整数N是否为质数, 返回bool值。对该段代码,错误的说法是( )。 ```cpp for (i = 4; i < 1000; i += 2) for (j = 2; j < i; j++) if (isPrime(j) && isPrime(i-j)){ printf("%d=%d+%d\n", i, j, i-j); break; } ```
A. 将代码`isPrime(j) && isPrime(i-j)`修改为`isPrime(j) == true && isPrime(i-j) == true`效果相同
B. 代码执行后,输出的一对质数,一定是小的数在前
C. 即便将外层循环中i的上界1000修改为很大的整数,也不能说从数学上证明了哥德巴赫猜想
D. 根据题意,break语句应该移到if语句块之外
13.
已知C++代码和执行后的期望输出如下,相关说法正确的是( )。 ```cpp int i,j; int last, N; cout << "请输入层数N:"; cin >> N; last = 1; for (i = 1; i < N; i++){ for (j = 1; j < i + 1; j++){ // L1 if (last > 9) last = 1; cout << last << " "; last += 1; } printf("\n"); } ``` 期望输出(N=10): ``` 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 ```
A. 倒数第二行的`printf("\n")`有错,应该修改为`cout << endl;`,`printf()`函数不能输出换行
B. `last += 1`修改为`last = last + 1`执行效果相同
C. 代码中L1标记行中的`j < i + 1`应修改为`j < i`
D. 外层for循环前的`last = 1`修改为`last = 0`执行效果相同
14.
在C++中,( )最适合填入横线处连续5次正确生成1到10之间的随机整数? ```cpp for(int i=0; i<5; i++) __________________; ```
A. `rand() % 11`
B. `rand() % 10`
C. `rand() % 10 + 1`
D. `rand() % 9 + 1`
15.
在C++中,如果a和b均为float类型的变量,那么二者如果相差足够小(比如0.000001),就可以视作相等。比如2.2345676和2.2345677就可以视作相等。下列哪个表达式能用来正确判断"a等于b" ( )。
A. `((b-a) < 0.000001 )`
B. `((b-a) <= 0.000001 )`
C. `(abs(b-a) <= 0.000001 )`
D. `(sqrt(b-a) <= 0.000001 )`