2026年9月GESP编程能力认证C++等级考试四级真题(含答案)_第1页
2026年9月GESP编程能力认证C++等级考试四级真题(含答案)_第2页
2026年9月GESP编程能力认证C++等级考试四级真题(含答案)_第3页
2026年9月GESP编程能力认证C++等级考试四级真题(含答案)_第4页
2026年9月GESP编程能力认证C++等级考试四级真题(含答案)_第5页
已阅读5页,还剩6页未读, 继续免费阅读

下载本文档

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

文档简介

2026年9月GESP编程能力认证C++等级考试四级真题(含答案)一、单选题(每题2分,共30分)。1.小杨使用指针修改计数器的值。执行下面程序后,输出结果是()。intcount=8;int*p=&count;*p+=4;cout<<count<<""<<*p;return0;A.88B.812C.1212D.128答案:C。2.关于下面指针声明的说法,正确的是()。inta=10;intb=20;constint*p=&a;A.可以通过p修改a的值B.可以令p=&bC.p的指向和所指向的值都不能修改D.p必须始终指向a答案:B。3.小杨用二维数组记录仓库货物数量。执行下面代码后,变量x的值是()。intgoods[3][4]={{2,4,6,8},{10,12,14,16},{18,20,22,24}};int(*p)[4]=goods;intx=*(*(p+1)+2);A.12B.14C.20D.22答案:B。4.下面函数用于将一个3行5列二维数组的第r行元素全部加1,横线处正确的形参写法是()。voidaddOne(________,intr){for(intj=0;j<5;j++){arr[r][j]++;}}A.intarr[][]B.int**arrC.intarr[][5]D.intarr[5][]答案:C。5.执行下面程序后,输出结果是()。intscore=60;voidupdate(int&score){score+=5;}intmain(){intscore=80;update(score);cout<<score<<""<<::score;return0;}A.8560B.8065C.8565D.8060答案:A。6.执行下面程序后,输出结果是()。structDevice{intid;intstate;};voidreset(Deviced){d.state=0;}voidstart(Device&d){d.state+=1;}intmain(){Deviced{7,2};reset(d);start(d);cout<<d.id<<""<<d.state;return0;}A.70B.71C.72D.73答案:D。7.小杨定义了结构体数组,并使用指针访问其中的元素。执行下面代码后输出的是()。structBook{stringname;intpages;};intmain(){Bookbooks[2]={{"C++",120},{"Math",150}};Book*p=books+1;p->pages+=10;cout<<books[1].name<<""<<books[1].pages;return0;}A.C++120B.Math150C.Math160D.C++160答案:C。8.关于冒泡排序、插入排序和选择排序,下列说法正确的是()。A.三种排序算法的最坏时间复杂度都是O(n)B.冒泡排序只能从小到大排序,不能从大到小排序。C.插入排序每次将一个待排序元素插入前面已经有序的序列中D.选择排序每轮只需要比较一次就能确定最小元素答案:C。9.某机器人每次可以向前移动1格或2格,到达第n格的方法数由下面函数计算。ways(6)的返回值是()。intways(intn){if(n<=2)returnn;inta=1,b=2,c=0;for(inti=3;i<=n;i++){c=a+b;a=b;b=c;}returnb;}A.8B.10C.13D.21答案:C。10.对一组structstudent的学生按成绩(score)升序排序。排序前后的数据如下。关于该排序的稳定性,判断正确的是()。structstudent{intscore;charid;};排序前:(90,'A'),(80,'B'),(90,'C'),(80,'D')排序后:(80,'B'),(80,'D'),(90,'C'),(90,'A')A.稳定,因为所有成绩已经按升序排列。B.稳定,因为分数相同不会影响排序结果。C.不稳定,因为相同成绩的(90,'A')和(90,'C')的相对顺序发生了改变。D.无法判断,因为没有给出排序算法的代码。答案:C。11.下面代码使用插入排序将数组按升序排列,横线处应填写()。voidinsertionSort(inta[],intn){for(inti=1;i<n;i++){intkey=a[i];intj=i-1;while(j>=0&&__________){a[j+1]=a[j];j--;}a[j+1]=key;}}A.a[j]<keyB.a[j]>keyC.a[j]==keyD.a[j+1]>key答案:B。12.下面代码的时间复杂度是()。intcountPairs(inta[],intn){intcnt=0;for(inti=0;i<n;i++){for(intj=i+1;j<n;j++){if(a[i]+a[j]==100){cnt++;}}}returncnt;}A.O(1)B.O(n3)C.O(n)D.O(n2)答案:D。13.假设文件data.txt的内容如下:BlueSky执行下面程序后,输出结果是()。intmain(){ifstreamfin("data.txt");stringa,b;fin>>a>>b;cout<<b<<"-"<<a;fin.close();return0;}A.Blue-SkyB.Sky-BlueC.BlueSkyD.SkyBlue答案:B。14.执行下面程序后,输出结果是()。intmain(){try{intage=-1;if(age<0)throwage;cout<<"A";}catch(constchar*msg){cout<<"B";}catch(intvalue){cout<<"C"<<value;}return0;}A.AB.BC.C-1D.程序崩溃答案:C。15.下面函数使用冒泡排序将数组按升序排列。为了在数组已经有序时提前结束,两处横线应分别填写()。voidbubbleSort(inta[],intn){for(inti=n-1;i>0;i--){boolchanged=__________;for(intj=0;j<i;j++){if(a[j]>a[j+1]){intt=a[j];a[j]=a[j+1];a[j+1]=t;changed=__________;}}if(!changed)break;}}A.false,trueB.true,falseC.false,falseD.true,true答案:A。二、判断题(每题2分,共20分)。16.执行下面程序后,变量a的值为15。()。inta=10;int*p=&a;*p+=5;答案:正确。17.一个函数必须在调用之前既声明又定义。()。答案:错误。18.下面二维数组在内存中按行优先连续存储,因此*(*(a+1)+0)的值为5。()。inta[2][4]={{1,2,3,4},{5,6,7,8}};答案:正确。19.执行下面程序后会输出20。()。voidchange(intx){x=20;}intmain(){intx=10;change(x);cout<<x;return0;}答案:错误。20.下面结构体初始化语句是合法的。()。structPoint{intx;inty;};Pointp{3,4};答案:正确。21.对于按升序实现的稳定插入排序,移动元素的条件通常应为a[j]>=key,这样能够保证相等元素的相对顺序不变。()。while(j>=0&&a[j]>=key){a[j+1]=a[j];j--;}答案:错误。22.下面递推程序计算n!。当n=4时,返回值为24。()。intfactorial(intn){intresult=1;for(inti=1;i<=n;i++){result*=i;}returnresult;}答案:正确。23.下面两层循环的时间复杂度是O(n2)。()。for(inti=0;i<n;i++){for(intj=1;j<n;j*=2){cout<<i+j;}}答案:错误。24.假设文件能够正常打开,下面程序会把Welcome写入log.txt。()。intmain(){ofstreamfout("log.txt");fout<<"Welcome";fout.close();return0;}答案:正确。25.执行下面程序时,catch(inte)能够捕获由throw"Error"抛出的异常,因此程序输出Caught。()。intmain(){try{throw"Error";}catch(inte){cout<<"Caught";}return0;}答案:错误。三、编程题(每题25分,共50分)。26.试题名称:新汉诺塔。时间限制:1.0s。内存限制:512.0MB。题目描述:汉诺塔问题是最经典的递推问题之一:有三个可以放圆盘柱子,编号为A、B和C。开始时柱子A上套着n个圆盘,它们从上到下按照从小到大的顺序排列。我们的任务是要把这n个圆盘移到柱子C上,并保持它们的原有顺序不变。在移动圆盘的过程中,需要遵守以下规则:(1)圆盘只能从一根柱子顶部拿出,从另一根柱子顶部放入。(2)每次只能移动一个圆盘。(3)小圆盘必须时刻位于大圆盘之上。小杨在学习了汉诺塔问题后,决定添加一个新规则:(4)每一次移动,圆盘只能从A移动到B,从B移动到C,或者从C移动到A;其它移动是不允许的。在新规则下,给定圆盘数量n,试问最少移动步数是多少?输入格式:输入一个正整数n,表示圆盘的数量。输出格式:输出一个整数,表示在新规则下将n个圆盘从A移动到C所需的最少移动步数。输入样例1:2输出样例1:7样例解释1:以下步骤是最佳的(编号为1的是小盘,为2的是大盘):(1)将1从A移动到B。(2)将1从B移动到C。(3)将2从A移动到B。(4)将1从C移动到A。(5)将2从B移动到C。(6)将1从A移动到B。(7)将1从B移动到C。可以证明没有更少步骤可以完成这个任务。输入样例2:3输出样例2:21数据范围:对于所有数据,n≤20。参考程序:#include<iostream>usingnamespacestd;intf[22],g[22];intmain(){intn;cin>>n;for(inti=1;i<=n;++i){f[i]=2*g[i-1]+1;g[i]=2*g[i-1]+f[i-1]+2;}cout<<g[n]<<endl;return0;}27.试题名称:有序网格。时间限制:1.0s。内存限制:512.0MB。题目描述:小A有一个n行m列格子组成的二维网格,从上到下依次是第1行到第n行,从左到右依次是第1列到第m列。每个格子里有一个数字,第i行第j列的格子里的数字是aij。小A想让二维网格变得有序,因此他先对每一行从左到右按升序排序,再对每一列从上到下按升序排序。以下是一个先完成行排序再完成列排序的例子:小A想知道二维网格经过以上排序后的结果。你能编写程序帮助他吗?输入格式:第一行,两个正整数n,m,分别二维网格的行数与列数。接下来n行,每行m个整数ai,1…ai,m,表示二维网格种的数字。输出格式:输出n行,每行m个整数,表示二维网格先完成行排序再完成列排序后的结果。输入样例1:32654321输出样例1:123456输入样例2:34132562445413输出样例2:123513452446数据范围:对于所有测试点,保证2≤n≤10,2≤m≤10,1≤aij≤10。参考程序:#include<cstdio>#include<algorithm>usingnamespacestd;constintN=15;intn,m;inta[N][N];voidsort_row(intn){for(inti=1;i<=m;i++)for(intj=1;j<m;j++)if(a[n][j]>a[n][j+1]){inttmp=a[n]

温馨提示

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

评论

0/150

提交评论