迈克尔逊干涉仪.docx
《迈克尔逊干涉仪.docx》由会员分享,可在线阅读,更多相关《迈克尔逊干涉仪.docx(10页珍藏版)》请在冰豆网上搜索。
![迈克尔逊干涉仪.docx](https://file1.bdocx.com/fileroot1/2023-1/1/f4cfa94e-2cef-4b64-9fa5-7cf4b4e9ad4a/f4cfa94e-2cef-4b64-9fa5-7cf4b4e9ad4a1.gif)
迈克尔逊干涉仪
迈克尔逊干涉测波长的c语言程序
这个程序是我将c语言用在处理大物实验的数据上,此程序是处理迈克尔逊干涉实验数据的c语言程序,这个程序经过我反复的修改与验证,不但能准确计算实验结果,而且赋予了它智能化,能判断误差大的实验数据,还能将数据结果存入c盘下的txt新建文件夹中,方便将字体放大查看,或存入手机中查看!
好了,多的我就不说了,大家用了就知道了!
我上传的文档分为5个部分:
1.我做实验时所测得的数据
2.我写的实验报告的数据处理部分
3.我在电脑上的运行结果
4.程序源代码
5.数据输出文件
1.下面是我做实验时所测得的数据:
单位:
mm
d0
d1
d2
d3
d4
d5
冒出
31.66699
31.68391
31.70046
31.71728
31.73402
31.75091
缩进
31.47001
31.45342
31.43753
31.42128
31.40479
31.38869
2.下面是我写的实验报告的数据处理部分:
(1)冒出Δd1的计算:
(2)缩进Δd2的计算:
(3)Δd的计算
(4)波长λ的计算
(5)相对误差的计算
E=|λ测量-λ标准|/λ标准
(6)绝对误差的计算
Δλ=Eλ测量
(7)测量结果:
λ=λ±Δλ=(6.6±0.3)×102nm
E=4.3%
3.下页是我运行的结果:
4.下面是程序源代码:
#include
#include
doublemax(doublef)
{
doublek,l,g;
k=f;
l=(int)f;
l=k-l;
l=l*10;
g=l;
l=(int)l;
g=g-l;
g=g/10;
if(g>=0.05)
f=f;
else
f=f+0.1;
returnf;
}
main()
{
floatd0,d1,d2,d3,d4,d5;
floatd10,d11,d12,d13,d14,d15;
doublem,h,j,e,f,x,n,cd,ab,ef,gh,q,p1,p2,m2;
FILE*wf;
printf("\t\t\t迈克尔逊干涉测波长的C语言程序\n");
printf("温馨提示:
所输数据单位必须为:
mm\n");
printf("请依次输入冒出的d0,d1,d2,d3,d4,d5五个数以空格间隔,即输完第一个数,按空格再输第二个数,输完d5请按回车\n");
qw:
scanf("%f%f%f%f%f%f",&d0,&d1,&d2,&d3,&d4,&d5);
wf=fopen("c:
\\新建文件夹.txt","w");
fprintf(wf,"\t\t\t迈克尔逊干涉测波长的C语言程序\n");
fprintf(wf,"温馨提示:
所输数据单位必须为:
mm\n");
fprintf(wf,"所输入的d0,d1,d2,d3,d4,d5依次为:
\t%.5f\t%.5f\t%.5f\t%.5f\t%.5f\t%.5f\n",d0,d1,d2,d3,d4,d5);
if(d0>0&&d1>0&&d2>0&&d3>0&&d4>0&&d5>0)
{
ab=d0+d1+d2;
cd=d3+d4+d5;
m=cd-ab;
m=m/9;
p1=m;
if(m<0)
{
printf("\n冒出与缩进输反了,系统已经进行智能化处理,下面输缩进,也要输成冒出的数据\n");
fprintf(wf,"\n冒出与缩进输反了,系统已经进行智能化处理,下面输缩进,也要输成冒出的数据\n");
}
m=fabs(m);
printf("请依次输入缩进的d10,d11,d12,d13,d14,d15五个数以空格间隔,即输完第一个数,按空格再输第二个数,输完d5请按回车\n");
er:
scanf("%f%f%f%f%f%f",&d10,&d11,&d12,&d13,&d14,&d15);
if(d10>0&&d11>0&&d12>0&&d13>0&&d14>0&&d15>0)
{
gh=d10+d11+d12;
ef=d15+d14+d13;
n=gh-ef;
n=n/9;
p2=n;
if(n<0)
{
printf("冒出与缩进输反了,系统已经进行智能化处理,不会影响测量结果\n");
fprintf(wf,"冒出与缩进输反了,系统已经进行智能化处理,不会影响测量结果\n");
}
n=fabs(n);
h=(m+n)/2;
j=2*h/50;
j=j*10000;
m2=j*100;
e=j-6.328;
q=e*100;
f=fabs(e);
f=f/6.328;
f=f*100;
if(j>6.0116&&j<6.6444)
{
if(p1>0&&p2>0)
{
printf("\n冒出:
Δd1=%fmm\n缩进:
Δd2=%fmm\nΔd=%fmm\n",m,n,h);
printf("波长λ=%4.2fnm\n相对误差:
e=%4.1f%s\n绝对误差k=%4.1fnm\n",m2,f,"%",q);
printf("\n\n测量结果:
\n波长λ=(%3.1f±%3.1f)e+002nm\n\n相对误差e=%4.1f%s\n",j,e,f,"%");
printf("\n注释:
e+002表示10的平方");
fprintf(wf,"\n:
冒出Δd1=%fmm\n缩进:
Δd2=%fmm\nΔd=%fmm\n",m,n,h);
fprintf(wf,"波长λ=%4.2fnm\n相对误差:
e=%4.1f%s\n绝对误差k=%4.1fnm\n",m2,f,"%",q);
fprintf(wf,"\n\n测量结果:
\n波长λ=(%3.1f±%3.1f)e+002nm\n\n相对误差e=%4.1f%s\n",j,e,f,"%");
fprintf(wf,"\n注释:
e+002表示10的平方");
fclose(wf);
}
else
{
printf("\n冒出:
Δd1=%fmm\n缩进:
Δd2=%fmm\nΔd=%fmm\n",n,m,h);
printf("波长λ=%4.2fnm\n相对误差:
e=%4.1f%s\n绝对误差k=%4.1fnm\n",m2,f,"%",q);
printf("\n\n测量结果:
\n波长λ=(%3.1f±%3.1f)e+002nm\n\n相对误差e=%4.1f%s\n",j,e,f,"%");
printf("\n注释:
e+002表示10的平方");
fprintf(wf,"\n冒出:
Δd1=%fmm\n缩进:
Δd2=%fmm\nΔd=%fmm\n",n,m,h);
fprintf(wf,"波长λ=%4.2fnm\n相对误差:
e=%4.1f%s\n绝对误差k=%4.1fnm\n",m2,f,"%",q);
fprintf(wf,"\n\n测量结果:
\n波长λ=(%3.1f±%3.1f)e+002nm\n\n相对误差e=%4.1f%s\n",j,e,f,"%");
fprintf(wf,"\n注释:
e+002表示10的平方");
fclose(wf);
}
}
else
printf("所测数据误差太大\n");
}
else
printf("输入有误,请重新输入\n");
gotoer;
}
else
printf("输入有误,请重新输入\n");
gotoqw;
}
5.下面是数据输出文件(将计算结果存入txt文件中,便于将字体放大阅读或存入手机中阅读,程序默认将数据输出文件存入c盘的新建文件夹中)
(1)缩进与冒出顺序正确:
迈克尔逊干涉测波长的C语言程序
温馨提示:
所输数据单位必须为:
mm
所输入的d0,d1,d2,d3,d4,d5依次为:
31.6669931.6839131.7004631.71728
31.7340231.75091
冒出:
Δd1=0.016761mm
缩进:
Δd2=0.016244mm
Δd=0.016503mm
波长λ=6.6e+002nm
相对误差:
e=4.3%
绝对误差k=27.3nm
(2)缩进与冒出顺序输反的情况:
迈克尔逊干涉测波长的C语言程序
温馨提示:
所输数据单位必须为:
mm
所输入的d0,d1,d2,d3,d4,d5依次为:
31.4700131.4534231.4375331.42128
31.4047931.38869
冒出与缩进输反了,系统已经进行智能化处理,下面输缩进,也要输成冒出的数据
冒出与缩进输反了,系统已经进行智能化处理,不会影响测量结果
冒出:
Δd1=0.016761mm
缩进:
Δd2=0.016244mm
Δd=0.016503mm
波长λ=6.6e+002nm
相对误差:
e=4.3%
绝对误差k=27.3nm
测量结果:
波长λ=(6.6±0.3)e+002nm
相对误差e=4.3%
注释:
e+002表示10的平方