大学物理实验 空气比热容比的测定 数据处理

东北林业大学 大学物理实验(A1,B)空气比热容比的测定
实验目的,器材,原理,自行参考实验指导书。
数据处理部分,使用C语言完成,代码如下:

#include <stdio.h>
#include <math.h>//后面使用到了log()函数与fabs函数,需要引入math库
int main()
{
	/*定义变量部分。其中p0是实验环境气压,后面会有详细说明。
	u1,u2为实验中采集的原始数据。sum是对空气比热容比进行累和,ave是多次实验得到的sum取的平均值
	delt是不确定度。
	数组a[8]是用来存储空气比热容比的结果,因为答主做实验的时候是采集了8次数据,取平均值,
	所以定义了a[8],如果次数不同,直接修改数组元素个数和循环控制语句即可。*/
	double p0,u1,u2,r,p1,p2;
	double sum,ave,delt; 
	double a[8];
	int i;//循环控制变量
	p0=0.9768;
/*p0为标准大气压,使用时务必注意是否与实验环境一致!
如不一致,请用仪器显示数值/100作为p0初值! */
	sum=0.0;
	printf("请输入u1,u2,每一组两个数字输入完后按enter键:"\n");
	printf("请注意:每组输入u1和u2时,必须要用英文状态下逗号分开!否则无法得到数据!"\n");
	for(i=0;i<8;i++)//循环操作8次,如果实验次数不同,请直接更改循环条件与数组容量即可
	{
		scanf("%lf,%lf",&u1,&u2);
	/*每组输入u1和u2时,必须要用英文状态下逗号分开!
	否则无法得到数据!*/
		p1=p0+(u1/2000.0);//由u1计算p1
		p2=p0+(u2/2000.0);//由u2计算p2
		a[i]=(log10(p0)-log10(p1))/(log10(p2)-log10(p1)); //计算空气比热容比
		printf("p1=%lf,p2=%lf,",p1,p2);//输出每一组计算出的p1,p2的值
		printf("r[%d]=%lf\n",i,a[i]);//输出每一组计算出的空气比热容比
		sum=sum+a[i];//空气比热容比累和 
	}
	ave=sum/8; //求空气比热容比的平均值 
	delt=fabs(ave-1.402);//利用绝对值求出相对不确定度 
	printf("ave=%lf\ndelt=%lf",ave,delt);//输出平均值(最终结果)和不确定度 
	return 0;	
 } 

几点说明:
1.数据类型问题:我没有记错的话,这个实验仪显示的电压值,应该是两位小数。(一年多了,记不清了)为了保证后面计算中间值的准确性,数据类型采用了double型(双精度类型)。
2.说到double型,就必须要注意几个问题:
C语言中常用的小数有两种类型,分别是float和double;float称为单精度浮点型,double称为双精度浮点型。float 始终占用4个字节,double 始终占用8个字节。
在输入double类型的时候,必须使用以下格式:

scanf(%lf,&a[i]);

只有使用%lf,才能正常的得到数据。
但是在输出的时候,使用以下两行语句其中之一都可以:

printf(%f,a[i]);
printf(%lf,a[i]);

根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。
但需要注意的是,printf中没有定义%lf,但是很多系统可能会接受它。确保可移植性,还是要使用%f。
答主写这个代码的时候,用的是DEV C++,是可以正常运行的。
3.使用VS(Visual Studio)注意
由于答主使用的是DEV C++,可以正常运行。但是VS中使用scanf()函数会报错,scanf()在读取时不检查边界,可能会造成内存泄露,所以VS提供了scanf_s()来替代,在调用时,必须提供给scanf_s一个数字以表明读取多少位字符,用法为:

scanf_s(%c”,&letter,sizeof(letter))

或者是在代码最前面,加上这样一条语句:

#define _CRT_SECURE_NO_WARNINGS

这样也不会让scanf()语句报错。

这个是去年当时做实验,因为不愿意算,也抱着玩一玩的心态,写了这个程序。有点草,比如不确定度和最终结果的有效数字,没有进行处理。分享一下,也是方便大家。

部分内容引用自
1.关于double的输入输出格式
2.在VS中使用scanf()不报错的方法
其中,第二个在VS中使用scanf()不报错的方法中,还提到了让每次创建的.c文件中都有#define _CRT_SECURE_NO_WARNINGS的方法,需要的请自行移步原文查阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值