已知公式 pH = -log10 [H+] ,Ka = [H+] [acid ions] / [acid]。[H +]为H+的摩尔浓度(mol/L)。Ka是酸度常数,[acid ions]是已溶解的酸的摩尔浓度,[acid]是未溶解的酸的摩尔浓度。已知Ka,酸的原始摩尔浓度,m和n表示每摩尔酸分子溶解成m摩尔的H +离子和n摩尔的酸离子。求PH值。
//#include <iostream>
#include <cmath>
//#include <iomanip>
#include <cstdio>
using namespace std;
int main()
{
while(1)
{
double ka, Oa;
int m, n;
scanf("%lf%lf%d%d",&ka,&Oa,&m,&n);;
if((ka==0)&&(Oa==0)&&(m==0)&&(n==0))
{
break;
}
//Ka=m*x*n*x/(Oa-x);
//-log10(x) 不需要用round函数 谢谢博友
//cout<<fixed<<setprecision(3)<<-log10(m*(sqrt((ka*ka)/(m*m*n*n)+(4*ka*Oa)/(m*n))-ka/(m*n))/2)<<endl;
//cout<<fixed<<setprecision(3)<<-log10(((sqrt(ka*ka+4*m*n*ka*Oa)-ka)/(2*n)))<<endl;
double ph=-log10(((sqrt(ka*ka+4*m*n*ka*Oa)-ka)/(2*n)));
printf("%.3f\n",ph);//格式不对 n 次才过 谢谢博友
}
return 0;
}