2017-01-03 3 views
-2

このコードを書いて、10個の数字の配列で数値の最高の繰り返しを数えて印刷します。問題はこのプログラムはcounter++ではないのですが、番号は配列の最後の番号と同じです。数字の配列中の数字の最高の反復を数えるためのCプログラム

がここにコードされています

#include <stdio.h> 
#define SIZE 9 

int main() { 
    float Student[SIZE],grade,maxValue; 
    int i,j,k,slot,counter=0,maxCount=-1; 
    printf("Enter the grade of 10 students \n"); 
    for(i=0;i<=SIZE;i++){ 
     printf("Enter student %d grade : ",i+1); 
     scanf("%f",&Student[i]); 
    } 
    for(j=0;j<=SIZE;j++){ 
     grade = Student[j]; 
     counter = 0;  
     for(k=0;k<=SIZE;k++){ 
      if(k == j){ 
       continue; 
      } 
      if (grade == Student[k]){ 
       counter++; 
      } 
      if (counter > maxCount) { 
       maxCount = counter; 
       maxValue = grade; 
      } 

     } 
    } 

    if(maxCount == 0){ 
     printf("There are no duplicate numbers.\n"); 
    }else{ 
     printf("%.2f repeated %d times.\n",maxValue,maxCount); 
    } 
    return 0; 
} 
+4

未定義の動作: 'for(i = 0; i <= SIZE; i ++){'は配列の範囲外になります。 - > 'i Unimportant

+1

おそらく、デバッガを使うことを学ぶのが助けになるでしょう。 –

+0

@重要ではないSIZEは9です。配列のサイズはちょうど9です。数字が最後の数字に等しい場合はカウントされません。 –

答えて

0

まだバグがあるのになった後、あなたの質問が言うように、あなたは10個の数字を持っているし、 SIZEはまだ9に設定されています。下のコードは正常に動作しています。これはあなたのコードに似ていますが、いくつかの違いがあります。

#include <stdio.h> 
#define SIZE 10 

int main() { 
    float Student[SIZE],grade,maxValue; 
    int i,j,k,slot,counter=1,maxCount=1; 
    printf("Enter the grade of 10 students \n"); 
    for(i=0;i<SIZE;i++){ 
     printf("Enter student %d grade : ",i+1); 
     scanf("%f",&Student[i]); 
    } 
    for(j=0;j<SIZE;j++){ 
     grade = Student[j]; 
     counter = 1; 
     for(k=0;k<SIZE;k++){ 
     if (grade == Student[k] && j!=k) { 
       counter++; 
     } 
      if (counter > maxCount) { 
       maxCount = counter; 
       maxValue = grade; 
      } 

     } 
    } 

    if(maxCount == 1){ 
     printf("There are no duplicate numbers.\n"); 
    }else{ 
     printf("%.2f repeated %d times.\n",maxValue,maxCount); 
    } 
    return 0; 
} 
2

I、jは0から初期化され、条件が大き-1までチェックされます。したがって、両方のループでj<=SIZEからj<SIZEに条件を変更してください。

+0

サイズが定義されています。ユーザーは10の数字を入力します。これは0から8になります。 –

+2

そして、0を含む0から8は、... 9要素です。 – Unimportant

+0

@重要なテストをするための完全なコードを教えていただけますか?とにかくそれをテストしていますが、毎回同じ結果が得られます。 –

-1

私はそれを私の自己を固定し、私はif(k==j)にこのコードを追加:

if(Student[9]){ 
counter++; 
} 

、それはcontinue;

+3

いいえ、ちょうどいいえ...、未定義の動作に戻ります。 'if(k == j){continue;}を削除するだけです。 } '完全に。各番号は、それ自体と積極的に比較できるようにすべきです。 – Unimportant

関連する問題