双臂电桥测低电阻大物实验数据处理(C 实现)
非常抱歉 非常抱歉 对不起,上次大物实验处理小数点有一些错误,但得分是正确的,这是正确的,所以我们可以放心使用
- 用螺旋测微计测出各圆形金属棒的直径;在不同的地方测5次,取平均值。
- 根据实验电路图,将金属棒(铜棒、铝棒)安装在试验架上。R1,R2为1000,根据表格要求调整接入电路中金属棒的长度,然后调整R,使检流计指示为0,读取R的电阻值,最后使用(3),然后替换Rn=0.计算给定长度金属棒的电阻值Rx填入下表。
. 3.每个金属棒的值由公式(5)计算,并给出结果表达式。 参考:铜棒:1.694×10-8Ω?m 铝棒:2.7×10-8Ω?m
数据处理如下:
代码如下:
# include<iostream> # include <cmath> # include<string> # include<iomanip> using namespace std; ///
自定义输出小数点后需要的文件 int main() { int i,j; double Al[5]; //铝的直径 double Cu[5]; ///铜的直径 double Average1,Average2; double Al_R[8]; //铝的电阻 double Cu_R[8]; ///铜的电阻 double p1_Aver; double p2_Aver; double p1[8]; double p2[8]; //表示系数 double AlAverage[8]; double CuAverage[8]; int Al_L[8] = { 15.0,span class="token number">20.0,25.0,30.0,35.0,40.0,45.0,50.0}; int Cu_L[8] ={ 15.0,20.0,25.0,30.0,35.0,40.0,45.0,50.0}; double sumOne = 0.0; //以下六个变量是求解平均值是用到的中间变量 double sumTwo = 0.0; double sumThree = 0.0; double sumFour = 0.0; double sumFive = 0.0; double sumSix = 0.0; double p_one_Aver[8]; double p_two_Aver[8]; double AverEndOne[8]; double AverEndTwo[8]; double AvereyEndTwo; double AverEndThree[8]; double AverEndFour[8]; double AvereyEndFour; cout<<"输入所测铝的五组直径(以空格方式分隔开):"<<endl; for(i=0;i<5;i++) { cin>>Al[i]; sumOne += Al[i]; AlAverage[i] =sumOne / (i+1); Average1 = AlAverage[i]; //必须有一个中间变量,因为i有作用域 } cout<<"Al的五组直径测量平均值为:" << setprecision(8) << Average1 <<endl; cout<<"输入铝的八组所测电阻值(以空格方式分隔开):"<<endl; for(j=0;j<8;j++) { cin>>Al_R[j]; p1[j]= (( Al_R[j]*3.14* ( pow(Average1,2.0) ) )/(4*Al_L[j]))*0.01; cout<<"测得的第"<<j+1<<"次电阻率分别为"<<p1[j]<<endl; //此处既可以理解为一句一句执行,也可以理解为一次循环以此循环执行 //cout<<"输入铝的第"<<j+2<<"组所测电阻值(以空格方式分隔开):"<<endl; sumTwo +=p1[j]; p_one_Aver[j] =sumTwo/(j+1); p1_Aver =p_one_Aver[j]; //平均值的一种求解方法 } cout<<"Al电阻率的平均值为:"<<p1_Aver<<endl; for(int k=0;k<8;k++) { AverEndOne[k]=fabs(p1_Aver-p1[k]); //浮点型绝对值函数用fabs,能ton过是因为数组已经形成,现在只不过是对其引用? cout<<"第"<<k+1<<"组电阻率误差为:"<<AverEndOne[k]<<endl; sumFive +=AverEndOne[k]; AverEndTwo[k] = sumFive/(k+1); AvereyEndTwo = AverEndTwo[k]; } cout<<"平均电阻率误差为:"<<AvereyEndTwo<<endl; double E1 = AvereyEndTwo/p1_Aver; cout<<"相对误差为:"<<E1*100<<"%"<<endl<<endl; cout<<"输入所测铜的五组直径(以空格方式分隔开):"<<endl; for(i=0;i<5;i++) { cin>>Cu[i]; sumThree += Cu[i]; CuAverage[i] =sumThree / (i+1); Average2 = CuAverage[i]; //必须有一个中间变量,因为i有作用域 } cout<<"Cu的五组直径测量平均值为:" << setprecision(8) << Average2 <<endl; cout<<"输入铜的八组所测电阻值(以空格方式分隔开):"<<endl; for(j=0;j<8;j++) { cin>>Cu_R[j]; p2[j]= ( Cu_R[j]*3.14* ( pow(Average2,2.0) ) )/(4*Cu_L[j]); cout<<"测得的第"<<j+1<<"次电阻率分别为"<<p2[j]<<endl; //此处既可以理解为一句一句执行,也可以理解为一次循环以此循环执行 //cout<<"输入铝的第"<<j+2<<"组所测电阻值(以空格方式分隔开):"<<endl; sumFour +=p2[j]; p_two_Aver[j] =sumFour/(j+1); p2_Aver =p_two_Aver[j]; //平均值的一种求解方法 } cout<<"Cu电阻率的平均值为:"<<p2_Aver<<endl; for(k=0;k<8;k++) { AverEndThree[k]=fabs(p2_Aver-p2[k]); //浮点型绝对值函数用fabs,能ton过是因为数组已经形成,现在只不过是对其引用? cout<<"第"<<k+1<<"组电阻率误差为:"<<AverEndThree[k]<<endl; sumSix +=AverEndThree[k]; AverEndFour[k] = sumSix/(k+1); AvereyEndFour = AverEndFour[k]; } cout<<"平均电阻率误差为:"<<AvereyEndFour<<endl; double E2 = AvereyEndFour/p2_Aver; cout<<"相对误差为:"<<E2*100<<"%"<<endl; return 0; }
是不是被吓到啦,代码这么长
这个代码两部分除了变量名字不一样,其实是重复的,由于是对铝和铜所有的数据处理也都是一模一样的,
因此只复制上半部分也是可以的。不过执行结果还是很美观准确的!!!
执行结果:
有什么不足,欢迎大家交流哈!