2017-03-15 9 views
1

誰かが間違っていることを説明できますか?配列を使ってパーセンテージ配列の最大値を探し、その量と年を対応する年配列に表示する必要があります。配列の最大値を求める関数を使用する

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

int findHighNumber (double percentages[], int elements); 

int main (void) 
{ 

    int index; 
    int elements; 


    int years[] = {2000, 2002, 2004, 2006, 2008, 2010, 2012}; 
    double percentages[] = {6.7, 6.6, 8, 9, 11.3, 14.7, 14.6}; 
    int sampleSizes[] = {187761, 444050, 172335, 308038, 337093, 1000, 346978}; 


    int high = findHighNumber(percentages, elements); 
    printf ("%i had the highest percentage with autism at %.2lf%%.\n", years[high], percentages[high]); 


    return 0; 
} 

int findHighNumber (double percentages[], int elements) 
{ 
    int index, high; 
    high = percentages[0]; 

    for (index = 1; index < elements; index++) 
     if (high < percentages[index]) 
     { 
     high = percentages[index]; 
    } 
    return high; 
} 
+0

最大値の 'index'を値自体に沿って格納し、それを返す必要があります。また、関数の名前を 'findIndexOfMax'に変更して、何をすべきかを明示します。 – Lou

+0

ありがとう!私はそれを働かせました。 –

答えて

2

まず、あなたはmain()elements変数を宣言する必要があります。

ループ内の変数elementsを変更しないでください。 これを行うと、現在の最大値が変更されるたびに、次の要素の後でループが停止するようにプログラムされます。実際の最大値が不足している可能性があります。

次に、Bobさんが言ったように、最大​​ののインデックスを返す必要があります。この方法で、対応するsampleSize、またはyearを取得できます。
years[high]を実行すると、アレイインデックス
としてのパーセンテージが使用されています。これは{0,1,2,3,4,5にとどまるインデックスではなく[0,100]で実際の値をとることができます、6}。

さらにhighの変数に格納すると、値が切り捨てられます。 doubleという変数に格納することをお勧めします。

のでfindHighNumber()はなることができますいくつかの小さなアドバイス、そして、

int main (void) 
    { 
      int years[] = {2000, 2002, 2004, 2006, 2008, 2010, 2012}; 
      double percentages[] = {6.7, 6.6, 8, 9, 11.3, 14.7, 14.6}; 
      int sampleSizes[] = {187761, 444050, 172335, 308038, 337093, 1000, 
        46978}; 
      int elements = sizeof(percentages)/sizeof(*percentages); 
      int high_index = findHighNumber(percentages, elements); 

      printf ("%i had the highest percentage with autism at %.2lf%% (sample" 
        "size was %d).\n", years[high_index], percentages[high_index], 
        sampleSizes[high_index]); 

      return 0; 
    } 

int findHighNumber(double percentages[], int elements) 
    { 
      int index; 
      double high; 
      int high_index; 

      high_index = 0; 
      high = percentages[high_index]; 

      for (index = 1; index < elements; index++) 
        if (high < percentages[index]) { 
          high = percentages[index]; 
          high_index = index; 
        } 

      return high_index; 
    } 

main()機能は、今のようなものになることができます

  1. findHighNumber()のプロトタイプを入れています必要ではない、ちょうどその場所の上に関数を定義するeded。このように、の場合、実際には関数のプロトタイプを置く必要があります。これは、(例えば、相互に再帰的な関数のように)強制されたことを示唆し、コードを短縮します。
  2. は、あなたがそのように、例えば、struct autism_sampleを定義する必要があります。

    struct autism_sample autism_samples[] = { 
        { 
         .year = 2000, 
         .sample_size = 187761, 
         .percentage = 6.7, 
        }, 
        { 
         .year = 2002, 
         .sample_size = 444050, 
         .percentage = 6.6, 
        }, 
        ... 
    }; 
    

    この方法では、あなたのデータがで構成されています

    struct autism_sample { 
         int year; 
         int sample_size; 
         double percentage; 
    }; 
    

    この方法は、あなただけの1つの配列を定義する必要がありますより論理的な方法、エラーが発生しにくい、findHighNumber()の実装では、最大または直接のインデックスを返すために、最大値を保持する要素へのポインタを返すようにすると、インデックスは役に立たなくなります。
    しかも、それがシリアライズ(UN)に簡単です...

+0

ありがとう! –

+0

歓迎です^^ – ncarrier

2

これはここにタイプミスである場合、私はわからないんだけど、

int high = findHighNumber(percentages, elements); 

を呼び出している間、それはあなたが変数elementsが定義されていない表示されます。それはfindHighNumber()内、elementsは、関数にローカルなので、elements = index+1;としてのみ使い方は無用である、あなたは

最後に
if (high < percentages[index]) 
     { 
     high = percentages[index]; ///after this. 

そば(終値}が不足して)別の構文エラーを持っている、と述べました。

+0

ありがとう!あなたの言葉を修正しましたが、私はまだ正しい数字を得ていません。 –

1

データを格納して使用する方法を考えれば、上位の要素がある場合はその値ではなく、値のインデックスを返すべきです。 また、初期化されていない値を渡している間は、配列の適切なサイズを渡す必要があります(関数内で変更しないでください)。

+0

私はプログラミングに約4週間かかるので、私と一緒にいてくださいが、私は確かに高い要素があるインデックスを返して何を意味するか分からない。あなたは冷たい例を示していますか?私は "要素=インデックス+1"を削除しました –

+0

@ JessicaBlakeそれはncarrierがすでにあなたの疑問を解決したように見えます;) –

1

値の代わりにインデックスを送信する必要があります。自動的に配列のサイズを計算した

int elements = sizeof(percentages)/sizeof(*percentages); 

int elements = 7; 

またはより良い:

int findIndexOfMax (double percentages[], int elements) { 

    int index = 0; 
    int highIndex = 0; 
    double high = 0.0; 
    high = percentages[highIndex]; 

    for (index = 1; index < elements; index++) 
    { 
     if (high < percentages[index]) 
     { 
      high = percentages[index]; 
      highIndex = index; 
     }  
    } 

    return highIndex; 
} 
+0

あなたは正しいです。既に変更を適用しました。 – jyap

0

あなたは最高値に何を返すべきではありませんが、あなたはそれのインデックスを返す必要があります。..間違った値を返すされています。

あなたが呼んでいる機能にあなたが望む結果を単に印刷することができます。

また、可変要素を初期化しているとは限りません。

関連する問題