作业帮 > 综合 > 作业

C语言数字排序#include void sort3(double *x,double *y,double *z);in

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/26 22:09:16
C语言数字排序
#include
void sort3(double *x,double *y,double *z);
int main(int argc,char *argv[]){
\x05double x,y,z;
\x05if(scanf("%lf %lf %lf",&x,&y,&z)==3){
\x05\x05sort3(&x,&y,&z);
\x05\x05printf("%lf\n%lf\n%lf\n",x,y,z);
\x05}else{
\x05\x05fprintf(stderr,"Error:Incorrect format\n");
\x05}
\x05return 0;
}
void sort3(double *x,double *y,double *z){
\x05double *t;
\x05double a,b,c;
\x05if(*x>*y)
\x05{t=x;x=y;y=t;}
\x05if(*x>*z)
\x05{t=x;x=z;z=t;}
\x05if(*y>*z)
\x05{t=y;y=z;z=t;}
\x05printf("sorted numbers:\n");
\x05printf("%f %f %f\n",*x,*y,*z);
\x05a=*x;b=*y;c=*z;
\x05printf("%f %f %f\n",a,b,c);
\x05x=&a;y=&b;z=&c;
\x05printf("%f %f %f\n",x,y,z);
}
输入三个数字,然后从小到大排列(保留小数点后六位)
其中main函数为题目要求,不能变动,然后在sort3函数中全部的printf命令都是为了测试,原题只有在main函数里才有输出命令.
sort3的三条输出命令分别为:
*x*y*z能够正常显示,即正确排序;
abc能够正常显示,数字为排序后的xyz;
xyz虽然能够正常排序,但放在第一个的x永远显示0.000000,如果将这条命令改成三条(每条显示一个字母),那么三行都是1.000000
最后一点,在main中的输出命令和输入命令一样,请问这是为什么.
例:输入3.2 1.0 1.2
那么以此输出结果为:
1.000000 1.200000 3.200000(sort3的第一条)
1.000000 1.200000 3.200000(sort3的第二条)
0.000000 1.200000 3.200000(sort3的第三条)
3.200000 1.000000 1.200000(main)
在main之前的void也是原题要求的,所以能改的只有main下面的那个void sort3{}
输入scanf是用的变量地址 &x &y &z
输出时,是用的变量x,y,z
所以sort3要改变这3个变量地址(指针)指向的值
#include
void sort3(double *x,double *y,double *z);
int main(int argc,char *argv[]){
\x05double x,y,z;
\x05if(scanf("%lf %lf %lf",&x,&y,&z)==3){
\x05\x05sort3(&x,&y,&z);
\x05\x05printf("%lf\n%lf\n%lf\n",x,y,z);
\x05}else{
\x05\x05fprintf(stderr,"Error:Incorrect format\n");
\x05}
\x05return 0;
}
void sort3(double *x,double *y,double *z){
\x05double a = *x,b = *y,c = *z;
\x05printf("a:%f b:%f c:%f\n",a,b,c);//testing
\x05if(*x > *y)
\x05{
\x05\x05a = *y;
\x05\x05b = *x;
\x05}
\x05if(c < a)
\x05{
\x05\x05*x = c;
\x05\x05*y = a;
\x05\x05*z = b;
\x05}
\x05else if(c < b)
\x05{
\x05\x05*x = a;
\x05\x05*y = c;
\x05\x05*z = b;
\x05}
\x05else
\x05{
\x05\x05*x = a;
\x05\x05*y = b;
\x05\x05*z = c;
\x05}
\x05printf("sorted numbers:\n");//testing
\x05printf("%f %f %f\n",*x,*y,*z);//testing
}