问题 问答题

下列给定程序中,函数fun的功能是:用冒泡法对6个字符串进行升序排列。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdlib.h >
#include <string.h>
#include <conio.h>
#include <stdio.h>
#define MAXLINE 20
fun (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+i)=pstr+j;
* (pstr+j)=p;




void main ()

int i;
char * pstr[6], str[6] [MAXLINE];
system ("CLS");
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++)
scanf("% s", pstr[i]);
fun (pstr);
printf (" The strings after sor-
ting:\n ");
for (i=0; i<6; i++)
printf ("% s\n ", pstr[i]);

答案

参考答案:for (j = i + 1; j < 6; j++)
(2) *(pstr + i) = *(pstr + j) ;
答案考生文件夹

解析: 本题考查:冒泡排序算法;for循环语句格式;指针数组。
[解题思路] (1)此处考查for语句的格式,各表达式之间应用";"割开。
(2)此处考查用指针表示数组元素的方法,*(pstr+I)表示pstr所指向数组的第I个元素,同理*(pstr+j)表示pstr所指向数组的第j个元素。
[解题宝典] 冒泡排序算法,其基本思想是,将待排序的元素看作是竖着排列的"气泡",较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个"气泡"序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即"轻"的元素在下面,就交换它们的位置。显然,处理一遍之后,"最轻"的元素就浮到了最高位置;处理二遍之后,"次轻"的元素就浮到了次高位置。依次类推,完成排序。用代码实现数组s[N]的升序排列为:
for(i=0; i<N; i++)
for(j=i+1; j<N; j++)
if(s[i]>s[j])
{t=s[i]; s[i]=s[j]
s[j]=to;}

单项选择题
多项选择题