鱼C论坛

 找回密码
 立即注册
查看: 1986|回复: 10

[已解决]新手求教c语言编程

[复制链接]
发表于 2017-7-31 21:26:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:
一个球从100m高度自由落下,每次落下后反弹原来的一半,再落下,再反弹。求第十次落地时共经过多少米,第十次反弹多高。
我也知道这个题很简单。。。但是编译出来就是乱码,不知道为什么。。
#include <stdio.h>
int main()
{
        int i;
        double sum;
        double h[10]={100};
        sum=0;
        for(i=0;i<=9;i++)
        {
                sum+=h[i];
                h[i+1]=h[i]/2.0;
        }
        sum=sum*2-100;
        printf("Please output the distance:");
        printf("%lf\n",sum);
        printf("Please output the last distance:%lf\n",h[10]);
}
最佳答案
2017-7-31 21:52:23
你这个主要问题是数组溢出,可是这个sum求的是什么?
#include <stdio.h>
int main()
{
        int i;
        double sum;
        double h[10] = { 100 };
        sum = 0;
        for (i = 0; i <= 8; i++)
        {
                sum += h[i];
                h[i + 1] = h[i] / 2.0;
        }
        sum = sum * 2 - 100;
        printf("Please output the distance:");
        printf("%lf\n", sum);
        printf("Please output the last distance:%lf\n", h[9]);
        return 0;
}
TIM截图20170731212409.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-31 21:52:23 | 显示全部楼层    本楼为最佳答案   
你这个主要问题是数组溢出,可是这个sum求的是什么?
#include <stdio.h>
int main()
{
        int i;
        double sum;
        double h[10] = { 100 };
        sum = 0;
        for (i = 0; i <= 8; i++)
        {
                sum += h[i];
                h[i + 1] = h[i] / 2.0;
        }
        sum = sum * 2 - 100;
        printf("Please output the distance:");
        printf("%lf\n", sum);
        printf("Please output the last distance:%lf\n", h[9]);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-31 23:07:23 | 显示全部楼层
#include <stdio.h>
int main()
{
        int i;
        double sum;
        double h[10]={100};
        sum=0;
        for(i=0;i<=9;i++)
        {
                sum+=h[i];
                                if(i==9) //当下标为9时退出循环,否则会使下一条为h[9+1]=h[9] / 2.0 ,结果会导至数据溢出,sum的值也跟着不对。
                                        break;
                h[i+1]=h[i]/2.0;
        }
        sum=sum*2-100;
        printf("Please output the distance:");
        printf("%lf\n",sum);
        printf("Please output the last distance:%lf\n",h[9]); //h[10] 第10号元素的下标是9
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 10:41:01 | 显示全部楼层
超凡天赐 发表于 2017-7-31 21:52
你这个主要问题是数组溢出,可是这个sum求的是什么?

为什么是数组溢出了,不太明白。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 10:46:26 | 显示全部楼层

可是我后来在定义数组的时候加了static,结果就对了。请问一下这是为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 10:49:22 | 显示全部楼层
沧海雨季 发表于 2017-8-3 10:41
为什么是数组溢出了,不太明白。。

因为你这个数组定义的长度为10,而你写的循环会循环到出现h[10],而长度为十的数组只能是是h[0]~h[9]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-3 10:59:14 | 显示全部楼层
2017-08-03_105734.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack区。static定义数组如果越界的话对于大部分编译器来说只会警告不会报错。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 20:33:15 | 显示全部楼层
超凡天赐 发表于 2017-8-3 11:18
static定义的初始化变量和auto定义的初始化变量在不同的内存区域。static一般在date区,auto一般在stack ...

懂了,谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-28 12:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表