簡體   English   中英

C-數字總和

[英]C - Sum of numbers

為什么我的程序不起作用? 應該從公式1-(1/2)+(1/3)... +(1/999)-(1/1000)=加上數字

#include <stdio.h>
#include <math.h>
int main () {
 int i, j;
 float  suma;
 suma = 0.f;
 for (i=0; i<1000; i++) {
    if (i%2==0) {
        suma=suma - 1/i;
    } else {
        suma=suma + 1/i;
    }
 }
 printf("%f", suma);

}

除以零!

int main () {
 int i;
 float  suma;
 suma = 0.0f; 
 for (i=1; i<1000; i++) {  //fix loop, start from 1
    if (i%2==0) {
        suma=suma - 1.0f/i; // Use 1.0, (1/i will be evaluated as int)
    } else {
        suma=suma + 1.0f/i;
    }
 }
 printf("%f", suma);

}

iint嘗試打印1 / i 除非i1 ,否則它將始終返回0。 發生這種情況是因為1 / i被評估為歐幾里得除法 ,其余部分被舍棄了。

之所以這樣評估,是因為1i都是整數。 您需要分子或分母為浮點類型。

一種方法是將i suma = suma - 1 / (float)i轉換為浮點數,因此您的代碼應如下所示: suma = suma - 1 / (float)i 另一種方法是使1為浮點類型: suma = suma - 1.0 / isuma = suma - (float)1 / i

for循環從0開始。因此第一次迭代返回除以零的錯誤。 第二次迭代將返回1/1 = 1並可以正常工作,但是從第三次迭代將返回0,因為您使用的是int。 嘗試從1開始for循環,然后鍵入i浮動。

如果首先應用一些數學運算,則將獲得更高的准確性。 您的系列:

1 - 1/2 + 1/3 - 1/4 + ... + 1/999 - 1/1000

可以重寫為:

(1 - 1/2) + (1/3 - 1/4) + ... + (1/999 - 1/1000)

或為:

1/(1*2) + 1/(3*4) + ... + 1/(999*1000) 

現在,您可以編寫一個程序來執行計算。 但是,您應該使用double類型來提高准確性,並使用整數將double轉換為double來確保將序列添加為double數:

#include <stdio.h>
#include <math.h>
int main() {
    int i;
    double sum = 0;
    for (i=1; i<1000; i+=2) {
        sum += 1/(i*(i+1.)); // 1. to force cast to double
    }
    printf("%g", sum);
}

這里是一個簡單的程序

float j = 1.0f;
float suma = 0.0f;
int i = 1;

for (i=1; i <= 1000; i++) {
   suma += j/i;
   j = j * (-1);
}

暫無
暫無

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

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