注册 登录
编程论坛 数据结构与算法

这种错误不是第一次,可会死就是不会改!!求助,谢谢!

jj369258 发布于 2011-11-08 18:57, 548 次点击
某次考试结束后,需要分析考试成绩的一些情况,例如,需要分析学生成绩之间相差是否很大,也就是分数偏离平均值的程度如何,偏离得越厉害表示两极分化越严重,此时可利用统计学中“标准差”来进行计算。对于离散的随机变量,方差的计算公式为:



Input
第一个正整数给定测试用例的个数k。
对于每个测试用例有2行,第一行有一个正整数表示实验数据的个数n(0<n<=1000)。其后的一行中有n个学生的成绩x(0<=x<=100),成绩可能带有一位小数。

Output
输出按公式计算得到的标准差,结果保留2位小数。

Sample Input
1
10
90 85 73.5 64 90.5 76 82 97 61 83
Sample Output
11.61


代码=======

#include<malloc.h>
#include<math.h>
#include<iostream>
#include<iomanip>
using namespace std;

int *Make1DArray(int line)
{
    double *p=NULL;
    p=(double *)malloc(sizeof(double *)*line);
    if(p==NULL)
        //return p;
    return 0;
}

void Diliver1DArray(double *p,int line)
{
    int i;
    for(i=0;i<line;i++)
    {
        free(p+i);
    }
    p=NULL;
}
int main()
{
    int i,j,line;
    double *p,sum=0,everage,all=0;
    double dx;//dx表示方差
    cin>>line;
    p=Make1DArray(line);//就是这句有问题
    for(i=0;i<line;i++)
    {
        cin>>p[i];
    sum=sum+p[i];
    }
    everage=sum/(line*1.0);
    for(j=0;j<line;j++)
    {
        all=all+(everage-p[j])*(everage-p[j]);
    }
    dx=sqrt(all/(line*1.0));
    cout<<setprecision(2)<<dx;
    Diliver1DArray(p,line);
    return 0;
}
   


   

2 回复
#2
Toomj2011-11-08 19:46
int *Make1DArray(int line)
{
    double *p=(double *)malloc(line*sizeof(double));
    if(!p) exit(0);
    return p;
}
#3
jj3692582011-11-08 20:19
还是有错,而且你的这个函数体也报错,错误更多了!!
1