通过c加上函数找到中位数

时间:2015-03-09 05:36:05

标签: c++ arrays

嗨我已经使这个功能找到了中位数,但没有得到3.5我得到3.我不明白为什么?任何人都可以指导我。谢谢。 :)

int median(int array[], int n)
{
  float med =0 ;
  int a=0;
  int b=0;
  float newMed=0;
    if (n % 2 ==0)
      a=n/2;
      b=(n/2)-1;
     med = (array[a] + array[b]);
     newMed = (med/2);
 //else
 //med = (n+1)/2;

 return newMed;
 }

int main()
{
  int array[6] = {1,2,3,4,6,7};
  cout<<"the median is: "<<median(array,6)<<"\n";
}

2 个答案:

答案 0 :(得分:1)

更改int median(int array[], int n)(作为返回int的函数无法返回3.5

float median(int array[], int n)  // Return type int -> float

当您的返回类型为int时,以newMed计算的返回值3.5将被无效转换为int 3。此代码大致相当于:

cout<<"the median is: "<< (int)median(array,6)<<"\n";

如果使用适当的警告标志(-W -Wall -O2,O2优化标志进行回归分析)编译程序,编译器应该警告您这样的错误。

答案 1 :(得分:1)

你可以使用这样的东西。

#include <iostream>
#include <algorithm>
using namespace std;
#define  SIZE 7
float getMedian( int *arry,int size) {
    sort(arry, arry + size);
    if(size%2){
      return arry[(size/2)];
    }
    else {
        return ((arry[(size/2) -1]+arry[size/2])/2);
    }
}
int main()
{
    int intArray[7] = {1,2,3,4,5,6,7};

    //Now we call the sort function

   std::cout << getMedian (intArray,SIZE) << std::endl;

return 0;
}