科大奥瑞大物实验-长度与固体密度测量实验 代码
第一次做,看了无数的资料,花了一个下午折腾这玩意,弄了个72分……学乖了,整个程序吧。
不知道哪儿的问题,87分就上不去了。对误差和数据处理还是不懂,程序将就看看吧。
为了虚拟实验的方便,程序假设A类不确定度为0,而B类不确定度写在了 default=xxx ,则总不确定度就是程序显示的 default。如果A类不确定度不为0,可以用我的A类不确定度计算器算,得到总不确定度后输入即可。
代码如下,如有错误的地方请多指教!
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>
using namespace std;
int main()
{
int n;
cout << "请输入实验部分(1-3): " << endl;
cin >> n;
cout << "所用 pi 为: " << acos(-1) << endl << endl;
switch (n) {
case 1: {
double h, d, D, unc, v, uv, g;
cout << "注意1-6次测量值相同即可,此时A类不确定度为 0 ." << endl;
cout << "零点度数为 0.20" << endl << endl;;
cout << "输入h d D (保留三位有效数字): ";
cin >> h >> d >> D;
cout << "输入B类不确定度 (default=0.012): ";
cin >> unc;
cout << "输入圆柱体质量 (g): ";
cin >> g;
cout << "空心圆柱体体积 (保留两位小数): "\
<< (v = (D * D - d * d) * h * acos(-1) / 4) << endl;
cout << "计算体积的不确定度 (保留四位有效数字): " \
<< (uv = sqrt(pow(2 * acos(-1) * D * h, 2) * unc * unc / 16 + \
pow(2 * acos(-1) * d * h, 2) * unc * unc / 16 + \
pow(acos(-1) * (D * D - d * d), 2) * unc * unc / 16)) << endl;
cout << "体积的相对不确定度 (保留两位有效数字): " \
<< uv / v << endl;
cout << "圆柱的体积表达式: " \
<< setprecision(0) << fixed << v + 0.5 << "±" \
<< setprecision(0) << fixed << uv + 0.5 << endl;
cout << "密度 (保留三位有效数字): " << g * 1000 / v << endl;
break;
} case 2: {
double d, unc;
cout << "注意1-6次测量值相同即可,此时A类不确定度为 0 ." << endl;
cout << "零点度数为 0.020 ;" << "第二题答案序号为 B、C" << endl << endl << endl;
cout << "输入直径 d (保留三位小数): " << endl;
cin >> d;
cout << "输入铁丝直径不确定度 (default=0.0024): " << endl;
cin >> unc;
cout << "铁丝直径表达式: " << setprecision(4) << fixed << d \
<< "±" << setprecision(4) << fixed << unc << endl;
cout << "铁丝直径的相对不确定度: " << setprecision(2) << fixed \
<< unc / d * 100 - 0.005 << endl;
break;
} case 3: {
double d1, d2, unc, d;
cout << "注意1-6次测量值相同即可,此时A类不确定度为 0 ." << endl << endl;
cout << "输入 d1 和 d2" << endl;
cin >> d1 >> d2;
cout << "输入B类不确定度 (default=0.0024): " << endl;
cin >> unc;
cout << "直径 d (保留三位小数): " << (d = fabs(d2 - d1)) << endl;
cout << "直径的A类不确定度: 0.0000" << endl;
cout << "金属丝直径的不确定度: " << unc << endl;
cout << "金属丝直径表达式: " << setprecision(4) << fixed << d << "±" \
<< setprecision(4) << fixed << unc << endl;
cout << "直径的相对不确定度: " << setprecision(2) << fixed \
<< unc / d * 100 - 0.005 << endl;
break;
} default:
break;
}
#ifdef WIN32
system("pause");
#endif
return 0;
}
by sdust weilinfox
转载请注明出处https://www.cnblogs.com/weilinfox/p/12983513.html
ps: 我在 B站 也投了个稿,如果用了觉得好或者这个程序哪里有问题的,umm你懂的 😛