CCF-GESP 2025 年 9 月 C++ 三级真题解析
解析了 CCF-GESP 2025 年 9 月 C++ 三级认证考试的真题,涵盖单选题、判断题及编程题。内容涉及基本数据类型、运算符、数组、函数、循环控制、变量作用域及模拟算法等知识点。提供了每道题的正确答案、详细解析及参考代码,帮助考生理解考点与解题思路。

解析了 CCF-GESP 2025 年 9 月 C++ 三级认证考试的真题,涵盖单选题、判断题及编程题。内容涉及基本数据类型、运算符、数组、函数、循环控制、变量作用域及模拟算法等知识点。提供了每道题的正确答案、详细解析及参考代码,帮助考生理解考点与解题思路。


正确答案:C
考察知识点:基本数据类型、基本运算符
解析:在 C++ 中,a 和 b 都是 int 类型,a / b 会进行整数除法,结果为 3(因为 10÷3 整数部分是 3)。然后将 3 赋值给 double 类型的 c,c 的值为 3.0。答案为 C。

正确答案:C
考察知识点:基本运算符
解析:选项 A:(5 <= 5) 为 true,(7 < 5) 为 false,&& 要求全为 true,结果 false。
选项 B:(10 > 5) 为 true,!取反后 false。
选项 C:(10 != 10) 为 false,(5 >= 3) 为 true,||只要有一个 true 就为 true,结果 true。
选项 D:(5 == 3) 为 false,&&要求全为 true,结果 false。答案为 C。

正确答案:D
考察知识点:一维数组
解析:数组下标从 0 开始,int arr[5]; 下标范围为 0~4。访问数据元素:数组名 [下标],arr[5] 超出了数组的合法访问范围,属于越界访问,会导致未定义行为。答案为 D。

正确答案:B
考察知识点:流程控制结构 - 循环、变量的作用域
解析:外层 sum 初始为 0。
循环过程:
i = 1:sum += 1 → sum = 1;此 sum 为外层 sum;然后在循环内部定义了一个新的局部变量 int sum = 0;,在循环内定义的变量,其作用范围:从创建位置开始到循环的右大括号为止,不影响外层的 sum。
循环体结束,内部 sum 被销毁。
i = 3:sum += 3 → sum = 4;此 sum 为外层 sum;然后再次定义内部 sum = 0,不影响外层。循环体结束,内部 sum 被销毁
i = 5:sum += 5 → sum = 9;此 sum 为外层 sum;内部 sum = 0 再次被定义,循环体结束被销毁。
i = 7:不满足 i <= 5,循环结束。
循环结束,外层 sum 的值为 9。答案为 B。

正确答案:B
考察知识点:函数(超纲)
解析:要定义返回两个整数较大值的函数 max,需注意返回值类型为 int,且参数需明确类型。
选项 A:返回值类型 void,错误。
选项 C:参数未指定类型,错误。
选项 D:返回值类型 void,且参数未指定类型,错误。
选项 B:返回值类型 int,参数类型明确,逻辑正确。答案为 B。

正确答案:B
考察知识点:一维数组
解析:首先,数组 arr[4] 初始化时,未显式初始化的元素默认为 0,即初始为{1, 2, 3, 0}。然后,arr[3] = arr[0] + arr[2] = 1 + 3 = 4,所以数组变为{1, 2, 3, 4}。答案为 B。

正确答案:B
考察知识点:函数(超纲)
解析:选项 A:函数可以无参数,错误。
选项 C:main 函数是程序入口,不能被其他函数调用,错误。
选项 D:C++ 函数不能嵌套定义,错误。
选项 B:函数 return 只能返回一个值,但可通过指针、引用等间接返回多个值,正确。答案为 B。

正确答案:D
考察知识点:流程控制语句 - 循环、continue
解析:循环条件为 i > 0。每次循环中,先执行 i -= 3,然后执行 continue(直接跳过后续代码,回到循环条件判断)。因此,count++ 从未被执行,其值未发生改变,循环结束仍然是 0。答案选 D。

正确答案:A
考察知识点:循环嵌套
解析:当 i=0 时,j 从 0 到 0,输出 0,然后输出#,即 0#。
当 i=1 时,j 从 0 到 1,输出 01,然后输出#,即 01#。
当 i=2 时,j 从 0 到 2,输出 012,然后输出#,即 012#。
当 i=3 时,j 从 0 到 3,输出 0123,然后输出#,即 0123#。
综上,输出为 0#01#012#0123#。答案为 A。

