2026年3月GESP真题及题解(C++四级): 选择题和判断题(题解)
选择题
第1题
题目:
intf(intx=2){returnx*3;}intmain(){cout<<f()<<" < "<<f(4);}A. 2 12
B. 6 12
C. 6 4
D. 12 6
答案:B
解析:f()使用默认参数x = 2,返回2 * 3 = 6;f(4)返回4 * 3 = 12。输出为6 < 12,对应 B。
第2题
题目:
intmain(){inta=5;int*p=&a;int**q=&p;**q+=7;cout<<a<<" < "<<*p;}A. 5 5
B. 12 12
C. 12 5
D. 5 12
答案:B
解析:q指向p,*q是p,**q就是a。**q += 7使a从 5 变为 12。*p也指向a,所以输出12 < 12。
第3题
题目:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};int(*p)[4]=a;则表达式*(*(p + 2) + 1)的值为:
A. 6
B. 10
C. 9
D. 11
答案:B
解析:p是指向含 4 个 int 的数组的指针。p + 2指向第 3 行,即{9, 10, 11, 12}。*(p + 2)是第 3 行首地址,+1后指向第 3 行第 2 个元素,即a[2][1] = 10。
第4题
题目:
voidfun(inta,int&b,int*c){a+=1;b+=2;*c+=3;}intmain(){intx=1,y=1,z=1;fun(x,y,&z);cout<<x<<" < "<<y<<" < "<<z;}A. 2 3 4
B. 1 3 4
C. 2 1 4
D. 1 1 1
答案:B
解析:a是值传递,修改不影响x;b是引用传递,y增加 2 变为 3;c是地址传递,z增加 3 变为 4。输出1 < 3 < 4。
第5题
题目:
intx=3;voidf(int&x){x+=2;}intmain(){intx=10;f(x);cout<<x<<" < "<<::x;}A. 12 3
B. 10 5
C. 12 5
D. 10 3
答案:A
解析:main中的局部变量x被引用传入f,增加 2 后变为 12。::x表示全局变量x,值为 3。输出12 < 3。
第6题
题目:下列关于结构体初始化的写法,正确的是:
A.
structPoint{intx,y;};Point p=(1,2);B.
structPoint{intx,y;};Point p={1,2};C.
structPoint{intx,y;};Point p=newPoint(1,2);D.
structPoint{intx,y;};Point p=<1,2>;答案:B
解析:
C++ 中结构体可用花括号初始化:Point p = {1, 2};。A 使用圆括号错误;C 类型不匹配;D 语法错误。
第7题
题目:
structS{inta;intb;};voidg(S s){s.a+=10;}voidh(S&s){s.b+=10;}intmain(){S s{1,2};g(s);h(s);cout<<s.a<<" "<<s.b;}A. 11 12
B. 1 12
C. 11 2
D. 1 2
答案:B
解析:g是值传递,不会修改原对象s.a;h是引用传递,会修改原对象s.b。所以s.a = 1,s.b = 12,输出1 12。
第8题
题目:关于递推算法的描述,正确的是:
A. 递推表现为函数自己调用自己
B. 递推从已知初值出发,利用递推关系逐步推出后续结果
C. 递推只能用于指数复杂度问题
D. 递推一定需要回溯
答案:B
解析:
递推是从初始条件出发,按照递推公式逐步计算后续项。函数自己调用自己是递归;递推不一定回溯,也不只用于指数复杂度问题。
第9题
题目:
intclimb(intn){if(n<=2)returnn;inta=1,b=2,c=0;for(inti=3;i<=n;i++){c=a+b;a=b;b=c;}returnc;}执行climb(6)的返回值为:
A. 8
B. 13
C. 5
D. 10
答案:B
解析:
计算过程:i=3:c=3;i=4:c=5;i=5:c=8;i=6:c=13。返回 13。
第10题
题目:某排序算法对如下数据排序(按score升序):
初始:(90, A),(90, B),(80, C),(90, D)
排序后:(80, C),(90, A),(90, B),(90, D)
关于该排序算法稳定性的描述,正确的是:
A. 不稳定,因为出现了相同分数
B. 稳定,因为相同score的相对顺序保持为 A 在 B 前、B 在 D 前
C. 不稳定,因为 C 跑到前面了
D. 无法判断
答案:B
解析:
稳定排序指相同关键字的元素排序后相对顺序不变。原序列中相同分数 90 的顺序为 A、B、D,排序后仍为 A、B、D,因此稳定。
第11题
题目:下面代码试图把数组按升序进行“插入排序”,横线处应填写:
voidins(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] < key
B.a[j] > key
C.a[j + 1] > key
D.a[j] == key
答案:B
解析:
升序插入排序中,当已排序部分元素大于当前key时,需要向后移动。因此条件应为a[j] > key。
第12题
题目:
intcnt=0;for(inti=0;i<n;i++){for(intj=0;j<n;j++){if((i+j)%3==0)cnt++;}}下列代码段的时间复杂度为:
A. O(n)
B. O(n log n)
C. O(n²)
D. O(2n)
答案:C
解析:
外层循环执行n次,内层循环也执行n次,总执行次数为n × n,时间复杂度为O(n²)。
第13题
题目:下面哪种方式不能实现将字符串Welcome to 2026!输出重定向到文件log.txt?
A.
freopen("log.txt","w",stdout);cout<<"Welcome to 2026!"<<endl;fclose(stdout);B.
std::ofstreamoutFile("log.txt");cout<<"Welcome to 2026!"<<endl;outFile.close();C.
ofstreamlog_file("log.txt");streambuf*org_cout=cout.rdbuf();cout.rdbuf(log_file.rdbuf());cout<<"Welcome to 2026!"<<endl;cout.rdbuf(org_cout);D.
std::ofstreamoutFile("log.txt");outFile<<"Welcome to 2026!"<<endl;outFile.close();答案:B
解析:
B 中虽然创建了文件输出流outFile,但实际输出使用的是cout,仍然输出到屏幕,没有写入log.txt。其他选项均能实现写入或重定向。
第14题
题目:
intdivi(inta,intb){if(b==0)throw0;returna/b;}intmain(){try{cout<<divi(10,0);}catch(constchar*msg){cout<<"A";}catch(int){cout<<"B";}}执行下面程序,输出结果是:
A. A
B. B
C. 程序崩溃
D. 无输出
答案:B
解析:divi(10, 0)中b == 0,抛出int类型的异常0。异常被catch(int)捕获,因此输出B。
第15题
题目:
structPlayer{intscore;};voidup(Player players[],intn,intidx){Player cur=players[idx];inti=idx;while(______){players[i]=players[i-1];i--;}players[i]=cur;}下列函数实现排行榜中单个元素的位置调整(类似插入排序的相邻搬移)。当某玩家分数增加,需将其向前移动时,while循环的条件应为:
A.i > 0 && cur.score > players[i - 1].score
B.i > 0 && cur.score > players[i - 1].score
C.i < n - 1 && cur.score > players[i + 1].score
答案:A
解析:
向前移动时,需要保证i > 0,并且当前玩家分数大于前一个玩家分数时,继续向前搬移。条件为i > 0 && cur.score > players[i - 1].score。A、B 选项内容重复,按题意选 A。
判断题
第1题
题目:
voidadd10(int&x){x+=10;}intmain(){inta=5;add10(a);}下面代码执行结束时,变量a的值变成 15。
答案:√
解析:add10的参数是引用,x += 10会直接修改实参a。a从 5 变为 15。
第2题
题目:引用一旦绑定某个变量,就不能再绑定其他变量。
答案:√
解析:
C++ 中引用必须在定义时绑定,并且一旦绑定后不能再改为绑定其他变量。
第3题
题目:
intmain(){inta[2][3];cout<<&a[1][2]-&a[0][1]<<endl;return0;}执行下面代码,输出结果为 5。
答案:×
解析:
二维数组元素连续存放。a[0][1]是第 1 行第 2 个元素,a[1][2]是第 2 行第 3 个元素。它们之间相差 4 个int元素,所以输出为 4,不是 5。
第4题
题目:
intcalc(intx,inty=10);intcalc(intx){returnx*2;}intcalc(intx,inty){returnx*y;}intmain(){cout<<calc(5);}下面程序可以正常编译并输出 10。
答案:√
解析:
调用calc(5)时,会优先匹配单参数版本calc(int x),返回5 * 2 = 10。程序可以正常编译并输出 10。
第5题
题目:
intx=10;voidf(){intx=20;cout<<x;}intmain(){f();cout<<x;}下面程序执行后输出 2010。
答案:√
解析:f()中输出局部变量x = 20;main中输出全局变量x = 10。因此总输出为2010。
第6题
题目:在 C++ 中,如果声明了一个指针变量但没有显式初始化,该指针会自动被初始化为nullptr。
答案:×
解析:
只有全局指针或静态指针会自动初始化为nullptr。局部指针变量未初始化时,其值是不确定的,不会自动变为nullptr。
第7题
题目:
structGameCharacter{string name;intlevel;floatposition_x;floatposition_y;structEquipment{string weapon;intattack_bonus;intdefense_bonus;}equipment;structSkill{string name;intdamage;}skills[8];intskill_count;};下面代码没有语法错误。
答案:√
解析:
C++ 允许在结构体内部定义嵌套结构体,并同时声明成员变量或数组成员。该代码结构合法,没有语法错误。
第8题
题目:
ofstreamfout("data.txt");cout<<"Hello";fout.close();下面程序能够把Hello写入data.txt文件中。
答案:×
解析:cout << "Hello";是向标准输出(屏幕)输出,不是向文件输出。应使用fout << "Hello";才能写入data.txt。
第9题
题目:由于选择排序和插入排序的时间复杂度均为O(n²),在任何实际场景下两者的性能表现几乎相同,可以互相替代。
答案:×
解析:
虽然两者最坏时间复杂度都为O(n²),但实际性能受数据初始有序程度、交换次数、比较次数、稳定性等影响,不能简单认为在任何场景下都可互相替代。
第10题
题目:
intfib(intn){if(n<=1)returnn;intf0=0,f1=1,cur=0;for(inti=2;i<=n;i++){cur=f0+f1;f0=f1;f1=cur;}returncur;}下面用递推方式计算斐波那契数列第n项的程序,时间复杂度是O ( 2 n ) O(2^n)O(2n)。
答案:×
解析:
该程序使用循环从 2 到n逐步递推,时间复杂度为O(n),不是指数级O ( 2 n ) O(2^n)O(2n)。
各种学习资料,助力大家一站式学习和提升!!!
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}【秘籍汇总】(完整csp信奥赛C++学习资料):
1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):
https://edu.csdn.net/lecturer/7901 点击跳转
2、CSP信奥赛C++竞赛拿奖视频课:
https://edu.csdn.net/course/detail/40437 点击跳转
https://edu.csdn.net/course/detail/41081 点击跳转
3、csp信奥赛高频考点知识详解及案例实践:
CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转
CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转
信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转
4、csp信奥赛冲刺一等奖有效刷题题解:
信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:
https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转
信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转
信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转
5、GESP C++考级真题题解:
GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转
GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转
GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转
· 文末祝福 ·
#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}