为了账号安全,请及时绑定邮箱和手机立即绑定

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

https://img1.sycdn.imooc.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 回答

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

否则 会输出本身精度值

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


0 回复 有任何疑惑可以回复我~
#1

小小贝勒爷 提问者

即使改成%.1f输出的结果也是78.0不是78.6啊 这是为什么啊
2019-05-08 回复 有任何疑惑可以回复我~
#2

小小贝勒爷 提问者

最后为什么是980还是没懂 .....
2019-05-08 回复 有任何疑惑可以回复我~
#3

Majesty_x 回复 小小贝勒爷 提问者

你的sum是整形,整形除以10还是整形啊。。。。
2019-05-10 回复 有任何疑惑可以回复我~
#4

小小贝勒爷 提问者

回复 Majesty_x 78.6解决了 多谢 多谢 但是最后内个多一个0是为什么呢
2019-05-12 回复 有任何疑惑可以回复我~
查看1条回复

你要把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语言的,一起加油吧!


2 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信