#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
//careful careful careful careful careful careful
#define E 2.718281828
double Dgete(double D){
//e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]
double e=6.11*pow(E,(5417.7530*((1/273.16)-(1/(273.16+D)))));
return e;
}
double egetD(double e){
//double D=(1/((1/273.16)-(log10(e)/log10(6.11)/5417.953)))-273.16;
double D = ( float )( 1/(- log(e / 6.11) / 5417.7530 + 1/273.16)-273.16);
return D;
}
int main(){
char fc,sc;
double fn,sn;
scanf("%c",&fc);
while(fc!='E'){
//下面的代码要有空格否则会有错误scanf("%lf%c%lf",&fn,&sc,&sn);是错误的
scanf("%lf %c %lf",&fn,&sc,&sn);
if((fc=='T'&&sc=='D')||(fc=='D'&&sc=='T')){//TD ->H
double T,D,H;
if(fc=='T'){
T=fn;D=sn;
}
else{
T=sn;D=fn;
}
double e=Dgete(D);
H=T+(0.5555*(e-10.0));
printf("T %.1f D %.1f H %.1f\n",T,D,H);
}
else if((fc=='T'&&sc=='H')||(fc=='H'&&sc=='T')){//TH ->D
double T,D,H;
if(fc=='T'){
T=fn;H=sn;
}
else{
T=sn;H=fn;
}
//qiu e
double e=(H-T)/0.5555+10;
D=egetD(e);
printf("T %.1f D %.1f H %.1f\n",T,D,H);
}
else if((fc=='H'&&sc=='D')||(fc=='D'&&sc=='H')){//HD ->T
double T,D,H;
if(fc=='H'){
H=fn;D=sn;
}
else{
H=sn;D=fn;
}
double e=Dgete(D);
T=H-0.5555*(e-10.0);
printf("T %.1f D %.1f H %.1f\n",T,D,H);
}
scanf("%c",&fc);
}
return 0;
}
更简洁的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define E 2.718281828
double egetD(double e){
double D=1/((-log(e/6.11))/5417.753+(1/273.16))-273.16;
return D;
}
double Dgete(double D){
//e = 6.11 × exp [5417.7530 × ((1/273.16) - (1/(dewpoint+273.16)))]
double e=6.11*pow(E,(5417.7530*((1/273.16)-(1/(D+273.16)))));
return e;
}
int main(){
char fc,sc;
double fn,sn;
double temperature,dewpoint,humidex ,e;
scanf("%c",&fc);
//case语句和printf连用时,最好将printf放到case中否则会出现错误
//也就是下面的printf语句要放到每个case中尽管是一样的,而不能放到switch之外
while(fc!='E'){
scanf("%lf %c %lf",&fn,&sc,&sn);
switch(fc + sc){
case 'T'+'D':
temperature=(fc=='T')?fn:sn;
dewpoint=(fc=='D')?fn:sn;
e=Dgete(dewpoint);
humidex=temperature+0.5555*(e-10);
printf("T %.1f D %.1f H %.1f\n",temperature,dewpoint,humidex);
break;
case 'H'+'D':
humidex=(fc=='H')?fn:sn;
dewpoint=(fc=='D')?fn:sn;
e=Dgete(dewpoint);
temperature=humidex-0.5555*(e-10);
printf("T %.1f D %.1f H %.1f\n",temperature,dewpoint,humidex);
break;
case 'T'+'H':
temperature=(fc=='T')?fn:sn;
humidex=(fc=='H')?fn:sn;
e=(humidex-temperature)/0.5555+10;
dewpoint=egetD(e);
printf("T %.1f D %.1f H %.1f\n",temperature,dewpoint,humidex);
break;
//default:
// printf("T %.1f D %.1f H %.1f\n",temperature,dewpoint,humidex);
}
scanf("%c",&fc);
}
return 0;
}