正确答案:C
考察知识点:函数、变量作用域(超纲)
解析:C 选项:在所有函数外部声明的变量是全局变量,其作用域是从声明处到整个程序结束。但如果程序是多文件结构,且全局变量未用 extern 声明跨文件使用,仅在声明的文件内有效,并非在整个程序中都有效。答案为 C。

正确答案:D
考察知识点:流程控制语句 - 循环、数位分离应用 - 翻转数字
解析:该代码用于整数反转,但要受 int 类型范围限制(-2147483648~2147483647),反转后也不能超出 int 范围。
A 选项:错误,显然不能完成任何位数整数的反转。
B 选择:错误,2147483647 反转后是 7463847412,显然超出 int 范围,所以这个数反转时会溢出,因此不能正确反转。
C 选项:错误,2147483648 对于 32 位有符号 int 来说已经超出正数最大值,输入时就不行,而且它反转是 8463847412,更大,肯定溢出。
D 选项:反转 1463847412 → 2147483641,2147483641 ≤ 2147483647,没有溢出。如果反转大一点的数:1463847413,反转是 3147483641,这个显然大于 int 可以存在的最大整数,会溢出。所以 1463847412 是能反转且不溢出的最大正整数。答案为 D。

正确答案:C
考察知识点:一维数组
解析:第 4 行:假定数组的第一个元素(下标 0)为最大值,之后将从第二个元素(下标 1)开始的每一个元素和最大值进行比较,如果比最大值更大,更新最大值。也称打擂台法。答案为 C。

正确答案:D
考察知识点:函数(超纲)
解析:选项 A:C++ 函数参数传递有三种方式:值传递:传递参数副本,函数内修改不影响原变量;引用传递:传递变量引用(别名),函数内修改直接作用于原变量;指针传递:传递变量地址,通过指针间接修改原变量。A 错误。
选项 B:形参是函数调用时创建的局部变量,存储在栈内存中。函数调用结束后,栈帧销毁,形参占用的内存空间会被系统释放,不再占用内存。B 错误。
选项 C:无返回值函数必须声明为 void 类型,这是 C++ 语法要求;此类函数可包含 return 语句(不带返回值),用于提前退出函数,语法合法。C 错误。
选项 D:C++11 及后续标准要求所有函数必须显式声明返回类型,废除了 C 语言中默认返回 int 的规则,增强了类型安全性。D 正确。答案为 D。


正确答案:C
考察知识点:一维数组
解析:错误 1:for 循环条件 i <= SIZE,数组 arr 大小为 5,下标范围是 0-4,此处会越界访问。
错误 2:cout << arr[SIZE],arr[SIZE](即 arr[5])超出数组下标范围,越界访问。一共 2 处错误,答案为 C。

正确答案:D
考察知识点:字符数组、字符串及其函数
解析:string 对象可以使用 == 运算符来直接比较两个字符串的内容是否相同。而字符数组要比较两个字符串的内容是否相同需要使用 strcmp() 函数。答案为 D。

正确答案:错误
考察知识点:字符类型、sizeof 函数
解析:sizeof('a') 的行为

正确答案:正确
考察知识点:变量的作用域、全局变量和局部变量
解析:在 C++ 中,全局变量(包括全局作用域的变量和静态变量)如果没有显式初始化,编译器会将其自动初始化为 0(对于基本数据类型,如 int、float 等;对于复合类型,如数组、结构体等,其每个元素或成员也会被相应地初始化为 0 或空值)。这是 C++ 的语言特性,用于保证全局变量在未显式初始化时具有确定的初始值,避免出现未定义行为。表述正确。

正确答案:正确
考察知识点:流程控制语句 - 循环
解析:do-while 循环的执行机制是先执行循环体,再判断条件。所以不管条件是否为真,循环体内的语句至少会执行一次。此处条件是 false,循环体执行一次后判断条件不满足,循环结束。表述正确。

