GESP认证C++编程真题解析 | 202409 四级
附上汇总帖GESP认证C编程真题解析 | 汇总单选题第1题在C中 正确定义了一个返回整数值并接受两个整数参数的函数。A.int add(int a, int b) { return a b; }B.void add(int a, int b) { return a b; }C.int add(a, b) { return a b; }D.void add(int a, int b) { return a - b; )【答案】A【解析】函数的定义中返回值类型写在函数名之前参数表需要指定参数的类型。第2题在C中形参与实参的关系描述正确的是 。A. 形参在函数调用时指定实参在函数定义时传递B. 形参在函数定义时指定实参在函数调用时传递C. 形参和实参可以互换D. 形参和实参必须是完全相同的类型不能有任何差异。【答案】B【解析】形参在函数定义时指定实参在函数调用时传递正确。调用时实参可以隐式转换成形参的类型如果符合隐式转换的规则D错误。第3题运行以下代码屏幕上将输出 。#includeiostreamusingnamespacestd;intvar100;voidfunction(){intvar200;coutvar ;cout::var ;}intmain(){coutvar ;function();var100;coutvar ;}A. 100 200 100 200B. 100 200 100 300C. 100 200 200 200D. 100 200 200 300【答案】A【解析】程序中有两个变量var一个是全局变量一个是 function 函数中定义的局部变量。程序共输出4个数main 函数中访问的 var 是全局变量所以输出的第一个数是100最后一个数是200function 函数产生第二与第三个输出默认访问的是局部变量所以第二个输出是200。:是域作用符它前面没有写具体的命名空间默认指的是全局命名空间所以:var 访问的是全局变量var值为100。第4题运行下面代码屏幕上输出是 。intarr[3]{24,9,7};int*parr;p;cout*pendl;A. 24B. 9C. 7D. 7【答案】B【解析】第二行定义指针p指向数组 arr 下标为0的元素24执行厅p后p指向下一个元素9。第5题运行下面代码片段的结果是 。intx20;inty24;int*px;int*qy;pq;A. 将 x 赋值为24B. 将 y 赋值为20C. 将 q 指向 x 的地址D. 将 p 指向 y 的地址【答案】D【解析】指针p指向xq指向yp q就是让p指向q指向的地方也就是让p指向y的地址。操作并不改变x与与y的值。第6题在C中 正确定义一个名为student的结构体其中包含一个name字符数组和一个age整数A.struct student { char name[20]; int age; };B.student struct { char name[20]; int age; };C.student struct { string name; int age; };D.struct student { char[20] name; int age; };【答案】A【解析】结构体关键字 struct大括号中定义结构体成员。第7题在C中 正确声明了一个3行4列的二维数组。A.int arr[3, 4];B.int arr[3][4];C.int arr[4][3];D.int arr(3, 4);【答案】B【解析】声明二维数组语法为“元素类型 数组名[行数][列数];”第8题一个二维数组定义为int arr[3][4];假设一个int变量占4个字节则int arr[0]占用 个字节的内存。A. 3B. 4C. 12D. 16【答案】D【解析】intarr[0]相当于4个元素的一维数组占用4 * 416个字节。第9题下面代码采用递推算法来实现整数的阶乘n ! n × ( n − 1 ) × ⋯ × 2 × 1 n!n\times (n-1)\times \dots\times 2\times 1n!n×(n−1)×⋯×2×1则横线上应填写 。intfactorial(intn){intresult1;for(inti2;in;i){_________________________// 在此处填入代码}returnresult;}A.result * i;B.result i;C.result * result;D.result result;【答案】A【解析】1! 1, n! (n-1)! * n。第10题在排序算法中稳定性指的是 。A. 排序后数据不会丢失B. 排序后相同元素的相对顺序保持不变C. 排序后数据不会被修改D. 排序后数据的时间复杂度不变【答案】B【解析】排序的稳定性指的是排序后相同元素的相对顺序保持不变。第11题下面代码实现了冒泡排序函数则横线上应填写 。// 交换数组arr的第i个元素和第j个元素voidswap(vectorarr,inti,intj){inttmparr[i];arr[i]arr[j];arr[j]tmp;}intbubble_sort(vectorarr){for(intiarr.size()-1;i0;i--){boolflagfalse;// 标志位_________________________{// 在此处填入代码if(arr[j]arr[j1]){swap(arr,j1,j);flagtrue;}}if(!flag)break;// 此轮“冒泡”未交换任何元素}}A.for (int j0; jarr.size()-1; j)B.for (int jarr.size()-1; j0; j--)C.for (int j0; ji; j)D.for (int ji-1; j0; j--)【答案】C【解析】本程序中冒泡排序将大的元素交换至数组右边最多共n-1轮冒泡。第12题上一题算法的时间复杂度为 。A.O ( n 2 ) O(n^2)O(n2)B.O ( 2 n ) O(2^n)O(2n)C.O ( 1 ) O(1)O(1)D.O ( n ) O(n)O(n)【答案】A【解析】冒泡排序的时间复杂度是。第13题下面代码实现了插入排序函数升序则横线上应填写 。voidinsertion_sort(vectornums){for(inti1;inums.size();i){intbasenums[i],ji-1;___________________________{// 在此处填入代码nums[j1]nums[j];j--;}nums[j1]base;}}A.while (j0 nums[j]base)B.while (j0 nums[j]base)C.while (j0 nums[j]base)D.while (j0 nums[j]base)【答案】A【解析】插入排序的原理是从第二个元素开始不断将当前元素插入左侧有序部分。第14题小杨用文件重定向实现在log.txt文件中输出日志则下面横线上应填写 。#includeiostream#includefstring#includestringusingnamespacestd;intmain(){ofstreamlog_file(log.txt);streambuf*original_coutcout.rdbuf();cout.rdbuf(log_file.rdbuf());__________________________________// 在此处填入代码cout.rdbuf(original_cout);// 恢复原始的标准输出缓冲区return0;}A.cout This output will go to the log file. endl;B.log_file This output will go to the log file. endl;C.cout This output will go to the log file. endl;D.log_file This output will go to the log file. endl;【答案】A【解析】程序将标准输出重定向到一个文件log.txt。所以空白处应该用cout输出的内容会输出到 log.txt中。然后恢复标准输出缓冲区。第15题运行下面的代码屏幕上将输出 。#includeiosteamusingnamespacestd;intdivide(inta,intb){if(b0){throwruntime_error(division by zero error);}returna/b;}intmain(){intx10;inty0;// 设为0会导致除零错误try{intresultdivide(x,y);coutresult: resultendl;}catch(construntime_errore){coutcaught an exception: e.what()endl;}return0;}A.division by zero error result: caught an exception:B.result: caught an exception: division by zero errorC.caught an exception: division by zero errorD.division by zero error caught an exception: division by zero error【答案】C【解析】divide函数中抛出异常try 块中的 cout 语句不再执行。异常由main函数中的catch 捕获。判断题第1题代码int a10; int*p a;可以正确定义指针和初始化指针。A. 正确B. 错误【答案】A【解析】指针p指向变量a。第2题在C中引用传递允许函数修改传递给它的参数的值。A. 正确B. 错误【答案】A【解析】参数以引用方式传递修改形参同时会修改实参。第3题指针的大小与其所指向的变量的数据类型的大小相同。A. 正确B. 错误【答案】B【解析】指针的大小由系统与编译器决定32位系统中指针通常为4个字节64位系统中指针通常为8个字节。第4题二维数组的行的大小的必须在定义时确定列的大小可以动态变化。A. 正确B. 错误【答案】B【解析】二维数组的列的大小的必须在定义时确定行的大小在定义时可以暂时省略。第5题递推算法通过逐步求解当前状态和前一个或几个状态之间的关系来解决问题。A. 正确B. 错误【答案】A【解析】递推算法的定义属于简单的动规第6题选择排序是稳定的排序算法。A. 正确B. 错误【答案】B【解析】排序的稳定性指的是排序后相同元素的相对顺序保持不变。常见的稳定的排序方法有直接插入排序、冒泡排序、归并排序鬼子头上插了一直。第7题插入排序的时间复杂度总是比冒泡排序低。A. 正确B. 错误【答案】B【解析】两种排序方法的最坏与平均时间复杂度都是第8题在C中如果没有捕获到异常没有匹配的catch块程序会继续执行而不会终止。A. 正确B. 错误【答案】B【解析】在C中异常会沿调用栈向上传播直到找到一个匹配的 catch 块。如果没有找到匹配的catch 块程序会终止执行。第9题以下代码用递推法求斐波那契数列的第n nn项时间复杂度为指数级。intfibonacci(intn){if(n0)return0;if(n1)return1;intf00;// F(0)intf11;// F(1)intcurrent;for(inti2;in;i){currentf0f1;// F(n) F(n-1) F(n-2)f0f1;f1current;}returncurrent;}A. 正确B. 错误【答案】B【解析】递推法求斐波那契数列第n项的时间复杂度是 的即线性时间复杂度。第10题执行下面C代码后输出的是20。intpoint(int*p){return*p*2;}intmain(){inta10;int*pa;*ppoint(p);cout*pendl;}A. 正确B. 错误【答案】B【解析】p指向变量 apoint 函数的返回值是p指向的变量的2倍也也就是20。*p20;的执行效果是变量a赋值为20。最终输出a的值为20。编程题题解洛谷 B4040 [GESP202409 四级] 黑白方块题解洛谷 B4041 [GESP202409 四级] 区间排序