C语言如何将pythagoras函数的变量c传入konvertradius函数使用
C语言跨函数传递变量c的实现方案
你可以通过以下两种不需要set/get方法的方案实现需求,优先推荐第一种符合模块化设计的方案:
方案1:调整函数返回值+参数传递(推荐)
核心逻辑是利用函数返回值带出pythagoras中计算得到的c值,再通过函数入参传给konvertradius使用,不需要额外定义全局变量,耦合度最低。
修改后完整代码如下:
#include <stdio.h> #include <math.h> // 返回值改为double类型,返回计算得到的c double pythagoras(double a, double b){ double a2; double b2; double c2; double c =0.0; double wurzelc; a2 = pow(a,2); b2 = pow(b,2); c2 = a2 + b2; c = a + b; wurzelc = sqrt(c2); printf("a: %2.2f, a Quadrat: %2.2f \n",a, a2); printf("b: %2.2f, b Quadrat: %2.2f \n",b, b2); printf("c: %2.2f, c Quadrat: %2.2f, c Wurzel: %2.2f \n",c, c2, wurzelc); return c; // 返回需要传递的c值 } // 增加double类型入参接收传递的c值 int konvertradius(double r){ double r2; double kflaeche; r2 = pow(r,2); kflaeche = M_PI * r2; printf("Kreisradius: %2.2f Flaecheninhalt: %2.2f \n",r, kflaeche); return 0; } int main(){ // 接收pythagoras返回的c值 double c_val = pythagoras(1.9, 4.2); // 将c值传入konvertradius konvertradius(c_val); return 0; }
修改点说明:
- 将
pythagoras的返回值类型从int改为double,函数末尾返回计算得到的变量c - 给
konvertradius新增一个double类型的入参,用于接收外部传入的c值作为半径 - main函数中先接收
pythagoras返回的c值,再作为参数传入konvertradius完成调用
方案2:全局变量传递(仅当无法修改函数签名时使用)
如果作业要求不能修改两个功能函数的返回值、参数列表,可以定义全局变量存储c值,两个函数都可以直接访问全局变量完成传递,代码如下:
#include <stdio.h> #include <math.h> // 定义全局变量c,所有函数都可直接访问 double global_c; int pythagoras(double a, double b){ double a2; double b2; double c2; double c =0.0; double wurzelc; a2 = pow(a,2); b2 = pow(b,2); c2 = a2 + b2; c = a + b; wurzelc = sqrt(c2); printf("a: %2.2f, a Quadrat: %2.2f \n",a, a2); printf("b: %2.2f, b Quadrat: %2.2f \n",b, b2); printf("c: %2.2f, c Quadrat: %2.2f, c Wurzel: %2.2f \n",c, c2, wurzelc); // 将计算得到的c赋值给全局变量 global_c = c; return 0; } int konvertradius(){ double r2; double kflaeche; // 直接读取全局变量的值作为半径 double r = global_c; r2 = pow(r,2); kflaeche = M_PI * r2; printf("Kreisradius: %2.2f Flaecheninhalt: %2.2f \n",r, kflaeche); return 0; } int main(){ pythagoras(1.9, 4.2); konvertradius(); return 0; }
注意:全局变量会提高代码耦合度,不利于后续维护,非必要场景优先使用方案1。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

