输入五个国家的名称按字母顺序排列输出

      本题编程思路如下:五个国家名应由一个二维字符数组来处理。然而C语言规定可以把一个二维数组当成多个一维数组处理。 因此本题又可以按五个一维数组处理, 而每一个一维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序, 输出结果即可。  

编程如下:
void main()
{
  char st[20],cs[5][20];
  int i,j,p;
  printf("input country's name:\n");
  for(i=0;i<5;i++)
   gets(cs);
 
printf("\n");
  for(i=0;i<5;i++)
  {
   p=i;strcpy(st,cs);
   for(j=i+1;j<5;j++)
    if(strcmp(cs[j],st)<0) {p=j;strcpy(st,cs[j]);}
    if(p!=i)
    {
     strcpy(st,cs);
     strcpy(cs,cs[p]);
     strcpy(cs[p],st);
    }
    puts(cs);}printf("\n");
  }
  for(i=0;i<5;i++)
  {
   p=i;strcpy(st,cs);
   for(j=i+1;j<5;j++)
   if(strcmp(cs[j],st)<0) { p=j;strcpy(st,cs[j]);}
   if(p!=i)
   {
    strcpy(st,cs);
    strcpy(cs,cs[p]);
    strcpy(cs[p],st);
   }
  } 

  本程序的第一个for语句中,用gets函数输入五个国家名字符串。上面说过C语言允许把一个二维数组按多个一维数组处理, 本程序说明cs[5][20]为二维字符数组,可分为五个一维数组cs[0],cs[1],cs[2],cs[3],cs[4]。因此在gets函数中使用cs是合法的。 在第二个for语句中又嵌套了一个for语句组成双重循环。 这个双重循环完成按字母顺序排序的工作。在外层循环中把字符数组cs中的国名字符串拷贝到数组st中,并把下标i赋予P。 进入内层循环后,把st与cs以后的各字符串作比较,若有比st小者则把该字符串拷贝到st中,并把其下标赋予p。内循环完成后如p不等于 i 说明有比cs更小的字符串出现,因此交换cs和st的内容。 至此已确定了数组cs的第i号元素的排序值。然后输出该字符串。在外循环全部完成之后即完成全部排序和输出。

期待 发表于09-17 14:40 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

期待
期待(总统)
金币:32864个|学分:87182个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号