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

学习 时间:2026-03-30 15:12:10 阅读:6272
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{}

最佳回答

冷傲的保温杯

鳗鱼小蝴蝶

2026-03-30 15:12:10

输入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}

最新回答共有2条回答

  • 炙热的心锁
    回复
    2026-03-30 15:12:10

    输入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}

上一篇 挖一条长1000千米的水渠,第一周挖了5分之一,第二周挖了5分之一千米.两周共挖多少千米.

下一篇 如何鉴别碳酸钠,碳酸氢钠,碳酸钙