尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

C++ ⼀级 2025 年09 ⽉

C++ ⼀级 2025 年09 ⽉
📅 发布时间:2026/6/19 21:22:39

C++ ⼀级 2025 年09 ⽉

GESP CCF 编程能力等级认证 C++ 一级(2025 年 9 月)

一、单选题(每题 2 分,共 30 分)

题号123456789101112131415
答案DCCCDADCCACDDAD

第 1 题

人工智能现在非常火,小杨就想多了解一下,其中就经常听人提到 “大模型”。那么请问这里说的 “大模型” 最贴切是指( )。

A. 大电脑模型B. 大规模智能C. 智能的单位D. 大语言模型

第 2 题

小杨这学期刚开学就选修了一门编程课,然后就想编写程序来计算 1 到 10001 之间的所有偶数的和。他希望程序采用简单累加整数的方法,同时希望源程序尽可能清晰、简洁,则下面关于实现累加时采用的主要控制结构的哪个说法最不合适( )。

A. 使用循环结构B. 使用循环和分支的组合C. 仅使用顺序结构D. 不使用分支结构

第 3 题

下面的 C++ 代码用于输入姓名,然后输出姓名,正确的说法是( )。

string XingMing;cout<<"请输入您的姓名:";cin>>XingMing;cout<<XingMing;

A. XingMing 是汉语拼音,不能作为变量名称

B. 可以将 XingMing 改为 Xing Ming

C. 可以将 XingMing 改为 xingming

D. 可以将 XingMing 改为 Xing-Ming

逐一分析选项

选项 A:XingMing 是汉语拼音,不能作为变量名称

错误。C++ 对变量名的语言类型没有限制(无论是拼音、英文、甚至是符合规则的汉字(部分编译器支持)都可以),只要符合命名规则即可。XingMing由字母组成,以字母开头,完全符合规则。

选项 B:可以将 XingMing 改为 Xing Ming

错误。变量名中不允许包含空格,Xing Ming中间有空格,违反命名规则,编译器会报错。

选项 C:可以将 XingMing 改为 xingming

正确。xingming由小写字母组成,以字母开头,符合所有命名规则。C++ 区分大小写,但修改变量名的大小写(只要符合规则)是允许的。

选项 D:可以将 XingMing 改为 Xing-Ming

错误。变量名中不允许包含减号(-),Xing-Ming中的-是特殊字符,违反命名规则。

第 4 题

下列 C++ 代码中 a 和 b 都是整型变量,执行后,其结果是( )。

a=13;b=5;cout<<a/b<<a%b<<a*b;

A. 2 3

B. 23

C. 20

D. 以上都不准确

第一步:分析各运算的结果

C++ 中整型之间的算术运算结果仍为整型(会舍弃小数部分,只保留整数部分),我们逐一计算:

  1. 整除运算a / b:a=13,b=5,13 / 5的数学结果是 2.6,整型运算舍弃小数后结果为2。
  2. 取模运算a % b:取模运算的结果是整除后的余数,13 % 5的余数为3。
  3. 乘法运算a \* b:13 * 5的结果为65。
第二步:分析cout的输出特性

cout输出多个值时,若直接用<<连接,会将所有结果按顺序拼接输出,不会自动添加空格或分隔符。因此:cout << a / b << a % b << a * b;等价于cout << 2 << 3 << 65;,最终输出的内容是2365。

第三步:逐一分析选项
  • 选项 A:输出 “2 3”,但代码中没有输出空格,且缺少了乘法的结果 65,错误。
  • 选项 B:输出 “23”,只包含了整除和取模的结果,缺少乘法的 65,错误。
  • 选项 C:输出 “20”,与实际计算结果完全不符,错误。
  • 选项 D:以上都不准确,正确。
最终答案

D

第 5 题

C++ 表达式3 * 4 % 5 / 6的值是( )。

A. 10

B. 5

C. 2

D. 0

第 6 题