正确答案:正确
考察知识点:自增运算符、左值、右值的概念
解析:在 C++ 中:左值(lvalue)指的是可以取地址、有持久状态的表达式,通常可以出现在赋值语句的左边。
右值(rvalue)通常是临时对象或字面量,不能取地址,不能放在赋值左边。
++i 是前置递增,它返回的是 i 的引用(即变量 i 本身),因此是左值。
i++ 是后置递增,它返回的是 i 在递增之前的值的临时副本,因此是右值。
因此题目中,++i 是一个左值表达式,而 i++ 是一个右值表达式。表述正确。

正确答案:错误
考察知识点:枚举(超纲)
解析:枚举值(如 RED)的类型就是其枚举类型本身(这里是 Color),不是 int。
枚举类型是一种独立的类型,与 int 不同,枚举值可以隐式转换为整数类型,但这是类型转换,不是类型本身。表述错误。

正确答案:错误
考察知识点:宏定义
解析:宏定义是 C/C++ 中的预处理指令,用于在编译前进行文本替换。基本语法是:#define 宏名 替换文本。
宏定义的类型

正确答案:错误
考察知识点:字符类型
解析:在 C++ 中,char 类型有三种可能性:
signed char:范围通常是 -128 到 127(在大多数平台上,采用补码表示,8 位)。
unsigned char:范围是 0 到 255。
普通 char:它可能是 signed char 也可能是 unsigned char,由编译器的实现决定。
因此,char 类型的取值范围并不总是 -128 到 127,它可能是 0 到 255,也可能是 -128 到 127,取决于编译器和平台。表述错误。

正确答案:错误
考察知识点:条件运算符,运算符的优先级
解析:本题表达式中出现了两种运算符:条件运算符和赋值运算符,条件运算符 ? : 的优先级高于赋值运算符 =,因此本题会先执行:a>b?a:b,再将 10 赋值给运算结果。如果 a、b 可修改,此表达式合法;如果 a、b 不可修改,比如:定义常量、字面常量、表达式结果等,则表达式不合法。因此一定合法表述错误。

正确答案:错误
考察知识点:文件重定向与文件读写操作(超纲)
解析:#include "file.h"会先在当前源文件目录搜索头文件,再按系统路径搜索;#include <file.h>则直接按系统路径(如编译器自带的头文件目录)搜索,二者搜索策略不同。表述错误。

正确答案:错误
考察知识点:关键字 extern(超纲)、变量的定义和使用
解析:extern 是 C++ 中的关键字,主要用于声明(而非定义)变量或函数,以实现跨文件的资源共享。
在同一作用域内,变量不能多次定义,extern 声明也遵循此规则。表述错误。



#include<bits/stdc++.h>
using namespace std;
int n, arr[105];
int main(){
cin >> n;
for(int i=0; i<n; i++) cin >> arr[i];
int cnt=0; //记录操作次数
while(true){
int maxid=0, minn=100; //maxid:满足条件的最大值下标,minn:最小值
for(int i=0; i<n; i++){
if(arr[i]>=arr[maxid]) maxid=i;
if(arr[i]!=0 && arr[i]<minn) minn=arr[i];
}
if(arr[maxid]==0) break; //最大值为 0,即数组中已全为 0
arr[maxid]-=minn; //按题目要求进行操作
cnt++; //操作次数加 1
}
cout << cnt;
return 0;
}



#include<bits/stdc++.h>
using namespace std;
int n, months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main(){
cin >> n;
cout << "MON" << " " << "TUE" << " " << "WED" << " " << "THU" << " " << "FRI" << " " << "SAT" << " " << "SUN" << endl;
int start=1; //start 是月份的开始星期数,已知信息:2025 年 9 月 1 日是星期一
if(n<9){ //9 月之前,往前计算天数
for(int i=8; i>=n; i--){
start-=months[i];
}
}else if(n>9){ //9 月之后,往后计算天数
for(int i=9; i<n; i++){
start+=months[i];
}
}
//计算月份 n 的开始星期数,往前计算会出现负数,start%7 的结果可能是负数,通过加 7 再对 7 做取余运算规避
start=(start%7+7)%7;
if(start==0) start=7; //余数 0 是星期 7
for(int i=1; i<start; i++){ //输出每月 1 号之前的空格
cout << setw(3) << ' ' << " ";
}
//从 1 号到月底进行输出
for(int i=1; i<=months[n]; i++){
cout << setw(3) << i << " "; //占 3 个字符右对齐输出
if(start%7==0) cout << endl; //每 7 天换行
start++;
}
return 0;
}

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online