PAT 乙级 1051
题目
题目地址:PAT 乙级 1051
思路
最近做题发现一个比较明显的现象——总是在做简单题的过程中出现这样那样的小问题,究其原因我认为还是有很多细节性的知识没有掌握,这是在以后的学习过程中需要注意的一个问题。
回来说这道题,在做这道题的过程中出现了两个失误:其一,审题不清,总是觉得题目比较简单所以略微看看就动手写,结果最后又从头返工;其二,精度问题,这是本题一直没做出来的最大的失误点,刚开始数据一直用的是单精度,结果总是有一分的样例点过不了,后改成双精度得以解决。
在做这道题的过程中,最大的收获是补了三个知识上的盲点;
1. printf函数的输出控制符,float 单精度——%f, double 双精度——%lf
2. %+的使用:加号"+"表示强制显示正负号 (+和-);例,x = 0.12345; printf("%+.2f\n", x); 输出结果:+0.12;
3. 计算三角函数时,可以直接引入math函数库,之后直接使用sin、cos等函数即可(函数double sin(double x))
这里引用C++ reference 的文档(原地址在此)
1 /*Parameters 2 x 3 Value representing an angle expressed in radians. 4 One radian is equivalent to 180/PI degrees. 5 6 Return Value 7 Sine of x radians. 8 */ 9 10 //Example 11 /* sin example */ 12 #include <stdio.h> /* printf */ 13 #include <math.h> /* sin */ 14 15 #define PI 3.14159265 16 17 int main () 18 { 19 double param, result; 20 param = 30.0; 21 result = sin (param*PI/180); 22 printf ("The sine of %f degrees is %f.\n", param, result ); 23 return 0; 24 } 25 26 //Output: 27 //The sine of 30.000000 degrees is 0.500000.
代码
1 #include <cstdio> 2 #include <cmath> 3 4 int main() { 5 double a = 0, b = 0, c = 0, d = 0; 6 bool flag1 = false, flag2 = false; 7 scanf("%lf %lf %lf %lf", &a, &b, &c, &d); 8 double tmp1 = 0, tmp2 = 0; 9 tmp1 = a * c * cos(b + d); 10 tmp2 = a * c * sin(b + d); 11 if (fabs(tmp1) < 0.01) flag1 = true; 12 if (fabs(tmp2) < 0.01) flag2 = true; 13 if (flag1 && flag2) 14 printf("0\n"); 15 else if (flag1 && !flag2) 16 printf("0.00%+.2fi\n", tmp2); 17 else if (!flag1 && flag2) 18 printf("%.2f+0.00i\n", tmp1); 19 else 20 printf("%.2f%+.2fi\n", tmp1, tmp2); 21 22 return 0; 23 }