图片上的做法用调用函数求圆柱体的表面积和体积是正确的吗? 不正确
*
被调用函数一定要用return才能传递给调用函数吗?不是, 可以传入地址
void area(double r, double *result)
{
*result = r * r * 3.14159265;
}
double Volume(double r, double h, double *result);
这个输出虽然对了,但是传给 s 和 v 的只是 NULL,确实是要 return 才能传递。
你的输出都是在子方法里边输出的,不用return也行
如果一个函数无需向调用函数返回一个值,它就被省略。这类函数在绝大多数其他语言中被称为过程(procedure)。这些函数执行到函数体末尾时隐式返回,他们没有返回值。 这种没有返回值的函数在声明时应该把函数的类型声明为void。
真函数是从表达式内部调用的,它必须返回一个值,用于表达式的求值。这类函数的return 语句必须包含一个表达式。
通常,表达式的类型就是函数声明返回的类型。只有当编译器可以通过寻常算术转换把表达式的类型转换为正确的类型时,才允许返回类型与函数声明的返回类型不同的表达式。
有些程序员喜欢把return 语句写成下面这个样子:
return(x);
语法并没有要求你加上括号,因人而异,表达式两端加上括号总是合法的。
在C中,子程序不论是否存在返回值,均被称为函数。调用一个真函数(即返回一个值的函数)但不在任何表达式中使用这个返回值是完全可能的。在这种情况下,返回值就被丢弃。
对于第一个问题,使用函数计算圆柱体的表面积和体积方法是正确的,但是有更好的实现方式。可以使用宏定义或者inline函数来实现。宏定义是在编译前直接预处理,将宏定义的名称用替换文本代替,可以提高效率,但是容易产生重复定义或者错误定义的问题。而inline函数是在编译时进行处理,编译器会根据调用的情况,将函数直接内嵌到代码中,可以避免代码中过多的函数调用,但是有可能造成代码膨胀和逻辑混乱的问题。至于第二个问题,被调用函数使用return语句才能将结果传递给调用函数并不是绝对的,在函数内部可以使用全局变量、指针参数等方式将结果传递给调用函数,但是使用return语句是最方便且安全的方式。下面是宏定义和inline函数的代码实现:
宏定义:
#include <stdio.h>
#define PI 3.1415926
#define SURFACE_AREA(r,h) (2*PI*r*h+2*PI*r*r)
#define VOLUME(r,h) (PI*r*r*h)
int main()
{
double r,h,s,v;
printf("Input the radius and height of the cylinder:\n");
scanf("%lf%lf",&r,&h);
s=SURFACE_AREA(r,h);
v=VOLUME(r,h);
printf("The surface area of the cylinder is %lf.\n",s);
printf("The volume of the cylinder is %lf.\n",v);
return 0;
}
inline函数:
#include <stdio.h>
inline double surface_area(double r,double h){
const double PI=3.1415926;
return 2*PI*r*h+2*PI*r*r;
}
inline double volume(double r,double h){
const double PI=3.1415926;
return PI*r*r*h;
}
int main(){
double r,h,s,v;
printf("Input the radius and height of the cylinder:\n");
scanf("%lf%lf",&r,&h);
s=surface_area(r,h);
v=volume(r,h);
printf("The surface area of the cylinder is %lf.\n",s);
printf("The volume of the cylinder is %lf.\n",v);
return 0;
}