身上无钱你莫邪

moye's c++ blog

c++计算标准差

终于走上重拾C++之路了,很激动,希望自己能保持良好的心态,学好它。
看的教材是钱能的《C++程序设计教程》,感觉不错,点得很透。
其中有这么一题:

定义一个数组,分别为:6,3,7,1,4,8,2,9,11,5。请创建一个向量,把数组的初值赋给它,然后对该向量求标准差(均方差)。

先确实一下算法,求标准差可以这样:
   1、求出平均数;
   2、 然后算出每个数和平均数的差的绝对值的平方;
   3、平方相加;再开方。

代码如下:
   
    int arr[]={6,3,7,1,4,8,2,9,11,5};
    vector
<int> list(arr,arr+10);
    
int pj = 0;        //平均数
    int count=0;    //总数
    double pfcount = 0;//平方和
    for(int i=0;i<list.size();i++)
        count
+=list.at(i);
    pj
=count/list.size();

    
for(int i=0;i<list.size();i++){
        
int cha = abs(list.at(i)-pj);
        cout
<<""<<(i+1)<<":"<<list.at(i)<<"  差的绝对值:" << cha<<endl;
        pfcount
+=pow((double)cha,2);        //离差平方和
    }
    
    pfcount
=pfcount/list.size();            //离差平方和平均

    cout
<<"平均数:"<<pj<<endl;
    cout
<<"标准差:"<<sqrt(pfcount)<<endl;

posted on 2008-12-11 13:55 莫耶 阅读(8736) 评论(2)  编辑 收藏 引用

评论

# re: c++计算标准差 2009-05-14 22:39 m

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

int main(void)
{
int a[] = {6, 3, 7, 1, 4, 8, 2, 9, 11, 5};
int length = sizeof(a) / sizeof(a[0]); // 获取数组的长度
vector<int> va(a, a + length);

// 求标准差
double sum = 0.0;
for (vector<int>::iterator iter = va.begin(); iter != va.end(); ++iter) // 求和
{
sum += *iter;
}
double avg = sum / va.size(); // 求平均值
sum = 0.0;
for (vector<int>::iterator iter = va.begin(); iter != va.end(); ++iter) // 求和
{
double tmp = *iter - avg;
//sum += pow(tmp, 2.0);
sum += tmp * tmp;
}
double s = sqrt(sum / va.size() );

cout << "标准差为: " << s << endl;

return 0;
}  回复  更多评论   

# re: c++计算标准差 2010-11-19 19:48 ss

正确答案吗?我怎么见到个答案是2的呀?  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


公告

导航

<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(3)

随笔档案

友情链接

搜索

最新评论

阅读排行榜

评论排行榜