首页 > 技术文章 > 科大奥瑞大物实验-长度与固体密度测量实验 代码

weilinfox 2020-05-28 19:51 原文

第一次做,看了无数的资料,花了一个下午折腾这玩意,弄了个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你懂的

推荐阅读