Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中void函数和float函数的区别_C_Function - Fatal编程技术网

C语言中void函数和float函数的区别

C语言中void函数和float函数的区别,c,function,C,Function,我正在上UDEC课程,对C中的函数产生了一些疑问。其中一个练习是关于使用函数的温度转换(摄氏度、F和K),我的第一个想法是: void CF(){ float temp1, temp2; printf("Escribe que temperatura quieres convertir a Fahrenheit: "); scanf("%f", &temp1); temp2 = (temp1 * 1.8) + 32; printf("La t

我正在上UDEC课程,对C中的函数产生了一些疑问。其中一个练习是关于使用函数的温度转换(摄氏度、F和K),我的第一个想法是:

void CF(){
    float temp1, temp2;

    printf("Escribe que temperatura quieres convertir a Fahrenheit: ");
    scanf("%f", &temp1);

    temp2 = (temp1 * 1.8) + 32;

    printf("La temperatura en Fahrenheit es: %f", temp2);
}
但解决的练习使用:

float fahrenheit(float C){
    float F=0;
    F = (9*C)/5 + 32;
    return F;
}
并通过“int main”程序输入数据,同时通过函数进行介绍

我的问题是: -最好通过int主代码或函数引入数据? -为什么他使用“Float”函数,而我使用“void”函数,并且在这两种情况下都能正常工作

无论如何,我的代码是有效的,但我想知道什么更好,为什么更好

提前谢谢,请原谅我的英语

我的问题是:-最好通过int主代码或函数引入数据?-为什么他使用“Float”函数,而我使用“void”函数,并且在这两种情况下都能正常工作

最好使用后者(返回float的函数)

为什么?

因为它使代码更加可重用

您的函数可能工作正常,但如果您只想从华氏温度转换为C,而不需要用户输入该函数,该怎么办

基本上,您的功能是:

  • 打印到控制台
  • 扫描用户输入
  • 进行实际转换
  • 输出结果

因此,您可以看到,在第一个函数中,您所做的不仅仅是转换。

函数的目的是封装一个常用的计算。如果将其编码为返回值,则无论是否要打印结果,只要您想在更大的程序中调用它,就可以随时调用它。因此,第二个函数更易于重用

虽然编写函数的方式没有问题,但它假定您坐在键盘旁输入值,并且您只想查看转换结果

现在,假设您编程了一个工具,它获取了一个以摄氏度为单位的温度列表(来自电子表格),并希望将它们全部转换为华氏度。您的函数在这里不起作用,但第二个版本可以使用包装器从电子表格中读取摄氏度值,调用该函数,然后将转换后的值放在其他地方


一般来说,它是将函数的功能保持在最低限度,以便在更多不同的情况下使用。

对于我来说,如果我可以选择,我会将代码作为第二个选项编写(返回
float
值)。这是因为它更短,更便携,并且可重复使用。例如,在需要多次调用函数的情况下:

for(int i = 0; i < 10000; i++) {
    float F = fahrenheit(i*1.0);
}
for(int i=0;i<10000;i++){
浮球F=华氏温度(i*1.0);
}
如果使用第一种解决方案,则必须输入
10000次。这太难了。

第一个函数(您的解决方案)不是一个将值转换为另一个值的函数,它在屏幕上显示信息,等待用户输入,转换值并打印结果。该函数不仅可以转换,还可以执行许多其他操作(输入/输出)

它比第二个函数更具体,第二个函数给出一个值,将其转换为另一个值,仅此而已。第二个函数比第一个函数可重用得多,您可以在任何需要进行转换的地方使用它!然后,第一个函数可以用第二个类似的函数重写:

/*
 * General purpose function that converts a celsius value into a fahrenheit value.
*/
float fahrenheit(float C) {
    float F=0;
    F = C*1.8+32;
    return F;
}

void CF(){
    float temp1, temp2;

    printf("Escribe que temperatura quieres convertir a Fahrenheit: ");
    scanf("%f", &temp1);

    temp2 = fahrenheit(temp1); // convert temp1 to fahrenheit

    printf("La temperatura en Fahrenheit es: %f", temp2);
}

然后可以使用
fahrenheit
函数来使用
sin
cos
等。它是将摄氏度转换为华氏度的数学函数的计算描述。

浮点华氏度(浮点C){
将更加可重用,因为它不关心数据来自何处。您的解决方案仅适用于来自stdinI understand的输入。谢谢。@Albert只是更改返回类型没有任何作用;您还需要实际返回一个值。从另一个角度来看:第二个版本实际上是数学表达式中的一个函数nse-它将输入值映射到输出值。函数的输出仅取决于输入参数,相同的输入总是产生相同的输出。这就是所谓的“纯”函数。这种函数的优点之一是易于测试。另一方面,您的void函数通过side effects进行操作,这使得测试和重用更加困难。@PaulOgilvie C正式将该术语定义为(C17 5.1.2.3)“访问易失性对象、修改对象、修改文件或调用执行任何这些操作的函数都是副作用,…”如果流
stdout
被视为“文件”,但printf肯定会在内部修改各种对象,这是有争议的。