C++实验一

【实验目的】

1. 掌握一种编程开发环境的使用,掌握在其下建立工程、编辑源文件、编译、链接、运行的完整过程,了解每一步操作下生成的对应文件及各种文件存放的位置。

2. 用C++语言实现面向过程的程序设计,正确理解引用作为形式参数和函数返回值的意义和用法,并与值形式参数、指针形式参数作比较。

3.能够正确定义和调用带有默认参数值的函数,通过跟踪调试观察形式参数在不同的调用方式下所获得的实在参数值。

4.能够正确定义重载函数,并通过跟踪调试观察每次调用的是哪一个同名函数,注意二义性问题。

5.能够正确使用C++的异常处理机制检测并处理程序中的异常。

【实验内容及步骤】

P186   二、实验内容   题目1234

题目一

(1)#include<iostream.h>

void swap (int x,int y);

int main()

{

int x=10,y=20;

cout<<"before swap,x="<<x<<" y="<<y<<endl;

swap(x,y);

cout<<"After swap,x="<<x<<" y="<<y<<endl;

return 0;

}

 

void swap (int x,int y)

{   int t=x;

    x=y;

    y=t;

}

 

(2)#include<iostream.h>

void swap (int &x,int &y);

int main()

{

int x=10,y=20;

cout<<"before swap,x="<<x<<" y="<<y<<endl;

swap(x,y);

cout<<"After swap,x="<<x<<" y="<<y<<endl;

return 0;

}

 

void swap (int &x,int &y)

{   int t=x;

    x=y;

    y=t;

}

 

(3)#include<iostream.h>

int &swap (int &x,int &y);

int main()

{

int x=10,y=20;

cout<<"before swap,x="<<x<<" y="<<y<<endl;

swap(x,y)=100;

cout<<"After swap,x="<<x<<" y="<<y<<endl;

return 0;

}

 

int &swap (int &x,int &y)

{   int t=x;

    x=y;

    y=t;

return y;

}

 

(4)#include<iostream.h>

void swap (int *x,int *y);

int main()

{

int x=10,y=20;

cout<<"before swap,x="<<x<<" y="<<y<<endl;

swap(&x,&y);

cout<<"After swap,x="<<x<<" y="<<y<<endl;

return 0;

}

 

void swap (int *x,int *y)

{   int *t=x;

    x=y;

    y=t;

}

 

(5)#include<iostream.h>

void swap (int *x,int *y);

int main()

{

int x=10,y=20;

cout<<"before swap,x="<<x<<" y="<<y<<endl;

swap(&x,&y);

cout<<"After swap,x="<<x<<" y="<<y<<endl;

return 0;

}

 

void swap (int *x,int *y)

{   int t;

    t=*x;

    *x=*y;

    *y=t;

}

 

题目二:

(1)#include<iostream.h>

int f(int x,int y=10,int z=20);

int main()

{

int a=1,b=2,c=3,r[4];

r[0]=f(a);

r[1]=f(a,b);

r[2]=f(a,b,c);

for (int i=0;i<3;i++)

cout<<r[i]<<" ";

cout<<endl;

return 0;

}

 

int f(int x,int y,int z)

{   return x+y+z;

}

 

(2)#include<iostream.h>

int f(int x,int y=10,int z=20);

int main()

{

int a=1,b=2,c=3,r[4];

r[0]=f(a);

r[1]=f(a,b);

r[2]=f(a,b,c);

for (int i=0;i<3;i++)

cout<<r[i]<<" ";

cout<<endl;

return 0;

}

 

int f(int x,int y=10,int z=20)

{   return x+y+z;

}

出错信息

f:\练习\cpp1.cpp(16) : error C2572: 'f' : redefinition of default parameter : parameter 3

        f:\练习\cpp1.cpp(2) : see declaration of 'f'

f:\练习\cpp1.cpp(16) : error C2572: 'f' : redefinition of default parameter : parameter 2

        f:\练习\cpp1.cpp(2) : see declaration of 'f'

执行 cl.exe 时出错.

分析:因为在f函数的声明和定义中都将默认参数写上,出现了重复定义的错误。只用在在函数声明处将默认参数写入到函数的参数列表中,在调用函数的时候不用在默认参数的位置输入参数。

(3)#include<iostream.h>

int f(int x=10,int y,int z=20);

int main()

{

int a=1,b=2,c=3,r[4];

r[0]=f(a);

r[1]=f(a,b);

r[2]=f(a,b,c);

for (int i=0;i<3;i++)

cout<<r[i]<<" ";

cout<<endl;

return 0;

}

出错信息

F:\练习\Cpp1.cpp(2) : error C2548: 'f' : missing default parameter for parameter 2

F:\练习\Cpp1.cpp(6) : error C2660: 'f' : function does not take 1 parameters

F:\练习\Cpp1.cpp(7) : error C2660: 'f' : function does not take 2 parameters

执行 cl.exe 时出错.

分析:系统规定默认参数时,必须从右向左添加默认值。缺省的参数必须从右边第一个开始,因此缺省参数放在中间是不对的,编译器认为从右边数第三个参数也应该是缺省的。在此函数中,缺省参数放在了中间,此时编译器认为你第三个参数是缺省的,可是你又默认初始值,所以出现错误。

(4)#include<iostream.h>

int f(int x,int y=10,int z=20);

int main()

{

int a=1,b=2,c=3,r[4];

r[0]=f(a);

r[1]=f(a,b);

r[2]=f(a,b,c);

r[3]=f();

for (int i=0;i<3;i++)

cout<<r[i]<<" ";

cout<<endl;

return 0;

}

 

int f(int x,int y,int z)

{   return x+y+z;

}

错误信息:

F:\练习\Cpp1.cpp(9) : error C2660: 'f' : function does not take 0 parameters

执行 cl.exe 时出错.

分析:调用的函数需要给定参数,参数的个数和类型都是在函数声明的时候就定了的。

在此函数中r[3]=f()没有给定参数,函数又不能带0个参数所以出现错误。

题目三:

(1)#include<iostream.h>

double volume(double a)

{   double v1;  

v1=a*a*a;

    return v1;

}

double volume(double b,double c)

{   double v2;

v2=4*b*c*c*c/3;

    return v2;

}

double volume(double d,double e,double f)

{   double v3;

v3=d*e*f;

    return v3;

}

int main()

{   cout<<"正方体的体积为"<<volume(5.0)<<endl;

    cout<<"圆球的体积为"<<volume(5.0,3.14)<<endl;

    cout<<"长方体的体积为"<<volume(3.0,4.0,5.0)<<endl;

return 0;

}

 

(2)#include<iostream.h>

double volume(double a)

{   double v1;  

v1=a*a*a;

    return v1;

}

double volume(double b,double c)

{   double v2;

v2=4*b*c*c*c/3;

    return v2;

}

double volume(double d,double e,double f)

{   double v3;

v3=d*e*f;

    return v3;

}

int main()

{   cout<<"正方体的体积为"<<volume(5.0)<<endl;

    cout<<"圆球的体积为"<<volume(5.0,3.14159)<<endl;

    cout<<"长方体的体积为"<<volume(3.0,4.0,5.0)<<endl;

return 0;

}

分析:在我本人设计的原程序正确的基础上,改变圆周率的值并没有错误,课本上出现的1 error,我个人觉得应该是定义圆周率数据类型时出现了错误。

 

 

 

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页