这一题学会了两个东西:
1.cmath中的exp(x)函数是用来求e的x次幂。
2.对于double类型scanf时要用%lf,printf时要用%f。
这个题就是个套公式的简单题
#include < iostream >
#include < cstdlib >
#include < cstdio >
#include < cstring >
#include < cmath >
using namespace std;
int getid( char * st)
{
if (strcmp(st, " T " ) == 0 )
return 0 ;
if (strcmp(st, " D " ) == 0 )
return 1 ;
return 2 ;
}
void calt( double & t, double & d, double & h)
{
double e, hh;
e = 6.11 * exp(( 5417.7530 * (( 1 / 273.16 ) - ( 1 / (d + 273.16 )))));
hh = ( 0.5555 ) * (e - 10.0 );
t = h - hh;
}
void cald( double & t, double & d, double & h)
{
double e, hh;
hh = h - t;
e = hh / 0.5555 + 10.0 ;
d = 1 / ( 1 / 273.16 - log(e / 6.11 ) / 5417.7530 ) - 273.16 ;
}
void calh( double & t, double & d, double & h)
{
double e, hh;
e = 6.11 * exp(( 5417.7530 * (( 1 / 273.16 ) - ( 1 / (d + 273.16 )))));
hh = ( 0.5555 ) * (e - 10.0 );
h = t + hh;
}
int main()
{
// freopen("D:\\t.txt", "r", stdin);
char st[ 100 ];
double data[ 3 ];
while (scanf( " %s " , st) != EOF && ! (strcmp(st, " E " ) == 0 ))
{
data[ 0 ] = data[ 1 ] = data[ 2 ] = 0 ;
double a;
scanf( " %lf " , & a);
data[getid(st)] = a;
scanf( " %s " , st);
scanf( " %lf " , & a);
data[getid(st)] = a;
getchar();
if (data[ 0 ] == 0 )
calt(data[ 0 ], data[ 1 ], data[ 2 ]);
if (data[ 1 ] == 0 )
cald(data[ 0 ], data[ 1 ], data[ 2 ]);
if (data[ 2 ] == 0 )
calh(data[ 0 ], data[ 1 ], data[ 2 ]);
printf( " T %.1f D %.1f H %.1f\n " , data[ 0 ], data[ 1 ], data[ 2 ]);
}
return 0 ;
}