请求大神看看:如图,输出结果红框内为什么不是78.6而是78.000和最后为什么输出980了?

来源:6-12 综合练习

小小贝勒爷

2019-05-05 20:56

https://img3.mukewang.com/5ccedd53000133e914741139.jpg

#include <stdio.h>

int sum_exam(int arr[])

{

    int i,sum;

    sum = 0;

    for(i=0;i<10;i++)

    {

        sum = sum + arr[i]; 

    }

    return sum;

}


int max_exam(int arr[])

{

    int i,max;

    int index;

    max = arr[0];

    for(i=1;i<9;i++)

    {

        if(max < arr[i])

        {

            max = arr[i];

            index = i;

        }

    }

    return arr[index];

}


int min_exam(int arr[])

{

    int i,min,index;

    min = arr[0];

    for(i=0;i<9;i++)

    {

        if(min > arr[i])

        {

            min = arr[i];

            index = i;

        }

    }

    return arr[index];

}


double ave_exam(int arr[])

{

    int i,sum;

    sum = 0;

    for(i=0;i<10;i++)

    {

        sum = sum + arr[i]; 

    }

    return sum/10;

}


int sort_exam(int arr[])

{

    int i,j,temp;

    printf("\n************排序前*************\n");

    for(i=0;i<10;i++)

    {

        if(i != 9)   

            printf("%d, ", arr[i]);

        else

            printf("%d", arr[i]);

    }

    for(i=8;i>=0;i--)

    {

        for(j=0;j<=i;j++)

        {

            if(arr[j]>arr[j+1])

            {

                temp=arr[j+1];

                arr[j+1] = arr[j];

                arr[j] = temp;

            }

        }

    }

    printf("\n************排序后*************\n");

    for(i=0; i<10;i++)

    {

        if(i != 9)

            printf("%d, ",arr[i]);

        else

            printf("%d",arr[i]);

    }

    

    return 0;

}


int main()

{

    int score[]={67,98,75,63,82,79,81,91,66,84};

    printf("%d\n",sum_exam(score));

    printf("%d\n",max_exam(score));

    printf("%d\n",min_exam(score));

    printf("%f\n",ave_exam(score));

    printf("%d\n",sort_exam(score));

    return 0;

}

请求大神看看:如图,输出结果红框内为什么不是78.6而是78.000和最后为什么输出980了?

写回答 关注

3回答

  • 慕标2568847
    2019-05-07 16:03:12
    已采纳

    输出f保留到   小数点后一位用   %.1f   

    否则 会输出本身精度值

    那个哦就是个 返回值会放在C语言编译器约定的位置(比如栈顶或者A寄存器),调用者是不管被调函数的执行情况的,他只会在你函数返回时,去该位置取返回值,你没有放该值,那么就是该位置的当前值了,当前值是啥就很难确定具体是什么了,但一定有。。。你最后的输出就是调用了 需要返回值  其他几个调用都返回了输出值 ,最后一个调用的返回值是存在的 值不确定


    小小贝勒爷

    回复 Majesty_x 78.6解决了 多谢 多谢 但是最后内个多一个0是为什么呢

    2019-05-12 18:36:05

    共 4 条回复 >

  • 慕田峪4256145
    2019-06-25 20:30:05

    你要把sum的类型该成浮点(float)型;

    而且因为你的sum = sum + arr[i](也就是总分这里)所以前面数组也要定义成浮点型才可以。

    最后你的printf的格式也要改成浮点型的,我是用精确两位数来写的%.2f

    然后我觉得你这个程序太麻烦了,你可以参考一下我的;

    #include <stdio.h>

    int main()

    {

    float score[] = { 67,98,75,63,82,79,81,91,66,84 };

    int a = 9;

    int b = 1;

    int c;

    int buf;

    float sum = 0;

    float average_score;

    for (a = 0; a < 10; a++)

    {

    sum = sum + score[a];

    }

    average_score = sum / 10;

    printf("aggregate score:%.2f\n", sum);//总分

    printf("average score:  %.2f\n", average_score);//平均数

    while (b)

    {

    b = 0;

    for(c = 0; c < a; c++)

    {

    if (score[c] < score[c + 1])

    {

             buf = score[c];

             score[c] = score[c + 1];

             score[c + 1] = buf;

             b = 1;

    }

    }

    a--;

    }

    printf("highest score:  %.2f\n", score[0]);//最高分

    printf("lowst score:    %.2f\n", score[9]);//最低分

    for (a = 0; a < 10; a++)

    {

    printf("%.2f\t", score[a]);//成绩降序排序

    }

    getchar();//我是用VS编译器编的所以要加这个getchar

    return 0;

    }

    然后这道题我建议你学习一下冒泡法,这种方法能很简单的写出来.

    我也是才开始接触c语言的,一起加油吧!


  • 纵流沙
    2019-06-25 17:10:01

    sum类型申明为float 或者 double,改成%.2f就可以了

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926028 学习 · 20793 问题

查看课程

相似问题