注意看题目,每个输入只有两个数但是你输出的时候要输出3个数T、D、H所以要通过那个公式去转化求出这3个数然后输出,你这个程序只能输出样例为T、D输入时的结果。
还有一个要注意的是数据类型的问题:题目中给的数据的有效数字均是小数点后4位,为了防止精度丢失,一般都是采取double型数据,数据的输入为scanf("%lf"),根据题目中输出给出的特点,输出应为小数点后一位则输出格式为printf("%.1lf");
代码如下:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a,b,T,D,H;
char first,second;
while (scanf("%c",&first)&&first!='E')
{
scanf("%lf %c %lf",&a,&second,&b);
if ((first=='T'&&second=='D')||(first=='D'&&second=='T'))
{
if (first=='T')
{
T=a;
D=b;
}
else
{
T=b;
D=a;
}
double e=6.11 * exp (5417.7530 * ( (1/273.16) - (1/(D+273.16) ) ));
double h=0.5555*(e-10.0);
H=D+h;
printf("%T %.1lf %D %.1lf %H %.1lf",T,D,H);
}
else if ((first=='T')&&(second=='H')||(first=='H')&&(second=='T'))
{
if (first=='T')
{
T=a;
H=b;
}
else
{
T=b;
H=a;
}
double h=H-T;
double e=h/0.5555+10.0;
D =( 1/(-log(e/6.11)/5417.7530 + (1/273.16))-273.16);
printf("%T %.1lf %D %.1lf %H %.1lf",T,D,H);
}
else if ((first=='D'&&second=='H')||(first=='H'&&second=='D'))
{
if (first=='D')
{
D=a;
H=b;
}
else
{
D=b;
H=a;
}
double e=e=6.11 * exp (5417.7530 * ( (1/273.16) - (1/(D+273.16) ) ));
double h=0.5555 * (e-10.0);
T=H-h;
printf("T %.1lf D %.1lf H %.1lf\n",T,D,H);
}
}
return 0;
}