用指针方法实现将三个数由小到大顺序输出

nothingiknow 2007-12-16 12:14:38
我自己写的程序如下:
void swap(int *p1,int *p2)
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}


void exchange(int *p1,int *p2,int *p3)
{if(*p1>*p2) swap(p1,p2);
if(*p1>*p3) swap(p1,p2);
if(*p2>*p3) swap(p1,p2);
}


main()
{
int a,b,c;
int *p1,*p2,*p3;
scanf("%d,%d,%d\n",&a,&b,&c);/*为什么有\n当输入数据回车后没有反应,只有用方向键向上的键再输入一次才有正确结果输出?如果没有\n就 不会出现这种情况,直接有正确的输出!*/

p1=&a;
p2=&b;
p3=&c;
exchange(p1,p2,p3);

printf("\n%d,%d,%d\n",a,b,c);

}


...全文
594 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
_0筱筱0_ 2007-12-16
  • 打赏
  • 举报
回复
没必要这么麻烦吧。。。 可以直接定义第一个指针转向的 地址为最大数。。 然后依次比较
不过我习惯用数组跟指针的配合。。。。 我也是新手 下面是我自己写的 已经运行过的
#include <stdio.h>
void main()
{
int a[3],i,temp=0;
int *p;
p=a;
printf("请输入三个数字:");
for(i=0;i<3;i++)
{
scanf("%d",a[i]);
}
for(i=1;i<3;i++)
{
if(*(p+i-1)>*(p+i))
{
temp=*(p+i-1);
*(p+i-1)=*(p+i);
*(p+i)=temp;
}
}
printf("排序后数字的顺序为:");
for(i=0;i<3;i++)
{
printf("%d ",a[i]);
}
}
p0303230 2007-12-16
  • 打赏
  • 举报
回复
最后一个把\n也读都c里了吧
lockhall 2007-12-16
  • 打赏
  • 举报
回复
if(*p1> *p2) swap(p1,p2);
if(*p1> *p3) swap(p1,p2);
if(*p2> *p3) swap(p1,p2);

你这个是怎么写的?

应该是
if(*p1> *p2) swap(p1,p2);
if(*p1> *p3) swap(p1,p3);
if(*p2> *p3) swap(p2,p3);
吧?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