改错题 1.  下列给定程序中函数fun()的功能是:把从主函数中输入的3个数,最大的数放在a中,中间的数放在b中,最小的数放在c中。
    例如,若输入的数为“55,12,34”,输出的结果应当是“a=55.0,b= 34.0,c=12.0”。
    请改正程序中的错误,使它能得出正确的结果。
    注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
    试题程序:
    #include<stdio.h>
    void fun(float *a,float *b,float *c)
    {
    //****found****
    float *k;
    if(*a<*b)
    {
    k=*a;
    *a=*b;
    *b=k;
    }
    //****found****
    if(*a>*c)
    {
    k=*c;
    *c=*a;
    *a=k;
    }
    if(*b<*c)
    {
    k=*b;
    *b=*c;
    *c=k;
    }
    }
    void main ()
    {
    float a,b,c;
    printf("Input a b c:");
    scanf("%f%f%f",&a,&b,&c);
    printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
    fun(&a,&b,&c);
    printf("a=%4.1f,b=%4.1f,c=%4.1f\n\n",a,b,c);
    }
【正确答案】(1)错误:float *k;
   正确:float k;
   (2)错误:if(*a>*c)
   正确:if(*a<*c)
【答案解析】 变量定义首先要判断变量的类型,给定程序的赋值语句中,k是以变量形式进行赋值的,所以k不是指针,将其定义为指针是不正确的;由给出程序可以看出,if语句是为了将小于*c的值放入*c中,所以应该改为“if(*a<*c)”。