You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:05