[问题] 标准差的程式码

楼主: williams7442 (我只剩下嘴砲了)   2014-05-31 18:31:04
这是从百度知道搜寻到的
可是小弟有几行一直看不太懂
#include <stdio.h>
#include <math.h>
#define MAX 50
main(){
char *p,str[301]; /*int 最大为5位数,加上分隔空格为6*50=300字节*/
int arr[MAX];
int i,num,max,min,tem;
float ave,var,stdvar;
gets(str);
p=(char *)strtok(str," ");
if(p!=NULL)
arr[0]=atoi(p); /*atoi(p)将字串常数转为整数*/
//arr[0]=atoi(p) 例如输入:5 4 3 9 只读到5?
i=1;
while(p!=NULL){
p=(char *)strtok(NULL," "); //分别读取 4 3 9
if(p!=NULL){
arr[i]=atoi(p); //arr[1]=4 arr[2]=3 arr[4]=9 是这个意思?
i++;
}
}
num=i; //i=4,输入4个数字
min=32767;
max=0;
//怎么不设成min=0;max=32767;
tem=0;
for(i=0;i<num;i++){
if(arr[i]>max)
max=arr[i];
if(arr[i]<min)
min=arr[i];
tem+=arr[i];
} //for到 }这有点一头雾水,这是什么意思?
ave=(float)tem/num;
tem=0;
for(i=0;i<num;i++)
tem+=(arr[i]*arr[i]-ave*ave); //个别输入数平方总和-平均数的平方?
var=(float)tem/num;
stdvar=sqrt(var);
printf("\n数字个数: %d",num);
printf("\n最大值: %d ",max);
printf("\n最小值: %d",min);
printf("\n平均值: %.2f",ave);
printf("\n方差: %.2f ",var);
printf("\n标准差: %.2f ",stdvar);
getch();
}
这个程式输入 1 46325
46325大概在超出一点点会让标准差的平方(方差) 超过5XXXX-XXXX约9位数字
int不是至少2147483647吗? 10位数字
之后标准差会出现 -1.#J这又是什么意思
方差也变成负数了
作者: damody (天亮damody)   2014-05-31 20:19:00
会有 -1.#J是数字爆炸了
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-05-31 21:27:00
你自己写一个找最小值的程式min设0看看
楼主: williams7442 (我只剩下嘴砲了)   2014-06-01 01:05:00
数字上限爆炸的情况不知道怎么解决
作者: MOONRAKER (㊣牛鹤鳗毛人)   2014-06-01 12:40:00
你以为2147483647的平方根有多大…

Links booklink

Contact Us: admin [ a t ] ucptt.com