新手求教c语言编程
题目:一个球从100m高度自由落下,每次落下后反弹原来的一半,再落下,再反弹。求第十次落地时共经过多少米,第十次反弹多高。
我也知道这个题很简单。。。但是编译出来就是乱码,不知道为什么。。
#include <stdio.h>
int main()
{
int i;
double sum;
double h={100};
sum=0;
for(i=0;i<=9;i++)
{
sum+=h;
h=h/2.0;
}
sum=sum*2-100;
printf("Please output the distance:");
printf("%lf\n",sum);
printf("Please output the last distance:%lf\n",h);
} 你这个主要问题是数组溢出,可是这个sum求的是什么?
#include <stdio.h>
int main()
{
int i;
double sum;
double h = { 100 };
sum = 0;
for (i = 0; i <= 8; i++)
{
sum += h;
h = h / 2.0;
}
sum = sum * 2 - 100;
printf("Please output the distance:");
printf("%lf\n", sum);
printf("Please output the last distance:%lf\n", h);
return 0;
} #include <stdio.h>
int main()
{
int i;
double sum;
double h={100};
sum=0;
for(i=0;i<=9;i++)
{
sum+=h;
if(i==9) //当下标为9时退出循环,否则会使下一条为h=h / 2.0 ,结果会导至数据溢出,sum的值也跟着不对。
break;
h=h/2.0;
}
sum=sum*2-100;
printf("Please output the distance:");
printf("%lf\n",sum);
printf("Please output the last distance:%lf\n",h); //h 第10号元素的下标是9
} 超凡天赐 发表于 2017-7-31 21:52
你这个主要问题是数组溢出,可是这个sum求的是什么?
为什么是数组溢出了,不太明白。。 ba21 发表于 2017-7-31 23:07
可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么? 沧海雨季 发表于 2017-8-3 10:41
为什么是数组溢出了,不太明白。。
因为你这个数组定义的长度为10,而你写的循环会循环到出现h,而长度为十的数组只能是是h~h 沧海雨季 发表于 2017-8-3 10:46
可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?
static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。 沧海雨季 发表于 2017-8-3 10:46
可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?
static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。 沧海雨季 发表于 2017-8-3 10:46
可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?
static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。 超凡天赐 发表于 2017-8-3 11:18
static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack ...
懂了,谢谢啦
页:
[1]