【问题标题】:Problem with function declaration, K&R problem 1-15函数声明问题,K&R问题1-15
【发布时间】:2020-11-01 17:56:36
【问题描述】:

最初对于多个华氏度值,从华氏度到摄氏度存在问题。 现在在问题 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 华氏度的摄氏值的?

请帮忙。

【问题讨论】:

  • 变量fahr 是干什么用的?真的应该是n 的论点吗?
  • 另外几个注意事项:你不需要临时变量celsius,你可以只做return 5.0 / 9.0 * (n - 32.0);main函数中的循环,我可能会这样做@987654328 @,然后将current 传递给函数。
  • 应该有一个编译器警告,比如“使用了未初始化的局部变量 'fahr'”。小心它们。

标签: c function declaration


【解决方案1】:
float temp_conv(float n) {
    float fahr, celsius;
    celsius = (5.0/9.0)*(fahr-32.0);
    return celsius;
}

忽略传递给函数的参数n,并从fahr 计算celsiusfahr 未初始化(没有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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多