簡體   English   中英

C-1 / n數的總和

[英]C - Sum of 1/n numbers

您好,您可以快速瀏覽一下我的代碼並指出錯誤。 我正在嘗試計算這樣的n個數字的總和:1- 1/2 + 1/3-1/4 ...等等...

使用以下代碼,我每次得到1.00000,但是它應該在0和1之間,例如對於3,它應該是1-1/2 + 1/3 = 0,83333。

#include <stdio.h>
int main () {

 int n, prefix;
 float sum;
 scanf("%d", &n);
 do {
   if (n%2==0) {
    prefix=-1;
   } else {
    prefix=1;
   }
   sum+=  prefix/n;
   n = n - 1;

 } while (n > 0);
 printf("%f", sum);

}

我可以看到三個錯誤:

  1. 錯字( premix vs prefix
  2. 使用整數類型
  3. (感謝@Light):初始化sum

請嘗試以下操作:

#include <stdio.h>
int main () {

 int n, n_initial;
 double sum=0.0, prefix = 1.0;
 printf("enter the value for n:\n");
 scanf("%d", &n);

 if(n<1) {
   printf("n must be > 0!\n");
   return 1;
 }
 n_initial = n;
 if (n%2==0) prefix = -1.0; else prefix= 1.0;
 do {
   sum+= prefix/(double)n;
   prefix *= -1.0;
   n--;

 } while (n > 0);
 printf("The sum of the series over %d terms is: %lf\n", n_initial, sum);
 return 0;
}

注意-我將n保留為整數,並在除法之前將其顯式轉換。 最好將其設置為float / double-記住相應地更改scanf的格式規范。 我只執行一次模運算(此后, prefix的符號不斷變化)。 另外-總是建議輸入數字(“為什么不做任何事情?!”),注釋結果(而不是打印“僅數字”),並結束輸入,這總是一個好主意。用換行符輸出(因此提示不會混淆程序的輸出)。

最后-您可能要檢查用戶是否未輸入負數,否則將使您的代碼給出不好的結果。

事后考慮-您可以測試n大值,然后返回log(2.0) 但是,這是在欺騙......而這一系列不收斂非常慢(它振盪相當糟糕-的第三個數字還在不斷變化,當n = 1000)。 因此,四舍五入的錯誤確實有增加風險的風險。 這就是為什么您需要使用double類型的原因。 但我建議您考慮一下其他計算log(2.0) ,例如,使用http://www.math.com/tables/expansion/log.htm上提供的其他系列之一。 您實際上可以實現所有這些函數,並在n個條件后比較它們的精度(通過打印錯誤: sum - log(2.0)

在上面的答案中加上未初始化的總和 (將其初始化為零 )。並且我認為您的代碼在輸入為0時不起作用(它給出除以零的誤差) 。因此,最好在while或for循環中使用或提出一個在做一會兒。

當兩者都是整數時,您正在做prefix/n 所以您得到的答案是整數(始終為0)

采用

(double)prefix/n

要么

prefix/(double)n

甚至

(double)prefix/(double)n

這是完整的代碼:

#include <stdio.h>
int main () {

 int n, prefix;
 float sum = 0;
 scanf("%d", &n);
 do {
   if (n%2==0) {
    prefix=-1;
   } else {
    prefix=1;
   }
   sum+= (double)prefix/(double)n;
   n = n - 1;

 } while (n > 0);
 printf("%f", sum);

}

我在compileonline.com上以10的輸入運行它,並得到:

在此處輸入圖片說明

prefixn都是整數,因此這意味着您將得到整數除法,該結果將被截斷(即簡單地切掉小數點)。 如果要浮點結果,則一個或兩個變量也必須是浮點變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM