重点看 k=int(sqrt (m)); 提示说more than one instance of overloaded function "sqrt" matches the argument list:
int _tmain(int argc, _TCHAR* argv[])
{int m,k,i,n=0;
bool prime;
for(m=101;m<=200;m=m+2)
{prime=true ;
k=int(sqrt (m));
for(i=2;i<=k;i++)
if( m%i==0)
{prime=false;
break;
}
if(prime)
{cout<<setw(5)<<m;
n=n+1;}
if(n%10==0)
cout<<endl;
}
return 0;
}
我还是不太明白。您能详细讲下吗。
1 这个float是说谁呢? m是int型啊
2 sqrt只有接受三种精度的浮点数的函数重载 是什么意思啊?
3 那为什么又说有多种 sqrt函数 符合要求呢?
首先你知道C++有“函数重载”这个东西对吧。sqrt函数就有三个重载形式,分别是
double sqrt(double _X);
long double sqrt(long double _X);
float sqrt(float _X);
(后两个函数只是调用第一个函数处理)
这三个形式分别是接受一个double 型浮点数,接受一个long double 型浮点数,接受一个float 型浮点数,因此没有完全符合k=int(sqrt (m));里面的m的类型的参数,编译器就会试着转换m的类型,但由于把m的类型转换为double、long double 、float 的优先级相同,每个转换都能找到对应的函数,所以编译器会报错。只有告诉编译器:把m的类型转换为float 型(当然选择另外两种也是可以的,只要你告诉编译器),编译器才能正确地继续编译
为什么要加(double)啊
追答sqrt 参数需 double 型。 不加(double)也可以,加了更保险,因为你在调试程序,加了,保证参数无错。放心去查别的地方。
本回答被网友采纳C++中开方出现错误
这要看什么……sqrt只有接受三种精度的浮点数的函数重载,而int转换到三种浮点数的优先级相同,所以会报有多个函数的重载形式符合要求的错误,显式指定一下k=int(sqrt ((float)m));或者k=int(sqrtf (m));就是了……
C++ 关于开方的问题
这句不对,因为sqrt的参数基本都是double, float或者long double型的。你下面的调用实际上是进行了类型转换。相当于x = int(sqrt(double(i+100)));
C++ 开平方 算符
std::sqrt(9) \/\/ 是错误的,因为编译器不知道7是float?double?long double?你必须写成 std::sqrt(9.0) \/\/double 它返回的是一个右值(right-value)即它就是3.0,std::sqrt(9.0) = 6.0;是错的 double x;x = std::sqrt(9.0); \/\/ x = 3.0;这样才是对的 如果你要对一个整...
c++,求开方的整数部分,比如求根号3的话,输出是1, 求根号8的话,输出是...
if(t < n) return integerSqrt(n, mid, upperBound);return integerSqrt(n, lowerBound, mid);} 错了一个变量 重新提交了一下 你试试
C++出错,invalid operands to binary expression
开根号,不能这样写 :(1.0-x*sin(t)*sin(t))^0.5)要写成:sqrt( 1.0-x*sin(t)*sin(t) )^是C中的“异或”运算符,不是开方运算符!
c++中的开方数学函数问题
m=pow(n,1\/0.758);pow函数的原型是:double pow(double,double);所以它的返回值是double类型的!!!为什么关闭刚才的问题,这样做涉嫌恶意关闭!
问一个c++迭代法开方的问题:
一、a\/2是可以的,其他值也可以,如a\/3,a\/4等等 二、你的程序有问题,while(fabs(x0-x1)<=1e-5)改为while(fabs(x0-x1)>=1e-5)三、可以 四、不好意思,我暂时还不知道,其实你的方法已经很高效了
c++中,怎么运用开方功能
详细解释如下:一、引入数学库 在C++中,开方运算属于数学运算的一种,因此需要用到标准库中的数学函数。具体到开方运算,可以使用 `` 库中的 `sqrt` 函数。二、使用sqrt函数 `sqrt` 函数用于计算一个数的平方根。它的使用非常简单,只需要在代码中引入 `` 库,然后就可以直接调用 `sqrt` 函数来...
vc++中开根号怎么搞
include <cmath> \/\/ C++ header#include <math.h> \/\/ C headerdouble sqrt(double); \/\/ 还有一系列不同类型参数的重载,平方根double pow(double, double); \/\/ 幂次方,如计算 123的3次开方:double result = pow(123, 1.0 \/ 3);
c++中怎么输入根号
C++中是不能直接输入并使用根号的,如果想进行开方计算的话,可以使用sqrt函数,例如,y=sqrt(x);意即将根号下x赋值给y。值得注意的是,sqrt函数使用之前需要包含<math.h>