题意:计算酸的ph值
设每L溶解了x摩尔的该酸(c为原来的浓度)
Ka = mx*nx / c-x
Ka*( c-x ) = mn*x*x
mnx^2 + Ka*x - Ka*c = 0 =>一个一元二次方程
解方程得
x = [sqrt(Ka*Ka+4*m*n*Ka*c)-Ka] / 2mn,而 [H+] =x*m;
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int m,n;
double k,c,ph,x,delta;
int main()
{
while(scanf("%lf%lf%d%d",&k,&c,&m,&n)&&k&&c&&m&&n)
{
delta=sqrt(k*k+4*n*c*k*m);
x=(-k+delta)/(2*n);
ph=-log10(x);
printf("%.3f\n",ph);
}
return 0;
}