poj3299

这一题学会了两个东西:

1.cmath中的exp(x)函数是用来求e的x次幂。

2.对于double类型scanf时要用%lf,printf时要用%f。

这个题就是个套公式的简单题

View Code
#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;
}
原文地址:https://www.cnblogs.com/rainydays/p/1966790.html