P064 中间5个字符按ASCII码降序排列 ★★★

03-程序设计题 软件121, 唐鼎威 672浏览

所属年份:2011.3;2011.9
请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。
例如,原来的字符串为”CEAedca”,排序后输出为”CedcEAa”。

#include <stdio.h>
#include <ctype.h>
#include <string.h>

void fun(char *s,int num)
{

}

main()
{
  char s[10];
  printf("输入7个字符的字符串:");
  gets(s);
  fun(s,7);
  printf("\n%s",s);
}

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

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