加拿大蒙特利尔高中:C语言的问题.随意输入五个数用指数和函数调用.结果是从大到小排列/

来源:百度文库 编辑:神马品牌网 时间:2024/04/27 18:31:20
我写的是这样.但我不明错的意思.各位可不可以帮我看看,如果觉得我写得不好,就写个被我参考,行吗?谢谢!
swap(int*pt1,int*pt2,int*pt3,int*pt4,int*pt5)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=*pt3;
*pt3=*pt4;
*pt4=*pt5;
*pt5=*temp;
}
exchange(int*q1,int*q2,int*q3,int*q4,int*q5)
{
if(*q1<*q2) swap(q1,q2);
if(*q2<*q3) swap(q2,q3);
if(*q3<*q4) swap(q3,q4);
if(*q4<*q5) swap(q4,q5);
}
main()
{
int a,b,c,d,e,*p1,*p2,*p3,*p4,*p5;
scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e);
p1=&a;p2=&b;p3=&c;p4=&d;p5=&e;
exchange(p1,p2,p3,p4,p5);
printf("\n%d,%d,%d,%d,%d\n",a,b,c,d,e);
}

看来你还没真正明白“函数”!
swap(int*pt1,int*pt2,int*pt3,int*pt4,int*pt5)
你定义的交换函数swap的参数5个!
而在exchange中调用时,“swap(q1,q2);”都是2个实际参!!
================================================
函数exchange中没有考虑完所有的情况!
====================================
这样改下就可以了:
#include <stdio.h>
swap(int *pt1,int *pt2)
{int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
exchange(int *q1,int *q2,int *q3,int *q4,int *q5)
{if(*q1<*q2) swap(q1,q2);
if(*q1<*q3) swap(q1,q3);
if(*q1<*q4) swap(q1,q4);
if(*q1<*q5) swap(q1,q5);
if(*q2<*q3) swap(q2,q3);
if(*q2<*q4) swap(q2,q4);
if(*q2<*q5) swap(q2,q5);
if(*q3<*q4) swap(q3,q4);
if(*q3<*q5) swap(q3,q5);
if(*q4<*q5) swap(q4,q5);
}
main()
{int a,b,c,d,e;
printf("Inputa,b,c,d,e:") ;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
exchange(&a,&b,&c,&d,&e);
printf("\n%d,%d,%d,%d,%d\n",a,b,c,d,e);
getch();
}
当然这样做exchange函数会太麻烦,我是针对的做法提出的修改而已。

错误1
swap是两个数交换
只应该带两个参数。。
你的程序是什么意思。。。
错误2
一个exchange只是一次排序
所以我定义了一个N,为要排序的数组的个数
index为排了几次
修改了 一下
你看看吧

// zd_65.cpp : Defines the entry point for the console application.
//

/*swap(int*pt1,int*pt2,int*pt3,int*pt4,int*pt5)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=*pt3;
*pt3=*pt4;
*pt4=*pt5;
*pt5=*temp;
} */
#define N 5;
int index=0;
swap(int *pt1,int *pt2)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
exchange(int*q1,int*q2,int*q3,int*q4,int*q5)
{
if(*q1<*q2) swap(q1,q2);
if(*q2<*q3) swap(q2,q3);
if(*q3<*q4) swap(q3,q4);
if(*q4<*q5) swap(q4,q5);
index++;
if(index<N)
exchange(q1,q2,q3,q4,q5);
}
main()
{
int a,b,c,d,e,*p1,*p2,*p3,*p4,*p5;
scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e);
p1=&a;p2=&b;p3=&c;p4=&d;p5=&e;
exchange(p1,p2,p3,p4,p5);
printf("\n%d,%d,%d,%d,%d\n",a,b,c,d,e);
}

运行结果:

5,6,4,7,8

8,7,6,5,4
Press any key to continue

你的函数调用错了。你在定义swap函数时,有五个参数,调用时却只有两个参数,而且你还误以为在调用该函数时只给它两个参数,它就交换那两个参数。你只要把swap函数改一下就好了。
swap(int*pt1,int*pt2)
{
int temp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}

好乱啊