C语言中void函数和float函数的区别
我正在上UDEC课程,对C中的函数产生了一些疑问。其中一个练习是关于使用函数的温度转换(摄氏度、F和K),我的第一个想法是: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
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肯定会在内部修改各种对象,这是有争议的。