输入3个数a,b,c,按大小顺序输出。 利用指针方法。
int swap(int x,int y);
main()
{
int a,b,c;
int *p1,*p2,*p3;
printf("请输入3个数,本程序将从小到大排列");
scanf("%d%d%d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
if(a>b)
swap(p1,p2);
if(a>c)
swap(p1,p3);
if(b>c)
swap(p2,p3);
printf("%d%d%d",a,b,c);
return 0;
}
int swap(int x,int y)
{
int *x,*y;
int p;
p=*x;
*x=*y;
*y=p;
}
请问哈我这个哪里错了啊~~谢谢!!! 展开
方法一、(利用指针法)
#include<stdio.h>
void sort(int*x,int*y,int*z);
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
sort(&a,&b,&c);
printf("%d%d%d\n",a,b,c);
return 0;
}
void sort(int*x,int*y,int*z)
{
int*n[3],i,j,t;
n[0]=x,n[1]=y,n[2]=z;
for(i=0;i<3;i++)
for(j=i+1;j<3;*n<i><*n[j]?t=*n<i>,*n<i>=*n[j],*n[j++]=t:j++);
}
方法二、(利用函数的模块化设计)
#include<stdio.h>
void input(int n[],int c);//定义输入函数
void print(int n[],int c);//定义输出函数
void btos(int v[],int c);//定义排序函数
int main()
{
int num[3];
input(num,3);
btos(num,3);
print(num,3);
return 0;
}
//输入函数
void input(int n[],int c)
{
int i;
for(i=0;i<c;i++)
scanf("%d",&n<i>);
}
//输出函数
void print(int n[],int c)
{
int i;
for(i=0;i<c;i++)
printf("%d",n<i>);
printf("\n");
}
//排序函数(起泡法)
void btos(int v[],int c)
{
int i,j,temp;
for(i=0;i<c;i++)
for(j=i+1;j<c;j++)
if(v<i><v[j]){
temp=v<i>;
v<i>=v[j];
v[j]=temp;
}
}
方法三、(利用起泡法)
#include<stdio.h>
int main()
{
int v[4],i,j,temp;
for(i=0;i<3;i++)//输入3个数
scanf("%d",&v<i>);
//起泡法排序
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(v[j]<v[j+1]){
temp=v[j];
v[j]=v[j+1];
v[j+1]=temp;
}
for(i=0;i<3;i++)//输出排序顺序
printf("%d",v<i>);
printf("\n");
return 0;
}
方法四、(利用比较法选择结构)
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);//输入3个数
//3个数进行排序并输出
if(a>b)
if(a>c)
if(b>c)
printf("%d%d%d\n",a,b,c);
else
printf("%d%d%d\n",a,c,b);
else
printf("%d%d%d\n",c,a,b);
else
if(b>c)
if(a>c)
printf("%d%d%d\n",b,a,c);
else
printf("%d%d%d\n",b,c,a);
else
printf("%d%d%d\n",c,b,a);
return 0;
}
2012-05-03
应改为:
void swap(int * x, int * y)
{
int p;
p = *x;
*x = *y;
*y = p;
}
其次,swap()函数中,两指针交换地址是借助int p;p=*x; *x=*y; *y=p;
三是,scanf()里三个参数输入时,最好有空格,以方便输入;
完整代码如下;
#include "stdio.h"
void swap(int *,int *);
main()
{
int a,b,c;
int *p1,*p2,*p3;
printf("请输入3个数,本程序将从小到大排列:");
scanf("%d %d %d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
if(a>b)
swap(p1,p2);
if(a>c)
swap(p1,p3);
if(b>c)
swap(p2,p3);
printf("%d %d %d\n",a,b,c);
return 0;
}
void swap(int *x,int *y)
{
int p;
p=*x;
*x=*y;
*y=p;
}
int swap(int x,int y)
//这儿的参数已经用了x ,y下面再不能申请相同的变量了,而且参数应该是指针
{
int *x,*y;
int p;
p=*x;
*x=*y;
*y=p;
}
改为:
int swap(int *x,int *y)
{
int p;
p=*x;
*x=*y;
*y=p;
}
而且建议楼主改一下scanf()函数, 你的是scanf("%d%d%d",&a,&b,&c);
这样输入无法判断什么时候一个数输入结束,你可以用逗号或空格作分隔符,比如:
scanf("%d,%d,%d",&a,&b,&c);
参数写的是整形
用指针应该这样写
void swap(int *x,int *y)
{
int *tmp = x;
x = y;
y = tmp;
}