FOR______CSDN 2022-10-16 16:00 采纳率: 88.9%
浏览 36
已结题

此题可否用传值调用C++

img


如果程序使用传值调用的方式是否可以,为什么?
程序可以写出,但是对此处传值调用不太理解

  • 写回答

1条回答 默认 最新

  • a5156520 2022-10-16 19:15
    关注

    根据题目的要求,应该是不可以改为传值调用的,理由如下:

    首先,看solveQuadraticEquation函数里的各个参数含义,参数a,b,c代表一元二次方程的三个系数,discriminant代表判别式,r1代表一元二次方程的第一个根,r2代表一元二次方程的第二个根.

    然后,看它们的数据类型:
    参数a,b,c是doublel类型,它们传值调用,因为不需要在main函数看到它们有没有在solveQuadraticEquation函数中修改了值,所以可以定义为double类型进行传值调用;

    而参数discriminant,r1,r2是double类型引用,它们的值在solveQuadraticEquation函数修改后需要在main函数里看到变化,所以它们需要被定义为double类型引用或者double指针也可以。所以如果根据题目的要求,应该是不可以改为传值调用的。

    参考链接:
    【C语言函数调用详解】——传值调用&传址调用_Y_^O^的博客-CSDN博客_c语言值调用
    C 语言笔记 —— 函数参数带 & 和不带 & 的区别_Strange191110的博客-CSDN博客
    c++中&的使用_大道一支菜鸟的博客-CSDN博客_&的使用 c++
    一元二次方程20道典型例题,附详细解答过程

    代码如下,测试例子为第四个参考链接的第16题:

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    //定义函数原型 
    void solveQuadraticEquation(double a,double b,double c,double &discriminant,double &r1,double &r2);
    
    int main(void){
        
        double a,b,c,r1,r2,discriminant;
        cin>>a>>b>>c;  //获取一元二次方程三个系数 
        //https://blog.csdn.net/m0_70980326/article/details/126435568
        //https://blog.csdn.net/weixin_45330741/article/details/114176994
        //https://blog.csdn.net/zhong29/article/details/79455488
        solveQuadraticEquation(a,b,c,discriminant,r1,r2);  //调用函数计算判别式的值,及一元二次方程的根 
        
        //打印结果 
        if(discriminant>0){  //16题 
            cout<<r1<<" "<<r2<<endl;  
        }else if(discriminant==0){ //第三题 
            cout<<r1<<endl;
        }else{   //20题 
            cout<<"该方程式没有根"<<endl;
        }
        
        return 0;
    
    } 
    
    
    void solveQuadraticEquation(double a,double b,double c,double &discriminant,double &r1,double &r2){
        
        discriminant = b*b-4*a*c;   //计算判别式的值 
        if (discriminant==0){ //如果判别式为0,则它有一个根 
            r1=r2=-b/(2*a);  
        }else if(discriminant>0){ //如果判别式大于0,则它有两个根 ,判别式小于0不需要判断,直接在main函数打印提示即可 
            //https://baijiahao.baidu.com/s?id=1722370687157957463&wfr=spider&for=pc 
            r1=(-b+sqrt(discriminant))/(2*a);
            r2=(-b-sqrt(discriminant))/(2*a);
        }
    }
    
    
    

    运行结果:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月25日
  • 已采纳回答 10月17日
  • 创建了问题 10月16日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关