soup 發問時間: 電腦與網際網路程式設計 · 1 0 年前

函數可計算出陣列的平均值及標準偏差及排序問題

//寫出名為ave(),std(),sort()的函數可計算出陣列的平均值及標準偏差及排序

#include <iostream>

#include <cstdlib>

#include<cmath>

float ave(int A[10]);

float sto(int A[10]);

void sort(int A[10]);

using namespace std;

int main()

{

int A[10]={12,5,7,45,8,69,8,9,7,55};

int B[5]={14,25,56,32,7};

float ua,ub;

ua=ave(A,10);

ub=ave(B,5);

va=sto(A,10);

sort(A,10);

sort(B,5);

system("pause");

return 0;}

float ave(int A[10])

{ double sum=0;

for(i=0;i<10;i++)

sum+=A[i];

return sum/10;}

float sto(int A[10])

{ double sum2=0;

for(i=0;i<10;i++)

sum2+=pow(A[i]-ua,2);

return sqrt(sum2)/9;}

void sort(int A[10])

{ int i,j,temp;

for(i=0;i<9;i++)

for(j=1;j<10;j++)

if(A[i]<A[j])

{ temt=A[i];

A[i}=A[j];

A[j]=temp;}

cout<<A[i]<<'\t';

cout<<endl;

return;}

請問高手能否幫我改錯 many thanks

已更新項目:

正確解答

2 個解答

評分
  • Thomas
    Lv 6
    1 0 年前
    最佳解答

    include 指令 同 你的原程式 (因為 < 和 > 所夾 的答案 會被吃掉

    float ave(int*,int);

    float sto(int* A, int, float);

    void sort(int*, int);

    using namespace std;

    int main()

    {

    int A[10]={12,5,7,45,8,69,8,9,7,55};

    int B[5]={14,25,56,32,7};

    float ua,ub, va;

    ua=ave(A,10);

    cout << "ua= " << ua << endl;

    ub=ave(B,5);

    cout << "ub= " << ua << endl;

    va=sto(A,10, ua);

    cout << "va= " << va << endl; //deviation of array A

    sort(A,10);

    sort(B,5);

    system("pause");

    return 0;

    }

    float ave(int* A, int len)

    { double sum=0;

    for(int i=0;i<len;i++)

    sum+=A[i];

    return sum/len;

    }

    float sto(int* A, int len, float mean)

    { double sum2=0;

    for(int i=0;i<len;i++)

    sum2+=pow(A[i]-mean,2);

    return sqrt(sum2)/(len-1);

    }

    void sort(int*A, int len)

    {

    int i,j,temp;

    for(i=0; i < len-1 ;i++)

    for(j=i+1 ; j < len; j++)

    if(A[i] > A[j])

    {

    temp = A[i];

    A[i]=A[j];

    A[j]= temp;

    }

    for(i=0;i< len;i++)

    cout<<A[i]<< " ";

    cout<<endl;

    return;

    }

    2008-05-05 09:34:39 補充:

    (1)

    int A[10]={12,5,7,45,8,69,8,9,7,55};

    則表宣告 A[0], A[1],....,A[9] 這 9 個 元素的 陣列

    其中 A 為一個 pointer (指標) 指著 A[0]這個元素, 指標實際上就是位址

    所以, A 為 A[0]這個元素的位址

    @@@

    在 C/C++

    int* 為 指著 int 型態的資料 之 指標

    2008-05-05 09:34:58 補充:

    因為要算整個陣列的所有元素 的 平均

    所以當然傳入 A 指標 (如算 A 陣列平均)

    如此可知 A[0], 那 A[1] 所在位址為 A+1,.....,A[9] 我們都可取到

    註:

    C/C++ Compiler 會依 A 所指的資料之型態來加 Address距離

    若 A 為 37,814,080

    => A+1 為 37,814,084 (因 int 為 4 bytes)

    2008-05-05 09:38:11 補充:

    (2)

    float ave(int* A, int len)

    { double sum=0;

    for(....) //不知為何show不出,以...代替

    sum+=A[i];

    return sum/len;

    }

    A 名稱是對 function 內的變數名稱只在ave(){...}有效 與外部無關

    主程式以 ave(A, 10) 呼叫時

    是把主程式 A 指標傳給 ave(){...} 的 A

    2008-05-05 09:38:42 補充:

    換句話說

    float ave(int* XXX, int len)

    { double sum=0;

    for(...)

    sum+=XXX[i];

    return sum/len;

    }

    與上述的寫法, 完全一樣的作用

    所以

    主程式 呼叫 ave(B,5), 則傳回 B陣列平均

    2008-05-05 09:39:21 補充:

    (3)

    int main()

    {

    .

    .

    ua=ave(A,10); //@@

    .

    .

    va=sto(A,10, ua);

    .

    .

    }

    mean 是由 //@@ 已算出

    @@@

    另法,

    float sto(int* A, int);

    .

    .

    int main()

    {

    .

    va=sto(A,10);

    .

    }

    float sto(int* MMM, int length)

    { double sum=0;

    float mean = ave(MMM, length);

    for(...)

    sum+=pow(MMM[i]-mean,2);

    return sqrt(sum)/(length-1);

    }

    2008-05-05 09:39:50 補充:

    (3)

    int main()

    {

    .

    .

    ua=ave(A,10); //@@

    .

    .

    va=sto(A,10, ua);

    .

    .

    }

    mean 是由 //@@ 已算出

    @@@

    另法,

    float sto(int* A, int);

    .

    .

    int main()

    {

    .

    va=sto(A,10);

    .

    }

    float sto(int* MMM, int length)

    { double sum=0;

    float mean = ave(MMM, length);

    for(...)

    sum+=pow(MMM[i]-mean,2);

    return sqrt(sum)/(length-1);

    }

    2008-05-05 09:41:03 補充:

    另法

    float sto(int* A, int);

    .

    .

    int main()

    {

    .

    va=sto(A,10);

    .

    }

    float sto(int* MMM, int len)

    { double sum;

    float mean;

    int i;

    //算 mean

    sum = 0;

    for(...)

    sum+=A[i];

    mean= sum/len;

    //算 standard deviation

    for(...)

    sum+=pow(MMM[i]-mean,2);

    return sqrt(sum)/(len-1);

    }

  • 1 0 年前

    解釋的很詳細

    有空到嘉義市玩many thanks

還有問題?馬上發問,尋求解答。