2017-05-04 9 views
-6

私は、このプログラム内の関数で数値の平均を計算したいのですが、それは動作しません:2つの整数パラメータを持つ関数でdoubleまたはfloatを返すことはできますか?

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

int i; 
int size = 6; 

int main() { 
    int arr[6] = {1, 2, 3, 4, 5, 6}; 

    avg (arr, & size); 

    return 0; 
} 

double avg (int a[], int *n) { 
    int sum = 0; 
    double average; 

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

をしかし、私は代わりに同じシンプルな空の機能でそれを行う場合は、それが正常に動作します:

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

int i; 
int size = 6; 

int main() { 
    int arr[6] = {1, 2, 3, 4, 5, 6}; 

    avg(arr, & size); 

    return 0; 
} 

void avg (int a[], int *n) { 
    int sum = 0; 
    double average; 

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

    average = (double) sum/*n; 
    printf("%lf", average); 
} 

これら2つのボイド関数と単純な関数の違いは何ですか?

+0

「単純void関数」とは何ですか? –

+3

"それはうまくいかない"と正確にはどういう意味ですか?何を期待していたのですか?代わりに何が起こるのですか? – stakx

+5

1)mainの前に 'double avg(int a []、int * n);'を宣言し、2)返された結果を出力しないようにしてください。 ... –

答えて

2

最初の問題は、main()で使用する前に関数を宣言していないことです。それを呼び出す前に、宣言またはプロトタイプを提供してください。

double avg(int a[], int *n); 
int main() { 
... 

第二に、最初の実装では、あなたは

を期待通りに動作します、

avg (arr, & size) ; // useless statement 

はちょうどそれを変数に戻り値を格納し、印刷関数の戻り値を格納していません

double average = avg (arr, & size); 
printf("%lf", average); 
+0

あなたはそれを試しましたか? –

+1

ありがとう!私は、関数のプロトタイプを宣言しなければならないことを知らなかった。私は主にvoid関数を使用していましたが、プロトタイプ宣言もなく機能していました。 – jaraipali

+0

@jaraipali宣言は、呼び出し前に定義していない限り、プログラムで使用しているすべてのタイプの関数に必要です。 –

関連する問題