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 }

猜你喜欢

转载自www.cnblogs.com/moujun1001/p/9615461.html