2016-05-29 13 views
-2
#include<stdio.h> 
#include<stdlib.h> 
double median(int n, int arr[]) 
{ 
    int i, j, a; 
    for (i = 0; i < n; ++i) 
    { 
     for (j = i + 1; j < n; ++j) 
     { 
      if (arr[i] > arr[j]) 
      { 
       a = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = a; 
      } 
      if (arr[i] > arr[j]) 
      { 
       a = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = a; 
      } 
     } 
    } 
    if (n % 2 == 0) 
    { 
     return((arr[n/2] + arr[n/2 - 1])/2.0); 
    } 
    else { 
     return arr[n/2]; 
    } 
    for (i = 0; i < n; i++) 
    { 
     printf("%d\n", arr[i+1]); 
    } 
} 
int main() 
{ 
    int arr[100] = { 0 }; 
    int i, n, sum = 0; 
    printf("How many numbers would you like to enter?"); 
    scanf_s("%d", &n); 
    while (n > 100 || n < 0) 
    { 
     printf("Amount of numbers should be less than 0 and more than 100\n"); 
     scanf_s("%d", &n); 
    } 
    for (i = 0; i < n; i++) 
    { 
     scanf_s("%d", &arr[i + 1]); 
    } 
    printf("%f", median(n, arr)); 
    system("pause"); 
} 

私の関数が中央値関数を取得しないようです。この関数は配列を細かくソートしますが、中央値を見つけることは問題です。関数が中央値を見つけるたびに、別の値を出力します。どんな種類の助けも高く評価されます。配列の中央値の検索

+3

あなたは自分自身を助けるために、デバッガを使用したい場合があります。それは楽しいです! ;;) – alk

+2

'scanf_s("%d "、&arr [i + 1]);'はscanf_s( "%d"、&arr [i]); 'でなければなりません。あなたは 'median'関数でそれを使います。 – mch

+0

この最終ループの 'median()'は決して呼び出されないデッドコードです。 – alk

答えて

1

私はあなたのコードを少し修正しました、そして今はうまくいきます。第2のifの条件は、medianの内部のforループには必要ありません。私はまた、コマンドを削除し、main関数(arr[i+1]arr[i]に変更)で配列インデックスを正しく設定しました。私も削除しました

とscanf_sをscanfに変更しました。

修正コードは:

#include<stdio.h> 
#include<stdlib.h> 
double median(int n, int arr[]) 
{ 
    int i, j, a; 
    for (i = 0; i < n; i++) 
    { 
     for (j = i + 1; j < n; j++) 
     { 
      if (arr[i] > arr[j]) 
      { 
       a = arr[i]; 
       arr[i] = arr[j]; 
       arr[j] = a; 
      } 

     } 
    } 

    for (i = 0; i < n; i++) 
    { 
     printf("%d\n", arr[i]); 
    } 
    if (n % 2 == 0) 
    { 
     return((arr[n/2] + arr[n/2 - 1])/2.0); 
    } 
    else { 
     return arr[n/2]; 
    } 

} 
int main() 
{ 
    int arr[100] = { 0 }; 
    int i, n; 
    printf("How many numbers would you like to enter?"); 
    scanf("%d", &n); 

    for (i = 0; i < n; i++) 
    { 
     scanf("%d", &arr[i]); 
    } 
    printf("%f", median(n, arr)); 

return 0; 
} 
+1

問題点を強調する必要があります。 scanf(arr [i + 1]の代わりにarr [i])の配列メンバの索引付け – eyalm