当前位置: 首页icon 51CTO软考 > 软考资讯 >考试科目 >2018年上半年程序员下午题之二

2018年上半年程序员下午题之二

作者:wx62e89cc5e381d2023-11-07 01:00:12
备考咨询 刷题指导
添加专属学姐
下载资料 2024上半年软考备考资料+考试大纲
下载按钮 下载
引号

摘要:对于【程序员】软考考试而言,真题无疑是最重要的学习资料之一。在软考备考过程中,吃透真题、掌握真题所考知识点、熟悉真题的出题思路,对我们提升分数的效果是最明显的,通过对真题的反复练习,还可以查漏补缺。今天,给大家带来【2018年上半年程序员下午题】部分真题的详解,一起来看看吧~1、阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。【说明】直接

引号
摘要:对于【程序员】软考考试而言,试题无疑是最重要的学习资料之一。在软考备考过程中,吃透试题、掌握试题所考知识点、熟悉试题的出题思路,对我们提升分数的效果是最明显的,通过对试题的反复练习,还可以查漏补缺。今天,给大家带来【2018年上半年程序员下午题】部分试题的详解,一起来看看吧~



1、阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。【说明】直接插入排序是一种简单的排序方法,具体做法是:在插入第i个关键码时,k1,k2,…,ki-1已经排好序,这时将关键码ki依次与关键码ki-1,ki-2,…,进行比较,找到ki应该插入的位置时停下来,将插入位置及其后的关键码依次向后移动,然后插入ki。例如,对{17,392,68,36}按升序作直接插入排序时,过程如下:第1次:将392(i=1)插入有序子序列{17},得到{17,392};第2次:将68(i=2)插入有序子序列{17,392},得到{17,68,392};第3次:将36(i=3)插入有序子序列{17,68,392},得到{17,36,68,392},完成排序。下面函数 insertSort用直接插入排序对整数序列进行升序排列,在main函数中调用insertSort并输出排序结果。 【C代码】void insert Sort(int data[],int n)/*用直接插入排序法将data[0]~ data[n-1]中的n个整数进行升序排列*/{    int i,j;       int tmp;      for(i=1; i<n;i++){              if(data[i]<data[i-1]){   //将data[i]插入有序子序列data[0]~data[i-1]              tmp=data[i];             //备份待插入的元素              data[i]=(1);              for(j=i-2;j>=0 && data[j] > tmp;j­­--)        //查找插入位置并将元素后移                      (2);              (3) =tmp;                                         //插入正确位置          }/*if*/  }/*for*/}/*insertSort*/ int main(){       int *bp,*ep;        int n,arr[]={17,392,68,36,291,776,843,255};        n = sizeof(arr) / sizeof(int);        insertSort(arr,n);        bp=    (4)      ;      ep = arr+n;        for( ;bp<ep; bp++)                                    //按升序输出数组元素             printf("%d\t",          (5)      );        return 0;阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。【说明】直接插入排序是一种简单的排序方法,具体做法是:在插入第i个关键码时,k1,k2,…,ki-1已经排好序,这时将关键码ki依次与关键码ki-1,ki-2,…,进行比较,找到ki应该插入的位置时停下来,将插入位置及其后的关键码依次向后移动,然后插入ki。例如,对{17,392,68,36}按升序作直接插入排序时,过程如下:第1次:将392(i=1)插入有序子序列{17},得到{17,392};第2次:将68(i=2)插入有序子序列{17,392},得到{17,68,392};第3次:将36(i=3)插入有序子序列{17,68,392},得到{17,36,68,392},完成排序。下面函数 insertSort用直接插入排序对整数序列进行升序排列,在main函数中调用insertSort并输出排序结果。 【C代码】void insert Sort(int data[],int n)/*用直接插入排序法将data[0]~ data[n-1]中的n个整数进行升序排列*/{    int i,j;       int tmp;      for(i=1; i<n;i++){              if(data[i]<data[i-1]){   //将data[i]插入有序子序列data[0]~data[i-1]              tmp=data[i];             //备份待插入的元素              data[i]=(1);              for(j=i-2;j>=0 && data[j] > tmp;j­­--)        //查找插入位置并将元素后移                      (2);              (3) =tmp;                                         //插入正确位置          }/*if*/  }/*for*/}/*insertSort*/ int main(){       int *bp,*ep;        int n,arr[]={17,392,68,36,291,776,843,255};        n = sizeof(arr) / sizeof(int);        insertSort(arr,n);        bp=    (4)      ;      ep = arr+n;        for( ;bp<ep; bp++)                                    //按升序输出数组元素             printf("%d\t",          (5)      );        return 0;}
答案:

(1)data[i-1]

(2)data[j+1]=data[j]

(3)data[j]

(4)arr

(5)*bp


答题解析:

直接插入排序法是将关键码插入已经排好的序列中,因此将data[i]插入序列data[0]~data[i-1]中,此时序列data[0]~data[i-1]已经按照升序排列好,而data[i]应插入位置前的数据应该比data[i]小,而插入位置后的数据应比data[i]大,在if语句中判断data[i]<data[i-1]中可以看出,在进行插入运算时,是从序列data[0]~data[i-1]最后一个数据data[i-1]向前逐一进行比较,若data[i]>=data[i-1],则将data[i]插入到d[i-1]后;若data[i]<data[i-1],data[i]需要与data[i-2]进行比较,如此依次进行,此时需要将data[i]备份并将data[i-1]后移,即temp=data[i]; data[i]=data[i-1];之后是进行比较,即for(j=i-2;j>=0&&data[j]>tmp;j--)循环,从data[i-2]开始向前逐一比较,即j从i-2开始向0循环,若data[j]>tmp,则进行for循环,此时需要将data[j]即data[i-2]的值后移,使得data[i-1]=data[i-2],即data[j+1]=data[j],然后j--,用tmp与data[j]进行比较,如果tmp< data[j],则说明tmp应放在data[j]之前,那么data[j]需要继续往后移动。所以data[j+1]= data[j]。

当该循环结束时,此时有2种情况:(1)j=-1<0,此时data[0]>tmp;应使得data[0]后移,即data[1]=data[0],data[0]=tmp,因此第3空填写data[j];(2)data[j]<=tmp;此时需要将tmp插入到data[j]后,即data[j+1]=tmp。

在main函数中调用insertSort函数并输出数组元素,在for(; bp<ep;bp++)中循环变量是bp,因此输出的是bp指向的数组元素,即调用insertSort函数后返回的数组arr,因此bp=arr(bp是指针变量,数组名arr可以直接将数组地址传递给bp);在printf函数中输出bp;因此printf(“%d\n”,*bp)。



查看完整试题>>>


代理合作学习群