www.5615.net > 为什么C语言中DouBlE(x)/10不对

为什么C语言中DouBlE(x)/10不对

1、这个如果是程序中的一个语句的话,是有错误的可能性,因为x的类型会影响到整个语句的结果,比如 int x=1,那么double (x)/10的结果就是double类型的0.1,要是程序的意思是将x/10的结果转换成double类型的话那么结果就是0.000000了,因为x/10为0.2、单从语法上看是没有错误的,在程序内的逻辑就不一定正确了.double (x)/10 的意思是将x先转化成double类型再做除法运算.

不正确.(double)x/10 才行. (double)x 表示显示将 x 的类型转为 double 类型.

是因为你用的是%f格式输入的,scanf函数只是把你输入的输转化成float的格式放到x的地址,并没有考虑你的x的格式.而float和double格式是不一样的,double的长度是float的2倍,所以才会有问题.如果你用double输入的话可以用%lf格式

double形式是不能和0比较的,因为double实际上是没有0这个数的,只有无限接近于0的数.

注意:如果用double类型变量,输入函数scanf中必须要用%lf(就是小写的LF)才行,否则输入的数值以及显示的数值都会因位数不够而出现错误.如下简单程序可以自己做个实验,去掉lf中的l看看:#include<stdio.h>double main (){double a,b,c;printf ("输入两个加数a,b\n");scanf ("%lf,%lf",&a,&b); //doulbe时候输入必须用%LF,否则空间不够会出现错误数printf("a=%f,b=%f\n",a,b);c=a+b;printf("%f,%f,%f\n",a,b,c);return c;}

scanf("%f%f%f%f",&a,&b,&c,&d);scanf("%lf%lf%lf%lf",&a,&b,&c,&d);能看出区别就可以

语法对,但无意义.因为<和<=是同优先级运算符,运算顺序就是从左至右,所以8<x<=10被解释为(8<x)<=10.那么,无论8<x是否成立,整式的结果都是1即“真".这是由于8<x成立时为1,不成立是为0,而0或1都小于10.

这题目本身有点错了.在C语言中(double)(10/4*4)会等于8.0.这是因为 (double)(10/4*4) = (double)(2*4) = (double)(8)=8.0 问题是括号的优先级决定了括号内是先求值的,求完值后再转为double型.如果把后面的括号去掉,就能实现正确的答案了:(double)10/4*4 它是先将整数10转为double,成为10.0,然后再除以整数4;C系统会自动将4转为4.0再相除,得到2.5,再与4.0相乘,最后得到10.0.

x[10]不是double型指针,int fun(double x[10],int *n),第一个参数x[10]是double类型数组,第二个参数是int型指针

p+6相当于&x[6] p=x这里,是将数组首地址赋值给p p+6就是第6+1个元素的地址,所以,不用加&了

网站地图

All rights reserved Powered by www.5615.net

copyright ©right 2010-2021。
www.5615.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com