#include "stdio.h"
#include "math.h"
#define Kw 1E-14
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
int n;
double c,K;
double H,pH;
printf("强酸或强碱溶液 输入 1\n");
printf("一元弱酸或弱碱溶液 输入 2\n");
printf("多元弱酸或弱碱溶液 输入 3\n");
printf("弱酸或弱碱混合溶液 输入 4\n");
printf("弱酸与弱碱混合溶液 输入 5\n");
printf("酸式盐 输入 6\n");
printf("弱酸弱碱盐 输入 7\n");
printf("缓冲液 输入 8\n");
scanf("%d",&n);
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
while (n>8||n<1)
{
printf("错误\n请重新输入:");
n=0;
scanf("%d",&n);
}
///////////////////////////////////////////////////////////////////////////////////////////////
//强酸或强碱
if (n==1)
{
printf("请输入溶液浓度:");
scanf("%lf",&c);
H=(c+sqrt(c*c+4*Kw))/2;
}
///////////////////////////////////////////////////////////////////////////////////////////////
//一元弱酸或弱碱
else if (n==2)
{
double N,i,a;
N=0.01;
a=0;
printf("一元弱酸或弱碱的平衡常数及溶液浓度\n");
printf("K:");
scanf("%lf",&K);
printf("c:");
scanf("%lf",&c);
do
{
printf("1");
for(H=a;i<=0;H=N+H)
{
i=pow(H,3)+K*pow(H,2)-(K*c+Kw)*H-K*Kw;
printf("2\n");
if (i==0) break;
}
a=H-N;
N=N/10;
if (N<=1E-16) break;
printf("3");
}while(i!=0);
}
printf("氢离子浓度为:%lf mol/L\n",H);
pH=-log10(H);
printf("溶液的pH为:%lf \n",pH);
}
2 个解决方案
#1
你是说这句吗?
for(H=a;i<=0;H=N+H)
这里有至少2个问题,1、这个循环的条件是i<=0,经过第一次运算后,条件不成立了,所以只有外层循环的第一次才执行;2、i是一个double类型,不能判断是否等于0,整数才能这么做。
for(H=a;i<=0;H=N+H)
这里有至少2个问题,1、这个循环的条件是i<=0,经过第一次运算后,条件不成立了,所以只有外层循环的第一次才执行;2、i是一个double类型,不能判断是否等于0,整数才能这么做。
#2
第一次执行,i是未初始化的。i是一个随机值。所以第一次执行也是随机的
#1
你是说这句吗?
for(H=a;i<=0;H=N+H)
这里有至少2个问题,1、这个循环的条件是i<=0,经过第一次运算后,条件不成立了,所以只有外层循环的第一次才执行;2、i是一个double类型,不能判断是否等于0,整数才能这么做。
for(H=a;i<=0;H=N+H)
这里有至少2个问题,1、这个循环的条件是i<=0,经过第一次运算后,条件不成立了,所以只有外层循环的第一次才执行;2、i是一个double类型,不能判断是否等于0,整数才能这么做。
#2
第一次执行,i是未初始化的。i是一个随机值。所以第一次执行也是随机的