2017-02-24 7 views
3

基本的に、配列の最大サイズは10で、ユーザーは最大10個の値を入力できます。ユーザーが-1または0を入力して10個の値を入力する前にループが停止し、次のループに進みます。私の問題は、10の値を入力するまで完全に動作することです。結果は10の代わりに9で除算され、配列に9つの値があることが表示されます。配列内の10個の値でプログラムが機能しない

#include <stdio.h> 

int main(void) 
{ 
    float numbers[10]; 
    int i; 
    int n; 
    int count =0; 
    for(i = 0; i<10; i++) 
    { 
     scanf("%f", &numbers[i]); 
     if(numbers[i] == -1) 
      break; 
     if(numbers[i] == 0) 
      break; 
     count++; 
    } 


    n = count-1; 
    float sum = 0; 
    float average; 

    for(i = 0; i<=n; i++) 
    { 
     sum = sum + numbers[i]; 
    } 
    average = sum/count; 

    printf("The average price of the %d products is %.2f.\n", count, average); 
    return 0; 

} //this is the fixed solution. 
+1

2番目のforループでは 'i <9 'です。これは' numbers [0] 'から' numbers [8] 'への' 9 'の値です。 –

+2

論理を再考してください。入力が0または-1でないかどうかをチェックするだけで 'count'をインクリメントする必要があります。したがって、これらの2つの条件を 'count ++' _after_に移動してください。 'n = count - 1'を' n = count'にも変更することを忘れないでください!また、 'n'や' count'を取り除いて一つの変数だけを使うこともできます。さらに、if ... ifの代わりに 'if ... else if'を使用することもできます。これは、両方の条件が真でないためです。 –

+0

が削除されました。私のポイントに誤りがあります。 – Tursko

答えて

4

私はそれが

n = count-1 

ので、このラインであるかなり確信しているあなたは1を減算している理由を説明できますか? 10個の数字を入力する場合、countは10になります.1を引いた後は、配列の最初の9個のインデックスだけを反復します。

1を減算する必要がある場合(0または-1を入力するユーザーを考慮して)、最後のforループの条件を< =に変更します。

for(i = 0; i<=n; i++) 
+0

完璧な作業をしました。わぁ、ありがとう。私の単純な間違い。 – Tursko

+0

@TaylorRiley両方の方法で動作、この答えと他の答え。ユーザが '0'や' -1'を入力していないことを確認した後、カウンタを増やすことができます。それともジョルダンウィリスのために行くことができますか? –

5

代わりn=count-1;
書き込みn=count;を書くべきではありません。 count ++をループの最後に移動します。

#include <stdio.h> 

int main(void) 
{ 
    float numbers[10]; 
    int i; 
    int n; 
    int count =0; 
    for(i = 0; i<10; i++) 
    { 
     scanf("%f", &numbers[i]); 

     if(numbers[i] == -1) 
      break; 
     if(numbers[i] == 0) 
      break; 
count++; 
    } 


    n = count; 
    float sum = 0; 
    float average; 

    for(i = 0; i<n; i++) 
    { 
     sum = sum + numbers[i]; 
    } 
    average = sum/a; 

    printf("The average price of the %d products is %.2f.\n", n, average); 
    return 0; 

} 
+0

これを実行すると、最終印刷でnが正しく印刷されません。私は4つの値しか入力しないと、4の代わりに5を返します。 – Tursko

+0

@TaylorRileyは –

+0

を更新しました。私のn-1の解決策に終わりました。主な質問を修正しました。 – Tursko

2

このプログラムで考慮する必要があるのは2つあります。

1。 n = count-1;

for(i = 0; i<n; i++) 
The count variable contains the number of element in the array, while n has been assigned to count - 1 to access from the 0th position , but while iterating the loop condition `i<n` make the loop to run n-1 time (i.e 9 times in this case). 

和演算は、最後の配列要素を計算することができなかったように。

nは整数であるため、型変換は、平均値を算出しながら行わなければならないのに対し、
  • average = sum/a;

    変数の平均との和は、フロートです。

  • average = sum/(float)a;

    NOTE : a should be replaced by count , which hold the exact count of the element in array. 
    

    完全に修正されたコードは、 `私は最初のループの後に、あなたが持っている= 10 ''のカウント= 10 'そう' N = 9`については

    #include <stdio.h> 
    
    int main(void) 
    { 
        float numbers[10]; 
        int i; 
        int n; 
        int count =0; 
        for(i = 0; i<10; i++) 
        { 
         scanf("%f", &numbers[i]); 
         count++; 
         if(numbers[i] == -1) 
          break; 
         if(numbers[i] == 0) 
          break; 
        } 
    
    
        n = count-1; 
        float sum = 0; 
        float average; 
    
        for(i = 0; i<=n; i++) 
        { 
    
         sum = sum + numbers[i]; 
    
        } 
        average = sum/(float)count; 
    
        printf("The average price of the %d products is %.2f.\n", count, average); 
        return 0; 
    
    } 
    
    +0

    うん、ちょうど私の答えにそれを修正しました。どうもありがとうございます。完璧な仕事を終えた。現在少し疲れていて、このプログラムは私に笑ってくれました。ありがとうございました。 – Tursko

    関連する問題