#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。
答案 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