[英]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.