繁体   English   中英

C函数调用

[英]C function calling

因此,在给定了每日最高,最低和预计最低的时间后,该程序应该估计一天中的每小时温度。 我在调用主函数中的函数时遇到问题。 我不太了解如何从功能中获取特定信息,并在我的主要功能中使用它代替变量。 我也很难把握参数和参数的概念。 我确定我在这里不只一个地方,而且我现在最担心的是功能。 任何帮助,将不胜感激。

#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);
}

我不太了解如何从功能中获取特定信息,并在我的主要功能中使用它代替变量。 我也很难把握参数和参数的概念。

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

°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语言中的函数可能会产生副作用 (它们以某种方式在函数外部影响程序状态)。 此外,您传递的参数始终会被复制。

问题在此部分中:

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 ,但它们声明为scanf ,并return ints。 这不是一个大问题,因为整数将自动变为双精度。 但是如果您的类型保持一致,您的状况就会好得多。 如果该函数返回double ,则该函数内部应具有double变量。

例如

double fahr2cels( double fahr );
...

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM