【问题标题】:C function callingC 函数调用
【发布时间】:2010-10-22 00:49:21
【问题描述】:

因此,该程序应该在给出每日最高、最低和预计最低的时间后,估算一天中的每小时温度。我在调用主函数中的函数时遇到问题。我真的不明白我应该如何从函数中获取特定信息,并在我的主函数中使用它来代替变量。我也很难理解参数和参数的概念。我确定我在这里不止一个地方搞砸了,但我现在最关心的是功能。任何帮助将不胜感激。

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

#define PI 3.14159


double getFahrTemp(double high, double low, int hour);
double fahr2cels( double fahr );
double cels2kelv( double cels );
double fahr2rank( double fahr );

double getDailyHigh()
{
  int high;
  printf("Enter the daily high temperature <F>:\n");
  scanf("%d",&high);
  return high;
}

double getDailyLow()
{
  int low;
  printf("Enter the daily low temperature <F>:\n");
  scanf("%d",&low);
  return low;
}

int getLowHour()
{
  int lowHour;
  printf("Enter the time of the daily low temperature:\n");
  scanf("%d",&lowHour);
  return lowHour;
}

double getFahrTemp(double high, double low, int hour)
{ 
  return (high-low)/2 * sin(2*PI/24 * hour + 3.0/2.0 * PI) + (high+low)/2;
}

double fahr2cels( double fahr )
{
  double cels;
  cels = fahr - 32 / 1.8;
}

double cels2kelv( double cels )
{
  double kelv;
  kelv = cels + 273;
}

double fahr2rank ( double fahr )
{
  double rank;
  rank = fahr + 459.67;
}


int main(getDailyHigh, getDailyLow, getLowHour, getFahrTemp)
{
  int hour, time;

  printf ("Temperature Scale Conversion Chart:\n")
  printf ("TIME    FAHR    CELSIUS    KELVIN    RANKINE")

  getDailyHigh();
  getDailyLow();
  getLowHour();

  do 
  {
    int time, hour=1;
    time = (hour + lowHour) % 12;

    getFahrTemp(getDailyHigh(), getDailyLow(), hour)

    fahr2cels
    cels2kelv
    fahr2rank

    printf ("%d:00   %2.2d   %2.2d   %3.2d   %3.2d\n", time, fahr, cels, kelv, rank;
    hour = hour++;
   }  
   while (hour <= 24);
}

【问题讨论】:

  • 我确定您的编译器已经为此向您抱怨过,但是您应该将“int high”和“int low”从 getDailyHigh/Low 更改为 doubles,并根据您的 scanf() 命令进行相应的更改.您已声明函数将返回一个双精度但返回一个整数。
  • 我认为现在一切正常,除了我收到以下错误:“错误:调用的对象 getDailyHigh 不是函数”。

标签: c function


【解决方案1】:

我真的不明白我是怎么回事 应该得到具体信息 从函数中,并在 我的主要变量的位置 功能。我也有问题 掌握参数的概念和 论据。

你了解数学中函数的概念吗?例如,将摄氏度转换为华氏度的公式是:

°C = (°F − 32) × 5⁄9

可以把它写成一个数学函数:

f(x) = (x - 32) × 5⁄9

函数f 接受一个名为x 的参数并返回 (x - 32) × 5⁄9。要“使用”该功能,您可以编写:

y = f(x)

给定一个变量x,你可以将函数f的结果赋值给一个变量y

一旦你理解了这一点,你就可以很容易地看到它是如何转移到编程中的:

double fahr2cels(double f)
{
    return (f - 32) * 5 / 9;
}

调用函数甚至看起来像“数学是如何完成的”:

double celcius = fahr2cels(fahrenheit);

与数学中的多变量函数一样,您也可以拥有接受多个参数的函数。你甚至可以拥有不接受参数的函数!

double getFahrTemp(double high, double low, int hour)  
{   
    return (high-low)/2 * sin(2*PI/24 * hour + 3.0/2.0 * PI) + (high+low)/2;  
}

调用函数的语法相当一致:

// Call the function getFahrTemp(), passing three parameters.
// The variable fahrtemp receives the result of the function call.
double fahrtemp = getFahrTemp(high, low, hour);

在这个数学类比中我必须注意一些重要的区别 - C 中的函数可能有副作用(它们以某种方式在函数之外影响程序状态)。此外,您传递的参数总是被复制。

【讨论】:

    【解决方案2】:

    问题出在这部分:

    fahr2cels
    cels2kelv
    fahr2rank
    

    需要传递指定的参数:

    degCel = fahr2cels(degF);
    

    一些帮助你理解的基本规则:

    所有 C 语句都以分号 (;) 结尾。
    (引用的块中的所有函数都没有最后一个分号......)

    查看函数定义以了解要传递的内容

    double fahr2cels( double fahr );
    

    表示函数采用1变量,必须是double(浮点数)

    查看函数定义以了解函数返回的内容
    所有函数仅返回 1(或零)值。但是那个值的类型很重要。

    double fahr2cels( double fahr );
    

    表示函数返回的值是double


    综合这些信息,并对您的代码进行一些更改:

    double dailyHighF, dailyHighC, dailyHighK;
    double dailyLowF;
    int    lowHour;
    
    dailyHighF = getDailyHigh();
    dailyLowF = getDailyLow();
    lowHour = getLowHour();
    
    dailyHighC = farh2cels(dailyHighF);
    dailyHighK = cels2kelv(dailyHighC);
    

    另外需要注意的是:你的函数被声明为返回 double,但它们声明为 scanfreturn 整数。这不是一个大问题,因为整数会自动变为双精度数。但是,如果你的类型保持一致,你会过得更好。如果该函数将返回一个double,那么它内部应该有一个double 变量。

    【讨论】:

    • 好的,这就是我要找的。我不知道如何告诉函数获取某个变量并在函数中使用它。然后将结果作为变量存储在主函数中。现在我收到错误说它们不是函数。我还能错过什么? ^ fahr2cels、cels2kelv 和 fahr2rank 函数。
    • 在我确切知道错误是什么之前,您必须发布您的代码。请编辑您的原始代码以显示您所做的更新。然后引用确切的错误信息(包括行号)。
    • main 从哪里开始,你有:main(getDailyHigh, getDailyLow, getLowHour, getFahrTemp)。就初学者所知(目前),main 没有任何参数,应该写成 main(void)。当你变得更高级时,你将了解 main 的参数是什么,以及如何使用它们。
    【解决方案3】:

    例如

    double fahr2cels( double fahr );
    ...
    
    double fahr = 101.0;
    double celsius = fahr2cels( fahr );
    

    函数中的return语句将值返回给调用者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-22
      相关资源
      最近更新 更多