代码之家  ›  专栏  ›  技术社区  ›  Shiranai

使用指针在C中的一个函数中返回多个值

  •  1
  • Shiranai  · 技术社区  · 8 年前

    我在互联网上搜索了我的问题,但没有得到解决。 我有以下功能:

    #include <stdio.h>
    #include <math.h>
    
    int solve(double a, double b, double c, double *x1, double *x2){
        *x1=(-b+sqrt(pow(b,2)-(4*a*c)))/(2*a);
        *x2=(-b-sqrt(pow(b,2)-(4*a*c)))/(2*a);
    }
    
    int main(void){
        double a, b, c;
        scanf("%lf", &a);
        scanf("%lf", &b);
        scanf("%lf", &c);
        double x1, x2;
        int count= solve(a, b, c, &x1, &x2);
        if(!count){
            printf("no solution");}
        else if(count==1){
            printf("one solution x: %lf", x1);}
        else if(count>1){
            printf("two solutions x1: %lf x2: %lf", x1, x2);}
    }
    

    程序应从函数返回两个值 解决 但每次启动程序时,我都会收到一条警告,上面写着“缺少返回值”。我的错在哪里? 顺便说一句 结构 不是我教授限制的一个选项,它需要在一个函数中完成。

    3 回复  |  直到 8 年前
        1
  •  5
  •   Alyssa Haroldsen    8 年前

    所以,这里有一些误解。 根据我对模板代码的理解,您的 solve 函数应该返回一个二次方程的(实)解的数目,目前还没有这种逻辑。

    您应该实现以下逻辑 return s基于输入的解决方案数。 对于二次方程,请查看判别式。这是 b^2 - 4*a*c . 如果小于0,则没有解,如果等于0,则有一个解,否则有两个解。

    此外,由于负数没有(实)平方根,如果判别式小于0,则甚至不应运行计算。 如果使用 a*c > b^2 , x1 x2 可能是 Not a Number .

    您正在正确使用指针执行值的“返回”。 但是,由于您的函数定义为 int solve ,希望您使用 return <some value>; 函数内部。 事实上,理论上 int main 因为你没有归还任何东西(通常只是 return 0 ),但这是语言中的一个特殊例外 main .

        2
  •  0
  •   Alejandro Caro    8 年前
    #include <stdio.h>
    #include <math.h>
    
    int solve(double a, double b, double c, double *x1, double *x2){
        if((pow(b,2)-(4*a*c)>=0)){
            *x1=(-b+sqrt(pow(b,2)-(4*a*c)))/(2*a);
            if(sqrt(pow(b,2)-(4*a*c)>0)){
                *x2=(-b-sqrt(pow(b,2)-(4*a*c)))/(2*a);
                return 2;
            }    
            return 1;   
        } 
        else{
            printf("it is imaginary term, ");
        }
        return 0;
    }
    
    int main(void){
        double a, b, c;
        scanf("%lf", &a);
        scanf("%lf", &b);
        scanf("%lf", &c);
        double x1, x2;
        int count= solve(a, b, c, &x1, &x2);
        if(!count){
            printf("no real solution");}
        else if(count==1){
            printf("one solution x: %lf", x1);}
        else if(count>1){
            printf("two solutions x1: %lf x2: %lf", x1, x2);}
    }
    

    您必须在solve函数中设计if条件,以便计算x2值。若要减小大小,也可以对count变量使用char数据类型。

        3
  •  -1
  •   Devin Zhu    8 年前

    您应该在solve函数中返回一个int值,因为您的函数签名是:int solve(double a,double b,double c,double*x1,double*x2),所以只需添加“return 0在solve函数的末尾。