2025年9月GESP编程能力认证C++等级考试三级真题(含答案和解析-在末尾)_第1页
2025年9月GESP编程能力认证C++等级考试三级真题(含答案和解析-在末尾)_第2页
2025年9月GESP编程能力认证C++等级考试三级真题(含答案和解析-在末尾)_第3页
2025年9月GESP编程能力认证C++等级考试三级真题(含答案和解析-在末尾)_第4页
2025年9月GESP编程能力认证C++等级考试三级真题(含答案和解析-在末尾)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年9月GESP编程能力认证C++等级考试三级真题(含答案和解析-在末尾)一、单选题(每题2分,共30分)。1.执行以下C++代码后,c的数值是()。inta=10,b=3;doublec=a/b;A.3.33333B.3.333C.3.0D.3.32.下列C++表达式的结果为true的是()。A.(5<=5)&&(7<5)B.项!(10>5)C.(10!=10)||(5>=3)D.(5==3)&&(4>2)3.以下关于C++数组的说法,错误的是()。A.数组的下标通常从0开始。B.intarr[5];声明了一个包含5个整数的数组。C.数组的大小必须在编译时确定,不能使用变量定义大小。D.可以通过arr[5]来访问intarr[5];数组的最后一个元素。4.执行以下C++代码后,变量sum的值是()。intsum=0;for(inti=1;i<=5;i+=2){sum+=i;intsum=0;}A.6B.9C.15D.死循环5.要正确定义一个返回两个整数中较大值的函数max,应该使用()。A.voidmax(inta,intb){returna>b?a:b;}B.intmax(inta,intb){if(a>b)returna;elsereturnb;}C.intmax(a,b){if(a>b)returna;elsereturnb;}D.voidmax(a,b){cout<<(a>b?a:b);}6.执行以下C++代码后,数组arr的内容是()。intarr[4]={1,2,3};arr[3]=arr[0]+arr[2];A.{1,2,3,3}B.{1,2,3,4}C.{1,2,3,5}D.{1,2,3,6}7.以下关于C++函数的描述,正确的是()。A.函数必须要有参数。B.函数通过return语句只能返回一个值。但是可以通过很多间接的方式返回多个值。C.main函数可以被其他函数调用。D.函数的定义可以直接嵌套,即一个函数内部可以真正定义另一个函数。8.以下C++代码count++执行的次数是()。inti=10;intcount=0;while(i>0){i-=3;continue;count++;}A.2B.3C.4D.09.以下C++代码段的输出是()。for(inti=0;i<4;i++){for(intj=0;j<=i;j++){cout<<j;}cout<<"#";}A.0#01#012#0123#B.1#12#123#1234#C.0#1#2#3#D.0#01#012#01243#10.以下关于C++变量作用域的说法,错误的是()。A.在for循环语句中声明的变量,其作用域仅限于该循环体内。B.在函数内部声明的变量(局部变量),仅在函数内部有效。C.在所有函数外部声明的变量,在整个程序中都有效。D.不同函数中的局部变量可以同名,它们代表不同的内存单元。11.关于以下代码的说法正确的是()。intreversed=0;while(x!=0){intdigit=x%10;x/=10;reversed=reversed*10+digit;}A.能够反转任何位数的整数B.能够反转的最大位数正整数是2147483647C.能够反转的最大位数正整数是2147483648D.能够反转的最大位数正整数是146384741212.以下C++代码试图查找数组中的最大值,划线处应填入()。#include<iostream>usingnamespacestd;intfindMax(intarr[],intsize){intmaxVal=________;//划线处。for(inti=1;i<size;i++){if(arr[i]>maxVal){maxVal=arr[i];}}returnmaxVal;}A.0B.arr[-1]C.arr[0]D.size13.以下关于C++函数的说法,正确的是()。A.函数参数传递只有值传递一种方式。B.函数的形参在函数调用结束后依然占用内存空间C.没有返回值的函数必须声明为void类型,且不能包含return语句。D.C++11及之后标准要求函数必须显式声明返回类型,不允许默认返回int。14.以下C++代码中存在几处错误()。#include<iostream>usingnamespacestd;intmain(){constintSIZE=5;intarr[SIZE];for(inti=0;i<=SIZE;i++){arr[i]=i*2;}cout<<arr[SIZE]<<endl;return0;}A.0处B.1处C.2处D.3处15.以下关于C++中string类和字符数组(char[])的说法,错误的是()。A.string对象可以使用=进行赋值,而字符数组需要使用strcpy。B.string对象的长度可以使用length()成员函数获取,而字符数组需要使用strlen()函数。C.string对象在内存中是动态分配空间的,因此可以自动处理字符串长度的变化。D.string对象和字符数组都可以使用==运算符来直接比较两个字符串的内容是否相同。二、判断题(每题2分,共20分)。16.表达式sizeof('a')的结果总是1,因为'a'是一个字符。()。A.正确B.错误17.在C++中,所有全局变量如果没有显式初始化,都会被自动初始化为0。()。A.正确B.错误18.题do{……}while(false);循环体内的语句至少会被执行一次。()。A.正确B.错误19.在C++中,++i是一个左值表达式,而i++是一个右值表达式。()。A.正确B.错误20.对于enumColor{RED,GREEN,BLUE};RED的类型是int。()。A.正确B.错误21.题#defineSQUARE(x)x*x是一个安全的宏定义,SQUARE(2+3)会正确计算出25。()。A.正确B.错误22.在C++中,char类型的取值范围总是-128到127。()。A.正确B.错误23.表达式a>b?a:b=10;一定是合法的C++代码。()。A.正确B.错误24.题#include"file.h"和#include<file.h>在编译器查找头文件时的搜索策略是完全相同的。()。A.正确B.错误25.在同一个作用域内,extern声明的变量可以多次定义。()。A.正确B.错误三、编程题(每题25分,共50分)。26.试题名称:数组清零。时间限制:1.0s。内存限制:512.0MB。题目描述:小A有一个由n个非负整数构成的数组a=[a1,a2……an]。他会对数组a重复进行以下操作,直到数组a只包含0。在一次操作中,小A会依次完成以下三个步骤。(1)在数组a中找到最大的整数,记其下标为k。如果有多个最大值,那么选择其中下标最大的。(2)从数组a所有不为零的整数中找到最小的整数aj。(3)将第一步找出的ak减去aj。例如,数组a=[2,3,4]需要7次操作变成[0,0,0]。小A想知道,对于给定的数组a,需要多少次操作才能使得a中的整数全部变成0。可以证明,a中整数必然可以在有限次操作后全部变成0。你能帮他计算出答案吗?输入格式:第一行,一个正整数n,表示数组a的长度。第二行,n个非负整数a1,a2……an,表示数组a中的整数。输出格式:一行,一个正整数,表示a中整数全部变成0所需要的操作次数。数据范围:对于所有测试点,保证1≤n≤100,1≤ai≤100。27.试题名称:日历制作。时间限制:1.0s。内存限制:512.0MB。题目描述:小A想制作2025年每个月的日历。他希望你能编写一个程序,按照格式输出给定月份的日历。具体来说,第一行需要输出MONTUEWEDTHUFRISATSUN,分别表示星期一到星期日。接下来若干行中依次输出这个月所包含的日期,日期的个位需要和对应星期几的缩写最后一个字母对齐。例如,2025年9月1日是星期一,在输出九月的日历时,1号的个位1就需要与星期一MON的最后一个字母N对齐。九月的日历输出效果如下。你能帮助小A完成日历的制作吗?输入格式:一行,一个正整数m,表示需要按照格式输出2025年m月的日历。输出格式:输出包含若干行,表示2025年m月的日历。数据范围:对于所有测试点,保证1≤m≤12。答案解析如下。1.答案:C。解析:题面描述中变量a、b均为整数,a/b计算结果为整数3,但是要注意变量c的数据类型为double,答案为C选项。2.答案:C。解析:常见的逻辑运算&&(与逻辑)表示符号两侧同时满足,||(或逻辑)表示符号两侧满足其中之一即可,C选项中符号左侧为假,但是右侧5>=3结果为真,答案为C选项。3.答案:D。解析:选项D描述错误,因为数组下标是从0开始,intarr[5];数组中最大下标为4,使用arr[5]访问会报错,答案为D选项。4.答案:B。解析:依据题面描述,执行累加操作,循环步长为2,变量i的取值为1、3、5,累加结果是9,其中循环内部定义的intsum=0;仅在循环内生效,并且处于循环内部的最后一行,并未使用,不影响运算结果,答案为B选项。5.答案:B。解析:函数返回的是整数类型,不能使用void,A、D选项错误,C选项中参数列表书写格式错误,括号中应为(inta,intb)格式,答案为B选项。6.答案:B。解析:依据题面描述,数组长度为4,初始化前三个数据为1、2、3,计算第四个元素arr[3]=1+3=4,数组内四个数据为1、2、3、4,答案为B选项。7.答案:B。解析:函数不是必须要有参数,参数列表可以为空,主函数main不可以被其他函数调用,在C++语法格式中不支持函数嵌套,只有B选项描述正确,例如通过数组或结构体可以间接的实现返回多个值的效果,答案为B选项。8.答案:D。解析:依据题面给出程序,count++;语句处于循环内部的continue;语句之后,会被跳过,所以执行次数为0次,答案为D选项。9.答案:A。解析:依据题面描述程序,外层循环四次,循环变量i分别取值0、1、2、3,内层循环变量i的循环结束条件是<=i,故循环变量j的取值分别是0、01、012、0123,每次内部循环结束后输出一个‘#’,正确格式为A选项所示格式。10.答案:C。解析:循环内声明变量仅作用域循环体内部,函数内部声明变量也是仅在函数内部生效,不同函数的局部变量同名不影响程序运行,因为仅在各自内部生效,只有C选项错误,声明为全局变量才能在整个程序中都有效。11.答案:D。解析:题面给出程序是将数字反转的程序,由于变量reversed类型为int类型,需要保证反转后数字在int范围之内,所以只有D选项符合要求。12.答案:C。解析:想要查询数组中的最大值可以将最大值的初始设置为数组中的第一个元素arr[0],可以保证最大值求解正确,B选项格式错误,如果数组中有负数,设置为0则不能保证足够小,D选项设置为数组长度更加是不符合逻辑,答案为C选项。13.答案:D。解析:函数除了值传递外还有引用传递,形参在调用结束后会释放内存空间,没有返回值的函数需要声明为void类型,但是可以含有return语句,只有D选项描述正确,函数必须要明确返回值类型。14.答案:C。解析:程序中设置数组长度为5,对应的正确数组下标是从0~4,题面给出分程序中循环包含5,最后输出也包含a[5],会数组越界导致错误,答案为C选项。15.答案:D。解析:string类和字符数组都可以赋值,字符数组采用strcpy函数即可,也都可以使用对应函数功能测量数组长度,string类的内存是动态分配的,C选项也正确,只有D选项错误,字符数组不可以使用==来直接比较,如要比较需使用strcmp函数。16.答案:错误。解析:在C++语言中,字符常量(如'a')的类型是int,而不是char。因此sizeof('a')的结果等于sizeof(int),结果是4,而不是1。17.答案:正确。解析:全局变量在初始化会被初始化为0,题面描述正确。18.答案:正确。解析:dowhile循环的特点是无论while条件是否成立,do语句内的代码块都会至少被执行一次,描述正确。19.答案:正确。解析:++i(前置递增)先对变量i进行递增操作,然后返回变量本身的引用,因此它是一个左值。i++(后置递增)先返回变量当前的值的副本,然后再对变量i进行递增操作,因此它是一个右值,描述正确。20.答案:错误。解析:在C++中的枚举常量属于枚举类型enumColor本身,而不是int,虽然枚举常量可以隐式转换为int,但它们的原生类型是枚举类型,描述为int是错误说法。21.答案:错误。解析:题面描述不正确,这个宏定义并不安全,SQUARE(2+3)不会得到正确结果25。原因在于宏定义只是简单的文本替换,不会自动添加括号来保证运算优先级。当使用SQUARE(2+3)时,实际展开后是:2+3*2+3。要让这个宏定义安全,应该为参数和整个表达式都加上括号:#defineSQUARE(x)((x)*(x))。22.答案:错误。解析:在C++中,char类型的取值范围取决于它是否被定义为有符号(signed)或无符号(unsigned)。char是有符号时,取值范围通常是-128到127,当char是无符号(unsignedchar)时,取值范围是0到255。23.答案:错误。解析:题面给出的三目运算表达式不一定是合法的,如果正常返回一个普通变量会赋值为10正确,如果三目运算中有函数存在则相当于给函数赋值,操作不合法,所以要根据具体情况判断,不是一定合法。24.答案:错误。解析:这句话不正确,两者的主要区别在于搜索路径的优先级和范围——双引号格式首先搜索当前源文件所在的目录,若未找到,再搜索编译器的标准库头文件目录,常用于包含用户自定义的头文件项目,尖括号形式是直接搜索编译器的标准库头文件目录。25.答案:错误。解析:题面描述不正确,extern的作用是“声明变量/函数”,而非“定义”,同一作用域内即便用extern多次声明,也不允许对同一标识符进行多次定义,答案为错误。26.参考程序。#include<algorithm>#include<cstdio>usingnamespacestd;constintN=105;intn;inta[N];intcnt;intmain(){scanf("%d",&n);for(inti=1;i<=n;i++)scanf("%d",&a[i]);while(1){intmx=n;for(inti=1;i<=n;i++)if(a[i]>=a[mx])mx=i;if(a[mx]==0)break;intmn=a[mx];for(inti=1;i<=n;i++)if(a[i]>0)mn=min(mn,a[i]);a[mx]-=mn;cnt++;}printf("%d\n",cnt);return0;}解析:首先读取数组大小n和数组元素a[1…n],进入无限循环,直到找到的最大值为0被break打断。首先找到数组中值最大的元素位置mx(如果有多个最大值,取最后一个,所以if内设置为>=)如果最大值已经是0,退出循环,若不被打断则找到数组中所有正数的最小值mn,将最大值位置的元素减去这个最小值mn,操作次数cnt加1,最后输出操作总次数cnt。27.参考程序。#include<algorithm>#include<cstdio>usingnamespacestd;intdays[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};intmain(){intm;scanf("%d",&m);printf("MONTUEWEDTHUFRISATSUN\n");in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论