问题 问答题

试题要求如图10.4所示。

#include<stdio.h>

#include<string.h>

char xx[20] [80];

void jsSort()

void main()

readDat();

jsSort();

writeDat();

readDat()

FILE *in;

int i=0;

char *p;

in=fopen("K:\\k06\\35010004\\in.dat", "r");

while(i<20 && fgets(xx[i], 80, in)!=NULL)

p=strchr(xx[i], ’\n’);

if(p) *p=0;

i++;

fclose(in);

writeDat()

FILE *out;

int i;

out=fopen("K:\\k06\\35010004\\out.dat", "w");

for(i=0; i<20; i++)

printf("%s\n", xx[i]);

fprintf(out, "%s\n", xx[i]);

fclose(out);

答案

参考答案:

void jsSort()

{

int i, j, k, length, half;

char temp;

for(i=0; i<B0; i++){

length=strlen(xx[i]);

half=length/B;

for(j=0; j<half-A; j++)

for(k=j+A; k<half; k++)

if(xx[i][j]<xx[i][k]){

temp=xx[i][j];

xx[i][j]=xx[i][k];

xx[i][k]=temp;

}

If(length%B!=0) half=half+A;

for(j=half; j<length-A; j++)

for(k=j+A; k<length; k++)

if(xx[i][j]>xx[i][k]){

temp=xx[i][j];

xx[i][j]=xx[i][k];

xx[i][k]=temp;

}

}

解析:

此题的思路是先求出字符串数组××中每一行的长度,然后先对前半部分进行降序排列,再对后半部分进行升序排列。注意,题目要求当字符串长度为奇数时,中间的字不参加排序,所以在对后半部分进行排序时要加一个对length的奇偶判断。当length为偶数时要从length/2开始排序,当length为奇数时要从length/2+1时开始排序。这里是用冒泡排序法进行排序的,用其他的排序方法亦可。

单项选择题
单项选择题