求助大佬,不知道怎么回事双重循环内循环只在外循环第一次时进行

时间:2022-05-08 16:14:50
按2,K=1.4E-4,c=0.1输入的话,正确地氢离子浓度应该是3.7E-3
求助大佬,不知道怎么回事双重循环内循环只在外循环第一次时进行

#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,整数才能这么做。

#2


第一次执行,i是未初始化的。i是一个随机值。所以第一次执行也是随机的

#1


你是说这句吗?
for(H=a;i<=0;H=N+H)
这里有至少2个问题,1、这个循环的条件是i<=0,经过第一次运算后,条件不成立了,所以只有外层循环的第一次才执行;2、i是一个double类型,不能判断是否等于0,整数才能这么做。

#2


第一次执行,i是未初始化的。i是一个随机值。所以第一次执行也是随机的