2016-04-20 11 views
-1

Ich habe Probleme beim Schreiben eines Programms in C, das S berechnet, wobei S = {1/50 - 3/48 + 5/46 ...} mit 9 Elementen ist. Ich weiß nicht, wie man den DIFFERENCE-Operator gefolgt von einem SUM-Operator verwendet, und ich MUSS die für Struktur verwenden.Brüche: Summe und Unterschied in C-Programmierung

Hier ist das Programm, das ich schrieb:

#include <stdio.h> 
#include <stdlib.h> 

int main (void) { 
    int n, d, S, i; 
    i = 0; 
    n = 1; 
    d = 50; 
    S = n/((double)d); 

    for (i = 0; i < 4; i++) { 
     n += 2; 
     n -= 2; 
     S = S + (n/((double)d)); 
     S = S - (n/((double)d)); 
    } 
    printf("%d", S); 
    return 0; 
} 

Ich weiß, dass die Variablendeklarationen falsch sein kann und das ist genau das, wo ich verwirrt. Ich habe S als eine ganze Zahl deklariert, aber d (Nenner) zu verdoppeln, weil das Ergebnis natürlich eine Dezimalzahl sein muss.

Kann mir jemand helfen ??

Der Ausgang Ich erhalte ist: 0

+2

Sie möchten den Code in einem Debugger durchgehen, während Sie alle relevanten Variablen untersuchen, um zu erfahren, was passiert. – alk

+3

Wenn 'S' ein' int' ist, dann ist es eine ganze Zahl. Eine ganze Zahl kann nur eine ganze Zahl sein. – NathanOliver

+1

'n + = 2; n- = 2; 'macht keinen Sinn. 'n' ändert sich am Ende nicht. Dies ist ein NOP. Gleiches gilt für diese beiden Aussagen: S = S + (n/((doppelt) d)); S = S - (n/((doppelt) d)); ' – alk

Antwort

1

Überprüfen Sie, ob, was Sie suchen den folgenden Code ist:

#include <stdio.h> 
#include <stdlib.h> 

void main() { 
    int n = 1, d = 50, i = 0, signal = 1; 
    double S = n/(double) d; 
    for (i = 0; i < 8; i++) { 
     n += 2; 
     d -= 2; 
     signal = -signal; 
     S += signal * n/(double)d; 
    } 
    printf("%f", S); 
} 

Ich glaube, du verpasst S ist eine double Nummer. int/double = double, aber Sie ordnen diese Mathematik in einer int Variable zu.

1

Vielleicht so. Der wichtigste Punkt ist die Verwendung des Typs double, da der Typ int nur ganze Zahlen enthalten kann.

#include <stdio.h> 

int main (void) { 
    int i; 
    double sign = 1.0;    // sign 
    double num = 1.0;    // numerator 
    double div = 50.0;    // divisor 
    double sum = 0.0;    // series sum 

    for (i = 0; i < 9; i++) { 
     sum += sign * num/div; // accumulate the term 
     num += 2.0;     // numerator +2 
     div -= 2.0;     // divisor -2 
     sign *= -1.0;    // alternate the sign 
     printf("%f\n", sum);  // show double result 
    } 
    return 0; 
} 

Programmausgabe:

0.020000 
-0.042500 
0.066196 
-0.092895 
0.121390 
-0.153610 
0.188496 
-0.228171 
0.271829 
1

Verschiedene Dinge über Ihren Code zu sagen.

Zuerst können Sie keine Ganzzahl für Ihre Summe verwenden, da Sie ein Gleitkommaergebnis erhalten möchten.

Dann in den Kommentaren erwähnt, wie Sie aufeinander folgende Vorgänge verwenden, die die variable

n+=2; n-=2; 

in nicht zu ändern führen Sie einfach so etwas wie:

double S = 0.0; int N=9; 
for(i=0; i < N; ++i) { 
    S += ((i % 2 == 0)?(1.0):(-1.0)) * (2.0*i+1)/(50-(2.0*i+1)); 
} 

Die Anweisung (i% 2 == 0)? (1.0): (- 1.0) Wähle 1 wenn 'i' gerade ist und -1 falls 'i' ungerade ist.

Schließlich, wenn S nicht mehr ein int ist, müssen Sie Ihre printf mit einem Gleitkommaformat wie zum Beispiel '% f' ändern.