2016-06-14 2 views
1

私は大学でプログラミングクラスのプログラムを作成しています。私はそのほとんどが適切に動作するようにしていますが、私が使用しようとしているエンドループは正しく動作しません。私は何が起こっているのかよくわからない。私はもっ​​と学び、なぜこれをやっているのか理解したい。私の問題は終わりで、ここで何年もの間の増加をパーセンテージで示しています。私は(年+ 1) - 年/(年+ 1)を取ろうとしています。今では変数を整数として扱い、分母を浮動小数点に変換したいと考えています。プログラムを実行すると、私の回答は100.00%、-1。#J%、98.24%に上昇し続けました。以下は私がこれまでに得たもののコピーです。助けが喜んで感謝されます。ループの最後で配列を使用して1年間の増加率を計算して格納する

#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; 

} 
+0

あなたは勉強したい。だから今、デバッガの使い方を学ぶ時間です。コードをステップ実行し、期待値があれば変数をチェックします。 – Olaf

+0

お返事ありがとうございます。私はデバッガを見ていきます。彼らはそれを使う方法を私に学校で実際に示さなかったが、私はそれを見てそれを理解し始めるだろう。私はビルドログを使ってこれまでのいくつかのエラーを特定しています。 – RTriplett

+0

デバッガで、コードの行を入力してスキャンしますか? – RTriplett

答えて

0

あなたはまだvalue[i+1]を初期化していないため、あなたはpercentage[i]= (value[i+1] -value[i])/(float)value[i+1];を言うことはできません。あなたが行うことができるのは、後方インデックス作成のようなものです。((float)value[i] - (float)value[i-1])/(float)value[i]; 最初の計算の場合、最初の計算では機能しませんが、最初の計算では、最初の1年であり、 。


実際には、これを試してください。私はこれがあなたの目標に合っていると思う:

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); 
} 
+0

ありがとう!私は何が間違っていて、コードがどのように機能しているかを見ています。私はちょうど私の論理のいくつかを後方に持っていて、私はもう一つのforループを欠いていました。ほんとうにありがとう。 – RTriplett

+0

あなたは大歓迎です、私は助けることができてうれしいです –

関連する問題