C语言double型数据比较大小出错。

#include<stdio.h>intmain(){inta[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},i,n,b,k;pri... #include<stdio.h>
int main()
{
int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},i,n,b,k;
printf("输入一个数\n");
scanf("%f",&b);
for( i=0,n=15,k=0;k<=3;k++)
{

if(b==a[(i+n)/2])
{printf("此数是数组中第%d个数\n",(i+n)/2+1);break;
}
else if(b>a[(i+n)/2])
i=(i+n)/2;
else if(b<a[(i+n)/2])
n=(i+n)/2;

}
if(k==4)
printf("此数不在数组中\n");
return 0;
}

这是代码。

用的是折半法,找出输入的数是否是数组中的某个数。
用int整型没出错,改成DOUBLE型就出错了。
不知道为什么。
哪位大神搭救下

E:\C\qwe\asd.cpp(11) : error C2108: subscript is not of integral type
E:\C\qwe\asd.cpp(11) : error C2446: '==' : no conversion from 'double *' to 'double'
There is no context in which this conversion is possible
E:\C\qwe\asd.cpp(11) : error C2115: '==' : incompatible types
E:\C\qwe\asd.cpp(14) : error C2108: subscript is not of integral type
E:\C\qwe\asd.cpp(14) : error C2446: '>' : no conversion from 'double *' to 'double'
There is no context in which this conversion is possible
E:\C\qwe\asd.cpp(14) : error C2115: '>' : incompatible types
E:\C\qwe\asd.cpp(16) : error C2108: subscript is not of integral type
E:\C\qwe\asd.cpp(16) : error C2446: '<' : no conversion from 'double *' to 'double'
There is no context in which this conversion is possible
E:\C\qwe\asd.cpp(16) : error C2115: '<' : incompatible types
执行 cl.exe 时出错.

qwe.exe - 1 error(s), 0 warning(s)
展开
 我来答
百度网友6567883c53
推荐于2016-06-23 · TA获得超过4737个赞
知道大有可为答主
回答量:1260
采纳率:0%
帮助的人:1366万
展开全部

楼主你好。

你犯懒了,你直接把int改成double了吧,如:

double a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},i,n,b,k;

【注意】后面的i,n,k应该是int类型的。


#include<stdio.h>

int main(){

double a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},b;//a和b是double类型

int i,n,k;//其他的是int类型

printf("输入一个数\n");

scanf("%lf",&b);//这里是%lf

for(i=0,n=15,k=0;k<=3;k++){

if(b==a[(i+n)/2]){

printf("此数是数组中第%d个数\n",(i+n)/2+1);break;

}

else if(b>a[(i+n)/2])

i=(i+n)/2;

else if(b<a[(i+n)/2])

n=(i+n)/2; 

}

if(k==4)

printf("此数不在数组中\n");

return 0;

}

这样就没错了。

运行结果:

百度网友fc2230eec
2012-12-21 · TA获得超过131个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:184万
展开全部
if(b==a[(i+n)/2]) // b 是double类型,a[i] 会被隐式的转换成double类型,
而,double 类型是不能直接用“==”比大小的。因为double类型或float类型都是有精度的,其实都是取的近似值,所以有个误差。
if(b-a[(i+n)/2]<1e-8) // 只要相减的值在你规定的大小范围内就可以认为是相等的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jackal56
2012-12-21 · TA获得超过304个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:270万
展开全部
都是同样的错误, 'double *' to 'double'
假设 doube a = 2.1; double b = &a; 这样就是错的,因为b是a的指针,而不是a的值
对照程序改一下吧,不懂的继续追问
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kelleylove
2012-12-21
知道答主
回答量:43
采纳率:0%
帮助的人:19.3万
展开全部
int main()
{
int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},i,n,b,k;

你在main前不要定义数据类型,在{ } 里定义数组为float,i,n,b,k定义为int 就可以了。。
最后printf输出的时候,要记得把输出改成%.1f。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式