版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年9月GESP编程能力认证C++等级考试三级真题(含答案和解析)一、判断题(共10题,每题2分,共20分)1.在C++中,定义intarr[10]={1,2,3};时,数组中未被显式初始化的元素会被自动初始化为0。2.如果自定义函数的形参是int类型变量,那么在函数内部修改形参的值,不会影响调用函数时传入的实参变量的值。3.在C++中,存储字符串"GESP2025"的char类型数组,至少需要8个元素的存储空间。4.对长度为n的一维数组使用冒泡排序进行升序排列,元素间的比较总次数固定为n*(n-1)/2,与数组初始元素顺序无关。5.在C++中,定义二维数组inta[][3]={{1,2},{3,4,5}};是合法的,编译时会自动确定第一维的长度为2。6.C++中,一个函数可以有多条return语句,但函数被调用时只会执行其中一条return语句,一旦执行return就会结束当前函数的执行。7.在C++中访问一维数组元素时,数组的有效下标范围是从1到数组长度,使用不在该范围内的下标访问元素会触发编译错误。8.已知大写字母'A'的ASCII码值为65,那么表达式'A'+3的结果等于字符'D'的ASCII码值68。9.使用选择排序对数组进行升序排列时,每一轮选择操作都是从未排序区间中找到最小元素,将其放到已排序区间的末尾。10.在C++中,如果局部变量和全局变量重名,那么在局部变量的作用域内,默认访问的是全局变量,需要使用特殊关键字才能访问局部变量。二、单选题(共15题,每题2分,共30分)1.在通常的32位编译环境下,int类型变量占用4字节存储空间,采用补码方式存储有符号整数,其能存储的最大正整数值是()。A.2^31-1B.2^31C.2^32-1D.2^322.下列选项中,能正确定义一个长度为5的int类型一维数组,且所有元素初始值为0的是()。A.intarr[5];B.intarr[5]={0};C.intarr[]={0};D.intarr[5]={1};3.阅读如下代码片段,程序运行后输出的结果是()。```cppusingnamespacestd;voidswap(inta,intb){intt=a;a=b;b=t;}intmain(){intx=3,y=5;swap(x,y);cout<<x<<""<<y<<endl;return0;}```A.35B.53C.33D.554.已知字符数组定义为chars[]="GSEP2025";若调用标准库函数strlen(s)(需引入<cstring>头文件),得到的返回值是()。A.7B.8C.9D.105.已知二维数组定义为inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};数组采用行优先方式存储,那么元素a[2][1]的值是()。A.6B.7C.10D.116.对长度为6的无序数组,采用无优化版本的冒泡排序进行升序排列,最多需要执行多少轮相邻元素比较与交换的外层循环,就能保证数组完全有序()。A.5B.6C.7D.157.已知字符变量charc='a';下列表达式中,能将c中存储的小写字母转换为对应大写字母的是()。A.c=c+32B.c=c-32C.c=c+'a'-'A'D.c=c-'a'+'z'8.在一个长度为n的无序一维整数数组中,使用顺序查找算法查找某个特定目标值,在最坏情况下需要进行的元素比较次数是()。A.1B.log₂nC.nD.n*(n-1)/29.下列关于C++自定义函数的描述中,符合语法规则且表述正确的是()。A.函数必须要有返回值,不能定义返回值类型为void的函数B.函数的返回值类型必须和所有形参的类型保持一致C.函数定义时如果未显式写返回值类型,系统会默认按int类型处理D.函数的形参可以是数组类型,传递数组时形参会退化为数组首元素的地址,在函数内修改数组元素会同步修改实参数组的对应元素10.阅读如下代码片段,执行完成后变量sum的值是()。```cppintarr[]={2,4,6,8,10,12};intsum=0;for(inti=0;i<6;i++){if(i%2==1){sum+=arr[i];}}```A.12B.24C.30D.4211.在C++中调用<cstring>头文件中的strcmp函数比较两个字符串"apple"和"apply",函数的返回结果是()。A.大于0的整数B.小于0的整数C.0D.结果不确定,与编译环境有关12.对初始数组{3,1,4,2,5}采用选择排序算法进行升序排列,整个排序过程中总共需要进行的元素交换次数是()。A.2B.3C.4D.513.阅读如下代码片段,程序运行后输出的结果是()。```cppusingnamespacestd;intg=10;voidfunc(){g=20;}intmain(){intg=30;func();cout<<g<<endl;return0;}```A.10B.20C.30D.程序存在编译错误,无法运行14.已知二维数组定义为inta[2][3]={1,2,3,4,5,6};若要计算数组中所有元素的总和,下列代码片段中存在逻辑错误、无法得到正确结果的是()。A.```cppintsum=0;for(inti=0;i<2;i++)for(intj=0;j<3;j++)sum+=a[i][j];```B.```cppintsum=0;for(intj=0;j<3;j++)for(inti=0;i<2;i++)sum+=a[i][j];```C.```cppintsum=0;for(inti=1;i<=2;i++)for(intj=1;j<=3;j++)sum+=a[i][j];```D.```cppintsum=0;for(inti=0;i<2;i++)sum+=a[i][0]+a[i][1]+a[i][2];```15.对初始数组{5,2,9,1,5,6}采用无优化版本的冒泡排序进行升序排列(排序过程中从前往后依次比较相邻元素,若前一个元素大于后一个元素则交换两者位置),第一轮外层循环执行完成后,数组中的元素排列为()。A.{2,5,1,5,6,9}B.{2,1,5,5,6,9}C.{1,2,5,5,6,9}D.{5,2,9,1,5,6}三、编程题(共2题,每题25分,共50分)1.数字统计【题目描述】输入n个正整数,统计其中能够被3整除但不能被5整除的数字的个数,以及这些数字的平均值。其中n不超过100,每个输入的正整数不超过1000。【输入格式】第一行输入一个整数n,表示待统计的数字总个数;第二行输入n个用单个空格隔开的正整数。【输出格式】输出一行,包含两个内容:第一个为整数,表示符合条件的数字个数;第二个为浮点数,表示符合条件的数字的平均值,结果保留2位小数,两个内容之间用单个空格隔开。若不存在符合条件的数字,平均值输出0.00。【输入样例1】```6361015912```【输出样例1】```47.50```【输入样例2】```351015```【输出样例2】```00.00```2.成绩筛选【题目描述】某班有n名同学参加编程能力测验,每名同学获得一个0到100之间的整数成绩。请先将所有同学的成绩按照从高到低的顺序排序,再按排序后的顺序输出所有大于等于班级总平均分的成绩。其中n不超过100。【输入格式】第一行输入一个整数n,表示班级学生总人数;第二行输入n个0~100之间的整数,用单个空格隔开,表示每名同学的测验成绩。【输出格式】输出一行,包含若干个用单个空格隔开的整数,即排序后所有大于等于平均分的成绩,保持从高到低的排列顺序。【输入样例1】```59080706050```【输出样例1】```908070```【输入样例2】```410010000```【输出样例2】```100100```参考答案与解析一、判断题答案及解析1.答案:√。解析:C++语言规定,当一维数组初始化列表中的显式赋值元素数量小于数组定义长度时,剩余未被显式初始化的元素会执行零初始化,int类型元素初始值为0,因此本题表述正确。2.答案:√。解析:C++中普通变量作为函数形参时采用值传递机制,函数调用时会为形参分配独立的内存空间,将实参的值复制给形参,函数内部对形参的修改仅作用于形参本身,不会影响外部实参的值,因此本题表述正确。3.答案:×。解析:C语言风格的字符串需要以'\0'作为终止标识,字符串"GESP2025"包含8个可见字符,存储时需要额外1个字节存储'\0'终止符,因此共需要9个元素的存储空间,本题表述错误。4.答案:×。解析:未经优化的基础冒泡排序确实固定执行n-1轮外层循环,比较次数为n*(n-1)/2,但常用的优化版冒泡排序会在每轮遍历中设置交换标记,若某轮遍历未发生任何元素交换,说明数组已经完全有序,可以提前终止排序,此时比较次数小于n*(n-1)/2。题干表述未限定排序实现方式,将比较次数描述为固定值,因此错误。5.答案:√。解析:C++中定义二维数组时可以省略第一维的长度,编译器会根据初始化列表的结构自动推导第一维长度,但第二维长度必须显式指定。本题中初始化列表包含2个一维子列表,因此第一维长度自动推导为2,定义方式合法,表述正确。6.答案:√。解析:C++函数中可以根据分支逻辑设置多条return语句,return语句的作用是结束当前函数的执行并将返回值传递给调用方,每次函数调用时只会根据执行路径触发其中一条return语句,触发后函数立即终止,后续代码不再执行,因此本题表述正确。7.答案:×。解析:C++中一维数组的有效下标范围是从0到数组长度减1,且数组下标越界访问属于未定义行为,编译器通常不会在编译阶段检查下标合法性,不会触发编译错误,可能在运行时出现数据错误或程序崩溃,因此本题表述错误。8.答案:√。解析:C++中字符类型以ASCII码值的形式存储,参与算术运算时会自动转换为对应的整数值。大写字母'A'的ASCII值为65,'A'+3对应整数值68,即大写字母'D'的ASCII值,因此本题表述正确。9.答案:√。解析:升序选择排序的核心逻辑为:将数组划分为已排序区间和未排序区间,每轮遍历未排序区间找到值最小的元素,将其与未排序区间的第一个元素交换,放入已排序区间的末尾,重复该过程直到数组完全有序,本题表述符合升序选择排序的实现逻辑,因此正确。10.答案:×。解析:C++中当局部作用域内定义的变量与全局变量重名时,局部变量会屏蔽全局变量,在局部作用域内默认访问的是局部变量,若要访问被屏蔽的全局变量需要使用域解析符::,本题表述将访问优先级说反,因此错误。二、单选题答案及解析1.答案:A。解析:32位有符号int类型采用补码存储,最高位为符号位,0表示正数、1表示负数,剩余31位存储数值位,因此能表示的最大正整数为符号位为0、数值位全为1,即2^31-1,对应十进制值2147483647。2.答案:B。解析:选项A定义的数组为局部变量时不会自动初始化,元素值为随机垃圾值;选项B定义长度为5的数组,初始化列表仅给第一个元素赋值为0,剩余元素自动零初始化,所有元素均为0,符合要求;选项C未指定数组长度,初始化列表仅包含1个元素,数组实际长度为1,不符合长度为5的要求;选项D初始化时第一个元素赋值为1,剩余元素为0,并非全0,因此不符合要求。3.答案:A。解析:本题中swap函数的形参为两个int类型变量,采用值传递方式,函数内部交换的是形参a、b的局部副本,不会修改main函数中实参x、y的值,因此x和y仍为3和5,输出结果为35。4.答案:B。解析:strlen函数的作用是统计C风格字符串中'\0'终止符之前的字符总数,不包含'\0'本身。字符串"GSEP2025"包含G、S、E、P、2、0、2、5共8个可见字符,因此strlen返回值为8;注意存储该字符串的数组长度为9(包含'\0'),不要混淆strlen返回值与数组长度。5.答案:C。解析:二维数组的下标从0开始计数,a[2][1]表示第三行(行下标为0、1、2)、第二列(列下标为0、1、2、3)的元素。第三行的初始化值为{9,10,11,12},第二列元素为10,因此a[2][1]的值为10。6.答案:A。解析:无优化版本的冒泡排序升序排列时,每一轮外层循环会将当前未排序区间内的最大元素移动到区间末尾,确定一个元素的最终位置。长度为n的数组经过n-1轮循环后,前n-1个大的元素已经移动到数组末尾,剩余的第一个元素自然为最小元素,无需再执行第n轮循环,因此长度为6的数组最多需要5轮外层循环即可完成排序。7.答案:B。解析:ASCII编码表中,小写字母的码值比对应大写字母大32,例如'a'的ASCII值为97,'A'为65,因此将小写字母转换为大写字母需要减去32。选项A会将小写字母转换为ASCII码更大的不可见字符;选项C计算后c=c+32,结果和选项A一致;选项D会将字母转换为'z',均不符合要求。8.答案:C。解析:顺序查找的核心逻辑是从数组第一个元素开始,逐个将元素与目标值比较,直到找到目标或遍历完整个数组。最坏情况为目标值在数组最后一个位置,或目标值不存在于数组中,此时需要遍历所有n个元素,完成n次比较。9.答案:D。解析:选项A错误,C++支持返回值类型为void的函数,这类函数不需要返回具体值;选项B错误,函数返回值类型与形参类型没有强制一致的要求,例如可以定义形参为double类型、返回值为int类型的函数;选项C错误,标准C++语法要求函数定义时必须显式指定返回值类型,不支持默认int的隐式规则;选项D正确,数组作为函数形参传递时会退化为指向数组首元素的地址,形参与实参共享同一块内存空间,因此在函数内修改数组元素会直接影响实参数组。10.答案:B。解析:代码循环遍历数组下标0到5,当i为奇数(i=1、3、5)时将对应数组元素累加到sum中。arr[1]为4、arr[3]为8、arr[5]为12,累加和为4+8+12=24。11.答案:B。解析:strcmp函数按从左到右的顺序逐位比较两个字符串对应位置字符的ASCII值,若第一个字符串的字符ASCII值更大则返回正整数,更小则返回负整数,完全相等则返回0。本题中两个字符串前4个字符均相同,第5个字符'e'的ASCII值为101,'y'的ASCII值为121,"apple"对应字符更小,因此返回小于0的整数。12.答案:B。解析:升序选择排序每轮仅在找到未排序区间最小元素后执行一次交换,具体过程为:第一轮未排序区间为[0,4],最小元素1在下标1位置,与下标0的3交换,数组变为{1,3,4,2,5},累计交换1次;第二轮未排序区间为[1,4],最小元素2在下标3位置,与下标1的3交换,数组变为{1,2,4,3,5},累计交换2次;第三轮未排序区间为[2,4],最小元素3在下标3位置,与下标2的4交换,数组变为{1,2,3,4,5},累计交换3次;后续轮次中未排序区间的最小元素均在区间起始位置,无需交换,因此总交换次数为3次。13.答案:C。解析:代码中定义了全局变量g初始值为10,main函数中定义了同名局部变量g初始值为30。根据局部变量优先的规则,main函数中直接访问g时操作的是局部变量;func函数内没有定义局部变量g,因此访问的是全局变量g,将其修改为20,该修改不会影响main函数中的局部变量g,因此输出结果为30。14.答案:C。解析:二维数组的行下标有效范围为0~1(共2行),列下标有效范围为0~2(共3列)。选项C的循环中i从1到2、j从1到3,当i=2、j=3时会出现下标越界,且漏算了i=0行、j=0列的元素,无法得到正确的总和。其余选项中,A为标准按行遍历、B为按列遍历、D为逐行手动累加元素,均能正确计算总和。15.答案:A。解析:无优化升序冒泡排序第一轮外层循环会从数组首元素开始,依次比较相邻元素并将大元素后移,最终将数组最大值移动到数组末尾。具体比较交换过程为:初始数组{5,2,9,1,5,6},比较5和2交换→{2,5,9,1,5,6};比较5和9不交换;比较9和1交换→{2,5,1,9,5,6};比较9和5交换→{2,5,1,5,9,6};比较9和6交换→{2,5,1,5,6,9},第一轮结束后最大值9移动到数组末尾,对应选项A的结果。选项B为第二轮循环后的部分结果,选项C为排序完成后的结果,均不符合要求。三、编程题参考代码及评分标准1.数字统计参考代码:```cppusingnamespacestd;intmain(){intn;cin>>n;intarr[105];intcnt=0;intsum=0;for(inti=0;i<n;i++){cin>>arr[i];if(arr[i]%3==0&&arr[i]%5!=0){cnt++;sum+=arr[i];}}doubleavg=0.0;if(cnt>0){avg=(double)sum/cnt;}cout<<cnt<<""<<fixed<<setprecision(2)<<avg<<endl;return0;}```评分标准:(1)正确导入必要头文件(iostream用于输入输出、iomanip用于小数格式控制),搭建规范的main函数结构,得3分;(2)正确读入整数n,定义长度不小于100的int数组用于存储输入数字,得4分;若数组长度不足100,扣2分;(3)通过循环正确读入n个整数,条件判断逻辑准确(同时满足“能被3整除”“不能被5整除”两个要求),正确累计符合条件的数字个数与总和,得10分;若判断条件逻辑写反、漏写任意一个条件,扣5-7分;若未正确累计计数或总和,扣3-4分;(4)正确处理平均值计算逻辑:当符合条件的数字个数为0时平均值保持0.00,个数大于0时采用浮点数除法计算平均值(需将sum强制转换为double类型,避免整数除法截断小数),得5分;若直接使用整数除法导致结果错误,扣3分;若未处理cnt=0的边界情况,存在除以零的运行风险,扣2分;(5)正确使用fixed和setprecision(2)控制输出保留两位小数,输出格式符合题目要求(两个内容间用单个空格隔开),得3分;若小数位数不符合要求、空格格式错误,扣1-2分。解析:本题为三级难度基础题,核心考察一维数组的读入、遍历与简单条件判断,属于必须掌握的基础题型。易错点主要有两处:一是整除判断的逻辑关系,需要区分逻辑与、逻辑或的使用场景,避免将条件写反;二是平均值计算必须采用浮点数运算,整数直接相除会截断小数部分导致结果偏差,同时需要处理零计数的边界情况,避免运行时错误。2.成绩筛选参考代码:```cppusingnamespacestd;intmain(){intn;cin>>n;intscore[105];intsum=0;for(inti=0;i<n;i++){cin>>score[i];sum+=score[i];}doubleavg=(double)sum/n;//冒泡排序实现降序排列for(inti=0;i<n-1;i++)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026氢燃料电池技术行业市场供需分析及投资评估规划分析研究报告
- 2026中国疏水透气膜在医疗防护装备中的性能测试分析报告
- 2026垂直农业与植物细胞培养设备协同发展机遇调研报告
- 2026中国被动式建筑技术推广与节能减排效果评估研究报告
- 2026中国液体化工物流行业环保合规与可持续发展战略报告
- 2026金融科技行业区块链技术应用深度探索及趋势
- 2026氢能储运技术突破与基础设施建设投资机会研究报告
- 2026产业园区运营模式创新与招商策略分析报告
- 2026宠物医疗缝合针市场空白与产品开发建议
- 2026工业互联网平台分析及智能制造转型投资机会报告
- 数字营销基础(第二版)课件 2.2数字营销技术
- 变电站操作票课件
- 产品封存仓储管理制度
- 北师大版七年级数学上册 专题03 数轴中的动点问题专训(原卷版+解析)
- 2025-2030中国十二胺行业市场现状供需分析及投资评估规划分析研究报告
- 矿山融资协议书范本
- 2025年注册环保工程师专业基础考试真题卷(附解析)
- 武汉市江岸区招聘社区公共服务干事175人历年高频重点模拟试卷提升(共500题附带答案详解)
- DG∕TJ 08-2183-2015 城市道路养护维修作业安全技术规程
- 2024年高中英语衡水体书法练字字帖
- 《围手术期健康教育》课件
评论
0/150
提交评论