http://poj.org/problem?id=1045
原来的打算是从前面开始,可是在1001就卡了几小时,于是就没耐心了。1001里面算结果那部分做好了,用数组保存每位数,算进位,然后在特殊的输出要求里卡壳了,逗号的位置去掉0...一大堆的东西,然后失去了耐心,尽量过些天把它搞定。受到了教训之后决定从每页通过率最高的题目开始做,自己水平的确不咋地,慢慢来。
1045完全只是一道电路计算题,把公式算出来,基本就完了。虽然很简单,但是过程却不顺利
- 计算不细心。居然把cos(pi/2+a)简化成sin(a),漏了负号,这个问题很容易察觉,因为在输出的数据中看到有是正确的、有刚好是相反数的、有完全错误的。
- malloc.暑假基本没怎么动手,连这个函数的使用格式都忘记了。另外,用calloc是不是比用这个好点?
- math.h包含的函数有哪些。其实不只是这个,应该找个函数大全来浏览一下,前些天看到库函数有qsort,感到很惊讶,平时根本没听说过。
- scanf 的小错误。手冷的结果就是什么样的错误都会出现,曾一度写出 scanf("%f %f %f %d", vS, R, C, n);这种可笑的语句,double型用%lf,后面该是&vS,不适用&在VC中警告是 local variable 'vS' used without having been initialized,第一反应还以为VC居然连变量没有初始化都警告了。
虽然很简单,简单到甚至没必要注释,但毕竟是第一个AC的代码。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>#define PI 3.1415926
int main()
{
double alpha, w, C, R, vS;
double *vR;
int i, n;
scanf("%lf %lf %lf %d", &vS, &R, &C, &n);
vR = (double *)malloc(n*sizeof(double));for (i = 0; i < n; ++i)
{
scanf("%lf", &w);
alpha = atan(1/(w*C*R));
*(vR+i) = vS/(cos(alpha)+sin(alpha)/(w*C*R));
/* *(vR+i) = 1/(sin(PI/2+alpha)/vS-cos(PI/2+alpha)/(w*C*R*vS)); */
}
for (i = 0; i < n; ++i)
{
printf("%.3f\n", *(vR+i));
}return 0;
}
[time]9-9-2012