首页 > 解决方案 > 没有按照设计的公式获得所需的弹性

问题描述

#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(大约)

必须做什么?

标签: c

解决方案


三件事:

  1. Elasticity是类型int。它不能包含小数部分。您需要将其设为floatdoublelong double使其能够包含小数部分。

  2. 您在调用中使用了%d格式说明符printf,该说明符旨在打印出以 10 为底的有符号整数。用于%f打印出一个floatdouble

  3. 正如评论者@user58697 指出的那样,您正在对循环y[i + 1]的最后一次迭代执行越界访问for。我不确定您的计算意图是什么,因此我无法提供解决方案。


推荐阅读