1. 程式人生 > >牛客網多校訓練 酸堿滴定

牛客網多校訓練 酸堿滴定

itl code spa 簡單 等於 con 數據 aid 輸入

題目描述 題目來源

有時候你會抱怨,什麽時候才能到終點。 有時候你會迫不及待,怎麽顏色還不改變。 滴定管長場的,我們的路長長的。 用心的放入每一滴,終點就在你手心。 今天小星需要去完成一個酸堿滴定實驗。,實驗室老師要求用 A mol/L 的HCL去測定一瓶NaOH的濃度。首先小星取出了一個錐形瓶,在裏面放入的Bml的NaOH,並滴加1-2滴甲基橙,然後用HCL去滴定他 當滴定至恰好變為紅色時(可以認為H離子濃度等於OH離子濃度),用了C ml 小星現在需要計算NaOH的濃度是多少?單位(mol/L) 對於濃度采用化學裏“四舍六入五成雙”方法保留2位小數 規則1 :第三位小數≤4 時舍去 規則2: 第三位小數≥6時進上 規則3: 第三位小數等於5時 3.1首先根據 5後面的數字來定,當5後有數時,舍5入1; 3.2當5後無有效數字時,需要分兩種情況來講: 3.2.1 5前為奇數,舍5入1; 3.2.2 5前為偶數,舍5不進(0是偶數) 例如
9.8249=9.82 規則1 9.82671=9.83 規則2 9.82501=9.83 規則3.1 9.8351 =9.84 規則3.1 9.8350=9.84 規則3.2.1 9.8250=9.82 規則3.2.2

輸入描述:

輸入第一行一個數T(T<=20)表示數據組數
對於每組數據輸入 A,B,C三個3位小數
0.000<a,b,c<50.000

輸出描述:

結果“四舍六入五成雙”保留2位小數
示例1

輸入

3
10.000 10.000 1.825
10.000 10.000 9.835
1.010 21.325 19.823

輸出

1.82
9.84
0.94

說明

樣例1中計算出的結果為 1.8250000000根據(規則3.2.2) 答案應該為1.82
9.835->9.84(規則3.2.1)

總結
printf的四舍五入還是有點問題的,他嚴格遵守四舍六入,五的時候不穩定
#include <cstdio>
#include 
<cstdlib> #include <cmath> #include <iostream> using namespace std; void show(double ans) { int k=ans*1000.0; // cout<<k<<endl; if(k%10==5) { if(fabs(ans*1000.0-floor(ans*1000.0))>0.0000001)//這裏考慮到浮點運算的誤差問題 {
//這裏進一位,不能使用printf("%.2f/n",ans);因為printf對於第三位是5時,有時候會進,有時又不進 printf(
"%.2f\n",floor(ans*100.0)/100.0+0.01);//簡單粗暴的將後面的剁掉在加一位,哈哈 } else if(k/10%10%2==1) { printf("%.2f\n",floor(ans*100.0)/100.0+0.01); } else { printf("%.2f\n",floor(ans*100.0)/100.0); } } else { printf("%.2f\n",ans);//當第三位不是5時printf是不會錯的 } return; } int main() { double a,b,c; int n; while(cin>>n) { for(int i=0;i<n;i++) { cin>>a>>b>>c; show(a*c/b); } } return 0; }

牛客網多校訓練 酸堿滴定