Проблема с объявлением функции, проблема K&R 1-15 - PullRequest
0 голосов
/ 12 июля 2020

Изначально существовала проблема с преобразованием Фаренгейта в Цельсия для нескольких значений Фаренгейта. Теперь в задаче 1-15 мы должны использовать функцию для этой задачи. Ниже приведен мой код:

 #include<stdio.h>

float temp_conv(float n);

int main()
{
    float lower, upper, step;
    int i;

    lower= 0;
    upper= 300;
    step= 20;
    
    for(i=0; i<=(upper-lower)/step; ++i)
        printf("%5.1f\t%6.2f\n", i*step, temp_conv(i*step));
}

float temp_conv(float n)
{
    float fahr, celsius;
    
    celsius= (5.0/9.0)*(fahr-32.0);

    return celsius;
}

И выдает следующий результат:

  0.0   -17.78
 20.0   -17.78
 40.0   -17.78
 60.0   -17.78
 80.0   -17.78
100.0   -17.78
120.0   -17.78
140.0   -17.78
160.0   -17.78
180.0   -17.78
200.0   -17.78
220.0   -17.78
240.0   -17.78
260.0   -17.78
280.0   -17.78
300.0   -17.78

Я передаю разные значения в функцию temp_conv, но тогда он также производит преобразованное значение 0 По Фаренгейту. Может быть, с функцией есть какая-то проблема, но как тогда она вычисляет значение Цельсия для 0 по Фаренгейту?

Пожалуйста, помогите.

1 Ответ

3 голосов
/ 12 июля 2020
float temp_conv(float n) {
    float fahr, celsius;
    celsius = (5.0/9.0)*(fahr-32.0);
    return celsius;
}

Вы игнорируете аргумент n, который вы передали функции, и вычисляете celsius из fahr. fahr неинициализирован (нет fahr = something), у него есть какое-то неинициализированное значение мусора, которое просто так приводит к -17.78.

Вместо этого просто вычислите его из аргумента:

float temp_conv(float n) {
    float celsius;
    celsius = (5.0 / 9.0) * (n - 32.0);
    return celsius;
}

или с лучшим названием:

float temp_conv(float fahr) {
    float celsius;
    celsius = (5.0 / 9.0) * (fahr - 32.0);
    return celsius;
}

или просто:

float temp_conv(float fahr) {
    return (5.0 / 9.0) * (fahr - 32.0);
}
...