2016-03-11 3 views
-3
#include <stdio.h> 
#include <math.h> 

main() 
{ 
    float i; 
    float x,N,sum; 
    printf("enter x and N respectively"); 
    scanf ("%f %f", &x, &N); 

    sum = 0; 
    for (i=1;i<=N;i++){ 
      sum = sum + ((pow(x,i))/(fact(i))); 
    } 
    printf ("%f", sum); 
} 

int fact(int n){ 
    int i,temp; 
    temp = 1; 
    for (i=1;i<=n;i++){ 
      temp = temp*i; 
      return temp; 
    } 

} 

Это означает, Я попытался определить факт внутри main, но было предупреждение об управляющем потоке, и я попробовал то же самое за это время, но ошибочный ответ. Любая помощь?Определение функции снаружи основного

+9

'Я попытался определить факт внутри main' ... явный признак необходимости сначала прочитать хорошую книгу C. Без обид. –

+2

Вы должны * объявить * функции * перед их использованием *. – MikeCAT

+1

Существуют и другие ошибки в этом коде, такие как оператор 'return' в цикле факториальных вычислений. – owacoder

ответ

1

Вам необходимо добавить int fact(int n); до функции main(), чтобы сообщить компилятору, что существует функция, называемая фактом, или вы можете добавить определение всей функции раньше.

+0

Примечание: программа должна скомпилироваться с предупреждениями (а не с ошибками), потому что 'int' является типом возвращаемого по умолчанию. –

1

Вы не можете (вы запрещены стандартом C99 или C11) определяют функцию (например, fact) внутри другой (например, main).

Однако некоторые компиляторы C, в частности GCC, принимают в качестве расширения имеют nested functions.

(я не рекомендую использовать это расширение, в частности, если вы новичок в C)

Конечно, вы будете лучше объявить

int fact(int n); 

перед тем ваш main и оставить его определение после.

Ваш код неправильно (в частности, лучше определитьmain, как int main(int argc, char**argv) то узнать, возможно, о getopt и использовать его). Собирать со всеми предупреждениями & отладочной информации (например, gcc -Wall -Wextra -g homework.c -o binaryprog ...), а затем использовать отладчик (например gdb ./binaryprog)

+0

и 'main()' определенно устареет, как это –

+0

Да. И GCC может предупредить вас об этом. –

0

Вы должны объявить fact() сверху основной. Есть два способа сделать это.

Первый способ: Добавить int fact(int n); выше основного()

Второй способ: скопировать всю функцию выше основной(). Таким образом, это выглядит так:

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

int fact(int n) 
{ 
    int i,temp; 
    temp = 1; 
    for (i=1;i<=n;i++){ 
     temp = temp*i; 
     return temp; 
    } 
} 

main() 
{ 
    float i; 
    float x,N,sum; 
    printf("enter x and N respectively"); 
    scanf ("%f %f", &x, &N); 

    sum = 0; 
    for (i=1;i<=N;i++){ 
     sum = sum + ((pow(x,i))/(fact(i))); 
    } 
    printf ("%f", sum); 
} 
+0

Ваше первое предложение неверно: ему не нужно «находить» его. Программа должна компилироваться с предупреждениями (а не с ошибками), потому что 'int' является типом возвращаемого по умолчанию. –

+0

Ну, я думаю, я имел в виду то же самое. Ты прав. Мой компилятор дает мне следующие предупреждения: - неявное объявление функции «факт» - вызов функции без прототипа – xy36

Смежные вопросы