C语言double型变量的初始化到底是是0还是0.0?

C语言考试系统,double s;s=0.0;系统不给分;提供的答案是s=0;
两者执行结果相同。是系统问题还是真的不能s=0.0;
望高人指点迷津!!!

0和0.0没有区别。

C语言编程时常量写为0时,系统默认其是一个整型常量int,写0.0时系统默认其是双精度浮点型常量double。

在定义局部变量时不赋值的话,则对静态变量来说,编译时自动赋初值0或空字符。而对自动变量来说,如果不赋值,它的值是一个不确定的值。

扩展资料

当用%d去读double类型数据时,得到的为零,因为int型只取低32为付给整型变量,item=1.000000时转化成int型为0

1#include<stdio.h>

2intmain()

3{

4inti,j,n;//item,s;

5doubleitem,s;//当用%d去读double类型数据时,得到的为零,

6//因为int型只取低32为付给整型变量,item=1.000000时转化成int型为0

7scanf("%d",&n);

8s=0;

9for(i=1;i<=n;i++)

10{

11item=0;

12for(j=1;j<=i;j++)

13{

14item=item+1;

1516s=s+item;

17}

18}

19printf("%d\n",s);

2021return0;

22

23}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-01
都可以,没有任何区别。
当常量写为0时, 系统默认其是一个整型常量(int)。
当写作0.0时,系统默认其是双精度浮点型常量(double)。
从这一点上来说,初始化为0.0更为正规一些。
不过在整型向浮点型赋值时,系统默认会做隐式的类型强制转换,也就是说,写作double d = 0; 其实是和double d = (double)0;是一样的。 这样最终的结果就是值同样为0.所以说初始化为0还是0.0都是相同的,方便起见,一般直接写作0。
第2个回答  2011-03-24
可以进行s=0.0赋值,最好用这种赋值方式
考试系统把这个答案写死了,这个系统有问题
考试的时候记得写0,真正写程序时 s=0.0追问

既然是系统有问题,真正二级考试时应该不会出问题了吧,那要是碰到这情况还是得写0.0可以这样理解吗?

追答

真正的二级考试 可能会出这个题,考试时 按0 写吧,打着放弃这道题的打算吧

追问

呵呵,也只能这样了,系统出问题也可能只是如你所说把答案写死了,这样写还是比较保险。谢谢了

追答

不客气

本回答被提问者采纳
第3个回答  2011-03-24
应该是0 虽然结果是一致的 但运行时是行不通的追问

运行结果相同

追答

是 0

追问

既然是double型变量为什么初始化赋0呢?望指点?

第4个回答  2011-03-24
这个要看你是不是把他设定为静态或者是全局变量,如果是的话,就是0,否者就是不定值。追问

答案是这样麻烦你看下吧
#include
double fun(int n)
{ int i; double s, t;
/**********found**********/
s=0;
for(i=1; i0): "); scanf("%d",&n); }
printf("\nThe result is: %f\n",fun(n));
}

追答

你这个是要发现什么,能不能讲清楚点。

追问

(刚刚那个已经是字数的极限了,我在等你回复,我才能再补充。)就是那程序第五行,s=0;我自己做的是s=0.0;但系统没给分,这是为什么?执行结果都一样。是不是模拟考试系统的错误,这是一个全局变量吧,为什么全局变量初始化就得是0呢?明明就是double型变量啊,初始化不赋0.0反倒赋个0呢?

追答

哦,这个是0.0,只是我没说那么清楚,后面你赋值0和0.0结果都是一样的都会被转换成double型的,可能模拟的没有把那个答案考虑进去吧。后面的是标准规定。

追问

谢谢,要是还是这个题,只是给s赋值1呢?是s=1;还是s=1.0;呢?还是两者都可以呢?执行结果一样,应该是都可以吧。没问题了,应该是系统遗漏答案了

追答

都可以,不过这不代表他里面就有这个答案。