问答题
下列给定程序中函数fun的功能是:用冒泡法对6个字符串进行升序排列。请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件MOD11.C中,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>#define MAXLINE 20fun(char * pstr[6]){int i,j;char*P;for(i=0;i<5;i++){/**********found**********/for(j=i+1,j<6,j++){ if(strcmp(*(pstr+i),*(pstr+j))>0){p=*(pstr+i);/**********found**********/*(pstr+j)=*(pstr+i);*(pstr+j)=p;}}}}}void main( ){int i;char * pstr[6],str[6][MAXUNE];for(i=0;i<6;i++)pstr[i]=str[i];printf(''\nEnter 6 string(1 string at each line):\n'');for(i=0;i<6;i++) scartf(''%s'',pstr[i]);fun(pstr);printf(''The strings after sorting:\n'');for(i=0;i<6;i++)printf(''%s\n'',pstr[i]);}
【正确答案】正确答案:1.for(j=i+1;j<6;j++) 2.*(pstr+i)=*(pstr+j);
【答案解析】解析:1.此处考查for语句的格式,各表达式之间应用“;”隔开。 2.此处考查用指针表示数组元素的方法,*(pstr+i)表示pstr所指向数组的第i个元素,同理木(pstr+j)表示pstr所指向数组的第j个元素。 冒泡排序算法,其基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高的位置。依此类推,完成排序。