题目来源:
题目大意:
如图所示的交流电路,假设电路处于稳定状态,Vs为电源电压,w是频率,单位为弧度每秒,t表示时间。
则:V1 = Vs * cos (wt); V2 = VR * cos(wt + q). 其中VR为电阻R两端电压下降的幅度,q是相位。写一个程序确定不同的w对于的VR值。相关的两个电学公式:
欧姆定理:V2 = i*R, i为电流大小
i = C d/dt(V1 - V2).
输入:包括一行或多行。第一行包括三个实数和一个非负整数。实数按顺序是VS,R,C。整数n是测试用例个数。接下来的n行,每行一个实数,表达w的值。
输出:每行对应一个VR值,结果精确到小数点后三位。
Sample Input
1.0 1.0 1.0 90.010.0316230.10.316231.03.162310.031.623100.0
Sample Output
0.0100.0320.1000.3020.7070.9530.9951.0001.000
此题虽然给出的是物理背景,但其实是一道不折不扣的数学题(高中最算不清楚的就是三角函数啊T^T,直接用了别人现成的结果了)。VR公式的推导:
V2 = iR = CR d/dt (VS*cos(wt)-VR*cos(wt+q))=VRcos(wt+q)
= CR w (sin(wt+q)-sin(wt))=VRcos(wt+q)下面用到高中数学当中的计算方法,分别令 t=0 和 wt+q=0 ,得到 CRw tan b = 1 和 VR=CRw VS sin b ,然后利用三角函数中的万能公式,求得 :VR = CRw VS / sqrt (1+ (CRw) ^ 2 ))1 // 2 // POJ1045 Bode Plot 3 // Memory: 160K Time: 0MS 4 // Language: C++ Result: Accepted 5 // 6 7 #include "cstdio" 8 #include "math.h" 9 10 using namespace std;11 12 int main() {13 int n, i;14 double vs, r, c, w, vr;15 scanf("%lf%lf%lf%d", &vs, &r, &c, &n);16 for (i = 0; i < n; ++i) {17 scanf("%lf", &w);18 vr = c * r * w * vs / sqrt(1 + (c * r * w * c * r * w));19 printf("%.3lf\n", vr);20 }21 }