一道C语言程序题,在线等答案!

题目:输入四个字符串,使用指向指针的指针将这四个船从小到大排列后依次输出。书上给的答案是这样的:#include<stdio.h>#include<string.h>ma... 题目:输入四个字符串,使用指向指针的指针将这四个船从小到大排列后依次输出。
书上给的答案是这样的:
#include <stdio.h>
#include <string.h>
main()
{
char str[4][20];
char *p[4],**pp=p,*temp;
int i,j;
for(i=0;i<4;i++)
{ p[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",p[i]);
}
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
if(strcmp(pp[j],pp[j+1])>0)
{ temp=pp[j];
pp[j]=pp[j+1];
pp[i+1]=temp;
}
for(i=0;i<4;i++)
printf("%s ",pp[i]);
printf("\n");
}
编译运行,输入what is your name,运行结果为is name your name
输入go your own way,运行结果为go own your way
-----------结果显然不对,请问问题出在哪?------------

这是我自己用指向数组的指针写的程序:
#include <stdio.h>
#include <string.h>
main()
{ char str[4][20];/*必须先定义一个确定的数组*/
char *a[4],*temp;
int i,j;
for(i=0;i<4;i++)
{ a[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",a[i]);
}
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
if(strcmp(a[j],a[j+1])>0)
{ temp=a[j];a[j]=a[j+1];a[j+1]=temp;
}
for(i=0;i<4;i++)
printf("%s ",a[i]);
printf("\n");
}
输入what is your name,结果为is name what your;
输入go your own way,运行结果为go own way your.
谢谢你的回答,我知道自己是对的,但我用的是一级指针。书上给的程序错在哪,应该怎样改?
展开
 我来答
伊人结果难u
2008-07-30 · TA获得超过1899个赞
知道大有可为答主
回答量:2501
采纳率:0%
帮助的人:2228万
展开全部
你自己的是对的啊.
要对自己有信心.
#include <stdio.h>
#include <string.h>
main()
{
char str[4][20];
char *p[4],**pp=p,*temp;
int i,j;
for(i=0;i<4;i++)
{ p[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",p[i]);
}

for(i=0;i<3;i++)
for(j=i+1;j<4;j++) /*改了这里.*/
if(strcmp(pp[i],pp[j])>0)
{ temp=pp[i];
pp[i]=pp[j]; /*改了这里.*/
pp[j]=temp;
}
for(i=0;i<4;i++)
printf("%s ",pp[i]);
printf("\n");

getch();
return;
}

己经验证过了,正确
百度网友d1f0069
2008-07-30 · TA获得超过181个赞
知道小有建树答主
回答量:298
采纳率:0%
帮助的人:165万
展开全部
我知道了。。。
#include <stdio.h>
#include <string.h>
main()
{
char str[4][20];
char *p[4],**pp=p,*temp;
int i,j;
for(i=0;i<4;i++)
{ p[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",p[i]);
}
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
if(strcmp(pp[j],pp[j+1])>0)
{ temp=pp[j];
pp[j]=pp[j+1];
pp[j+1]=temp;
}
for(i=0;i<4;i++)
printf("%s ",pp[i]);
printf("\n");
}

temp=pp[j];
pp[j]=pp[j+1];
pp[j+1]=temp;
你看一下。你这个哪里错了。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
星光熠熠的平等村DC
2008-07-30 · TA获得超过101个赞
知道答主
回答量:83
采纳率:0%
帮助的人:46.7万
展开全部
if(strcmp(pp[j],pp[j+1])>0)
{ temp=pp[j];
pp[j]=pp[j+1];
pp[i+1]=temp; //改成pp[j+1]=temp;
}
书上的印刷错误,以后有这样的问题看看大小写,标点符号,相似字母什么的就行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wozuiruhe
2008-07-30 · TA获得超过229个赞
知道答主
回答量:213
采纳率:0%
帮助的人:0
展开全部
//书上用的是冒泡排序法,有一处将j写成了i,因此报错,改成下面这样就行了
#include <stdio.h>
#include <string.h>
main()
{
char str[4][20];
char *p[4],**pp=p,*temp;
int i,j;
for(i=0;i<4;i++)
{
p[i]=str[i];
printf("Input the NO.%d string:",i+1);
scanf("%s",p[i]);
}
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
if(strcmp(pp[j],pp[j+1])>0)
{ temp=pp[j];
pp[j]=pp[j+1];
pp[j+1]=temp; //修改了这一行
}
for(i=0;i<4;i++)
printf("%s ",pp[i]);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式