实验2 引用与函数(P277)

一、实验目的和要求

1.熟悉引用的概念,掌握引用的定义和方法,学会引用在C++程序中的应用。

2.掌握函数的定义和调用方法。

3.练习重载函数的使用。

二、实验内容

1.调试下列程序,写出输出结果,并解释输出结果

(1)

  1. <span style="font-size:18px;">//sy2_2.cpp  
  2.  #include<iostream>  
  3. using namespace std;  
  4. int main()  
  5. {  
  6.        double dd=3.9,de=1.3;  
  7.         double &rdd=dd,&rde=de;  
  8.         cout<<rdd+rde<<','<<dd+de<<endl;  
  9.         rdd=2.6;  
  10.         cout<<rdd<<','<<dd<<endl;  
  11.         de=2.5;  
  12.          cout<<rde<<','<<de<<endl;  
  13.         return 0;  
  14. }  
  15. </span>  
//sy2_2.cpp
 #include<iostream>
using namespace std;
int main()
{
       double dd=3.9,de=1.3;
        double &rdd=dd,&rde=de;
        cout<<rdd+rde<<','<<dd+de<<endl;
        rdd=2.6;
        cout<<rdd<<','<<dd<<endl;
        de=2.5;
         cout<<rde<<','<<de<<endl;
        return 0;
}
 

运行结果如下:

结果解释如下:

   首先,定义一个双精度浮点型(double)的对象dd和de,并给其赋初始值3.9和1.3。然后又定义一个双精度浮点型(double)的引用rdd和rde,并将它们分别与dd和de相联系。这样,无论是对dd、de还是对rdd、rde进行操作,实际上都是对那个原来放着3.9和1.3的物理单元的内容进行操作。第一行输出的结果rdd+rde和dd+de之所以都为5.2是因为开始赋的初始值的和是5.2,“&rdd=dd,&rde=de”相当于给dd和de取一个别名。第二行输出的结果都为2.6,因为给rdd赋了一个初始值2.6,所以输出rdd为2.6,dd也为2.6是因为rdd为dd的别名,它们两个使用同一个地址。第三行输出的结果都为2.5,原因和第二行的原因相同。

(2)

  1. <span style="font-size:16px;">//sy2_2.cpp  
  2.  #include<iostream>  
  3. using namespace std;  
  4. int main()  
  5. {  
  6.         void fun(int,int&);  
  7.         int a,b;  
  8.         fun(2,a);  
  9.         fun(3,b);  
  10.         cout<<"a+b="<<a+b<<endl;  
  11.         return 0;  
  12. }  
  13. void fun(int m,int &n)  
  14. {  
  15.         n=m*4;  
  16. }</span>  
//sy2_2.cpp
 #include<iostream>
using namespace std;
int main()
{
        void fun(int,int&);
        int a,b;
        fun(2,a);
        fun(3,b);
        cout<<"a+b="<<a+b<<endl;
        return 0;
}
void fun(int m,int &n)
{
        n=m*4;
}

运行结果如下:


结果解释如下:

    在这个程序中,在主函数中定义a和b并给a、b赋初始值为2和3。当程序调用函数void fun时,实参a和b分别初始化引用m和n,所以在函数fun中,对m和n的访问就是对a和b的访问,函数fun中改变了main函数中的对象a、b的值,就相当于a=2*4=8,b=3*4=12,a+b=8+12=20。


(3)

  1. <span style="font-size:18px;">//sy2_3.cpp  
  2. #include<iostream>  
  3. using namespace std;  
  4. int &fun(int);  
  5. int aa[5];  
  6. int main()  
  7. {  
  8.           int a=5;  
  9.           for(int i(0);i<5;i++)  
  10.                  fun(i)=a+i;  
  11.           for(int i=0;i<5;i++)  
  12.                 cout<<aa[i]<<" ";  
  13.            cout<<endl;  
  14.            return 0;  
  15. }  
  16. int &fun(int a)  
  17. {  
  18.       return aa[a];  
  19. }  
  20. </span>  
//sy2_3.cpp
#include<iostream>
using namespace std;
int &fun(int);
int aa[5];
int main()
{
          int a=5;
          for(int i(0);i<5;i++)
                 fun(i)=a+i;
          for(int i=0;i<5;i++)
                cout<<aa[i]<<" ";
           cout<<endl;
           return 0;
}
int &fun(int a)
{
      return aa[a];
}

运行结果如下:


结果解释如下:定义一个整数a并给a赋值为5,先输出a的值5,再利用for循环,i=0,i<5,i++,也每次加1,最后再输出长度为5的数组,也就是5,6,7,8,9。


2.编程完成下列任务

(1)编写一个函数,用于将华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9。(sy2_4.cpp)

编写程序如下:

  1. <span style="font-size:18px;">#include<iostream>  
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     double F=0;  
  6.     cout<<"请输入华氏温度F值:"<<endl;  
  7.     cin>>F;  
  8.     double C=(F-32)*5/9;  
  9.     cout<<"摄氏温度为:"<<C<<endl;  
  10.     return 0;  
  11. }  
  12. </span>  