下面的 C++ 代码中变量 N 和 M 都是整型,则执行时如果先输入 10 并输入一个制表符后输入 20 并回车,其输出的数值是( )。

scanf("%d",&N);scanf("%d",&M);printf("{%d}",N+M);

A. {30}

B. 1020

C. {N+M}

D. 不输出,继续等待输入

第 7 题

当前是 9 月,编写 C++ 代码求 N 个月后的月份。横线处应填入的代码是( )。

intN,M;cin>>N;M=_____________;if(M==0)printf("%d个月后是12月",N);elseprintf("%d个月后是%d月",N,M);

A.N % 12

B.9 + N % 12

C.(9 + N) / 12

D.(9 + N) % 12

第 8 题

下面 C++ 代码执行后的输出是( )。

intn=0;for(inti=0;i<100;i++)n+=i%2;cout<<n;

A. 5050

B. 4950

C. 50

D. 49

第 9 题

下面的 C++ 代码执行后输出是( )。

intN=0,i;for(i=-100;i<100;i++)N+=i%10;cout<<N;

A. 900

B. 100

C. 0

D. -100

第 10 题

下面 C++ 代码执行后输出是( )。

inti;for(i=1;i<5;i++){if(i%3==0)break;printf("%d#",i);if(i>5)printf("END\n");}

A. 1#2#

B. 1#2#END

C. 1#2

D. 1#2#3#4#END

第 11 题

下面的 C++ 代码用于求 N 的镜面数(N 的个位到最高位的各位数字依次反过来出现在数字中,但高位 0 将被忽略,不输出),如输入 1234,则将输出 4321,又如输入 120,则将输出 21,错误的选项是( )。

cout<<"请输入个位数不为0的正整数:";cin>>N;rst=0;// 保存逆序结果while(______________){rst=rst*10+N%10;N=N/10;}cout<<rst<<endl;

A.N != 0

B.not (N == 0)

C.N = 0

D.N > 0

第 12 题

下面 C++ 代码用于交换两个正整数 a 和 b 的值,不能实现交换的代码是( )。

A.

cout<<"输入第一个正整数: ";cin>>a;cout<<"输入第二个正整数: ";cin>>b;temp=a;a=b;b=temp;cout<<"a="<<a<<" b="<<b<<endl;

B.

cout<<"输入第一个正整数: ";cin>>a;cout<<"输入第二个正整数: ";cin>>b;b=a-b;a=a-b;b=a+b;cout<<"a="<<a<<" b="<<b<<endl;

C.

cout<<"输入第一个正整数: ";cin>>a;cout<<"输入第二个正整数: ";cin>>b;a=a+b;b=a-b;a=a-b;cout<<"a="<<a<<" b="<<b<<endl;

D.

cout<<"输入第一个正整数: ";cin>>a;cout<<"输入第二个正整数: ";cin>>b;a,b=b,a;cout<<"a="<<a<<" b="<<b<<endl;

第 13 题

下面 C++ 代码用于获得正整数 N 的第 M 位数,约定个位数为第 1 位,如 N 等于 1234,M 等于 2,则输出 3。假设 M 的值是大于等于 1 且小于等于 N 的位数。横线处应填入的代码是( )。

intN,M,div=1;cout<<"请输入一个正整数:";cin>>N;cout<<"请输入从右到左取第几位数:";cin>>M;for(inti=0;i<(M-1);i++)div*=10;cout<<(______________);

A.N % div / 10B.N / div / 10C.N % div % 10D.N / div % 10

第 14 题

下面 C++ 代码执行后输出是( )。

num=0;while(num<=5){num+=1;if(num==3)continue;printf("%d#",num);}

A. 1#2#4#5#6#

B. 1#2#4#5#6

C. 1#2#3#4#5#6#

D. 1#2#3#4#5#6

第 15 题

下面 C++ 代码用于记录多个输入数中的最大数和最小数(输入 - 999 则输入结束),相关说法错误的是( )。

