读书人

哪里错了 求三个数的大小按从小到大

发布时间: 2012-08-16 12:02:16 作者: rapoo

错哪了 求三个数的大小按从小到大输出
#include<stdio.h>
int main()
{
void a(int b,int c);
int *p1,*p2,i,m,n;
scanf("%d %d %d",&i,&m,&n);
a(i,m);
a(m,n);
a(i,n);
printf("%d %d %d\n",i,m,n);
return 0;
}
void a(int b,int c)
{
int *p3;
p1=&b;
p2=&c;
if(b>c)
{
p3=p1;
p1=p2;
p2=p3;
}
}

[解决办法]
p1,p2是main函数的局部变量,按lz的思路,应该将它们定义为全局变量
[解决办法]
#include<stdio.h>
main()
{
void swap(int *x,int *y);
int A,B,C;
printf("please Input three number :");
scanf("%d,%d,%d",&A,&B,&C);
if(A<B)
swap(&A,&B);
if(A<C)
swap(&A,&C);
if(B<C)
swap(&B,&C);
printf("%d,%d,%d\n",A,B,C);
}
void swap(int *pa,int *pb)
{
int temp;
temp=*pa;
*pa=*pb;
*pb=temp;
}

LZ可以看一下这个
[解决办法]
#include<stdio.h>
main()
{
void swap(int *x,int *y);
int A,B,C;
printf("please Input three number :");
scanf("%d,%d,%d",&A,&B,&C);
if(A<B)
swap(&A,&B);
if(A<C)
swap(&A,&C);
if(B<C)
swap(&B,&C);
printf("%d,%d,%d\n",A,B,C);
}
void swap(int *pa,int *pb)
{
int temp;
temp=*pa;
*pa=*pb;
*pb=temp;
}

LZ可以看一下这个
[解决办法]
#include<stdio.h>
int main()
{
void a(int *,int *);
int i,m,n;
scanf("%d %d %d",&i,&m,&n);
a(&i,&m);
a(&m,&n);
a(&i,&n);
printf("%d %d %d\n",i,m,n);
return 0;
}
void a(int *p1,int *p2)
{
int p3;
if(*p2>*p1)
{
p3=*p1;
*p1=*p2;
*p2=p3;
}
}

[解决办法]
在楼主的这个程序中,有以下几处错误:
1. 语法上的错误 *p1,*p2在main函数里定义,在a函数里为声明或定义,不可使用。
2. 逻辑上的错误 a(int b, int c)用于必较并交换两个整型数,这种声明方式,形参得到的是实参的副本,所以a函数不会影响实参的值, 要改变实参的值,可以使用指针。
3. 算法上的错误
a(i,m);
a(m,n);
a(i,n); //此处应该为a(i, m);
每调用一次a函数,结果就是第二个参数比第一个参数要大,所以n为最大数;在调用一次a(i, m)函数,就可确定i,m的大小关系了。
下面是改好的代码,希望可以帮到你。
[code=C/C++]
#include<stdio.h>
int main()
{
void a(int *b, int *c);
int i,m,n;
scanf("%d %d %d",&i,&m,&n);
a(&i,&m);
a(&m,&n);
a(&i,&m);
printf("%d %d %d\n",i,m,n);
return 0;
}
void a(int *b,int *c)
{
int temp;
if(*b > *c)
{
temp = *b;
*b = *c;
*c = temp;
}
}
[code]

读书人网 >C语言

热点推荐