以下这个程序是一个大学<<物理实验>>数据处理程序,可以算平均值,残差,标准偏差,和总不确定度,只要你输入数据,

Benjamin_Hua 2003-04-25 12:11:48

学了<<物理实验>>的人都知道,物理实验最麻烦的是数据处理,现在都是信息时代了,那种含有十几位小数的数据居然还要用手来一个个地算,真是太对起自己了,以下这个程序可以算平均值,残差,标准偏差,和总不确定度,只要你输入数据,





#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX 20

typedef struct wuli{
float d[MAX];
char name[10];
int LEN;
float ccha[MAX]; /*残差数组*/
float avg; /*data的平均值*/
double sx; /*标准偏差Sx*/
double DU; /*总不确定度*/
}wulidata;
wulidata *InputData();
void average(wulidata *wl);
void CanCha(wulidata *wl);
void BZPianCha(wulidata *wl);/*标准偏差*/
void BQDdu(wulidata *wl);/*总不确定度*/
void output(wulidata *wl);


/*----------------------------------------------------------*/
void line()
{
int i;
printf("\n");
for(i=0;i<74;i++)
printf("=");
printf("\n");
}
/*-------------------------------------------------------*/
wulidata *InputData()
{

int i=0,k;
float da;
char Z=0;
wulidata *wl;
wl=(wulidata *)malloc(sizeof(wulidata));
printf("请为你要处理的数据起一个名字:");
scanf("%s",wl->name);
printf("\n下面请你输入数据%s具体数值,数据不能超过MAX个\n",wl->name);
printf("当name='#'时输入结束\n");
do{
printf("%s%d=",wl->name,i+1);
scanf("%f",&da);
wl->d[i]=da;
i++;
}while(wl->d[i-1]!=0.0&&i<MAX);
wl->LEN=i-1;
do{
printf("你输入的数据如下:\n");
for(i=0;i<wl->LEN;i++)
printf("%s%d=%f\t",wl->name,i+1,wl->d[i]);
printf("\n你是否要作出修改(Y/N)?");
while( getchar()!='\n');
Z=getchar();

if( Z=='y'||Z=='Y'){
printf("你须要修改哪一个元素,请输入其标号i=(1~%d)\n",wl->LEN);
while( getchar()!='\n');
scanf("%d",&k);
printf("\n%s%d=",wl->name,k);
scanf("%f",&(wl->d[k-1]));
}
else if(Z=='n'||Z=='N')
printf("OK!下面开始计算。");

}while(Z!='N'&&Z!='n');
return(wl);
}
/*--------------------------------------------------------------------*/
void average(wulidata *wl)
{
float ad,sum=0;
int i;
for(i=0;i<wl->LEN;i++)
{
sum=sum+(wl->d[i]);
}
ad=sum/(wl->LEN);
wl->avg=ad;
}
/*-------------------------------------------------------------------*/
void CanCha(wulidata *wl)
{
int i;
for(i=0;i<wl->LEN;i++)
wl->ccha[i]=(wl->d[i])-(wl->avg);
}
/*---------------------------------------------------------------*/
void BZPianCha(wulidata *wl)/*标准偏差*/
{
double sum;
int i;
sum=0;
for(i=0;i<wl->LEN;i++)
sum=sum+pow(wl->ccha[i],2);
wl->sx=sqrt(sum/(wl->LEN-1));
}
/*-------------------------------------------------------------*/
void BQDdu(wulidata *wl)/*总不确定度*/
{
int k=0;
double A,B,y;
line();
printf("\n很抱歉,求总不确定度,首先要知道仪器误差。你可以选择你所用的实验仪器或自定义\n");
printf("1..钢尺(0.3mm) 2..游标卡尺(0.02mm) \n3..螺旋测微计(0.004mm)\n 4..自定义. ");
printf("\n");
while(getchar()!='\n');
while(k<1||k>4){
scanf("%d",&k);

if(k>=1&&k<=4){
switch(k){
case 1: y=0.3;break;
case 2: y=0.02;break;
case 3: y=0.004;break;
case 4:
printf("请输入仪器误差\n");
scanf("%f",&y);
break;
}
A=pow(wl->sx,2);
B=pow(y,2);
wl->DU=sqrt(A+B);
}
else{
printf("输入错误!");}
}
}
/*--------------------------------------------------------------------*/
void output(wulidata *wl)
{
int i;
printf("\n");
line();
printf("你输入的数据如下:\n");
for(i=0;i<wl->LEN;i++)
{printf("%s%d=%f\t",wl->name,i+1,wl->d[i]);}
printf("\n");
printf("\n\t数据%s的平均值(A)%s=%f",wl->name,wl->name,wl->avg);
line();
printf("数据的残差如下:\n");
for(i=0;i<wl->LEN;i++)
{printf("△%s%d=%s%d-(A)%s=%f\t\t",wl->name,i+1,wl->name,i+1,wl->name,wl->ccha[i]);}
line();
printf("求得标准偏差Sx=√【∑(△Xi)^2/(n-1)】 \n");
printf("Sx=%f",wl->sx);
printf("\n");
printf("总不确定度△=√【△A^2+△B^2】\n");
printf("%s的总不确定度△=%f\n\n",wl->name,wl->DU);
}
/*================================================================*/
main()
{
wulidata *Hua=NULL;

Hua=InputData();
average(Hua);
CanCha(Hua);
BZPianCha(Hua);/*标准偏差*/
BQDdu(Hua);/*总不确定度*/
output(Hua);
getch();
}
...全文
2040 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
silently 2003-04-25
  • 打赏
  • 举报
回复
不错不错啊,你是哪个学校的阿,呵呵,我们做物理实验也好烦阿,不过我没有编程序,我是用EXCEL做的模版处理的数据,偷个懒:)
messagebox 2003-04-25
  • 打赏
  • 举报
回复
呵呵,我最近做了一大堆的化工原理实验处理程序
forever_cd 2003-04-25
  • 打赏
  • 举报
回复
兄弟,问问题?不像呀~~~
接分~~~~~~~~~
Benjamin_Hua 2003-04-25
  • 打赏
  • 举报
回复
Sorry 有一个小错误------
*****************************printf("当name='0'时输入结束\n");
river_of_sky 2003-04-25
  • 打赏
  • 举报
回复
不过我们学校要求实验报告里面没有数据处理过程(老长老长的)的要扣很多分,所以,虽然写过,就用过一次,就不敢用了

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