台灣最大程式設計社群網站
線上人數
1006
 
會員總數:245223
討論主題:189094
歡迎您免費加入會員
討論區列表 >> C/C++ >> 求救呀!!!
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
求救呀!!!
價值 : 10 QP  點閱數:4100 回應數:13

樓主

小白
初學者
2 3
6 1
發送站內信

試寫出一程式計算下列數學方程式的結果,x與n的值均由鍵盤輸入:
1/x2+1/x3+…+1/xn

本篇文章發表於2005-02-14 13:08
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

阿祥祥
捐贈 VP 給 阿祥祥 檢舉此回應
1.先include <math.h>
2.再利用迴圈及pow函數來解應該就可以做到,試看看.
 double pow(double x, double y); 函數 x^y
本篇文章回覆於2005-02-14 13:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

cute
捐贈 VP 給 Sean 檢舉此回應
這方程式怪怪的
如果原式的x2 x3 x4 ... xn 是數列  n代表x數列的項次 x則為代數 無意義
如果原式 = 1/(x*2) + 1/(x*3) +....+ 1/(x*n) = (1/x)*(1/2+1/3+...1/n)
如果原式 = 1/(x^2) + 1/(x^3) +....+ 1/(x^n) = Math.Pow(x, -2) + Math.Pow(x, -3) +....+ Math.Pow(x, -n)
請問是哪一種呢?
本篇文章回覆於2005-02-14 14:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

formosa
捐贈 VP 給 formosa 檢舉此回應
如果原式的x2 x3 x4 ... xn 是數列  n代表x數列的項次 x則為代數 無意義

不會無意義呀
如果真的是那樣,就變成

for(i = 0;i > n;i++){
sum = 1/x + sum
printf("%f",sum);
}

= = ... 
還是有意義呀~!
本篇文章回覆於2005-02-14 20:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

formosa
捐贈 VP 給 formosa 檢舉此回應
這樣比較對...

for(i = 1;i > n;i++){
if(i=1) continue;
sum = (1/x) + sum
printf("%f",sum);
}

本篇文章回覆於2005-02-14 20:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

小白
檢舉此回應
1/X的2次方+1/X的3次+..+1/X的N次方
本篇文章回覆於2005-02-14 23:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
void main()
{
 int a,x,n;
 double ans=0 ;
 scanf("%d %d",&x,&n);
 for (a=2;a<=n;a++)
  {
    ans+=(1/pow(x,a))
  }
 printf("結果為:%f",ans);
}

我是猜想原發問者是要問
1/x^2+1/x^3....1/x^n 啦...
這是電腦程式裡面標準的表示方式喔...
x2,x3那種東西只有數學課本才會這樣寫
本篇文章回覆於2005-02-14 23:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
對了..這種東西要是使用.net或是vb裡面的評估運算...
兩行就搞定...
c這種笨東西才會寫那麼多

不過..這個程式還是有改進的空間, 
可以從很多地方下手想
ex:
1/x^2+1/x^3....1/x^n
裡面利用pow作運算很浪費
還不如利用一個變數紀錄x^2....x^n的變化
程式約改成下列的樣子

void main()
{
 int a,x,n;
 double ans=0, temp;
 scanf("%d %d",&x,&n);
 temp=x * x;  //先算出平方, 反正這個一定得算
 for (a=2;a<=n;a++)
  {
    ans+=(1/temp);
    temp *=x;
  }
 printf("結果為:%f",ans);
}

小小改變又可以讓速度爆增
這還不是唯一解, 還可以再有一些不一樣的改變哩, 程式. 是千變萬化, 無所不能的喔!!!
本篇文章回覆於2005-02-14 23:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

cute
捐贈 VP 給 Sean 檢舉此回應
我認為x1 x2 x3 x無意義的意思是 xn數列 x1是第一項  x2是第二項 .. x在這個數列的意義是代名詞
換個英文也是同樣意思  y1 y2 y3 ... yn
x是沒辦法輸入的  所以我說他無意義

小白的需求是 1/X的2次方+1/X的3次+..+1/X的N次方
也就是 X 的負2次方 + X 的負3次方 + .... + X 的負N 次方
有限定的邊界求精確解應該使用QQ的乖乖餃 回圈的方法
無限的話 這好像變成黎曼函數

另外
for(i = 1;i > n;i++)
  sum = (1/x) + sum;
假設sum的初始值是1
則sum最後的結果是 ((((((1+1/x)+1/x)+1/x)+1/x)+1/x)+1/x).......
時間很晚了 有點不想展開它..
本篇文章回覆於2005-02-15 00:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

cute
捐贈 VP 給 Sean 檢舉此回應
忘了還有一個最基本的算法
有限定的邊界求精確的總和
可以用(首項+末項)*項數/2
本篇文章回覆於2005-02-15 00:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

cute
捐贈 VP 給 Sean 檢舉此回應
更正
不能用(首項+末項)*項數/2
因為是等比級數的總和
應該用首項*(公比的N次方-1)/(公比-1)
本篇文章回覆於2005-02-15 00:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
哇..對對對
Cute #10的解法才是完美的喔, 這個厲害
程式不該蠻幹
數學的解法才是最棒的哩

程式, 要搭配演算法/資料結構/數學
完美的結合才能發揮出真正威力哩!!!!!
本篇文章回覆於2005-02-15 00:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

cute
捐贈 VP 給 Sean 檢舉此回應
int s = 0;
int n = 6;
int x = 3;
for (int i = 2; i < n; i++)
  s += Math.pow(x, -i);


int n = 4;
int x = 3;
int s = Math.pow(x, -2))*(Math.pow(1/x, n)-1)/(1/x-1)


這兩種結果比較一下是差不多的
本篇文章回覆於2005-02-15 01:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

小白
捐贈 VP 給 Marcus 檢舉此回應
不會吧…又遇上同名的人…
幫你一吧哦
#include <math.h>
#include <stdio.h>
int main(){
   double k=0.0;
   long x,n;
   int i;
   scanf("%d%d",&x,&n);
   for(i=2;i<=n;i++)
      k+=pow(x,-i);
   printf("%.9f",k);
   return 0;
}

本篇文章回覆於2005-02-15 13:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.