GESP 2026年6月认证C++一级真题解析(理论题)

一、单项选择题(共15题,每题2分,合计30分)
第1题
学校组织到未来农场参观,小明听讲解员介绍,在智能温室中,湿度传感器可以连续检测土壤的湿度变化,并将检测到的湿度数据实时发送给中央控制器。中央控制器根据这些数据判断是否开启灌溉系统。请问,这里的湿度传感器所发挥的作用,类似于计算机系统中的哪一类组件?()
A. 处理器 B. 存储器 C. 输入设备 D. 输出设备
答案:C
解析
A. 处理器:负责运算、逻辑判断,不采集外部数据 → 错误 B. 存储器:负责存储数据,无采集外界信息的功能 → 错误 C. 输入设备:把外部物理信号转为计算机可识别数据(传感器、键盘、鼠标都属于输入设备)→ 正确 D. 输出设备:计算机向外输出信号(显示器、电机),和采集数据无关 → 错误
第2题
在使用某集成开发环境(比如Dev-C++)来编辑源代码文件时,程序员经常需要在编辑区中对代码进行各种修改。以下关于在编辑区中执行的操作描述不正确的()。
A. 可以将变量名count统一修改为number B. 可以连续撤销最近2次输入的内容 C. 可以调整代码行的缩进(如按 Tab 键) D. 在注释文本中间不能混用中英文
答案:D
解析
A:Dev-C++查找替换功能支持批量修改变量名 → 正确 B:编辑器支持多步 Ctrl+Z 连续撤销操作 → 正确 C:Tab 键是标准调整代码缩进的快捷键 → 正确 D: //、/* */注释内是纯文本,无语法限制,中英文可随意混合,描述错误 → 错误
第3题
有关如下C++代码的说法,正确的是( )。
float a = 3 + 3.5;
cout << a;
A. 代码执行将报错。如果将 a = 3 + 3.5改为a = 3 + 3 + 1/2将能正常执行。B. 代码执行将报错。如果将 a = 3 + 3.5改为a = 3.0 + 3.5将能正常执行。C. 代码能正常执行,将输出6。 D. 代码能正常执行,将输出6.5。
答案:D
解析
A: 1/2是整数除法结果0,该描述和原代码本身对错无关,不是对题干代码的正确判断 → 错误B: 3+3.5是合法浮点运算,无语法错误,不会报错 → 错误C: 3+3.5=6.5,实际输出不是6 → 错误D:int 与 double 相加结果为6.5,代码无错误,正常输出6.5 → 正确
第4题
下列C++表达式与 - 2 * 2 % 4 的值不同的是( )。
A. - (2 * 2) % 4B. (- 2 * 2) % 4C. -2 *(2 % 4)D. (2 * 2) % -4
答案:C
解析:先计算原式:-2*2=-4,-4%4=0。
A: -(2*2)%4 = -4%4=0,和原式相等 → 正确B: (-2*2)%4 = -4%4=0,和原式相等 → 正确C: 2%4=2,-2*2=-4,结果-4≠0,和原式不同 → 错误D: 4%-4=0,和原式相等 → 正确
第5题
执行如下C++代码片段,其输出是( )。
int a = 3;
int b = a;
a = 4;
printf("%d %d", a, b);
A. 3 3 B. 4 3 C. 4 4 D. 3 4
答案:B
解析:整型赋值是值拷贝,b只复制a初始值3,修改a不会改变b,最终输出 4 3。
A:a被重新赋值为4,第一个数字错误 → 错误 B: a=4,b=3,完全匹配输出结果 → 正确C:b不会跟随a同步变化,第二个数字错误 → 错误 D:两个数字全部颠倒,不符合代码逻辑 → 错误
第6题
如下C++代码执行时输入2026-6-27,下列说法正确的是( )。
int N;
cin >> N;
cout << N;
A. 输入失败,不允许输入减号,没有输出 B. 允许输入,输出1993 C. 允许输入并原样输出2026-6-27 D. 允许输入并输出2026
答案:D
解析:cin读取int时,遇到非数字 - 立刻停止读取,仅读取数字2026。
A:成功读取2026并打印,存在输出 → 错误 B:无任何运算逻辑,凭空出现数字1993,不符合输入规则 → 错误 C:int类型只能读取纯数字,减号无法读取,不能完整输出字符串 → 错误 D:读取截断规则匹配运行结果,输出2026 → 正确
第7题
如下C++代码执行时,其说法错误的是( )。
int N, M;
cin >> N >> M;
if (N > M)
cout << "A " << (N - M);
else
cout << "B " << (M - N);
A. 如果输入4 3,将输出A 1 B. 如果输入3 4,将输出B 1 C. 如果输入3 3,将输出A 0 D. 如果输入4 4,将输出B 0
答案:C
解析:逻辑:N>M 走if分支输出A,N≤M 走else分支输出B。
A:4>3,进入if输出A 1 → 正确 B:3<4,进入else输出B 1 → 正确 C:3不大于3,进入else输出B 0,选项描述输出A 0,错误 → 错误 D:4等于4,进入else输出B 0 → 正确
第8题
阅读如下C++代码,下列说法错误的是( )。
int cnt = 0;
for (int i = 0; i < 5; i++)
cnt += 1;
cout << cnt;
A. 将 cnt += 1修改为cnt = cnt + 1,执行效果相同B. 将 cnt += 1修改为cnt = 1 + cnt,执行效果相同C. 将 cnt += 1修改为cnt =+ 1,执行效果相同D. 将 cnt += 1修改为cnt = + 1 + cnt,执行效果相同
答案:C
解析:cnt += 1 等价 cnt = cnt + 1,实现累加 +1。
A:完全等价,累加逻辑不变 → 正确 B:加法交换律,数值结果不变 → 正确 C: cnt =+1等价cnt = (+1),每次直接赋值为1,不是累加,逻辑完全不同 → 错误D: +1仅代表正数,等价1+cnt,累加效果不变 → 正确
第9题
如下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++) {
printf("%d ", num);
if (num ______ 10)
num ______ 2;
else
num ______ 1;
}
A. > /= +=B. >= %= +=C. > %= +=D. >= /= =+
答案:A
解析:输出规律:1 ~ 11、5 ~ 11循环打印,num>10时从5开始打印。
A: num>10判断 11 触发改变,/=2数值改变为5,匹配输出规律 → 正确B: num>=10会在num=10就发生改变,%=取模num改变为1 → 错误C: num>10判断 11 触发改变,%=取模num改变为1,不能把 num 重置为5 → 错误D: =+语法书写不规范,语义混乱,不符合代码逻辑 → 错误
第10题
如下C++代码可以执行,其输出是( )。
int i;
for (i = 1; i < 5; i++)
if (i % 2 == 0) {
continue;
}
cout << i << "#";
cout << i << "END#";
答案:A
解析:代码逻辑:当i == 2和i == 4时,continue会跳过当前循环剩余所有代码,cout << i << "#"; 永远不会执行;当i == 5时,循环结束,执行 cout << i << "END#";。
A:当i == 5时,循环结束,执行 cout << i << "END#";→ 正确B:当i == 5时, cout << i << "#";不会执行 → 错误C:continue后代码不执行,无单独#输出 → 错误 D:continue后代码不执行,无单独#输出 → 错误
第11题
如下C++代码执行时,下列说法正确的是( )。
int N, i;
cin >> N;
for (i = 2; i < N; i++)
if (N % i == 0) {
cout << "1#";
break;
} else
cout << "0#";
A. 如果输入2,将输出1#。 B. 如果输入15,将输出0#1#。 C. 如果输入1,将输出0#。 D. 如果输入3,将输出1#。
答案:B
解析
A:输入2,N=2,循环条件i<N,i初始值为2,2<2不成立,循环完全不执行,无任何输出 → 错误 B:输入15,i=2时15%2=1,打印0#;i=3时15%3=0,打印1#并break,最终输出 0#1#→ 正确C:输入1,循环条件i<1不成立,无任何打印内容 → 错误 D:输入3,i=2时3%2=1,打印0#,循环结束仅输出0# → 错误
第12题
有关如下C++代码,下列说法中错误的是( )。
int i, tot;
i = 0, tot = 0;
while (0 <= i && i < 10) {
i += 1;
tot += 1;
}
cout << tot;
A. 如果调整 0 <= i && i < 10为1 <= i && i < 10,输出同样为45,因为加上0不影响结果。B. 如果将 i = 0和tot = 0合并为i = tot = 0,执行结果与修改前相同。C. 将 tot += 1与i += 1交换顺序,执行结果与修改前相同。D. 将 i = 0与tot = 0交换顺序,执行结果与修改前相同。
答案:A
解析:原循环条件0<=i && i<10共循环10次,tot最终等于10;修改条件后仅循环9次,tot=9,输出改变。
A:修改后循环次数变为9次,输出9,不是45,描述完全错误 → 错误 B: i=tot=0等价分开赋值,初始值不变,循环结果不变 → 正确C:两条自增语句交换顺序不影响最终tot累加总数 → 正确 D:交换两个赋值语句顺序,变量初始值不变,运行结果不变 → 正确
第13题
以下C++代码可以找出千位、百位、十位和个位满足特定条件的四位数(例如各位数字的四次方和等于原数,即“四叶玫瑰数”),横线处应该填入的是( )。
int count = 0;
for (int n = 1000; n <= 9999; n++) {
int a = n / 1000;
int b = (n / 100) % 10;
____________ // L1
int d = n % 10;
if (a*a*a*a + b*b*b*b + c*c*c*c + d*d*d*d == n) {//特定条件
count++;
}
}
A. int c = (n / 10) / 10;B. int c = (n / 10) % 10;C. int c = (n % 10) / 10;D. int c = (n % 10) % 10;
答案:B
解析:c代表十位数字,先n/10去掉个位,再%10取出十位。
A: (n/10)/10 = n/100,取出百位 → 错误B: (n/10)%10正确提取十位数字 → 正确C: n%10得到个位,个位除以10恒为0 → 错误D: n%10取个位后再取模10,依旧是个位 → 错误
第14题
下面的C++代码用于计算经过n秒后的秒针位置,两处横线处分别应填入的代码是( )。
int start, n, pos;
cout << "当前秒数(0-59): ";
cin >> start;
cout << "经过多少秒: ";
cin >> n;
pos = ____________; // L1
if (____________)
cout << n << "秒后回到12点方向" << endl;
else
cout << n << "秒后指向" << pos << "秒刻度" << endl;
A. (start + n) / 60和pos == 0B. (start + n) % 60和pos == 0C. (start + n) / 60和pos <= 0D. (start + n) % 60和pos = 0
答案:B
解析:秒针60秒一圈,对60取模得到0~59刻度;pos==0是判断语句,pos=0是赋值语句。
A: /60得到总圈数,不是刻度 → 错误B: (start+n)%60计算当前刻度,pos==0判断归零,逻辑正确 → 正确C: /60无法得到刻度数值 → 错误D: pos=0是赋值,if条件需要布尔判断==,语法错误 → 错误
第15题
如果正整数 N 只能被 1 和它本身整除,则它是一个质数(或素数)。下面的C++代码用于判断正整数 N 是否为质数(素数)。若 N 是质数,输出 YES,否则输出 NO。横线处不应填入的代码是( )。
int N, i;
cin >> N;
if (N <= 1) {
cout << "NO";
return 0;
}
for (i = 2; ____________; i++) {
if (N % i == 0) {
cout << "NO";
return 0;
}
}
cout << "YES";
A. i < NB. i <= NC. i <= N / 2D. i * i <= N
答案:B
解析:循环到i=N时,N%N==0,会把质数误判为合数。
A: i<N是标准质数判断写法,可填入 → 正确B: i<=N逻辑错误,不应填入 → 错误C: i<=N/2优化写法,合数因数不会超过N/2,可填入 → 正确D: i*i<=N最优平方根优化,可填入 → 正确
二、判断题(共10题,每题2分,合计20分)
第1题
又到期末考试周,小明发现这次许多闭卷考试不仅禁止携带手机、平板电脑,还有最近比较时髦的各类AI眼镜(也有叫智能眼镜)也同样不允许带入考场。这些AI眼镜应该也是内置了操作系统并可能支持Wi-Fi或蓝牙连接。()
正确 错误 答案:正确 解析:AI智能眼镜属于嵌入式智能设备,内置微型操作系统,支持无线传输,考场禁止携带智能电子设备。
第2题
如果n为大于0的整数,则C++表达式 (n / 10) % 10 与 (n % 100) / 10 的结果相同。()
正确 错误 答案:正确 解析:两个表达式功能均为提取数字的十位,计算结果完全相等。
第3题
下面C++代码执行后将输出19。()
int i;
for (i = 0; i < 20; i += 3)
if (i % 3 != 0)
break;
cout << i;
正确 错误 答案:错误 解析:循环i取值 0,3,6,9,12,15,18,所有i都满足i%3==0,循环结束i=21,输出21,不是19。
第4题
在数学中,N! 称之为N的阶乘,其含义是1到N之积,包括N。如 3!=1×2×3=6。如下C++代码能输出正确阶乘的结果。()
int N;
cout << "请输入正整数:";
cin >> N;
int rst = 0;
for (int i = 1; i < N + 1; i++)
rst *= i;
cout << rst;
正确 错误 答案:错误 解析:阶乘乘积变量初始值必须为1, rst=0会导致所有乘积结果恒为0。
第5题
如下C++代码能实现输出正整数N的各位数字。()
int N;
cin >> N;
while (N > 0) {
cout << (N % 10) << endl;
N = N / 10;
}
正确 错误 答案:正确 解析:数字拆位标准模板, N%10取个位,N/10剔除个位,循环输出所有数位。
第6题
将如下C++代码中的 printf("\n") 更换为 printf("%c", '\n'),输出效果相同。()
for (int i = 0; i < 100; i++) {
if (i % 5 == 0)
printf("\n");
printf("%2d ", i);
}
正确 错误 答案:正确 解析: printf("\n")直接输出换行符;printf("%c", '\n')将换行符作为字符输出,屏幕显示效果完全一致。
第7题
C++代码 cout << (2.5 % 2) 能够生成可执行代码,但执行时将报错,因为 % 只能适用于正整数。()
正确 错误 答案:错误 解析:两处错误:1. %运算符仅支持整型,浮点2.5参与运算直接编译报错,无法生成可执行文件;2.%支持负整数,不限制正数。
第8题
下面的C++代码执行后将输出24。()
int total;
for (int n = 1; n <= 4; n++) {
total *= n;
}
cout << total;
正确 错误 答案:错误 解析:局部int变量 total未初始化,存储随机垃圾值,相乘输出无固定结果,不可能输出24。
第9题
如果a是C++的整型变量,值为4,则表达式 (a % 2 == 0) + (a / 2) 的值为4。()
正确 错误 答案:错误 解析
4%2==0结果true=1;4/2=2;总和1+2=3≠4。第10题
删除下面C++代码中的continue后,其输出与原来相同。()
int x = 0;
while (x < 4) {
x++;
if (x == 2) continue;
cout << x << ",";
}
正确 错误 答案:错误 解析:原代码输出 1,3,4,;删除continue后x=2不会跳过,输出1,2,3,4,,两段输出内容不同。
