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

下载本文档

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

文档简介

2025年3月GESP认证C++等级考试四级真题(含答案和解析-在末尾)一、单选题(每题2分,共30分)。1.关于下述代码,说法错误的是()。intmultiply(intx,inty);intmain(){inta=4;intb=5;intresult=multiply(a,b);std::cout<<"Theresultis:"<<result<<std::endl;return0;}intmultiply(intx,inty){returnx*y;}A.函数multiply的定义应该放到函数main之前。B.函数声明intmultiply(intx,inty);中明确指定了函数multiply()的返回值为整数类型。C.在main函数中,函数multiply通过multiply(a,b)被调用,其中a和b是定义在main函数中的变量,它们作为实参传递给了multiply函数的形参x和y。D.运行上述代码,将输出Theresultis:20。2.执行下述代码将输出()。intx=10;voidfunc(){intx=20;std::cout<<x;}intmain(){func();std::cout<<x;return0;}A.2020B.2010C.1010D.编译错误3.执行下述代码后,变量a的值为()。A.10B.20C.随机值D.编译错误4.以下哪种参数传递方式可以避免拷贝大型对象?A.只能用值传递B.只能用引用传递C.只能用指针传递D.引用传递和指针传递均可5.执行下述代码,将输出()。voidswap(inta,int&b){inttemp=a;a=b;b=temp;}intmain(){intx=1,y=2;swap(x,y);std::cout<<x<<y;return0;}A.12B.21C.22D.116.下面的描述中,()正确定义一个名为Person的结构体并正确初始化了一个Person结构体的变量p。A.structPerson{stringname;intage;};Personp("Yang",10);B.structPerson{stringname;intage;};Personp={"Yang",10};="Yang";p.age=10;C.structPerson{stringname;intage;};Personp=("Yang",10);D.structPerson{stringname;intage;};Personp=newPerson("Yang",10);7.给定如下代码。structPerson{std::stringname;intage;structAddress{std::stringstreet;std::stringcity;};Addressaddress;};下面描述错误的是()。A.结构Person内嵌套结构AddressB.Person有一个Address类型的address成员C.一个Person类型的变量p的address的初始化可以写成p.address.street="123MainSt";p.address.city="Anytown";D.结构的嵌套可以减少命名冲突,因此可以不必控制嵌套层次。8.假设intarr[2][3]={{1,2,3},{4,5,6}};,则arr[1][2]的值是()。A.2B.3C.5D.69.下面()正确定义了二维数组。A.intarr[3,4];B.intarr[3][4];C.intarr(3,4);D.inta[3-4];10.小杨正在爬楼梯,需要爬n阶才能到达楼顶。如果每次可以爬1个或2个台阶,下面代码采用递推算法来计算一共有多少种不同的方法可以爬到楼顶,则横线上应填写()。intf(intn){。if(n==1||n==2)returnn;intf1=1;intf2=2;intres=0;for(inti=3;i<=n;i++){________________________________//在此处填入代码。}returnres;}A.res+=f1+f2;f1=f2;f2=res;B.res=f1+f2;f1=f2;f2=res;C.res+=f1+f2;f2=res;f1=f2;D.res=f1+f2;f2=res;f1=f2;11.给定如下算法,其时间复杂度为()。boolf(intarr[],intn,inttarget){for(inti=0;i<(1<<n);i++){intsum=0;for(intj=0;j<n;j++){if(i&(1<<j)){sum+=arr[j];}}if(sum==target)returntrue;}returnfalse;}A.O(n2)B.O(n×2n)C.O(1)D.O(n3)12.下面关于排序稳定性的描述,正确的是()。A.稳定性指算法的时间复杂度恒定B.稳定排序保证相同元素的相对顺序不变C.选择排序是稳定排序D.插入排序不是稳定排序13.对数组arr[]={5,3,8,1}进行升序排序,执行第一轮冒泡排序后数组arr中的内容为()。A.3,5,1,8B.3,1,5,8C.3,5,8,1D.5,3,8,114.运行下面的代码,将出现()。doublehmean(doublea,doubleb){if(a==-b)throwruntime_error("Runtimeerroroccurred.");return2.0*a*b/(a+b);}intmain(){doublex=10;doubley=-10;try{intresult=hmean(x,y);cout<<"hmean:"<<result<<endl;}catch(construntime_error&e){cout<<"Caught:"<<e.what()<<endl;}catch(…){cout<<"Caughtanunknownexception."<<endl;}return0;}A.屏幕上输出Caught:Runtimeerroroccurred.B.屏幕上输出Caughtanunknownexception.C.程序调用std::terminate()D.编译错误15.下面哪种方式不能实现将字符串"HappySpring!"输出重定向到文件log.txt()。A.freopen("log.txt","w",stdout);cout<<"HappySpring!"<<endl;fclose(stdout);B.std::ofstreamoutFile("log.txt");outFile<<"HappySpring!"<<endl;outFile.close();C.std::ofstreamoutFile("log.txt");cout<<"HappySpring!"<<endl;outFile.close();D.ofstreamlog_file("log.txt");streambuf*org_cout=cout.rdbuf();cout.rdbuf(log_file.rdbuf());cout<<"HappySpring!"<<endl;cout.rdbuf(org_cout);二、判断题(每题2分,共20分)。16.函数是C++中的核心概念,用于封装可重用的代码块。()。A.正确B.错误17.在C++中,函数的返回类型可以省略,默认为int。()。A.正确B.错误18.结构体的成员默认是public访问权限。()。A.正确B.错误19.假设整数数组arr[4]={0,1,2,3};的第一个元素在内存中的地址为0x7ffee4065820,经过int*p=arr;p+=1;后,指针p的值是1。()。A.正确B.错误20.二维数组作为函数参数时,必须显式指定所有维度的大小。()。A.正确B.错误21.递推是一种通过已知的初始值和递推公式,逐步求解目标值的算法。()。A.正确B.错误22.考虑最坏情况下冒泡排序算法的时间复杂度,T(n)为待排序数字的数目为n的复杂度,则其递推关系式为T(n)=T(n-1)+n,T(0)=1。()。A.正确B.错误23.插入排序在最好情况(已有序)下的时间复杂度是O(n2)。()。A.正确B.错误24.对数组arr[]={4,3,1,5,2}进行升序排序,执行第一轮选择排序后数组arr中的内容是{1,4,3,5,2}。()。A.正确B.错误25.未捕获异常会调用std::terminate终止程序。()。A.正确B.错误三、编程题(每题25分,共50分)。26.荒地开垦。题目描述:小杨有一大片荒地,可以表示为一个n行m列的网格图。小杨想要开垦这块荒地,但荒地中一些位置存在杂物,对于一块不存在杂物的荒地,该荒地可以开垦当且仅当其上下左右四个方向相邻的格子均不存在杂物。小杨可以选择至多一个位置,清除该位置的杂物,移除杂物后该位置变为荒地。小杨想知道在清除至多一个位置的杂物的情况下,最多能够开垦多少块荒地。输入格式:第一行包含两个正整数n,m,含义如题目所示。之后n行,每行包含一个长度为m且仅包含字符.和#的字符串。如果为.,代表该位置为荒地,如果为#,代表该位置为杂物。输出格式:输出一个整数,代表在清除至多一个位置的杂物的情况下,最多能够开垦的荒地块数。第一行从左数前4块荒地,第二行从左数前3块荒地,第三行从左数前4块荒地,均可开垦,4+3+4=11。数据范围:对于全部数据,保证有1≤n,m≤1000。27.二阶矩阵。题目描述:小A有一个n行m列的矩阵A。小A认为一个2×2的矩阵D是好的,当且仅当D1,1×D2,2=D1,2×D2,1。其中Di,j表示矩阵D的第i行第j列的元素。小A想知道A中有多少个好的子矩阵。输入格式:第一行,两个正整数n,m。接下来n行,每行m个整数Ai,1,Ai,2,…,Ai,m。输出格式:一行,一个整数,表示A中好的子矩阵的数量。样例解释:样例中的好的子矩阵如下。数据范围:对于所有测试点,保证1≤n≤500,1≤m≤500,-100≤Ai,j≤100。答案解析如下。1.答案:A。解析:这段C++代码实现了一个简单的乘法函数multiply,并在main函数中调用该函数进行乘法运算,最后输出结果。选项A:函数multiply的定义不一定要放到函数main之前。在C++中,函数声明可以提前告知编译器函数的存在、返回值类型和参数列表,这样即使函数定义在调用之后,编译器也能正确处理函数调用。本题中intmultiply(intx,inty);就是函数声明,有了这个声明,main函数中就可以正常调用multiply函数,所以该选项说法错误。选项B:函数声明intmultiply(intx,inty);明确指定了函数multiply的返回值为整数类型int,该选项说法正确。选项C:在main函数中,multiply(a,b)调用了multiply函数,其中a和b是main函数中定义的变量,作为实参传递给了multiply函数的形参x和y,该选项说法正确。选项D:multiply函数实现了两个整数的乘法运算,a=4,b=5,调用multiply(a,b)得到的结果是4*5=20,最后输出Theresultis:20,该选项说法正确。综上,答案是A。2.答案:B。解析:首先定义了一个全局变量x并初始化为10。在func函数中,又定义了一个局部变量x并初始化为20。在func函数内部,std::cout<<x;输出的是局部变量x的值,即20。因为在函数内部,局部变量会覆盖同名的全局变量,所以这里输出的是20。在main函数中调用func函数后,接着执行std::cout<<x。此时,这里的x是全局变量x,因为在main函数中没有定义与全局变量x同名的局部变量,所以输出的是全局变量x的值,即10。综上,最终的输出结果是2010,答案选B。3.答案:B。解析:inta=10;定义了一个整型变量a,并将其初始值设为10。int*p=&a;定义了一个整型指针p,使用取地址运算符&获取变量a的地址,并将该地址赋值给指针p。这样,指针p就指向了变量a。*p=20;使用解引用运算符*对指针p进行解引用操作,解引用后得到的是指针p所指向的变量,也就是变量a。然后将20赋值给解引用后的结果,相当于直接修改了变量a的值。所以,执行完上述代码后,变量a的值变为20,答案选B。4.答案:D。解析:如下。值传递:在值传递方式中,函数调用时会将实参的值复制一份传递给形参,对于大型对象,这种拷贝操作会消耗较多的时间和内存空间。引用传递:引用传递是将实参的引用(本质上是实参的别名)传递给函数,函数中对形参的操作实际上就是对实参的操作,不会发生对象的拷贝,从而避免了拷贝大型对象带来的开销。指针传递:指针传递是将实参的地址传递给函数,函数通过指针来访问和操作实参所指向的对象,也不会进行对象的拷贝,同样可以避免拷贝大型对象。所以引用传递和指针传递均可避免拷贝大型对象,答案是D。5.答案:A。解析:如下。函数swap的参数传递方式:函数swap有两个参数,第一个参数a是值传递,第二个参数b是引用传递。值传递是将实参的值复制一份传递给形参,在函数内部对形参的修改不会影响到实参。引用传递是将实参的引用(即别名)传递给形参,在函数内部对形参的修改会直接影响到实参。函数调用过程:在main函数中,定义了两个整型变量x=1和y=2。调用swap(x,y)时,x的值被复制给swap函数的形参a,y的引用被传递给swap函数的形参b。在swap函数内部,执行inttemp=a;a=b;b=temp;语句,交换了a和b的值。由于a是值传递,a的改变不会影响到x;而b是引用传递,b的改变会影响到y,此时y的值变为1。输出结果:在main函数中,调用swap函数后,x的值仍然是1,y的值变为1,所以std::cout<<x<<y;输出的结果是11。综上,答案选A。6.答案:C。解析:如下。选项A:该结构体定义中没有定义构造函数,而Personp("Yang",10);试图使用类似构造函数的方式初始化结构体变量,在没有自定义构造函数的情况下,这种初始化方式是错误的。所以选项A不正确。选项B:在结构体定义中,stringname,后面的逗号使用错误,应该是分号;来结束成员变量的声明。所以该结构体定义存在语法错误,选项B不正确。选项C:此结构体定义正确,并且使用初始化列表的方式对结构体变量p进行初始化,按照成员变量的顺序依次赋值,这种初始化方式是符合C++语法规则的。所以选项C正确。选项D:new运算符用于动态分配内存,返回的是一个指向对象的指针。而Personp定义的是一个结构体变量,不是指针类型。不能将指针赋值给结构体变量,这种赋值方式存在类型不匹配的错误。所以选项D不正确。综上,答案选C。7.答案:D。解析:如下。structPerson{std::stringname;intage;structAddress{std::stringstreet;std::stringcity;};Addressaddress;};此代码定义了一个Person结构体,其中嵌套了一个Address结构体,并且Person结构体有一个Address类型的成员address。选项A:从代码中可以明显看出,Address结构体定义在Person结构体内部,所以结构Person内嵌套结构Address,该选项描述正确。选项B:代码中Person结构体包含一个Address类型的成员address,即Addressaddress;,该选项描述正确。选项C:对于一个Person类型的变量p,可以通过p.address.street和p.address.city来访问和初始化address成员的street和city属性,如p.address.street="123MainSt";p.address.city="Anytown";,该选项描述正确。选项D:虽然结构体的嵌套在一定程度上可以减少命名冲突,但过多的嵌套会增加代码的复杂度,降低代码的可读性和可维护性。因此,在实际编程中需要控制嵌套层次,避免过度嵌套。所以该选项描述错误。综上,答案选D。8.答案:D。解析:这里定义了一个2行3列的二维数组arr,并进行了初始化。二维数组可以看作是一个矩阵,其中第一个下标表示行号,第二个下标表示列号,且下标都是从0开始计数的。所以,arr[1][2]的值是6,答案选D。9.答案:B。解析:如下。选项A:intarr[3,4];这种定义方式是错误的,在C++中,二维数组的定义应该使用[][]形式来指定行数和列数,而不是用逗号分隔。选项B:intarr[3][4];是正确的二维数组定义方式,它定义了一个名为arr的二维数组,有3行4列,符合C++中二维数组的定义语法。选项C:intarr(3,4);这种方式不是定义二维数组的正确语法,在C++中,定义数组通常使用方括号[],而不是圆括号()。选项D:inta[3-4];定义了一个一维数组,且数组大小为3-4=-1,这是不符合语法规则的,数组大小必须是一个大于等于0的常量表达式。故正确答案是B。10.答案:B。解析:如下。这是一个经典的爬楼梯问题,其核心思想是:到达第n阶楼梯的方法数等于到达第n-1阶楼梯的方法数加上到达第n-2阶楼梯的方法数。因为每次只能爬1个或2个台阶,所以要到达第n阶,要么是从第n-1阶爬1个台阶上来,要么是从第n-2阶爬2个台阶上来。选项A:这种累加方式不符合状态转移方程,会导致结果错误。正确的做法是直接将f1和f2的和赋值给res,而不是累加。所以选项A错误。选项B:首先res=f1+f2;计算出到达第i阶楼梯的方法数,然后f1=f2;将f2的值赋给f1,更新f1为到达第i-1阶楼梯的方法数,最后f2=res;将res的值赋给f2,更新f2为到达第i阶楼梯的方法数,为下一次循环做准备。这种方式符合递推算法的状态转移方程,是正确的。所以选项B正确。选项C:同样,res+=f1+f2;不符合状态转移方程,而且f2=res;和f1=f2;的顺序会导致f1和f2的值更新错误。所以选项C错误。选项D:虽然res=f1+f2;计算出了到达第i阶楼梯的方法数,但f2=res;和f1=f2;的顺序会导致f1和f2的值更新错误,没有正确维护递推关系。所以选项D错误。综上,答案选B。11.答案:B。解析:这段代码的功能是判断数组arr中是否存在若干元素的和等于目标值target。它通过枚举数组元素所有可能的组合来实现这一功能。时间复杂度分析。外层循环:外层循环的条件是i<(1<<n),其中1<<n表示将1左移n位,其结果为2n。所以外层循环会执行2n次。内层循环:内层循环的条件是j<n,它会执行n次。嵌套循环的总执行次数:由于内层循环嵌套在外层循环内部,对于外层循环的每一次迭代,内层循环都会完整地执行n次。因此,嵌套循环的总执行次数为外层循环执行次数与内层循环执行次数的乘积,即n×2n。所以,答案选B。12.答案:B。解析:如下。选项A:排序算法的稳定性与时间复杂度并无关联。稳定性是指在排序过程中,相等元素的相对顺序是否保持不变;而时间复杂度描述的是算法执行时间随输入规模增长的变化趋势。所以选项A错误。选项B:稳定排序的定义就是在排序操作中,保证相同元素的相对顺序不变。例如,在一个待排序序列中,如果有两个相等的元素a和b,且a在b之前,那么经过稳定排序后,a仍然会在b之前。所以选项B正确。选项C:选择排序不是稳定排序。选择排序的基本思想是每次从未排序部分选择最小(或最大)的元素,与未排序部分的第一个元素交换位置。在交换过程中,可能会改变相等元素的相对顺序。例如,序列[5,8,5,2],第一次选择最小元素2与第一个元素5交换位置后,两个5的相对顺序就发生了改变。所以选项C错误。选项D:插入排序是稳定排序。插入排序的工作原理是将未排序数据插入到已排序序列的合适位置。在插入过程中,如果遇到相等元素,插入排序会将新元素插入到相等元素的后面,从而保证相等元素的相对顺序不变。所以选项D错误。综上,答案选B。13.答案:A。解析:冒泡排序的基本思想是重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。对于升序排序的冒泡排序,在每一轮中,会从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。给定数组arr[]={5,3,8,1},进行第一轮冒泡排序的过程如下。比较第1个元素5和第2个元素3,因为5>3,所以交换它们的位置,数组变为{3,5,8,1}。比较第2个元素5和第3个元素8,因为5<8,所以不交换它们的位置,数组仍然是{3,5,8,1}。比较第3个元素8和第4个元素1,因为8>1,所以交换它们的位置,数组变为{3,5,1,8}。经过第一轮冒泡排序后,数组arr中的内容为{3,5,1,8},所以答案选A。14.答案:A。解析:如下。函数hmean:该函数接受两个双精度浮点数a和b作为参数,计算它们的调和平均数。如果a等于-b,则抛出一个runtime_error类型的异常,异常信息为"Runtimeerroroccurred."。main函数:定义了两个双精度浮点数x=10和y=-10。在try块中调用hmean(x,y)函数,由于x等于-y,hmean函数会抛出runtime_error异常。异常抛出后,程序会跳出try块,寻找匹配的catch块进行处理。第一个catch块catch(construntime_error&e)用于捕获runtime_error类型的异常,当捕获到该异常时,会输出异常信息。第二个catch(...)块用于捕获其他未知类型的异常。由于hmean函数抛出的是runtime_error类型的异常,程序会进入第一个catch块进行处理,输出Caught:Runtimeerroroccurred。所以,答案选A。15.答案:C。解析:如下。选项A,freopen函数用于将标准输出流stdout重定向到指定的文件log.txt。之后使用cout输出的内容都会被写入到log.txt文件中,最后使用fclose(stdout)关闭文件。所以该选项可以实现将字符串输出到文件。选项B,std::ofstream是C++中用于文件输出的流类,通过创建outFile对象并打开log.txt文件,使用outFile输出字符串到文件,最后关闭文件。因此该选项也能实现将字符串输出到文件。选项C,虽然创建了outFile对象并打开了log.txt文件,但后续使用的是cout进行输出,cout是标准输出流,默认输出到控制台,并没有将输出重定向到文件,所以字符串不会被写入到log.txt文件中。故该选项不能实现将字符串输出到文件。选项D,此选项通过cout.rdbuf()函数将cout的缓冲区替换为log_file的缓冲区,从而实现将cout的输出重定向到文件log.txt。输出完成后,再将cout的缓冲区恢复为原来的缓冲区。所以该选项可以实现将字符串输出到文件。综上,答案选C。16.答案:正确。解析:在C++中,函数是一种重要的编程结构,它将一段具有特定功能的代码封装起来,形成一个独立的单元。通过给函数定义一个名称,在程序的其他地方可以方便地调用这个函数,实现代码的复用。这样不仅提高了代码的可读性和可维护性,还使得程序的结构更加清晰,便于开发人员对复杂程序进行模块化设计和管理。所以“函数是C++中的核心概念,用于封装可重用的代码块”这一描述是准确的。17.答案:错误。解析:在C++中,函数的返回类型不能省略。如果函数没有返回值,需要使用void关键字明确指定其返回类型为void。如果不指定返回类型,编译器会报错,而不是默认为int。18.答案:正确。解析:在C++中,结构体和类相似,都可以包含成员变量和成员函数。不同的是,结构体的成员默认访问权限是public,即结构体的成员可以在结构体外部直接访问,除非显式地使用private或protected关键字来修改成员的访问权限。而类的成员默认访问权限是private。19.答案:错误。解析:在C++中,当对指针进行算术运算时,其移动的字节数取决于指针所指向的数据类型。在本题中,arr是一个int类型的数组,int*p=arr将指针p指向数组arr的首元素。当执行p+=1时,指针p会按照int类型的大小向后移动一个元素的位置。在大多数系统中,int类型通常占4个字节,所以p的值会增加4,而不是1。此时p的值应该是0x7ffee4065820+4=0x7ffee4065824,它指向数组arr的第二个元素1的地址,而不是值为1。20.答案:错误。解析:在C++里,二维数组作为函数参数时,不需要显式指定所有维度的大小,但必须指定除第一维之外其他维度的大小。这是因为在函数调用时,编译器需要知道每一行的元素个数,以便正确地进行内存寻址和数据访问。例如,下面是一个正确的示例。#include<iostream>//函数定义,指定第二维大小。voidprintArray(intarr[][3],introws){for(inti=0;i<rows;++i){for(intj=0;j<3;++j){std::cout<<arr[i][j]<<"";}std::cout<<std::endl;}}intmain(){intarr[2][3]={{1,2,3},{4,5,6}};printArray(arr,2);return0;}在这个例子中,函数printArray的参数arr只指定了第二维的大小为3,第一维大小由调用函数时传入的rows参数来确定。所以,“二维数组作为函数参数时,必须显式指定所有维度的大小”这种说法是错误的。21.答案:正确。解析:递推算法的核心就是利用已知的初始条件,借助递推关系(也就是递推公式),逐步计算出后续的值,最终得到目标值。例如,在斐波那契数列中,初始值为F(0)=0,F(1)=1,递推公式为F(n)=F(n-1)+F(n-2)(n≥2)。通过这个初始值和递推公式,就可以从n=2开始,逐步计算出后续的斐波那契数。所以,“递推是一种通过已知的初始值和递推公式,逐步求解目标值的算法”这一描述是准确的。22.答案:错误。解析:如下。冒泡排序最坏情况分析:在最坏情况下,冒泡排序需要对一个长度为n的数组进行n-1轮比较和交换操作。每一轮中,需要比较的次数逐渐减少。对于长度为n的数组,第一轮需要比较n-1次,第二轮需要比较n-2次,以此类推,最后一轮需要比较1次。递推关系式分析:如果要建立递推关系式,对于长度为n的数组进行冒泡排序,可看作先对长度为n-1的数组进行冒泡排序(其复杂度为T(n-1)),然后再进行n-1次比较和可能的交换操作。所以递推关系式应该是T(n)=T(n-1)+(n-1),而不是T(n)=T(n-1)+n。初始条件分析:当n=0时,数组为空,不需要进行任何排序操作,所以T(0)=0,而不是T(0)=1。综上所述,题目中的说法是错误的。23.答案:错误。解析:插入排序的基本思想是将未排序数据插入到已排序序列的合适位置。在最好情况下,即待排序数组已经是有序的。对于插入排序,每插入一个新元素时,只需要和已排序部分的最后一个元素比较一次,因为数组已经有序,新元素总是大于等于已排序部分的最后一个元素,所以不需要进行元素的移动操作。对于一个包含n个元素的数组,插入排序在最好情况下需要进行n-1次比较操作,其时间复杂度为O(n),而不是O(n2)。所以该说法错误。24.答案:错误。解析:选择排序的基本思想是每一轮从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾,以此类推,直到全部待排序的数据元素排完。对于数组arr[]={4,3,1,5,2}进行升序排序的第一轮操作如下:从数组的第一个元素开始,遍历整个数组,找出最小的元素。在这个数组中,最小的元素是1,它位于数组的第3个位置(索引为2)。然后将这个最小元素1与数组的第一个元素4进行交换。交换后,数组就变为{1,3,4,5,2}。所以,执行第一轮选择排序后数组arr中的内容是{1,3,4,5,2},而不是{1,4,3,5,2}。题目说法错误。25.答案:正确。解析:在C++里,当程序抛出一个异常时,会尝试寻找与之匹配的catch块来处理这个异常。若在整个调用栈中都没有找到合适的catch块,也就是该异常未被捕获,那么程序会调用std::terminate函数。std::terminate函数的默认行为是终止程序的执行,并且通常会输出一些错误信息或者调用预先设置的终止处理函数(如果有的话)。所以,“未捕获异常会调用std::terminate终止程序”这一表述是正确的。26.参考程序。#include<bits/stdc++.h>usingnamespacestd;const

温馨提示

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

评论

0/150

提交评论