编写一个C程序,实现以下功能: 编写一个sort函数,实现对5个字符串按从大到小进行排序。在主程序中输入5字符串,调用sort(s,n)函数对n个字符串s进行排序,然后输出排序后的结果

题目如下:

编写一个C程序,实现以下功能:
编写一个sort函数,实现对5个字符串按从大到小进行排序。在主程序中输入5字符串,调用sort(s,n)函数对n个字符串s进行排序,然后输出排序后的结果。例如:输入字符串Li Xiao Wang Zhang
Yu,输出:Zhang Yu Xiao Wang Li。

代码如下

#include 
#include 
#define n 5//为什麽要使用宏定义?便于更改一些变量时只需要在开头进行该动即可
#define m 10//而不需要,当你改便某个变量的数据后将整章文章都进行改动,反正宏定义十分好用希望大家也能早点爱上宏定义
int main33333()
{
 int i =0;
 char a[n][m];//定义一个2维数组对字符串进行储存
 char* b[n];//使用指针数组方便对字符串的排序
 void sort(char *p[m],int k);//定义一个以指针数组维参数的函数
 printf("输入字符串:");
 for (i = 0;i < n;i++)
 {
  //printf("输入第%d个字符串:\n",i+1);
  scanf("%s",*(a+i));//对多个字符串的输入
  b[i] = *(a+i);//建立字符串与字符数组的联系
 }
 sort(b,n);
 for (i = 0;i < n;i++)
 {
  printf("%s ", b[i]);
 }
 return 0;
}
void sort(char *p[n],int k)
{
 int i, j;
 char* temp;//定以以个空指针方便交换0
 for (i = 0;i <= k - 1;i++)//使用冒泡排序法进行排序
 {
  for (j = 0;j < k - 1 - i;j++)
  {
   if (strcmp(p[j], p [j + 1]) < 0)//注意函数里面的参数的是字符串的地址
   {
    temp = p[j];
    p[j] = p[j + 1];
    p[j + 1] = temp;
   }
  }
 }
}

解决问题的思路:

1.首先本题要求的时将多个字符串,进行排序的问题,那么我们要解决的问题有那些呢?
首先时多个字符串的输入,储存问题,好,我们怎样解决这个问题呢?
首先时字符串的储存,我们肯定是要使用2维数组了,因为2维数组其实相当于多个一位数组,每个一维数组游客一储存一个字符串
这样问题就解决了,可有的同学会问,我直接用指针数组不可以吗?首先这里谈谈指针数组的本质,是储存地址的数组,它储存的字符串的地址,char *p[]={"","",""};这种写法是没有任何问题的,这里相当于定义了几个字符串,然后将各个字符串的地址,放到数组里面,可你没法现这种写法的缺点吗?太古板,也就是说这种写法只适用于某几个固定的单词,可如果我是要不断进行不同的字符串的怎麽板?这就是我们要设立2维数组的原因,我们可以像将字符串放到2维数组里面,在将2维数组与指针数组联系起来,这时候有的同学可能会在次法出疑问,哪我要这个指针数组干吗呀?我直接用2维数组不就行了吗?的确,用2维数组是可以解决问题,可你想想完全使用2维数组的话,在对字符串进行排序阶段,会不会十分繁杂,你要设立一个足够成的空数组,然后还要不断使用strcpy函数,你觉得这样好吗?所与要使用指针数组建立于2维数组之间的联系,在需要进行排序的地方我们就不许要改变2维数组,我们只需要改变,指针数组的指向即可好,以上便是解决本题的大概思路,下面再谈谈一些细节,例如如何将多个字符串输入2维数组中,还有如何建立2维数组与指针数组之间的联系首现是将多个字符串的输入,其实2维数组也只不过是一位数组的延申,一维数组是如何输入的?scanf("%s",a);其中a是什么?一维数组的地址,理解了上面,哪就好办了,在2维数组中每个一位数组的地址有是什麽?答案是a[i];讲到这里我相信你应该懂了其次,便是将2维数组与指针数组建立联系了,上面也所了,指针数组就是多个指针,指针是用来储存地址的,这不及完事了,我将字符串的地址放进指针数组中,哪麽联系不就有了吗?好了最后将一下,很多字符串中的参数都是地址,这点我希望大家能注意到;这边是我做本题是的一些思路,只是为了方便本人以后复习,不喜欢看的可以 略过;

总结

通过本题因该理解:如何建立2维数组与指针数组的问题,如何通过改变指针的指向,改变字符串的输出顺序,指针数组的本质等问题

你可能感兴趣的:(c语言练习题,c语言)