读书人

各位朋友好,最近小弟我在自学C++,问个

发布时间: 2012-02-22 19:36:55 作者: rapoo

各位朋友好,最近我在自学C++,问个问题
最近在自学c++,编了个简单程序.题目如下

//求100~150之间的所有素数。
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int main()
{
int x,i,b;
for( x=100; x <=150; x++ )
{
b=sqrt(x);
for( i=2; i <= b; i++ )
if( x%i==0 )
break;
if(i> =b+1)
cout < < setw(5) < < x;
}

return 0;
}
调试时发现sqrt这个函数有三种定义,分别为long,float,double型的sqrt,我之后又把前面的变量类型做了不同的修改,根据三种定义去编译,还是没法编译成功.所以我想问下这个sqrt函数该怎么用,根据前面的变量类型该如何搭配使用.希望有朋友根据三种定义给我举下例子,谢谢啦..

[解决办法]
因为x的类型是int,而sqrt()的三种参数分别是float、double、long double.
int可以自动转换为任一一种,但是具有不确定性。故编译器报错。
可以把x定义为double类型。
[解决办法]
b=(int)sqrt(1.0*x)

1.0*x 已经将传入sqrt的参数转为浮点型
将sqrt返回的结果再强转成int的 赋值给变量b
[解决办法]
1.0*x会使x转化为double类型,然后就可以明确匹配double类型的sqrt了。楼主可以去看下类型自动转化。
[解决办法]
long double * 或 double * = sqrt(任意类型)
而那个 float * = sqrt(float *)
若要使用 int * 则需要 int * = int(sqrt(*))
* 代表变量

读书人网 >C++

热点推荐