71014


タイトルの通り、分散と平均を求めるC言語プログラムを実装したいのですが、main関数部分でエラーが出てしまいます。

エラーメッセージが何を言っているのかよくわからなかったので、聞いた次第です。  
私のプログラムはどこが間違っていますか。また、どこを修正すれば期待している結果がコンパイルさせるのですか。  
回答よろしくお願いします。

**エラーメッセージ**

[code]

    ex1505.c: In function ‘main’:
    ex1505.c:66:28: warning: passing argument 2 of ‘ave_var_double_array’ makes integer from pointer without a cast [-Wint-conversion]
         ave_var_double_array(a,&ave,num,&var);
                                ^
    ex1505.c:39:6: note: expected ‘int’ but argument is of type ‘double *’
     void ave_var_double_array(double a[], int size, double *ave, double *var)
          ^~~~~~~~~~~~~~~~~~~~
    ex1505.c:66:33: warning: passing argument 3 of ‘ave_var_double_array’ makes pointer from integer without a cast [-Wint-conversion]
         ave_var_double_array(a,&ave,num,&var);
                                     ^~~
    ex1505.c:39:6: note: expected ‘double *’ but argument is of type ‘int’
     void ave_var_double_array(double a[], int size, double *ave, double *var)
          ^~~~~~~~~~~~~~~~~~~~
    
[/code]

**ソースコード**

[code]

    #include <stdio.h>
    
    /* 要素数sizeの実数配列aに順に入力する */
    
    **void readDoubleArray(double a[], int size)**
    {
        int i;
        for(i=0;i<size;i=i+1) {
            printf("%d番目?",i=i+1);
            scanf("%lf" ,&a[i]);
        }
    }
    
    /* 要素数sizeの実数配列aを順に出力する */
    void printDoubleArray(double a[], int size)
    {
        int i;
        for(i=0;i<size;i=i+1) {
            printf("%f ",a[i]);
        }
        printf("\n");
    
    }
    
    
    /* 実数xの2乗を返す */
    double square(double x)
    {
        
        return x*x;
        
    }
    
    /* 要素数sizeの実数配列aの平均を *ave に，分散を *var に格納する */
    void ave_var_double_array(double a[], int size, double *ave, double *var)
    {
        int i;
        double sum=0.0, dsum=0.0;
        for(i=0;i<size;i=i+1) {
            sum=sum+a[i]; 
           *ave=sum/size;
        }
        for(i=0;i<size;i=i+1) {
            dsum=dsum+(a[i]-*ave)*(a[i]-*ave); 
           *var=dsum/size;
        }
    }
    
    int main(void)
    {
        double a[100], ave, var ;
        int num;
         
        printf("データ数? ");
        scanf("%d", &num);
    
        readDoubleArray(a, num);
        printDoubleArray(a, num);
      
        ave_var_double_array(a,&ave,num,&var);
    
        
        printf("平均: %f, 分散: %f\n", ave, var);
    
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2020-10-08T06:22:13.780
71012
2020-10-08T06:35:45.720
2020-10-08T06:30:05.600
3060
41837
question
c
分散と平均を求めるプログラムを作成したいのですが、main関数の実装方法がよくわかりません


関数の定義部分と呼び出し部分とで型が一致していない、というエラーでしょう。  
コメントでも指摘のある通り、引数を渡す順番が間違っているのではないでしょうか？

**定義:** (double, **int** , double, double)

[code]

    void ave_var_double_array(double a[], int size, double *ave, double *var)
    
[/code]

**呼び出し:** (double, double, **int** , double)

[code]

    double a[100], ave, var ;
    int num;
    
    ave_var_double_array(a,&ave,num,&var);
    
[/code]


CC BY-SA 4.0
2020-10-08T06:35:45.720
71014
2020-10-08T06:35:45.720
3060
71012
answer