搜索
查看: 1143|回复: 10
打印 上一主题 下一主题

啊哈C30页练习第一题,编译出错,请指教!

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-9 16:02:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
#include <stdio.h>
#include <stdlib.h>
int main()
{
        float a,b,c,d,g;
    a=1.2;
    b=2.3;
    c=3.4;
    d=4.5;
    g=a+b+c+d;
    printf("%f",g)

        system("pause");
        return 0;
}

编译出错,错在哪里呢?谢谢!

最佳答案

查看完整内容

printf("%f",g)少分号
沙发
发表于 2014-3-9 16:02:19 | 只看该作者
  printf("%f",g)少分号
板凳
发表于 2014-3-9 18:38:43 | 只看该作者
rosynirvana 发表于 2014-3-9 16:22
printf("%f",g)少分号

除了少了个分号,还有一外隐藏错误,
代码:
    a=1.2;
    b=2.3;
    c=3.4;
    d=4.5;
的值都只有一位小数点,结果应该
保持一致,应该是:
printf("%.1f",g);
才是....
地板
发表于 2014-3-9 21:10:32 | 只看该作者
本帖最后由 rosynirvana 于 2014-3-9 21:12 编辑
李掌柜 发表于 2014-3-9 18:38
除了少了个分号,还有一外隐藏错误,
代码:
    a=1.2;

对于这个程序来说,在数学上11.400000和11.4又没区别,所以没必要

真要说的话,保证精确的写法是
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.      int a,b,c,d,g;
  6.     a=12;
  7.     b=23;
  8.     c=34;
  9.     d=45;
  10.     g=a+b+c+d;
  11.     printf("%d.%d",g/10, g%10);

  12.         system("pause");
  13.         return 0;
  14. }
复制代码

才可以保证精确

%.1f是做了个rounding,自欺欺人的写法罢了
5#
发表于 2014-3-9 22:30:41 | 只看该作者
rosynirvana 发表于 2014-3-9 21:10
对于这个程序来说,在数学上11.400000和11.4又没区别,所以没必要

真要说的话,保证精确的写法是

这是为了格式一致,而无非对错~~
参数  a=1.2;
         b=2.3;
         c=3.4;
         d=4.5;
你觉得   g=11.400000;  这种格式很美观????
真是可笑~还是说g比a,b,c,d四个值占的宽位多???
而g=11.400000就精确些

6#
发表于 2014-3-9 23:17:14 | 只看该作者
李掌柜 发表于 2014-3-9 22:30
这是为了格式一致,而无非对错~~
参数  a=1.2;
         b=2.3;

看看你自己的回复
这是第一次回复
还有一外隐藏错误,


这是第二次回复
这是为了格式一致,而无非对错~~

参数  a=1.2;

a在上面的代码中是变量,而不是参数

关键的浮点数陷阱不说,强调什么美观
学得深入一点再来和别人争论吧
7#
发表于 2014-3-9 23:33:15 | 只看该作者
本帖最后由 李掌柜 于 2014-3-10 00:09 编辑
rosynirvana 发表于 2014-3-9 23:17
看看你自己的回复
这是第一次回复

和你讨纶一点意思都木有~~
答案是有很多种的~~
观点不同解法也不同~~
代码是死的人是活的,,
你觉得这种级别的加减法会有浮点数陷阱??
掌柜的只能说:"呵呵"
你太死板了,没劲


额,对了,看你好像很精通的样子
麻烦你帮这位同学的代码优化下~~
到底哪错了???
http://bbs.ahalei.com/forum.php? ... 483&fromuid=981
(出处: 啊哈磊_编程从这里起步)
我只是粗略的优化了下下,没有解决根本问题,
看你怎么优化罗~~~


8#
发表于 2014-3-10 00:05:15 | 只看该作者
李掌柜 发表于 2014-3-9 23:33
和你讨纶一点意思都木有~~
答案是有很多种的~~
观点不同解法也不同~~

对不起,以你表现出来的水准来说,还真算不上什么讨论,只能是单方面告诉你正确答案罢了
答案有多种多样,不错
但是一层里面说“隐藏错误”,另一层说“无非对错”,所以你想表达的是“这是错的”,还是“这是对的”呢
你的观点解法是自相矛盾的,还谈什么观点不同解法不同呢?

“这种级别的加减法会有浮点数陷阱”?
更简单的都会有浮点数陷阱,还是论坛上一直有人问的
另外你能解释清我所谓“浮点数陷阱”是什么吗?

不是我死板,而是你的自信太莫名了
9#
发表于 2014-3-10 00:20:39 | 只看该作者
rosynirvana 发表于 2014-3-10 00:05
对不起,以你表现出来的水准来说,还真算不上什么讨论,只能是单方面告诉你正确答案罢了
答案有多种多样 ...

那你弄个加减法浮点的例子出来看看罗~
我水准很菜的,也不敢说我精通这门语言~~

我只知道1.1+1.2=?几的
小学生不会在数学题上写2.300000这样的答案~~~
我所说的隐式错误也正出于这方面的观点~~
如果你非要这样写,我只能说~呵呵,,你真有才
10#
发表于 2014-3-10 13:29:19 | 只看该作者
李掌柜 发表于 2014-3-10 00:20
那你弄个加减法浮点的例子出来看看罗~
我水准很菜的,也不敢说我精通这门语言~~

加减法有浮点陷阱的例子,整个论坛有很多问的
比如 http://bbs.ahalei.com/thread-2305-1-6.html

别回避问题
一层里面说“隐藏错误”,另一层里面说“无非对错”
你要说是对还是错?

格式问题?小数没写成最简形式?
我第二个回复明确说了
如果不去深究,那么11.400000和11.4数学上等价,所以可以说是没有问题了,不用改了
如果要写成最简形式,还不如用整数模拟,理由就是要避开浮点数陷阱
%1f这种写法,只是掩盖了问题而已
11#
发表于 2014-3-11 22:43:59 | 只看该作者
rosynirvana 发表于 2014-3-10 13:29
加减法有浮点陷阱的例子,整个论坛有很多问的
比如 http://bbs.ahalei.com/thread-2305-1-6.html

忘了,float确实有精确度存取问题,
一般浮点运算应该用double才对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表