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; }}
阅读全文
0 0
- POJ总结(3299)
- 总结POJ
- POJ搜索题目总结
- Poj KMP 总结
- poj字符串总结
- POJ 3159 candies总结
- POJ水题总结
- poj 网络流 总结
- poj dp总结
- POJ 线段树总结
- poj字符串总结
- POJ dp 总结
- poj 动态规划总结
- POJ问题总结
- POJ 2800 解题总结
- POJ 做题总结
- POJ 1001 总结
- POJ总结(1035)-Java
- Java:利用I/O流读取文件内容
- C++ 结构体初始化
- 9. Palindrome Number
- python机器学习-数据规模统计
- 利用WHID为隔离主机建立隐秘通道
- POJ总结(3299)
- OpenCV遍历图片像素点
- MySQL多表&JDBC
- 压缩下载文件
- 【学习笔记】面试集锦【3】
- mq小程序二
- pixhawk当中关于NMEA类型的gps数据处理流程
- python机器学习-数据类型统计
- Linux常用命令学习