全部问题 > 当前问题

答案我明白了,这是我之前写的代码,为什么错?错在哪里?谢谢指导!!!

blob.png

二级必过!!! 2015-9-12 19:37:07

共 21 个回答

嘿嘿大人 2015-9-12 19:45:46

看不清,发下代码

二级必过!!! 2015-9-12 19:47:14

回复 嘿嘿大人

#include <stdio.h>

float fun ( float  h )

{

float w,t,e;

int r;

w=h*1000;

r=w;

r=r%10;

e=r*0.1;

if(r>=5)

h=h*100+1-e;

else

h=h*100-e;

h=h/100;

return h;

}


main( )

{   float  a;void NONO ();

    printf ("Enter  a:  "); scanf ( "%f", &a );

    printf ( "The original data is :   " );

    printf ( "%f \n\n", a );

    printf ( "The result :  %f\n", fun ( a ) );

    NONO( );

}


最佳答案

嘿嘿大人 2015-9-12 19:56:01

回复 二级必过!!!:你的想法是对的,但是你知道什么叫四舍五入么?四舍五入之后保留位后面要全部是零,这才叫四舍五入,你只是把保留位后面的一位变成零这不叫四舍五入,能理解?

二级必过!!! 2015-9-12 19:58:25

回复 嘿嘿大人你只是把保留位后面的一位变成零这不叫四舍五入,是哪段代码?

嘿嘿大人 2015-9-12 20:02:45

回复 二级必过!!!

r=r%10;

e=r*0.1;



if(r>=5)

h=h*100+1-e;

else

h=h*100-e;

你得e只有一个小数位,减去的是保留位的后一位,自己看吧,

嘿嘿大人 2015-9-12 20:10:04

回复 二级必过!!!:像你这么写还不如这样

float fun ( float  h )

{

float w,t,e;


int r;


w=h*1000;


r=w;


r=r%10;


if(r>=5)


h=h*100+1;


else


h=h*100;

r=h;


h=r/100.0;


return h;



}

还简单点,虽然和答案不一样也是零分也,嘿嘿

二级必过!!! 2015-9-12 20:14:11

回复 嘿嘿大人

满分:

float fun (float h )

{

  long t;

  t=(h*1000+5)/10;      /*单精度数h乘以1000后再加5,相当于对h中的第三位小数进行四舍五入

                        除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/

  return (float)t/100;  /*除以100,保留2位小数*/

}

我觉得答案也只是把保留位后面的一位变成零这不叫四舍五入。


嘿嘿大人 2015-9-12 20:18:02

回复 二级必过!!!:啥意思,答案是正确的啊,人家在强制转换类型的时候就已经舍去了后面的了;你说的是啥?

二级必过!!! 2015-9-12 20:19:26

回复 嘿嘿大人我觉得答案也只是把保留位后面的一位变成零,我没看出来答案怎么把保留位后面全部变成零。

嘿嘿大人 2015-9-12 20:20:46

回复 二级必过!!!:你自己不是在注释写了的么?

 t=(h*1000+5)/10;      /*单精度数h乘以1000后再加5,相当于对h中的第三位小数进行四舍五入

                        除以10后将其赋给一个长整型数时就把第三位小数后的数全部截去*/


二级必过!!! 2015-9-12 21:35:58

回复 嘿嘿大人:那不是我写的,是满分的答案里面的。

嘿嘿大人 2015-9-12 21:40:17

回复 二级必过!!!:现在知道哪里归为零的了吧?

二级必过!!! 2015-9-12 23:47:18

回复 嘿嘿大人blob.png

二级必过!!! 2015-9-12 23:50:40

回复 嘿嘿大人:刚刚给您看的图是我用我错误的程序运行出来的结果,我不明白我输入1234.544,The original data is:1234.543945,平白无故多出几位,要不是他会平白无故多出几位我就不会错,为什么呢?

另外,我们如果运行标准答案会发现最后的result没有无故多出几位小数,为什么?

二级必过!!! 2015-9-12 23:51:42

回复 嘿嘿大人:用答案去运行,我不明白我输入1234.544,The original data is也会平白无故多出几位,为什么呢?

嘿嘿大人 2015-9-13 09:04:25

回复 二级必过!!!:系统自动随机补位,答案就是我用颜色写的那个功能将后面几位变成零的

二级必过!!! 2015-9-13 10:00:10

回复 嘿嘿大人:那输出怎么就不系统自动随机补位?难道我们输入会,输出不会?这在什么情况下会这样?

嘿嘿大人 2015-9-14 08:34:02

回复 二级必过!!!:浮点型就是这样,输入双精度应该就不是了吧,反正我都不会管这个,结果对就行了

嘿嘿大人 2015-9-14 08:34:36

输出的时候我们是将后面变了零的,是自己变的零,当然不用随机赋值了

二级必过!!! 2015-9-14 10:59:03

回复 嘿嘿大人:明白,谢谢您。

嘿嘿大人 2015-9-14 10:59:27

回复 二级必过!!!:不用谢,加油吧,嘿嘿

问题来自: 编程题真题