GESP 四级 · GESP 202406 C++ 四级 第 8 题

选择题 · 答案 A · 考点:算法、指针与引用

← 整套速查表 GESP 四级 全部真题

题目

下列程序横线处,应该输入的是( )。

#include<iostream>
using namespace std;
int n,a[10001];
void swap(int &a,int &b)
{
    int t=a;
    a=b;
    b=t;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=n;i>1;i--)
        for(int j=1;j<i;j++)
            if(a[j]>a[j+1])
                ;
    for(int i=1;i<=n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
    return 0;
}
答案:A

考点

算法指针与引用

解题思维

答案A。代码补全要考虑参数传递方式。如果需要修改实参,需用指针(*)传递。排序算法要理解每步比较的含义。

常见错误

排序代码补全要理解每步比较的含义。选择排序找最小值时比较的是array[min]>array[j]。

详细解析(节选)

【考点】算法:冒泡排序|指针与引用|GESP四级

【解题思维】 外层循环i从n递减到2,控制排序轮数;内层循环j从1到i-1,每次比较相邻两元素a[j]与a[j+1],若逆序则交换。命题人挖掉交换语句,就是要你识别冒泡排序的核心操作——交换当前比较对。

【陷阱拆解】

【反命题思维】 把swap(a[j],a[j+1])改成swap(a[j],a[j]),数组将保持原样,因为自引用交换无意义;若把if条件改成a[j]==a[j+1],则永远不交换,输出不变。刷到这种挖空题,先问自己:挖掉的是哪一对?哪一对才和判断条件对应?

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断