沧海雨季 发表于 2017-7-31 21:26:15

新手求教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);
}

超凡天赐 发表于 2017-7-31 21:52:23

你这个主要问题是数组溢出,可是这个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;
}

ba21 发表于 2017-7-31 23:07:23

#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-8-3 10:41:01

超凡天赐 发表于 2017-7-31 21:52
你这个主要问题是数组溢出,可是这个sum求的是什么?

为什么是数组溢出了,不太明白。。

沧海雨季 发表于 2017-8-3 10:46:26

ba21 发表于 2017-7-31 23:07


可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?

超凡天赐 发表于 2017-8-3 10:49:22

沧海雨季 发表于 2017-8-3 10:41
为什么是数组溢出了,不太明白。。

因为你这个数组定义的长度为10,而你写的循环会循环到出现h,而长度为十的数组只能是是h~h

ba21 发表于 2017-8-3 10:59:14

超凡天赐 发表于 2017-8-3 11:18:59

沧海雨季 发表于 2017-8-3 10:46
可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?

static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。

超凡天赐 发表于 2017-8-3 11:19:36

沧海雨季 发表于 2017-8-3 10:46
可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?

static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。

超凡天赐 发表于 2017-8-3 11:19:59

沧海雨季 发表于 2017-8-3 10:46
可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?

static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。

沧海雨季 发表于 2017-8-3 20:33:15

超凡天赐 发表于 2017-8-3 11:18
static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack ...

懂了,谢谢啦
页: [1]
查看完整版本: 新手求教c语言编程