问答题
给定程序MODI1.C中函数fun的功能是:把主函数中输入的3个数,最大的放在a中,最小的放在c中,中间的放在b中。 例如,输入的数为:55 12 34,输出结果应当是:a=55.0,b=34.0,c=12.0。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。1 #include<stdio.h>2 void fun(float *a,float *b,float * c)3 {4 /**********found**********/5 float *k;6 if(*a<*b)7 { k=*a; *a=*b; *b=k;}8 /**********found**********/9 if(*a>*c)10 { k=*c; *c=*a; *a=k,}11 if(*b<*c)12 { k=*b;*b=*c;*c=k;}13 }14 main()15 { float a,b,c;16 printf(''Input a b c:''); scanf(''%f%f%f'',&a,&b,&c);17 printf(''a=%4.1f,b=%4.1f, c=%4.1f\n\n'',a,b,c);18 fun(&a,&b,&c);19 printf(''a=%4.1f,b=%4.1f, c=%4.1f\n\n'',a,b,c);20 }
【正确答案】正确答案:(1)float k; (2)if(*a<*c)
【答案解析】解析:函数对三个数进行两两比较,实现判断。 (1)第一个标识下的变量k是在比较过程中,临时存放数据的变量,因此k不应是指针,所以将“float*k;”改为“float k;”。 (2)分析函数中第一个if语句,如果主函数中a<b,则对调,把大数放在a中;分析第二个if语句,如果主函数中的a>c,则进行对调,又把大数放在c中,这样的逻辑显然是混乱的。因此第二个标识下“if(*a>*c)”应该改为“if(*a<*c)”。