#include<iostream>
using namespace std;
int main()
{
    double F=0;
    cout<<"请输入华氏温度F值:"<<endl;
    cin>>F;
    double C=(F-32)*5/9;
    cout<<"摄氏温度为:"<<C<<endl;
    return 0;
}
运行结果如下:


(2)编写重载函数max1可分别求取2个整数、3个整数、2个双精度数和3个双精度数的最大值。(sy2_5.cpp)

编写程序如下:

  1. <span style="font-size:16px;">#include<iostream>  
  2. using namespace std;  
  3. int max1(int x,int y)  
  4. {  
  5.   
  6.     return(x>y)?x:y;  
  7. }  
  8. int max2(int x,int y,int z)  
  9. {  
  10.     int t=(x>y)?x:y;  
  11.     return(t>z)?t:z;  
  12. }  
  13. double max3(double m,double n)  
  14. {  
  15.     return(m>n)?m:n;  
  16. }  
  17. double max4(double m,double n,double p)  
  18. {  
  19.     double t=(m>n)?m:n;  
  20.     return(t>p)?t:p;  
  21. }  
  22. int main()  
  23. {  
  24.     int x,y;  
  25.     cout<<"输入两个整数:";  
  26.     cin>>x>>y;  
  27.     cout<<"2个整数中最大整数是:"<<max1(x,y)<<endl;  
  28.     int z;  
  29.     cout<<"输入三个整数:";  
  30.     cin>>x>>y>>z;  
  31.     cout<<"3个整数中最大整数是:"<<max2(x,y,z)<<endl;  
  32.     double m,n,p;  
  33.     cout<<"输入两个双精度数:";  
  34.     cin>>m>>n;  
  35.     cout<<"2个双精度中最大双精度数是:"<<max3(m,n)<<endl;  
  36.     cout<<"输入三个双精度数:";  
  37.     cin>>m>>n>>p; 
  38.     cout<<"3个双精度中最大双精度数是:"<< max4(m,n,p)<<endl;  
  39.     return 0;  
  40. }</span>  
#include<iostream>
using namespace std;
int max1(int x,int y)
{

    return(x>y)?x:y;
}
int max2(int x,int y,int z)
{
    int t=(x>y)?x:y;
    return(t>z)?t:z;
}
double max3(double m,double n)
{
    return(m>n)?m:n;
}
double max4(double m,double n,double p)
{
    double t=(m>n)?m:n;
    return(t>p)?t:p;
}
int main()
{
    int x,y;
    cout<<"输入两个整数:";
    cin>>x>>y;
    cout<<"2个整数中最大整数是:"<<max1(x,y)<<endl;
    int z;
    cout<<"输入三个整数:";
    cin>>x>>y>>z;
    cout<<"3个整数中最大整数是:"<<max2(x,y,z)<<endl;
    double m,n,p;
    cout<<"输入两个双精度数:";
    cin>>m>>n;
    cout<<"2个双精度中最大双精度数是:"<<max3(m,n)<<endl;
    cout<<"输入三个双精度数:";
    cin>>m>>n>>p;
    cout<<"3个双精度中最大双精度数是:"<< max4(m,n,p)<<endl;
    return 0;
}
运行结果如下:


三、分析与讨论

1.总结引用的概念及用途。

  答:引用的概念:所谓引用,就是给对象取一个别名,使用该别名可以存取该对象。换句话说是使新对象和原对象共用一个地址。这样,无论对哪个对象进行修改,其实都是对同一地址的内容进行修改。因而原对象和新对象(规范的说,是对象和它的引用)总是具有相同的值。

    引用的用途:引用的主要用途是用作函数参数和函数值的返回。

2.函数的定义和调用方法。

    答:函数的定义:从用户使用的角度来看,C++有两种函数:标准库函数和用户自定义函数。标准库函数有C++系统定义并提供给用户,可以看作对语言功能的扩充。用户根据特定任务编写的函数称为自定义函数。

    函数的调用方法:函数的使用时通过函数调用实现。函数调用指定了被调用函数的名字和调用函数所需的信息(参数)。调用函数所提供的实际参数。函数调用的一般形式为: 函数名(<实参数>),其中<实参数>中的各参数用逗号分隔,实参数可以是常量、变量或表达式,与被调用函数形参的个数和类型必须相符。

3.重载函数时通过什么来区分?

    答:编译系统是将根据函数参数的类型和个数来判断使用哪一个函数。

四、实验总结

    通过本次实验,我学会了自己编写程序,自己构思编写程序的思路,熟悉引用的概念,掌握引用的定义和方法,学会引用在C++程序中的应用。在解释程序的过程中还学会函数的调用和重载函数的只用。虽然在这个过程中会遇到一些问题,比如说在编写第二个程序时,一开始思路不是太清晰,总觉得这样是对的,但是写出来之后发现一堆错误。后来在调用函数的时后又忘记将里面的int或者double删掉,导致运行不成功,通过反复的修改和认真的观察才找到了错误之处,并且修改正确最后运行成功。其实编程真的需要多练多看,总觉得这样是对的,但是如果不去实践根本不能验证到底是不是对的,马克思说过“实践是检验真理的唯一标准”,动手又动脑才能有创造,只有通过反复的练习才能完整的掌握知识点,并且灵活的运用知识点。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值