cin>>now_num;min_num=max_num=now_num;while(now_num!=-999){if(max_num<now_num)max_num=now_num;if(min_num>now_num)min_num=now_num;cin>>now_num;}cout<<min_num<<' '<<max_num;

A. 程序运行时如果第一个数输入 - 999,则输出将是 - 999 -999

B. 程序输入过程中,如果输入的第一个数不是 - 999,则如果待输入的数据中没有 - 999,则程序能求出已输入整数中的最大数和最小数

C. 如果用于输入考试成绩,即成绩中不可能有 - 999,则程序能求出已输入成绩中的最高成绩和最低成绩

D. 可以将cin >> now_num;移动到while (now_num != -999) {下面,结果不变

第一步:梳理原代码的执行逻辑

  1. 初始输入:先执行cin >> now_num;,读取第一个数。

  2. 初始化最值:将min_num和max_num都赋值为第一个输入的now_num。

  3. 循环判断

    :只要

    now_num != -999

    ,就进入循环:

    • 比较并更新最大值max_num和最小值min_num。
    • 读取下一个数cin >> now_num;。
  4. 循环终止:当读取到now_num == -999时,退出循环,输出最终的min_num和max_num。

第二步:逐一分析选项

选项 A:程序运行时如果第一个数输入 - 999,则输出将是 - 999 -999

分析:

  • 第一个数输入-999,则min_num = max_num = -999。

  • 循环条件now_num != -999不成立,直接跳过循环。

  • 最终

    cout

    输出

    -999 -999

    (中间有空格)。

    结论

    :该选项

    正确

选项 B:程序输入过程中,如果输入的第一个数不是 - 999,则如果待输入的数据中没有 - 999,则程序能求出已输入整数中的最大数和最小数

分析:

  • 若第一个数非-999,且后续输入无-999,则while (now_num != -999)的条件永远为真,循环会持续读取输入并更新最值(直到输入流结束,如用户手动终止输入)。

  • 最终能正确得到所有输入数的最大和最小值。

    结论

    :该选项

    正确:如果用于输入考试成绩(成绩中不可能有 - 999),则程序能求出已输入成绩中的最高成绩和最低成绩

分析:

  • 考试成绩无-999,逻辑与选项 B 一致:循环会持续读取所有成绩并更新最值,直到输入流结束。

  • 能正确得到最高和最低成绩。

    结论

    :该选项

    正确

选项 D:可以将cin >> now_num;移动到while (now_num != -999) {下面,结果不变

分析:我们需要对比修改前后的代码逻辑,看是否存在执行差异:

原代码的输入流程(关键):
cin>>now_num;// 先读第一个数min_num=max_num=now_num;while(now_num!=-999){// 更新最值cin>>now_num;// 读下一个数}

特点:先判断当前数是否为终止符,再更新最值,最后读下一个数。

修改后的代码:
cin>>now_num;min_num=max_num=now_num;while(now_num!=-999){cin>>now_num;// 把输入移到循环内第一行// 更新最值}

执行差异模拟(以输入1 2 3 -999为例):

步骤原代码行为修改后代码行为
初始输入读1,min/max=1读1,min/max=1
第一次循环(1≠-999)更新最值(1)→ 读2先读2→ 更新最值(2)
第二次循环(2≠-999)更新最值(2)→ 读3先读3→ 更新最值(3)
第三次循环(3≠-999)更新最值(3)→ 读-999先读-999→ 此时now_num=-999,更新最值时会把-999纳入比较
循环终止now_num=-999,退出循环,最值为 1/3now_num=-999,退出循环,最值变为-999/3

核心问题:修改后,终止符-999会被读取并参与最值比较,导致最小值被错误更新为-999;同时,第一个输入的数会被跳过比较(因为循环内先读下一个数,再更新最值)。

极端案例:若仅输入5 -999:

  • 原代码:最值为5/5,输出5 5。
  • 修改后:循环内先读-999,更新最值时min_num变为-999,输出-999 5,结果完全错误。

结论:该选项错误。

最终答案

D

二、判断题(每题 2 分,共 20 分)

题号12345678910
答案
  1. 在集成开发环境里调试程序时,要注意不能修改源程序,因为如果修改,就要终止调试、关闭该文件并重新打开,才能再次开始调试。( )

    主流的 C++ 集成开发环境(如Visual Studio、CLion、Code::Blocks)都支持“编辑后继续调试”功能,核心特点如下:

    1. 调试过程中修改源程序代码,不需要终止调试、关闭文件再重新打开。
    2. 大多数 IDE 会在修改代码后,提示 “代码已更改,是否重新生成”,确认后会自动重新编译修改后的代码,并继续当前的调试流程(比如保留断点、变量状态等,部分 IDE 需开启对应功能)。
    3. 只有极少数老旧或简化版 IDE,可能不支持该功能,才需要手动终止调试、重新编译运行,但这并非通用规则。

    因此题目中 “不能修改源程序,修改后必须终止调试、关闭文件重新打开” 的表述过于绝对,不符合主流 IDE 的调试逻辑。

  2. 执行 C++ 表达式10 % 0.5将报错,因为 0.5 所在位置只能是整数。( )

  3. 下面 C++ 代码执行后将输出 9。( )

for(i=0;i<10;i++)cout<<i;break;
1. 语法错误:变量未定义 +break语句的位置非法
  • 变量i未声明类型:C++ 是强类型语言,使用变量前必须声明其类型(如int i),代码中直接写for (i = 0; i < 10; i++)会导致编译报错,程序无法正常运行。
  • break语句的位置非法:break语句的作用是跳出最近的循环(for/while/do-while)或switch 语句,而代码中的break写在for循环体之外(for循环的体只有cout << i;这一行,因为没有用{}包裹多语句),属于语法错误,编译器会直接报错。

4.下面 C++ 代码执行后将输出 55。( )

n=0;for(inti=0;i>-10;i--)n=n+i*-1;cout<<n;

第一步:分析代码的执行逻辑

我们先明确代码中的变量初始值、循环条件和运算规则,再逐次模拟循环过程或通过数学公式计算结果:

  1. 初始条件:n = 0;循环变量i为int类型,初始值i = 0。
  2. 循环条件:i > -10(即i的取值为0, -1, -2, ..., -9,共 10 次循环)。
  3. 循环体:n = n + i * -1(等价于n += -i,即取i的绝对值累加到n中)。
  4. 循环终止:当i = -10时,i > -10不成立,退出循环,输出n。

5.将下面 C++ 代码中的 L1 行的i = 0修改为i = 1,其输出与当前代码输出相同。( )

cnt=0;for(inti=0;i<100;i++)// L1cout<<cnt;cnt+=i;

6.将下面 C++ 代码中的i < 10修改为i <= 10,其执行后输出相同。( )

intn,i;n=i=0;while(i<10){n+=i;i+=1;}cout<<n;

7.下面的 C++ 代码执行后将输出 45。( )

intn,i;n=i=0;while(i<10){i+=1;n+=i;}cout<<n;

8.执行 C++ 代码cout << (12 + 12.12)将报错,因为 12 是 int 类型、而 12.12 是 float 类型,不同类型不能直接运算。( )

9.下面 C++ 代码执行时将导致无限循环(也称死循环)。( )

intcount=0;while(count<5){count+=1;if(count==3)cout<<count<<' ';continue;}

10.下列 C++ 代码用于求斐波那契数列,即第 1 个数为 0,第 2 个数为 1,从第三个数开始,依次是其前两个数之和。如果输入的值为大于 1 的正整数,该代码能实现所求。( )

cin>>n;a=0,b=1;for(intj=0;j<n;j++){cout<<a<<" ";b=b+a;a=b-a;}

三、编程题(每题 25 分,共 50 分)

3.1 编程题 1

试题名称:商店折扣
时间限制:1.0s
内存限制:512.0MB
3.1.1 题目描述

商店正在开展促销活动,给出了两种方案的折扣优惠。第一种方案是购物满 x 元减 y 元;第二种方案是直接打 n 折,也就是说价格变为原先的10n。这里的 x、y、n 均是正整数,并且1≤y<x,1≤n<10。

需要注意的是,第一种方案中满减优惠只能使用一次。例如购物满 100 元减 20 元时,若挑选了价格总和为 150 元的物品,只能减免 20 元,需要支付 130 元。

小明在商店挑选了价格总和为 p 元的物品,结账时只能使用一种优惠方案。小明最少需要支付多少钱呢?

3.1.2 输入格式

四行,四个正整数 x、y、n、p,含义见题目描述。

3.1.3 输出格式

一行,一个小数,表示小明最少需要支付多少钱,保留两位小数。

3.1.4 样例
3.1.4.1 输入样例 1
100 20 8 90
3.1.4.2 输出样例 1
72.00
3.1.4.3 输入样例 2
100 20 7 110
3.1.4.4 输出样例 2
77.00
3.1.5 数据范围

对于所有测试点,保证1≤y<x≤100,1≤n<10,1≤p≤100。

3.1.6 参考程序
#include<algorithm>#include<cstdio>usingnamespacestd;intx,y,n,p;doublea1,a2;intmain(){scanf("%d%d%d%d",&x,&y,&n,&p);a1=p;if(a1>=x)a1-=y;a2=p*0.1*n;printf("%.2lf\n",min(a1,a2));return0;}
方法二:
#include<iostream> using namespace std; int main() { int x,y,n,p; cin>>x>>y>>n>>p; int f1; float f2; f1=p-y; f2=p*n*0.1; if(p>=x) { if(f1>f2) cout<<f2; else cout<<f1; } else cout<<f2; return 0; }

3.2 编程题 2

试题名称:金字塔
时间限制:1.0s
内存限制:512.0MB
3.2.1 题目描述

金字塔由 n 层石块垒成。从塔底向上,每层依次需要n×n、(n−1)×(n−1)、…、2×2、1×1块石块。请问搭建金字塔总共需要多少块石块?

3.2.2 输入格式

一行,一个正整数 n,表示金字塔的层数。

3.2.3 输出格式

一行,一个正整数,表示搭建金字塔所需的石块数量。

3.2.4 样例
3.2.4.1 输入样例 1
2
3.2.4.2 输出样例 1
5
3.2.4.3 输入样例 2
5
3.2.4.4 输出样例 2
55
3.2.5 数据范围

对于所有测试点,保证1≤n≤50。

3.2.6 参考程序
#include<algorithm>#include<cstdio>usingnamespacestd;intn,ans;intmain(){scanf("%d",&n);for(inti=1;i<=n;i++)ans+=i*i;printf("%d\n",ans);return0;}

方法二:

#include<iostream> using namespace std; int main() { int n,sum=0; cin>>n; for(int i=n;i>0;i--) { sum+=(i*i); } cout<<sum; return 0; }

相关新闻

  • 15、MobX 内部原理深度解析
  • 揭秘Google精选摘要:5个触发条件与3个高转化内容模板
  • 开发的一款工业上位机调试神器!

最新新闻

  • SAP BOM查询实战:从正查到反查的完整指南
  • 【2026年6月】热水离心泵厂家推荐指南 - 多才菠萝
  • Python图片压缩方法全解:从入门到进阶
  • 【JAVA毕设源码分享】基于SpringBoot的中华传统文化网站(程序+文档+代码讲解+一条龙定制)
  • 全国学历提升继续教育学习体验实录
  • 验证码绕过实战:从Pikachu靶场剖析客户端与服务端漏洞原理

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号