POJ总结(3299)

来源:互联网 发布:身份证sql判断 编辑:程序博客网 时间:2024/05/17 06:27

POJ总结(3299)

POJ3299 Humidex

题目思路:

1.题目中涉及到三个变量,要求给出其中两个,计算出第三个,然后将三个内容都输出。其中涉及到的主要问题为:

判断需要计算哪个参数

根据上述判断执行计算过程

2.首先解决第一个问题,我是通过将三个变量构造在一个结构体中,并且设置flag标志。如果输入该值,则将对应变量flag设为true,否则设为false。那么通过判断三个变量的flag标志就可以判断出需要执行什么运算了。

3.其次解决计算问题。计算过程的公式都已经给出了,剩下的就是对这个公式进行变换,然后用代码表示出来就好了。这里使用到了标准库中的乘方函数以及对数函数(log),直接代公式就可以了。

问题与解惑:

在编写代码的过程中遇到了一些细节问题,这里总结一下。

1.Q:结构体指针定义的过程?

typedef struct input_struct{    double numT;    bool flagT;    double numH;    bool flagH;    double numD;    bool flagD;}input,*input_p;

A:已经定义了结构体类型的指针*input_p;那么在下边定义结构体指针的时候就可以直接把这个input_p作为一个指针类型了

input_p test_p=(input_p)malloc(sizeof(input));

而不是input_p * test_p;这就变成了两层指针了

2.Q:scanf可以这么用?

scanf("%c",&fir);        if(fir=='E')        {            break;        }        scanf("%lf %c %lf",&fir_num,&sec,&sec_num);

A:scanf是以空格分割的

3.Q:这里需要一个getchar()?

scanf("%lf %c %lf",&fir_num,&sec,&sec_num);getchar();

A:这里有一个while(1)循环,如果不用这个getchar()接收那个回车字符的话,那么下一个scanf接收到的就是”\n”,于是会出现输入与错位的现象

4.Q:double类型如何输入?

A:%lf;long float;

5.Q:输入两位小数?

A:%.2f 或者%.2lf

6.Q:结构体定义的时候不能赋初始值吗????

代码:

#include <stdio.h>#include <stdlib.h>#include <math.h>#define const1 5417.7530#define conste 2.718281828typedef struct input_struct{    double numT;    bool flagT;    double numH;    bool flagH;    double numD;    bool flagD;}input,*input_p;void copy(char a,double a_num,input_p p);void compute_H(input_p input); void compute_T(input_p input);void compute_D(input_p input);void init(input_p p);int main(){    input_p test_p=(input_p)malloc(sizeof(input));    while(1){        init(test_p);        char fir,sec;        double fir_num,sec_num;        scanf("%c",&fir);        if(fir=='E')        {            break;        }        scanf("%lf %c %lf",&fir_num,&sec,&sec_num);        getchar();        copy(fir,fir_num,test_p);        copy(sec,sec_num,test_p);        if(test_p->flagH==true&&test_p->flagT==true)        {               compute_D(test_p);        }        else if(test_p->flagD==true&&test_p->flagT==true)        {            compute_H(test_p);        }        else if(test_p->flagH==true&&test_p->flagD==true)        {            compute_T(test_p);        }        else        {            return -1;        }    }    return 0;}void init(input_p p){    p->numT=0;    p->flagT=false;    p->numD=0;    p->flagD=false;    p->numH=0;    p->flagH=false;}void compute_H(input_p input){    double e=(6.11)*(pow(conste,const1*((1.0/273.16)-(1.0/(input->numD+273.16)))));    double h=0.5555*(e-10.0);    input->numH=(input->numT)+h;    printf("%c %.1lf %c %.1lf %c %.1lf\n",'T',input->numT,'D',input->numD,'H',input->numH);}void compute_T(input_p input){    double e=(6.11)*(pow(conste,const1*((1.0/273.16)-(1.0/(input->numD+273.16)))));    double h=0.5555*(e-10.0);    input->numT=input->numH-h;    printf("%c %.1lf %c %.1lf %c %.1lf\n",'T',input->numT,'D',input->numD,'H',input->numH);}void compute_D(input_p input){    double mid1=((input->numH-input->numT)/0.5555+10.0)/6.11;    double mid2=log(mid1)/const1;    double mid3=(1.0)/((1.0)/273.16-mid2);    input->numD=mid3-273.16;    printf("%c %.1lf %c %.1lf %c %.1lf\n",'T',input->numT,'D',input->numD,'H',input->numH);}void copy(char a,double a_num,input_p p){    if(a=='T')    {        p->numT=a_num;        p->flagT=true;    }    if(a=='H')    {        p->numH=a_num;        p->flagH=true;    }    if(a=='D')    {        p->numD=a_num;        p->flagD=true;    }}
原创粉丝点击