【问题标题】:Using an array to calculate and store the percentage increase from one year to the next使用数组计算并存储从一年到下一年的百分比增长
【发布时间】:2016-10-15 21:25:16
【问题描述】:

我正在为我的大学编程课编写一个程序。我让它大部分工作正常,但我试图使用的结束循环不能正常工作。我不太确定发生了什么事。我喜欢了解更多并弄清楚它为什么这样做。我的问题是最后我以百分比显示年份之间的增长。我正在尝试采用(年+1)-年/(年+1)。现在我将变量作为整数,我想将分母转换为浮点数。当我运行程序时,我的答案不断出现 100.00%、-1.#J% 和 98.24%。下面是我到目前为止得到的副本。我们将很高兴为您提供帮助。

#include <stdio.h>
#include <stdlib.h>

#define years 4
#define months 12
int main(void)
{
    float percentage [4];
    float answer = 0.0;
    int i = 0, j = 0, n = 0, sum = 0;
    int time[] = {2012,2013,2014,2015};
    int value[years];
    const char* name[]= {"    JAN "," FEB ", " MAR ", " APR ", " MAY ", " JUN ", " JUL  ","AUG "," SEP "," OCT "," NOV "," DEC "};
    int range[years][months] = {

        { 5626, 5629, 5626, 5606, 5622, 5633, 5647, 5656, 5673, 5682, 5728, 5728},
        { 5741, 5793, 5814, 5811, 5831, 5854, 5857, 5874, 5900, 5923, 5954, 5939},
        { 5999, 6020, 6062, 6103, 6115, 6128, 6169, 6194, 6219, 6233, 6256, 6301},
        { 6351, 6378, 6371, 6409, 6426, 6426, 6437, 6441, 6451, 6484, 6549, 6597}
    };

    printf("YEAR");
    for(n=0; n < months; n++)
        printf("%s", name[n]);

    for (i = 0; i < years; i++) {
        printf(" \n%i    ", time[i]);
        for (j = 0; j < months; j++)
            printf("%2i ", range[i][j]);
            printf("\n");
    }

    for (i = 0; i < years; i++) {
        for(j = 0, sum = 0; j < months; j++)
            sum += range[i][j];
            printf("\n This is the sum of months for %i: %i", time[i], sum);


    }
    printf("\n\n");
    for (i = 0; i < years-1; i++)
    {
        value[i] = 0;
        for(j = 0, sum = 0; j < months; j++)
            {
                value[i] += range[i][j];
                percentage[i]= (value[i+1]-value[i])/(float)value[i+1];
            }

    printf("\n The increase from %i to %i was: %.2f%% ", time[i], time[i+1], percentage[i]*100);
    }

    return 0;

}

【问题讨论】:

  • 你想学就好。所以现在是时候学习如何使用调试器了。单步执行代码并检查变量是否具有预期值。
  • 感谢您的回复。我将看看调试器。他们在学校并没有真正向我展示如何使用它,但我会开始研究它并弄清楚它。到目前为止,我使用构建日志来确定我的一些错误。
  • 在调试器上,我输入一行代码来扫描它吗?
  • 我不太清楚如何使用调试器。构建日志显示零错误和零警告。
  • 通常没有。我不知道你使用哪个调试器。用户界面可以有很大的不同。但这也是学习的一部分,不是吗?

标签: c arrays for-loop


【解决方案1】:

在最后一个for循环中,你不能说percentage[i]= (value[i+1] -value[i])/(float)value[i+1];,因为你还没有初始化value[i+1]。你唯一能做的就是使用像((float)value[i] - (float)value[i-1])/(float)value[i];这样的后向索引 在第一次计算的情况下,它不起作用,但在第一次计算中,你有 0% 的增长,因为这是第一年,你没有什么可比的。


其实,试试这个。我认为这将符合您的目标:

printf("\n\n");
for (i = 0; i < years; i++) {
    value[i] = 0;
    for(j = 0, sum = 0; j < months; j++) value[i] += range[i][j];
}
for(i = 0; i < years-1; i++) {
    percentage[i]= (value[i+1]-value[i])/(float)value[i+1];
    printf("\n The increase from %i to %i was: %.2f%% ", time[i], time[i+1], percentage[i]*100);
}

【讨论】:

  • 非常感谢!我有点明白我做错了什么以及你的代码是如何工作的。我很接近,只是我的一些逻辑倒退了,我错过了另一个 for 循环。我真的很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多