GESP 2026年6月认证C++一级真题解析

四季读书网 2 0
GESP 2026年6月认证C++一级真题解析

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

GESP 2026年6月认证C++一级真题解析-第1张图片-四季读书网

一、单项选择题(共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) % 4
  • B. (- 2 * 2) % 4
  • C. -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=4b=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 = 0tot = 0合并为i = tot = 0,执行结果与修改前相同。
  • C. 将tot += 1i += 1交换顺序,执行结果与修改前相同。
  • D. 将i = 0tot = 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 == 0
  • B. (start + n) % 60 和 pos == 0
  • C. (start + n) / 60 和 pos <= 0
  • D. (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 < N
  • B. i <= N
  • C. i <= N / 2
  • D. 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,,两段输出内容不同。
GESP 2026年6月认证C++一级真题解析-第2张图片-四季读书网
扫码联系陈老师
获取历年真题和解析

抱歉,评论功能暂时关闭!