C语言不是很懂,急切请教该题选什么?求详细步骤

#include<stdio.h>
#include<string.h>
main()
{ chara[5][10]={“china”,”beijing”,”you”,”tiananmen”,”welcome”};
int i,j; char t[10];
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(a[i],a[j])>0)
{ strcpy(t,a[i]); strcpy(a[i],a[j]); strcpy(a[i],t);}
puts(a[3]);
}程序运行后的输出结果是 ( )
A.beijing B.china C.welcome D.tiananmen

该程序就是一个字符串的交换排序,但是程序本身存在问题,而没有实现排序,

puts(a[3]的内容还是tiananmen,答案是D

 

运行结果:

 

 

具体错误程序为:

{ strcpy(t,a[i]);  strcpy(a[i],a[j]);  strcpy(a[i],t);}应该修改为{ strcpy(t,a[i]);  strcpy(a[i],a[j]);  strcpy(a[j],t);}

 

正确的排序程序为

#include<stdio.h>

#include<string.h>

main()

 char a[5][10]={"china", "beijing", "you", "tiananmen", "welcome"};

 int i,j; 

 char t[10];

 for(i=0;i<4;i++) 

  for(j=i+1;j<5;j++)   

   if(strcmp(a[i],a[j])>0)   

   { 

    strcpy(t,a[i]); 

    strcpy(a[i],a[j]); 

    strcpy(a[j],t);

   } 

         puts(a[3]);

}

 


温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-25
#include<stdio.h>
#include<string.h>
main(){
char a[5][10]={"china","beijing","you","tiananmen","welcome"};
int i,j;
char t[10];
for(i=0;i<4;i++)
for(j=i+1;j<5;j++)
if(strcmp(a[i],a[j])>0)//strcmp是比较函数
{ strcpy(t,a[i]);//strcpy是复制函数
strcpy(a[i],a[j]);
strcpy(a[i],t);//你这里没变化啊答案是D,如果strcpy(a[j],t) 答案是C
}
puts(a[3]);//输出字符串
}
/* 1.strcyp(字符数组1,字符数组2或字符串); 功能:将字符数组2(字符串)复制到字符数组1中去。函数值为字符数组1的起始地址。
调用strcmp()函数实现字符串的大小比较,其调用形式为: 2.strcmp(字符数组1或字符串1,字符数组2或字符串2); 功能:将两个字符数组(字符串)自左向右对应的字符逐个进行比较(按ASCII码值大小比较),直到出现不同字符或遇到’\0’字符为止,函数值为一个整型数。
字符串1等于字符串2 :0
字符串1大于字符串2 :1
首不同字符的ASCII码差值(正整数)
字符串1小于字符串2 :2
首不同字符的ASCII码差值(负整数)*/本回答被提问者采纳
第2个回答  2013-03-25
B项正确。
整个算法的目的是将字符串数组a的元素进行升序排列。
第3个回答  2013-03-25
应该选C,因为本段程序是对整个字符数组进行按照从小到大排列,而beijing和welcome字符数量一样,但是转换为ASCⅡ码的时候w更大。所以问题是选择倒数第二长的,选择C
第4个回答  2013-03-25
这个应该是字符串的排序程序,a3是中间靠后一个,不是china就是welcome
应该是升序排列,那么就是welcome
相似回答