c语言书上的一道编程题,输入5个字符串,并按字母顺序排列后输出。程序如下:

c语言书上的一道编程题,输入5个字符串,并按字母顺序排列后输出。程序如下:
#include "stdio.h"
#include "string.h"
main()
{
char *str[]={"BEIJING","SHANGHAI","TIANJIN","CHONGQING","XIANGGANG"};
char *p;
int i,j,k;
for(i=0;j<5;i++)
{
k=i;
for(j=i+1;j<5;j++)
if(strcmp(str[k],str[j])>0)
k=j;
if(k!=i)
{
p=str[i];
str[i]=str[k];
str[k]=p;
}
}
for(i=0;i<5;i++) printf("%s\n",str[i]);
}
为什么我得到的答案不正确?答案应该是:BEIJING CHONGQING SHANGHAI TIANJIN XINANGGANG 程序得到的答案却是:BEIJING SHANGHAI TIANJING CHONGQING XIANGGANG 请高手帮我看看。谢谢!

for(i=0;j<5;i++)
{
k=i;
for(j=i+1;j<5;j++)

第一个for循环 for(i=0;j<5;i++),改成 for(i=0;i<5;i++)就没问题了
应该是书排版错误,如果是for(i=0;j<5;i++),下面的循环里面j已经等于5了,这个循环只执行了一次,相应的排序也只做了一次,设计肯定不是这样的,因此断定是排版错误,你自己分析分析
温馨提示:内容为网友见解,仅供参考
无其他回答

c语言书上的一道编程题,输入5个字符串,并按字母顺序排列后输出...
k=i;for(j=i+1;j<5;j++)第一个for循环 for(i=0;j<5;i++),改成 for(i=0;i<5;i++)就没问题了 应该是书排版错误,如果是for(i=0;j<5;i++),下面的循环里面j已经等于5了,这个循环只执行了一次,相应的排序也只做了一次,设计肯定不是这样的,因此断定是排版错误,你自己分析...

一道c语言程序题: 输入5个字符串,按字典顺序将其重新排列输出。用字符串...
include<string.h> void main(){ void sort(char (*p)[20]);char a[5][20];\/\/五行20列 int i;printf("请输入5个字符串:\\n");for(i=0;i<5;i++)\/\/这里输入五个字符串 gets(a[i]);sort(a);\/\/调用函数进行排列 } void sort(char (*p)[20]){ char a[20];int i,j;for(...

C语言程序题 从键盘接收5个字符串,然后按字典顺序排序后输出 程序如 ...
int i, j;for (i = 0; i < 5; i++){ gets(strl[i]); \/\/从键盘上接收多个字符串 str[i] = strl[i]; \/\/让指针数组中的字符串指针指向输入的串 } for (i = 0; i < 4; i++)for (j = i + 1; j < 5; j++){ if (strcmp(str[i], str[j]) > 0){ temp = st...

用C语言 任意输入五个国家名字再以首字母为序输出?怎么写?
1 用二维字符数组存储每个名字,每行一个;2 输入五个字符串,即五个国家名字;3 排序,注意用strcmp比较,用strcpy赋值交换;4 输出结果。代码如下:int main(){ char s[5][100],t[100]; int i,j; for(i = 0; i < 5; i ++) scanf("%s",s[i]); for(i = 0; ...

输入五个名字按照字母首位顺序输出C语言
这是一个字符串排序问题。思路,定义五个char*的变量,然后使用getchars()函数获取这五个名字,排序算法有冒泡排序、插入排序等多种方式,你如果不熟可以使用冒泡排序的算法,把这五个字符串排序,然后再输出。比较字符串时,需要先比较首字符,如果首字符一样,则通过指针后移比较。for(char* p=?,...

C语言:输入5个字符串,按由小到大(我想应该是strcmp函数比较)的顺序输 ...
include<string.h> define M 5 define N 20 void main(){ char str[M][N],temp[N];int i,j;for(i=0;i<M;i++){ printf("请输入第%d个字符串:",i+1);scanf("%s",&str[i]);} printf("排序前:\\n");for(i=0;i<M;i++)printf("第%d个字符串:%s\\n",i+1,str[i]);f...

输入五个字符串,要求按照字母顺序(即按ASCII码从小到大的顺序)输出这五...
include<string.h> define N 5 void main(){ int i,j;char str[N][80],temp[80];printf("请输入%d个字符串:\\n",N);for(i=0;i<N;i++){ gets(str[i]);} for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(strcmp(str[i],str[j])>0){ strcpy(temp,str[i]);strcpy(...

程序改错题 输入 5 个字符串,按字典序输出。
h>#include<stdlib.h>#include<string.h>define N 15\/\/每个字符串最多15个字符void main(){char str[5][N];char temp[N];int i=5;\/\/接受5个字符串 printf("请输入5个字符串");while(i>0){gets(str[i]);i--;}\/\/排序int j,k;for( j=0;j<5;j++) for( k=j+1;k<5;...

C++编程 输入5个字符串,按英文字典排序,由小到大顺序输出。 求大神帮我...
\/\/输入字符串}\/* 思想: * 1.从当前字符串开始,与之后的所有字符串比较,找到最小(即按字母表 * 应该是最靠前的)的字符串即为排在最前面的字符串,则最小字符串与 * 当前字符串换位; * 2.从下一个字符串开始继续上一步操作,直到只有一个字符串剩余为止, * (只有一个字符串...

任意输入5个字符串,按升序排序后输出
using namespace std;int main(){ char *str[5], p[100];int i, j, k;for (int i = 0; i <= 4; i++)\/\/输入5行字符串 { cout << "String" << i + 1 << ":";str[i] = new char[100];cin.getline(str[i], 100);} for (i = 0; i<5; i++){ k = i;for...

相似回答