Posted on 2010-08-17 14:49
Brian 閱讀(958)
評論(0) 編輯 收藏 引用 所屬分類:
POJ
我覺得有必要把它翻譯一下,然后就會發現考得其實是數學,你在google 翻譯上是得不到如下翻譯的:
Description
考慮下面的交流電路。我們將假定電路在穩態。因此,節點1的電壓和節點2的電壓分別是v1 = VS coswt 和 v2 = VRcos (wt + q),其中Vs是電源電壓,w是頻率(弧度每秒),t是時間。VR是電阻R兩端電壓下降的幅度,q是它的相位。

你需要寫一個程序,以確定不同的w對應的VR值。您將需要兩個電學定律來解決這個問題。第一
個是是歐姆定律,表述為V2 = iR,其中i是在電路順時針流向的電流大小。
第二個是i = C d/dt (v1-v2),i與電容器兩板上的電壓有關。"d/dt" 意為求關于t的求導。
Input
輸入包括一行或多行。第一行包括三個實數和一個非負整數。實數按順序是VS,R,C。
整數n是測試用例的個數。接下來的n行就是輸入,要求一行一個實數,代表w的值。
Output
輸出n行的VR值,注意,結果精確到小數點后三位。
下面需要推導一下求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 ))
// C 編譯器:
#include <stdio.h>
#include <math.h>
int main()


{
int i=0,n;
double VR,VS,R,C,w;
scanf("%lf%lf%lf%d",&VS,&R,&C,&n);
for (; i<n; i++)

{
scanf("%lf",&w);
VR=C*R*w*VS / sqrt(1+C*C*R*R*w*w);
printf("%.3lf\n",VR);
}
return 0;
}
注意 , 用 double