请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如,原来的字符串为"CEkedca",排序后输出为"CedcEAa"。 注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编

admin2018-09-10  58

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

}
main()
{
void NONO();
char s[10];
printf("输入7个字符的字符串:");
gets(s);
fun(s,7);
printf("\n%s",s);
NONO();
}
void 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);
}

选项

答案void fun(char*s,int num) { char ch: int i,j; for(i=1;i<6;i++) fbr(j=i+1;j<6;j++) { if(*(s+i)<*(s+j)) { ch=*(s+j); *(s+j)=*(s+i); *(s+i)=ch; } } }

解析 本题考查:for循环语句;字符的交换;指针型变量;指针移动。
指针移动:指针经常用于指向数组和字符串,通过指针的移动实现对数组或字符串的遍历。数组和字符串都是用一段连续的地址来存放元素的。所以,指针的移动也就是对地址的加减。
本题要求对长度为7的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列,因而要用双重循环进行排序。注意第1个循环的变量的初值i=1,第2个循环的变量的初值为j=i+1;这是因为题目要求除首、尾字符外,将其余5个字符按ASCII码降序排列。
转载请注明原文地址:https://kaotiyun.com/show/AVxp777K
0

最新回复(0)