| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2324 人关注过本帖
标题:您认为这道题目的结果应该是什么?
取消只看楼主 加入收藏
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
 问题点数:0 回复次数:9 
您认为这道题目的结果应该是什么?
程序代码:
#include <stdio.h>

double sqr(x) {
    return (x*x);
}

int main(int argc, char *argv[])
{
    double ret;
    ret = sqr(3.0);
    printf("%g\n", ret);
    
    return 0;
}

不要上机测试,您推测这道题目打印的结果应该是多少?为什么?

BTW:
(1) 在VC6和GCC4.4.3下可以编译并运行。

(2) 回答是9的拉出去抽20大板,因为答案是0

                                    .

[ 本帖最后由 phrankmoon 于 2010-7-28 20:17 编辑 ]
搜索更多相关主题的帖子: color 
2010-07-26 21:17
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
回复 2楼 encounter
如果答案是9(9.0),我就不会贴这道题目啦
2010-07-26 21:48
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
没有人用GCC或者VC6的编译器?
2010-07-28 19:52
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
以下是引用灰色代言在2010-7-27 22:33:13的发言:

#include <stdio.h>

double sqr(double x) {
    return (x*x);
}

int main(int argc, char *argv[])
{
    double ret;
    ret = sqr(3.0);
    printf("%g\n", ret);
   
    return 0;
}VC2008上编译结果是9啊。。
但 %g 不是以指数形式输出的吗
不理解。。。

你的代码和我的代码不一样耶,我的那个sqr函数参数并没有指定是double啊。
2010-07-28 19:55
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
以下是引用无悔爱白修在2010-7-27 23:05:01的发言:

#include <stdio.h>

double sqr(x) {                //必须对X做一个定义。不然编译会出错。
    return (x*x);
}

因为用的%g,得到的结果为9

你的是什么编译器,扔了去!与C标准都不兼容!

[ 本帖最后由 phrankmoon 于 2010-7-28 20:10 编辑 ]
2010-07-28 20:01
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
回复 12楼 BlueGuy
但标准没有删除,你可以用VC6或者GCC编译试试看。我没有VC2008,所以不知道它的情况

我推荐你到C标准委员会去工作

[ 本帖最后由 phrankmoon 于 2010-7-28 20:24 编辑 ]
2010-07-28 20:20
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
以下是引用BlueGuy在2010-7-28 20:21:43的发言:

double sqr(x)
// 我指的是这一个, 您觉得这样的写法有存在的理由?

哈哈,当然,没有任何理由这样写。

您看过没看过 Plauger的《The standard C library》?我最近闲的蛋疼,在看这个。

[ 本帖最后由 phrankmoon 于 2010-7-28 20:29 编辑 ]
2010-07-28 20:28
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
回复 16楼 BlueGuy
没什么高深的内涵。

我对算法和图形一点都不感兴趣。
2010-07-28 20:35
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
回复 19楼 zisefengye
1>
double sqr(x)
{
    return (x*x);
}

2> #define sqr(x) x*x

两者不等价。

BTW: ANSI标准允许函数形参不指定参数类型。所以,您的VS2008也许默认情况下不完全支持ANSI标准。VC6和GCC编译我在1楼的代码就没有问题。虽然不推荐那么写代码。

[ 本帖最后由 phrankmoon 于 2010-7-28 22:02 编辑 ]
2010-07-28 21:58
phrankmoon
Rank: 2
等 级:论坛游民
帖 子:32
专家分:15
注 册:2010-7-15
收藏
得分:0 
你找到门路了,此生可教
此题给函数传入3.0和3.1得出的结果迥异得让C老手都感到惊异;此时,从汇编代码看看方能很快明白其个中道理。

以下是引用playmyself在2010-7-29 12:54:15的发言:

080483b4 <sqr>:
double sqr(x) {
 80483b4:    55                       push   %ebp
 80483b5:    89 e5                    mov    %esp,%ebp
 80483b7:    83 ec 04                 sub    $0x4,%esp    #这里双精度应该偏移8个就对了
    return (x*x);
 80483ba:    8b 45 08                 mov    0x8(%ebp),%eax
 80483bd:    0f af 45 08              imul   0x8(%ebp),%eax
 80483c1:    89 45 fc                 mov    %eax,-0x4(%ebp)
 80483c4:    db 45 fc                 fildl  -0x4(%ebp)
}
 80483c7:    c9                       leave

 80483c8:    c3                       ret   


080483c9 <main>:

int main(void)
{
 80483c9:    55                       push   %ebp
 80483ca:    89 e5                    mov    %esp,%ebp
 80483cc:    83 e4 f8                 and    $0xfffffff8,%esp
 80483cf:    83 ec 18                 sub    $0x18,%esp
    double ret;
    ret = sqr(3.0);
 80483d2:    dd 05 b0 84 04 08        fldl   0x80484b0
 80483d8:    dd 1c 24                 fstpl  (%esp)
 80483db:    e8 d4 ff ff ff           call   80483b4 <sqr>
 80483e0:    dd 5c 24 10              fstpl  0x10(%esp)
    return 0;
 80483e4:    b8 00 00 00 00           mov    $0x0,%eax
}开始以为是9,调试了下的确是0.
2010-09-04 13:18
快速回复:您认为这道题目的结果应该是什么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020279 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved