c - 没有按照设计的公式获得所需的弹性
问题描述
#include <stdio.h>
#include <math.h>
int main() {
float x[5] = { 60, 61, 62, 63, 65 }, y[5] = { 31, 36, 38, 40, 41 };
int i, Elasticity;
for (i = 0; i < 5; i++) {
Elasticity = ((y[i + 1] - y[i]) / y[i]) / ((x[i + 1] - x[i]) / x[i]);
printf("Elasticity is %d",Elasticity);
}
return 0;
}
我想根据设计的公式打印弹性值,但我得到了错误的值。例如,对于第一种情况,我应该得到 Elasticity = ((36 - 31) / 31) / ((61 - 60) / 60) = 9.677(大约)
必须做什么?
解决方案
三件事:
Elasticity
是类型int
。它不能包含小数部分。您需要将其设为float
,double
或long double
使其能够包含小数部分。您在调用中使用了
%d
格式说明符printf
,该说明符旨在打印出以 10 为底的有符号整数。用于%f
打印出一个float
或double
。正如评论者@user58697 指出的那样,您正在对循环
y[i + 1]
的最后一次迭代执行越界访问for
。我不确定您的计算意图是什么,因此我无法提供解决方案。
推荐阅读
- haskell - 在存在类型运算符的情况下实现嵌套/递归数据类型
- javascript - MaterializeCSS 自动完成向上
- html - 如何让三个宽度为 33% 的 div 和边距适合一行?
- c# - 如何阻止 MediaPlayer 每次启动?
- ruby-on-rails - 如果使用“rails server”,Mac OS Catalina 无法正确关闭
- mysql - 构建根据“开始/停止”状态和第二个表的日期返回日期的 SQL 查询
- java - HermiT 推理器为数据类型抛出“UnsupportedDatatypeException”
- angularjs - 带有 UpgradeModule 的 Angular 6 无法解析 ApplicaitonModule 的所有参数
- javascript - 在 Chrome 上使用 location.reload 不能正常工作,在 Firefox 中使用相同的代码可以正常工作
- flutter - currentState.validate() 导致 Flutter App 崩溃