问题遇到的现象和发生背景
想要编写一个根据不同物质用不同pH计算方式来算出输入物质的pH值
问题相关代码,请勿粘贴截图
#include
#include
#include
using namespace std;
double Monoweakacid(double k1, double k2, double c1) {
k1 = 0.0; c1 = 0.0;
k2 = 0.0;
cin >> k1 >> c1;
double pH = 0.0;
double kw = 1 * 10 ^ -14;
if (c1 * k1 >= 20 * kw)pH = -log10((-k1 + sqrt(k1 * k1 + 4 * c1 * k1)) / 2);
else if (c1 * k1 < 20 * kw && c1 / k1 >= 500.0) {
pH = -log10(sqrt(c1 * k1 + kw));
}
else if (c1 * k1 >= 20 * kw && c1 / k1 >= 500.0)pH = -log10(sqrt(c1 * k1));
return pH;
}
double Polyweakacid(double k1, double k2, double c1) {
k1 = 0.0; c1 = 0.0; k2 = 0.0;
cin >> k1 >> k2 >> c1;
double pH = 0.0;
double kw = 1 * 10 ^ -14;
if (c1 * k1 >= 20 * kw)pH = -1*log10((-k1 + sqrt(k1 * k1 + 4 * c1 * k1)) / 2);
else if (c1 * k1 < 20 * kw && c1 / k1 >= 500.0) {
pH = -1*log10(sqrt(c1 * k1 + kw));
}
else if (c1 * k1 >= 20 * kw && c1 / k1 >= 500.0)pH = -1*log10(sqrt(c1 * k1));
return pH;
}
double Monoweakbase(double k1, double k2, double c1){
k2 = 0.0; k1 = 0.0; c1 = 0.0;
cin >> k1 >> c1;
double pH = 0.0;
double kw = 1 * 10 ^ -14;
if (c1 * k1 >= 20 * kw)pH = 14.0 + log10((-k1 + sqrt(k1 * k1 + 4 * c1 * k1)) / 2);
else if (c1 * k1 < 20 * kw && c1 / k1 >= 500.0)
pH = 14.0 + log10(sqrt(c1 * k1 + kw));
else if (c1 * k1 >= 20 * kw && c1 / k1 >= 500.0)pH = 14.0 + log10(sqrt(c1 * k1));
return pH;
}
double Multiweakbase(double k1, double k2, double c1){
k2 = 0.0; k1 = 0.0; c1 = 0.0;
cin >> k1 >> k2 >> c1;
double pH = 0.0;
double kw = 1 * 10 ^ -14;
if (c1 * k1 >= 20 * kw)pH =14.0+log10((-k1 + sqrt(k1 * k1 + 4 * c1 * k1)) / 2);
else if (c1 * k1 < 20 * kw && c1 / k1 >= 500.0) {
pH =14.0+log10(sqrt(c1 * k1 + kw));
}
else if (c1 * k1 >= 20 * kw && c1 / k1 >= 500.0)pH =14.0+log10(sqrt(c1 * k1));
return pH;
}
double Amphotericsubstance(double k1, double k2){
k2 = 0.0; k1 = 0.0;
cin >> k1 >> k2;
double pH = 0.0;
pH = -1*log10(sqrt(k1 * k1));
return pH;
}
double buffersubstance(double k1, double c1, double c2) {
c2 = 0.0; k1 = 0.0; c1 = 0.0;
cin >> k1 >> c1 >> c2;
double pH = 0.0;
pH = -1*log10(k1) + log10(c2 / c1);
return pH;
}
double strongacid(double c1){
c1 = 0.0;
cin >> c1;
double pH = 0.0;
pH = -1*log10(c1);
return pH;
}
double strongbase(double c1){
c1 = 0.0;
cin >> c1;
double pH = 0.0;
pH = 14.0+log10(c1);
return pH;
}
int main() {
double a = 0.0;
double b = 0.0;
double c = 0.0;
double d = 0.0;
string material;
cin >> material;
if (material == "HBrO" || "HClO" || "HIO" || "HIO3"
|| "CH3COOH" || "HCOOH" || "CH2ClCOOH" || "HF" || "HSIO4" || "H3C6H5O7" || "HCN"
|| "HNO2" || "HAlO" || "H3AsO" || "H3AsO4" || "H2GeO3" || "HIO4" || "H3BO3") {
cout << Monoweakacid(a, b, c);
}
else if (material == "H2CO3" || "H2CrO4" || "H2S" || "H2C2O4"
|| "H3PO3" || "H3PO2 " || "H4P2O7") {
cout << Polyweakacid(a, b, c);
}
else if (material == "NH4OH" || "NH4NO3" || "NH3.H2O" || "Si(OH)4"
|| "AgOH" || "Zn(OH)2" || "CH3NH2" || "CO(NH2)2")
{
cout << Monoweakbase(a, b, c);
}
else if (material == "NaCO3" || "Cu(OH)2" || "Fe(OH)3" || "Fe(OH)2"
|| "Zn(OH)2" || "Mg(OH)2" || "Ca(OH)2" || "Pb(OH)2") {
cout << Multiweakbase(a, b, c);
}
else if (material == "NH4CN" || "NH4COOH" || "(NH4)2S" || "(NH4)2C2O4"
|| "NaF" || "NaHCO3" || "NH2CH2COOH") {
cout << Amphotericsubstance(a, b);
}
else if (material == "HCOOH——NaCOOH" || "NH3·H2O——NH4Cl" || "NaH2PO4——Na2HPO4" || "H2CO3——HCO3-"
) {
cout << buffersubstance(a, c, d);
}
else if (material == "HCL") { cout << strongacid(c); }
else if (material == "NaOH") { cout << strongbase(c); }
else return 0;
}
运行结果及报错内容
输入H2CO3 4.310^-7 5.610^-11 结果是inf
输入HCL 10 但是我还得再输一个数,明明我设置的参数只有一个
我的解答思路和尝试过的方法
我把else if (material == "HCL") { cout << strongacid(c); }前的if条件语句删除了,之后输入HCL 10 结果正确为1
我想要达到的结果
准确的输入相应的参数并输出正确的值