关于初始值0.0的一个问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 17:17:06
#include <conio.h>
#include <math.h>
#include <stdio.h>
double countValue(int n)
{
int i;
double sum=0.0;
for (i=1;i<n;i++)
{
if (i%3==0 && i%7==0)
sum+=i;
}
sum=sqrt((double)sum);
return sum;
}
void progReadWrite()
{
FILE *fp, *wf;
int i, n;
float s;
fp = fopen("in.dat", "r");
if (fp == NULL)
{
printf("数据文件in.dat不存在!");
return;
}
wf = fopen("out.dat", "w");
for (i=0; i<10; i++)
{
fscanf(fp, "%d,", &n);
s = (float)countValue(n);
fprintf(wf, "%f\n", s);
}
fclose(fp);
fclose(wf);
}
main()
{
printf("1000以内符合条件的自然数之和的平方根=%f\n", countValue(1000));
progReadWrite();
}

1.我想问下在最初定义double sum=0.0;和double sum;有什么区别?我再VC里面运行后
double sum

C语言中定义一个变量时,并不会初始化它,其值就是分配给它的内存中原来的值,可能根本就不符合该变量的格式
你可以 double sum; 后紧接着 printf( "%f", sum ); 看看它的值

函数 sqrt 定义是
double sqrt( double );
不需要强制转换
sum = sqrt( sum );

double sum=0.0;和double sum;有什么区别,变量只有赋值后才能使用,未赋值的变量为不确定值,不是0值。如果不赋值就使用就会出现错误。

sum一开始就定义为double型,这里再强制转换double型有什么意义?我觉得应该是sum=(double)sqrt(sum),这样保持等号左右一致都是double型,对不对?
不对。
未强制转换前sum的值是****.0,小数点后只有一位,强制转换后为***.000000,
小数点后有六位。
如果小数点后只有一位那么0.1*0.1值为0.0,也就是0了,
我想他是怕编译器在运算中出错吧。一般来说是没那个必要转换的。

double sum;
sum未被赋初值,因此,编译可以通过,而运行结果会有问题。
原因是:sum的值是杂乱无章的。