不知道如何解决void-function中的错误

时间:2017-01-10 13:40:11

标签: c void

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

#define e 2.71828

float fct( float x, int n )
{
    float f=0;
    switch(n){
        case 1: f=(4*x-1); break;
        case 2: f=(sin(3*x)); break;
        case 3: f=((1.0/7.0)+(1.0/x)); break;
        case 4: f=(pow(e,x)-2*x+3); break;
        case 5: f=(pow((x-2),3)+2); break;
    }
    return f;
}
;

void nullstelle(float a, float b, float g, int n)
{
    float fm, fa, fb, m;
    int anzit=0;
    fa=fct(a,n);
    fb=fct(b,n);
    while (b-a>g && fm!=0)
    {
        m=((a+b)/2);
        fm=fct(m,n);
        if (fa*fm < 0)
        {
            b=m;
            fb=fm;
        }
        else
        {
            a=m;
            fa=fm;
        }
        anzit++;
    }
}

int main()
{
    float a, b, g, m;
    int n, anzit;

    printf( "Fuer n=1: f=(4*x-1)\n" );
    printf( "Fuer n=2: f=(sin(3*x))\n" );
    printf( "Fuer n=3: f=(1/7+1/x)\n" );
    printf( "Fuer n=4: f=(pow(e,x)-2*x+3)\n" );
    printf( "Fuer n=5: f=(pow((x-2),3)+2)\n" );
    printf( "\nFunktionszahl n eingeben:\n" );
    scanf( "%i", &n );

    printf( "Intervallgrenzen: Untere Grenze a und Obere Grenze b eingeben:\n" );
    scanf( "%f %f", &a, &b );

    printf( "Benoetigte Genauigkeit g eingeben: [-g;0] [0;g]\n" );
    scanf( "%f", &g );

    printf( "Nullstelle: %f\n", nullstelle( a, b, g, n) );
    printf( "Anzahl der Iterationsschritte: %i\n", anzit );

    if (fct(nullstelle(a,b,g,n), n)!=0)
        printf("Keine genaue Nullstelle gefunden\n");
    else
        printf("ok\n");

    return 1;
    return 0;
}

现在调试器说:invalid use of void expression。我被卡住了。如果你能提供帮助,真的很好。 P.S。:我必须使用void。

1 个答案:

答案 0 :(得分:3)

问题出在

if (fct(nullstelle(a,b,g,n), n)!=0)

nullstelle是一个不返回任何内容的函数,但fct是一个需要float参数和整数paramager的函数。

函数fct没有收到float参数。您需要重新检查这些功能。

此外,

printf( "Nullstelle: %f\n", nullstelle( a, b, g, n) );

需要一个float参数,但该函数只返回void