问答题
请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。
例如,原来的字符串为CEAedca,排序后输出为CedcEAa。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include<stdio.h>
#include<ctype.h>
#include<string.h>
void fun(char *s, int num)
{

}
NONO()
{
/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。 */
char s[10];
FILE *rf, *wf;
int i=0;
rf=fopen("in.dat", "r");
wf=fopen("out.dat", "w");
while(i<10){
fgets(s, 10, rf);
s[7]=0;
fun(s, 7);
fprintf(wf, "%s/n", s);
i++;
}
fclose(rf);
fclose(wf);
}
main()
{
char s[10];
printf("输入7个字符的字符串: ");
gets(s);
fun(s, 7);
printf("/n%s", s);
NONO();
}
【正确答案】
【答案解析】char t;
int i, j;
for(i=1; i<num-2; i++)
//对n个元素进行循环选择
for(j=i+1; j-<num-1; j++)
if(s[i]<s[j])
//将str[i]设为最大值,和剩下的j~num-1进行比较
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
答案考生文件夹 [解析] 选择排序法中的降序排序,首先从数组中挑选一个最大的元素,把它和第一个元素交换,接着从剩下的num-1个元素中再挑出一个最大的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。
[考点] 字符数组和字符串、循环的嵌套。