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

admin2019-04-14  19

问题 请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCⅡ码降序排列。例如,原来的字符串为″CEAedca″,排序后输出为″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);
j+ +;
}
fclose(rf);
fclose(wf);
}

选项

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

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

最新回复(0)