2016-08-16 2 views
0

Ich möchte ein Programm schreiben, das die Reihe berechnet x- (x^3/3!) + (X^5/5!) - (x^7/7!) + ... (x^n/n !) indem x und n als Benutzereingaben genommen werden.So drucken Sie diese Serie x- (x^3/3!) + (X^5/5!) - (x^7/7!) + ... (x^n/n!) In C/C++ ?

Das ist, was ich versucht habe, und auch gibt es keine Ausgabe, wenn ich die Werte für x eingeben, n:

#include<stdio.h> 
#include<math.h> 
//#include<process.h> 
#include<stdlib.h> 

double series(int,int); 
double factorial(int); 

int main() 
{ 
    double x,n,res; 
    printf("This program will evaluate the following series:\nx-(x^3/3!)+(x^5/5!)-(x^7/7!)+...(x^n/n!)\n"); 
    printf("\nPlease enter a value for x and an odd value for n\n"); 
    scanf("%lf%lf",&x,&n); 
    /*if(n%2!=0) 
    { 
     printf("Please enter a positive value!\n"); 
     exit(0); 
    }*/ 
    res=series(x,n); 
    printf("For the values you've entered, the value of the series is:\n %lf",res); 
} 

double series(int s, int t) 
{ 
    int i,sign=1; double r,fact,exec; 
    for(i=1;i<=t;i+2) 
    { 
     exec=sign*(pow(s,i)/factorial(i)); 
     r+=exec; 
     sign*=-1; 
    } 
    return r; 
} 

double factorial(int p) 
{ 
    double f=1.0; 
    while(p>0) 
    { 
     f*=p; 
     p--; 
    } 
    return f; 
} 

Wenn ich Werte für x eingeben und n, es zeigt einfach nichts. Während ich in C geschrieben habe, werden C++ - Lösungen ebenfalls geschätzt.

Output window in code::blocks

+3

Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: ** [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) ** – NathanOliver

+1

verwenden Sie stattdessen "i = i + 2" von 'i + 2' –

+1

Veröffentlichen Sie keinen Text als Bilder! – Olaf

Antwort

3

Die Schleife

for(i=1;i<=t;i+2) 

in der Funktion series() ist eine unendliche Schleife, wenn t >= 1 weil i in der Schleife nicht aktualisiert. Versuchen Sie +-+= ändern und

for(i=1;i<=t;i+=2) 

stattdessen verwenden. Auch scheint es Ihnen Typ int für x und n in der Funktion main() weil die Argumente von series()int ist verwenden soll. Vergessen Sie nicht, den Formatbezeichner beim Ändern ihrer Typen zu ändern.

0

Danke an alle die geholfen haben. Hier ist der letzte funktionierende Code:

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

double series(int,int); 
double factorial(int); 

int main() 
{ 
    int x,n; double res; 
    printf("This program will evaluate the following series:\nx-(x^3/3!)+(x^5/5!)-(x^7/7!)+...(x^n/n!)\n"); 
    printf("\nPlease enter a value for x and an odd value for n\n"); 
    scanf("%d%d",&x,&n); 
    if(n%2==0) 
    { 
     n=n-1; 
    } 
    res=series(x,n); 
    printf("For the values you've entered, the value of the series is:\n%lf",res); 
} 

double series(int s, int t) 
{ 
    int i,sign=1; double r=0.0,fact,exec; 
    for(i=1;i<=t;i+=2) 
    { 
     exec=sign*(pow(s,i)/factorial(i)); 
     r+=exec; 
     sign*=-1; 
    } 
    return r; 
} 

double factorial(int p) 
{ 
    double f=1; 
    while(p>0) 
    { 
     f*=p; 
     p--; 
    } 
    return f; 
}