|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:从键盘上输入3个数,按从大到小的顺序进行排列。
我编的代码如下:
- #include <stdio.h>
- void main()
- {
- printf("please input 3 numbers:");
- int a,b,c;
- scanf("%d%d%d",&a,&b,&c);
- extern int *max,*mid,*min;//定义指针
- int compare(int *x,int *y,int *z);//声明比较函数
- max=&a;//指针赋值
- mid=&b;
- min=&c;
- compare(max,mid,min);//传递实参
- printf("%d>%d>%d\n",*max,*mid,*min);
- }
- int compare(int *x,int *y,int *z)//定义比较函数
- {
- int *p;
- if(*max<*min)
- {
- p=max;
- max=min;//a和c比较,max为大数的地址,min为小数地址
- min=p;
- }
-
- if(*max<*mid)
- {
- p=max;
- max=mid;//大数和b比较,max为大数的地址,mid为小数地址
- mid=p;
- }
- if(*mid<*min)
- {
- p=mid;
- mid=min;
- min=p;
- } //两个小数比较,mid为次大数的地址,min为小数地址
- return (max,mid,min);//返回三个地址
- }
复制代码
结果报了一堆错。自己怎么也找不到错在哪里了。
求指点
你的代码中要注意几点
1,基本解释: extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
2,函数中的 int *p; 你清楚的知道 指针永远都只能指向一个值,而不可能保存一个值,指针里面保存的仅仅是一个地址。
3,return (max,mid,min);//返回三个地址 ,这里,既然传的是指针到函数内,那么就不存在还用返回值的说法。函数内进行交换的是3个指针指向的值,指针本身的地址是没有改变,所以在主函数直接输出3个指针指向的值即可
- #include <stdio.h>
- void compare(int *x,int *y,int *z);//声明比较函数
- void main()
- {
- int a,b,c;
- int *max, *mid, *min;
- printf("please input 3 numbers:");
- scanf("%d %d %d",&a,&b,&c);
-
- max=&a;//指针赋值
- mid=&b;
- min=&c;
- compare(max,mid,min);//传递实参
- printf("%d>%d>%d\n",*max,*mid,*min);
- }
- void compare(int *x,int *y,int *z)//定义比较函数
- {
- int p;
- if(*x<*y)
- {
- p=*y;
- *y=*x;
- *x=p;
- }
-
- if(*x<*z)
- {
- p=*x;
- *x=*z;
- *z=p;
- }
- if(*y<*z)
- {
- p=*y;
- *y=*z;
- *z=p;
- }
- }
复制代码
|
|