新手提问c语言问题

[复制链接]
查看11 | 回复2 | 2011-5-18 11:22:47 | 显示全部楼层 |阅读模式
用指针编写C语言程序输入三个数按从大到小的顺序输出。
#includestdio.h
voidmain()
{inta[3],*p=a;
inti,j,temp;
printf(\"请输入三个数:”);
for(i=0;i2;i)
scanf(\"%d\"
for(i=0;i2;i)
for(j=0;j2;j)
if(*p*(p1))
{temp=*p;*p=*(p1);*(p1)=temp;}
for(i=0;i3;i)
printf(\"%d\\n\",p);/*这里为什么用成p不对呢,用成*p;*p都没成功*/
}
这个程序错在哪里了好多地方都不理解啊如果i表示趟数,j表示的比较的次数,那么a数组里边的i又怎么说呢对好多程序中的ij所代表的什么不清楚
回复

使用道具 举报

千问 | 2011-5-18 11:22:47 | 显示全部楼层
已经调试运行过了,两种方法希望对你有用哦!
#includestdio.h
voidmain()
{
inta[3];
int*p=a;
inti,j,temp;
printf(\"请输入三个数:\");
for(i=0;i=2;i)
{
scanf(\"%d\",
}       
for(i=0;i2;i)
for(j=0;j2-i;j)
{
if(*(pj)*(pj1))
{
temp=*(pj);
*(pj)=*(pj1);
*(pj1)=temp;
}
}
for(i=0;i3;i)
printf(\"%d\\n\",*p);
}

对于你的问题,现做如下解释;你的循环无论怎么做都只会比较第一个数和第二个数的值,因为p始终等于a,即本想让p随着循环变化,后来无法实现;自然比较不出来咯!
如果只是单纯在if的语句中添加p的话,最后p的最终指向的地址将是不确定的,所以只有让p不变化,让(pj)的值变化,即如上面代码所示,这样就解决了;
另外对于你那个为什么*p不行,因为p始终指向a,所以不行;*p和a都可以哦!


下面提供另外一种定义方法:会很好的解决指针指向问题的!
#includestdio.h
voidmain()
{
ints[3];
int*p[3];
int*t;
inti,j;
for(i=0;i3;i)
{
printf(\"请输入第%d个数:\",i1);
scanf(\"%d\",
p=
}
for(i=0;i3;i)
{
for(j=0;j3-i;j)
{
if(*p[j]*p[j1])
{
t=p[j];
p[j]=p[j1];
p[j1]=t;
}
}
}
printf(\"排序后的从小到大三个数为:\\n\");
for(i=0;i3;i){
printf(\"%d\",*p);
}
}
希望会对你有所帮助,还有就是敲代码注意格式哦,呵呵
回复

使用道具 举报

千问 | 2011-5-18 11:22:47 | 显示全部楼层
输入进去也没按要求做啊不是从大到小排列的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行