72294


温度を入力して、最大値、最小値の温度の番号とその温度を出力してくれるプログラムを作成したいのですが、  
最大最小温度はきちんと出力されるものの、その要素の番号が正しく出力されません。

私は以下のようにプログラムを作成しました。

[code]

    #include <stdio.h>
    #define NUMBER 6
    
    void readDoubleArray(double a[],int n)
    {
        int i;
        for(i=0;i<n;i++){
          printf("temperature[%d]: ",i);
          scanf("%lf",&a[i]);
       }
    }
    
    void maxDoubleArray(double a[],int size)
    {
       int i;
       double max;
       max=a[0];
       for(i=0;i<size;i++){
         if(max<a[i]){
           max=a[i];
         }
       }
       printf("最高気温:temperature[%d]=%0.2f\n",i,max);
    }
    
    void minDoubleArray(double a[],int size)
    {
       int i;
       double min;
       min=a[0];
       for(i=0;i<size;i++){
         if(min>a[i]){
           min=a[i];
         }
       }
       printf("最低気温:temperature[%d]=%0.2f\n",i,min);
    }
    
    double heikin(double a[],int n)
    {
       int i;
       double s,h;
       s=0.0;
       for(i=0;i<n;i++){
         s=s+a[i];
         h=s/n;
       }
       return h;
    }
    
    int main(void)
    {
        double a[100];
       
        readDoubleArray(a, NUMBER);
        maxDoubleArray(a,NUMBER);
        minDoubleArray(a,NUMBER);
        printf("平均気温:%0.2f度\n",heikin(a,NUMBER));
        return 0;
    }
    
[/code]

出力結果  
$ ./a.out  
temperature[0]: 1  
temperature[1]: 2  
temperature[2]: 3  
temperature[3]: 4  
temperature[4]: 5  
temperature[5]: 6  
最高気温:temperature[6]=6.00 ＝＞tempareture[5]  
最低気温:temperature[6]=1.00 ＝＞tempareture[0]  
平均気温:3.50度

どのようにすれば、期待している結果となるでしょうか。  
また、どこが正しくないのでしょうか。


CC BY-SA 4.0
2020-11-30T09:36:00.300
72292
2020-11-30T10:53:55.160
41837
question
c
要素番号の最大値の出力結果がおかしくなる


最高気温と最低気温を探すコードに見てください：

[code]

       for(i=0;i<size;i++){
         if(max<a[i]){
           max=a[i];
         }
       }
       printf("最高気温:temperature[%d]=%0.2f\n",i,max);
    
[/code]

最高/最低気温を探すために、すべてのアレイ要素を比較する必要ですので、結果を出力時に、変数`i`の値はいつでも`size`（つまり`6`）になります。  
`max`/`min`を一時決定するときに、その番号`i`を記録し、再実行して結果が正しいです。（`max`も同様）

[code]

       int i;
       int indx;    // <- 新しい変数
       double min;
       min=a[0];
       indx=0;      // <- 初期化
       for(i=0;i<size;i++){
         if(min>a[i]){
           min=a[i];
           indx=i;　　// <- 番号を記録
         }
       }
       printf("最低気温:temperature[%d]=%0.2f\n",indx,min);  // <- iではなく、indxを出力
    
[/code]


CC BY-SA 4.0
2020-11-30T10:53:55.160
72294
2020-11-30T10:53:55.160
41425
72292
answer