
#include "math.h"
#define b 0.00822//修正常数
#define p 101300//大气压强
#define q 981//油滴密度
#define g 9.8//重力加速度
#define Pi 3.1415926//圆周率
#define d 0.005//极板距离
#define j 0.0000183//空气粘滞系数
#define l 0.0015//下落距离
#define e 1.602*0.0000000001*0.000000001//单位电荷量10E-19
long double ex[6],sume=0;//用于存储各个油滴的计算电荷量和所有油滴电荷量总和的存储
double Q=0,a=0,U=0,t=0,tp=0,sumt=0,tx[6];//Q--油滴计算带电量、a--中间量……
long double e0=1.602*0.0000000001*0.000000001;
int i,N=0,k;
int flag=0;
char z;
void main()
{
e0=e;
printf("是否需要计算平均下落时间(y or n)?\\n");
z=getchar();
if(z=='y')
{
for(i=1;i<=6;i++)
{
sumt=0;
printf(" ****第%d滴油滴**** \\n",i);
for(k=1;k<=4;k++)
{
printf("请输入第%d次下落时间\\nt=",k);
scanf("%lf",&tp);
sumt=sumt+tp;
}
tx[i]=sumt/4;
printf("平均下落时间:t=%lf\\n",tx[i]);
}
flag=1;
}
if((z=='n')||flag==1)
{
for(i=1;i<=6;i++)
{
printf(" ****第%d滴油滴**** \\n",i);
printf("请输入电压平均值U:\\nU=");
scanf("%lf",&U);
if(flag==0)
{
printf("请输入下落时间平均值t:\\nt=");
scanf("%lf",&t);
}
if(flag==1)t=tx[1];
a=sqrt(9*j*l/2/q/g/t);
printf("中间量a=%E\\n",a);
Q=18*Pi/sqrt(2*q*g)*d/U;
Q=Q*pow((j*l/t/(1+b/p/a)),1.5);
N=(int)((long double)Q/(long double)e0);
if(((long double)Q/(long double)e0)-N>=0.5)N++;//四舍五入
ex[i]=(long double)Q/N;
sume=sume+ex[i];
printf("电荷量q=%E 电荷个数N=%d 计算单位电荷量ei=%e\\n",Q,N,ex[i]);
}
printf("\\n\\n\\n平均电子电荷e=%e\\n相对误差E=%e",sume/6,(sume/6-e0)/e0);
}
}
