| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 901 人关注过本帖
标题:编译无法通过?
只看楼主 加入收藏
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
结帖率:90.91%
收藏
已结贴  问题点数:6 回复次数:10 
编译无法通过?
题目:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
我写的程序:
#include<stdio.h>
#include<math.h>
int main(void)
{
    long int i,x,y;
    for(i=1;i<=100000;i++)
    {
        x=sqrt(i+100);
        y=sqrt(i+268);
        if(x*x==i+100&&y*y==i+268)
            printf("%ld\n",i);
    }
    return 0;
}
下面提示的错误是:
1>------ 已启动生成: 项目: 03, 配置: Debug Win32 ------
1>正在编译...
1>03.cpp
1>c:\users\zhupenggang\desktop\我写的程序\03.cpp(8) : error C2668: “sqrt”: 对重载函数的调用不明确
1>        d:\program files\microsoft visual studio 9.0\vc\include\math.h(581): 可能是“long double sqrt(long double)”
1>        d:\program files\microsoft visual studio 9.0\vc\include\math.h(533): 或       “float sqrt(float)”
1>        d:\program files\microsoft visual studio 9.0\vc\include\math.h(128): 或       “double sqrt(double)”
1>        试图匹配参数列表“(long)”时
1>c:\users\zhupenggang\desktop\我写的程序\03.cpp(9) : error C2668: “sqrt”: 对重载函数的调用不明确
1>        d:\program files\microsoft visual studio 9.0\vc\include\math.h(581): 可能是“long double sqrt(long double)”
1>        d:\program files\microsoft visual studio 9.0\vc\include\math.h(533): 或       “float sqrt(float)”
1>        d:\program files\microsoft visual studio 9.0\vc\include\math.h(128): 或       “double sqrt(double)”
1>        试图匹配参数列表“(long)”时
1>生成日志保存在“file://c:\Users\ZHUPENGGANG\Documents\Visual Studio 2008\Projects\03\03\Debug\BuildLog.htm”
1>03 - 2 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
请问如何解决?
搜索更多相关主题的帖子: 编译 
2009-10-21 22:07
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:2 
原程序在tc下可以正常运行。
在你编译器里可能在用sqrt()时要求数据类型必须是浮点型:double sqrt(doulbe x);
long int i,x,y;
改为:
int i;
double x,y;
再试试

[ 本帖最后由 m456m654 于 2009-10-21 22:29 编辑 ]
2009-10-21 22:27
apwh7550
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:41
专家分:106
注 册:2009-10-17
收藏
得分:2 
源程序在VC6.0下也可以正常运行。不知道楼主用的什么编译环境?
2009-10-21 22:58
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:2 
重载确定的二义性

将文件保存为.c文件编译!
或者将sqrt的参数强制转换为错误中的三种类型之一!
2009-10-21 23:15
jiangwu10057
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:341
专家分:667
注 册:2009-3-25
收藏
得分:0 
程序代码:
#include<stdio.h> 
#include<math.h> 
int main() 
{ 
    double x,y,i; 
 
    for(i=1;i<=100000;i++) 
    { 
        x=sqrt(i+100); 
        y=sqrt(i+268); 
        if(x*x==i+100&&y*y==i+268) 
            printf("%ld\n",(long)i); 
    } 
}
我这样改完能输出答案
可是答案也太多了·所以我自己怀疑错了
还是等个比较好的答案

[ 本帖最后由 jiangwu10057 于 2009-10-22 06:38 编辑 ]
2009-10-22 06:37
mylzy159
Rank: 2
等 级:论坛游民
帖 子:61
专家分:23
注 册:2009-4-12
收藏
得分:0 
楼主自己弄错了.-_-.是168.我在VC上运行就只有156.
2009-10-22 09:10
zqb7899
Rank: 4
等 级:业余侠客
帖 子:159
专家分:238
注 册:2009-10-16
收藏
得分:0 
运行正常,在WIN-TC下。
也可这样:
#include<stdio.h>
#include<math.h>
main()
{
    long i;
    double x,y;
    for(i=1;i<=100000;i++)
    {
        x=sqrt(i+100);
        y=sqrt(i+268);
        if(((int)x==x)&&((int)y==y))
            {printf("%f  %f\n",x,y);
            printf("%ld\n",i);}
    }
    getch();
}
2009-10-22 16:40
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
收藏
得分:0 
回复 2楼 m456m654
结果还是一样。仍然无法通过编译。
还有这个题的判断条件要求x,y必须是整数才能成立。
否则for循环根本没有意义。因为一个数开方后的平方肯定等于该数,不管开方后是否为整数。
严格定义开方为整数才能作为一个判断的条件。
2009-10-22 21:01
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
收藏
得分:0 
回复 3楼 apwh7550
我用的是VC2008.
2009-10-22 21:02
jiawan007
Rank: 1
等 级:新手上路
帖 子:45
专家分:2
注 册:2009-8-1
收藏
得分:0 
回复 4楼 無邪的睡脸
将文件保存为.c也无法解决。
2009-10-22 21:07
快速回复:编译无法通过?
数据加载中...
 
   



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

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