2015-04-20 5 views
-5
float x = 4.5; 
main() 
{ 
    float y,float f(); 
    x*=2.0; 
    y=f(x); 
    printf("\n%f%f",x,y); 
} 

float f (float a) 

{ 
    a+=1.3; 
    x-=4.5; 
    return(a+x); 
} 

Эта программа взята из книги: Let C, by Yashwant kanetkar. И вывод, который он говорит, составляет 4.500000 5.800000. Я получаю ошибку.Что случилось с моим C-кодом?

+2

Какую ошибку вы получаете? –

+0

программа даже не компилируется! –

+0

Попробуйте использовать 'float y, f (float);' вместо этого. –

ответ

1
//global variable x, can be accessed from anywhere 
float x = 4.5; 

//inform the compiler, that a function that is defined later, but it exists in the code, and to use it before it's defined, we need to know how it looks like: 
float f(float a); 

//I need to specify what my main function returns, typically "int" 
int main() 
{ 
    //local variable for saving the result in: 
    float y; 

    //multiply x, with 2, and save the result in x: 
    x*=2.0; 

    //run the function: 
    y=f(x); 

    //show the result: 
    printf("\n%f%f",x,y); 

    //return a value to let the OS know how the program ended (0 is success) 
    return 0; 
} 

//define the function 
float f (float a) 
{ 
    //whatever a is provided, add 1.3 to it before doing anything else 
    a+=1.3; 
    //subtract 4.5 from the global variable, before doing anything else: 
    x-=4.5; 
    //return the sum of a and x, as the result of this function. 
    return(a+x); 
} 

математика здесь:

x = 4.5 
x = (x * 2) = 9 
a = (x = 9) = 9 
a = (a + 1.3) = 10.3 
x = (x - 4.5) = 4.5 
y = a + x = (4.5 + 10.3) = 14.8 
+0

Информирование компилятора было важно, я забыл об этом. Ваше объяснение принесло ясность, спасибо. – sunp

+0

Я думаю, что эта строка: 'y = a + x = (4.5 + 10.3) = 15.8' должна быть' y = a + x = (4.5 + 10.3) = 14.8'. –

+0

true - теперь исправлено! – Henrik

0

Пункт 1:

Удалить float f(); из main(). Объявление float f(); снаружи main(). Таким образом, он будет служить цели форвардной декларации.

Пункт 2.

Снимите , и добавьте ; после float y.

Пункт 3.

main() должен быть int main(void).

Примечание. Рассмотрим добавление явного оператора return в конце main(). Хотя это не обязательно, но считается хорошей практикой.

0

float y, float f();

Используйте точку с запятой после float y

float y; 

И float f(); // (неправильный прототип). вам необходимо передать аргумент этой функции.

Не нужно декларировать функцию внутри основного. вы можете удалить float f(); с вашей функции main().

основной не возвращает значение

Используйте

int main() 
{ 
    //your code 
    return 0; 
} 
0

При объявлении f():

float y,float f(); 

вы не используете прототип. Поэтому, когда вызов f() сделан:

y=f(x); 

float аргумент x продвигаемый компилятором к double типа.

Чтобы решить эту проблему, объявить функцию, используя полный прототип:

float f(float a); 
0

Там нет необходимости объявлять функции как переменные в вашем главном. 2. Кроме того, main() должен быть int main(). 3. Определите/объявите свою функцию перед ее использованием.

#include <stdio.h> 
float x = 4.5; 

float f (float a) 

{ 
a+=1.3; 
x-=4.5; 
return(a+x); 
} 
int main(void) { 
// your code goes here 
float y; 

x*=2.0; 
y=f(x); 
printf("\n%f%f",x,y); 
return 0; 
} 

Ideone ссылка: http://ideone.com/W7V1Qr

+0

Но если я сначала объявляю main(), а затем другую функцию, почему он показывает ошибку: ag.c: 13: 7: ошибка: конфликтующие типы для 'f' float f (float a) ^ ag.c: 9: 7: примечание: предыдущее неявное объявление 'f' было здесь у = F (X); – sunp

+0

Это потому, что всякий раз, когда вы ссылаетесь на функцию, компилятор должен уже знать об этой функции. –

+0

Да, Основы! просто забыл. Получил это сейчас. Благодарю. – sunp

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