鱼C论坛

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

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

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

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

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

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

使用道具 举报

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

使用道具 举报

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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