longxucaicc 2022-03-27 13:33 采纳率: 33.3%
浏览 48
已结题

C++问题 if else if语句运用问题

问题遇到的现象和发生背景

想要编写一个根据不同物质用不同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

我想要达到的结果

准确的输入相应的参数并输出正确的值

  • 写回答

3条回答 默认 最新

  • 关注

    material == "HBrO" || "HClO" 这种写法不对,应该是
    strcmp(material,"HBrO")==0 || strcmp(material,"HCIO")==0
    也就是每一次比较都必须写完整。
    简便点的方法是,你把这些不同的元素放在不同的数组里,写个函数,判断输入的字符串属于哪个数组,然后执行相关的操作。
    如下:

    
    //写一个比较函数
    int isInArr(string s,string arr[],int n)
    {
        for(int i = 0;i<n;i++)
        {
            if(s.compare(arr[i])==0)
                return 1;
        }
        return 0;
    }
    
    
    int main() {
        double a = 0.0;
        double b = 0.0;
        double c = 0.0;
        double d = 0.0;
        string material;
    
        string arr1[]={"HBrO" , "HClO" , "HIO" , "HIO3"    , "CH3COOH" , "HCOOH" , "CH2ClCOOH" , "HF" , "HSIO4" , "H3C6H5O7" , "HCN"
            , "HNO2" , "HAlO" , "H3AsO" , "H3AsO4" , "H2GeO3" , "HIO4" , "H3BO3"};
        string arr2[] = {"H2CO3" , "H2CrO4" ,"H2S" , "H2C2O4", "H3PO3" , "H3PO2 ", "H4P2O7"};
    
        string arr3[] = {"NH4OH" , "NH4NO3" , "NH3.H2O" , "Si(OH)4"    , "AgOH" , "Zn(OH)2" , "CH3NH2" , "CO(NH2)2"};
        string arr4[] ={"NaCO3" , "Cu(OH)2" , "Fe(OH)3" , "Fe(OH)2"    , "Zn(OH)2" , "Mg(OH)2" , "Ca(OH)2" , "Pb(OH)2"};
        string arr5[] ={"NH4CN" , "NH4COOH" , "(NH4)2S" , "(NH4)2C2O4", "NaF" , "NaHCO3" , "NH2CH2COOH"};
        string arr6[] ={"HCOOH——NaCOOH" , "NH3·H2O——NH4Cl" , "NaH2PO4——Na2HPO4" , "H2CO3——HCO3-"};
    
    
        cin >> material;
        if (isInArr(material,arr1,18)) {
                cout << Monoweakacid(a, b, c);
        }
        else if (isInArr(material,arr2,7)) {
                cout << Polyweakacid(a, b, c);
        }
        else if (isInArr(material,arr3,8) )
        {
            cout << Monoweakbase(a, b, c);
        }
        else if (isInArr(material,arr4,8)) {
                cout << Multiweakbase(a, b, c);
        }
        else if (isInArr(material,arr5,7) ) {
                cout << Amphotericsubstance(a, b);
        }
        else if (isInArr(material,arr6,4)) {
                cout << buffersubstance(a, c, d);
        }
        else if (material.compare("HCL") == 0) { cout << strongacid(c); }
        else if (material.compare("NaOH") ==0 ) { cout << strongbase(c); }
        else return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)