程序设计实践实验报告

  • 格式:doc
  • 大小:136.26 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

课程名称___ 程序设计实践______

实验项目_______子程序设计

实验仪器_______PC _____

系别_ 计算机科学与工程____

专业______软件工程__________

班级/学号___B软工0701/2007011801

学生姓名_____ XX____________

实验日期____2009-3-26__________

成绩_______________________

指导教师_____XX______________

.

实验二子程序设计

一、实验目的

1. 学习和掌握参数传递的方法;

2.学习和掌握递归调用;

3.了解goto语句的使用;

4.了解降低嵌套深度的方法;

5.了解复杂度的度量。

二、实验要求

1.通过编程实现,学习和理解参数传递和递归调用的使用。2.使用goto语句编写程序,用非goto语句改写程序;

3.了解减少嵌套层次和度量复杂度的方法。

三、实验内容和结果

1. 参数传递

(1)创建控制台应用程序项目(CLR)。定义函数swap,swap函数有两个整型形参x,y,swap的功能为交换x和y的值,并依次显示出交换后的x,y的值。主函数定义两个整型变量a,b,并赋不同的初值,依次显示a和b的值,调用swap函数,a,b作为实参,再在主函数中依次显示a和b的值。(值传递)

编写并运行以上程序,分析运行结果,思考值传递中是否会改变实参的值。

(2)创建控制台应用程序项目,修改(1)中程序,使swap函数的参数为两个指向整型的指针,swap函数中交换指针所指向的内容;主函数中调用swap函数,交换整型变量a和b的值。

编写并运行修改后的程序,比较与(1)中程序运行结果的不同之处及原因。

(3)创建控制台应用程序项目,修改(1)中程序,采用引用方式传递函数的参数。

编写并运行修改后的程序,比较与(1)、(2)中程序运行结果的异同以及(2)、(3)程序中改写的难易程度。

int swap1(int x,int y){int temp;

temp=x;

x=y;

y=temp;

return 0;} //实参传递函数

int swap2(int &x,int &y){int temp;

temp=x;

x=y;

y=temp;

return 0;}//形参传递函数

int swap3(int *x,int *y){int temp;

temp=*x;

*x=*y;

*y=temp;

return 0;}//指针传递函数

int main()

{

int a,b;

Console::WriteLine ("plesae input a and b interger:");

a=Int32::Parse(Console::ReadLine());

b=Int32::Parse(Console::ReadLine());

Console::WriteLine ("实参传递函数交换a和b:");

Console::WriteLine ("起始a和b:"+a+" "+b);

swap1(a,b);

Console::WriteLine ("交换后a和b:"+a+" "+b);

Console::WriteLine ("-------------------");

Console::WriteLine ("形参传递函数交换a和b:");

Console::WriteLine ("起始a和b:"+a+" "+b);

swap2(a,b);

Console::WriteLine ("交换后a和b:"+a+" "+b);

Console::WriteLine ("++++++++++++++++");

Console::WriteLine ("指针传递函数交换a和b:");

Console::WriteLine ("起始a和b:"+a+" "+b);

swap3(&a,&b);

Console::WriteLine ("交换后a和b:"+a+" "+b);

Console::WriteLine ( "%%%%%%%%%%%%%%%%%" );

Console::ReadLine();

return 0;

}

2.递归调用

.

使用递归时,请注意如下原则:a.确认递归能够停止(子程序中至少含有一条非递归的路径);b.把递归限制在一个子程序内;c.留心栈空间;使用递归前,先考虑可否用其他方式编写程序,可

能效果更好。

创建控制台应用程序项目,用递归方式计算阶乘,编写计算阶乘的函数,输入参数n,函数返回值为n的阶乘。编写程序并运行结果。(注意溢出)

创建控制台应用程序项目,用循环方式去计算阶乘。编写程序并运行结果。(注意溢出)

long double digui(long double n)

{

if(n==0||n==1)

{return(1);}

else

{return (digui(n-1)*n);}

}//递归函数

long double xhuan(long double n)

{

long double x=1;

if(n==0||n==1)

{return(1);}

else

{

for(int i=1;i<=n;i++)

{

x=x*i;

}

}

return x;

}//循环函数

int main(array ^args)

{

Console::WriteLine("please input an integer n:");

long double n=Int32::Parse(Console::ReadLine());

while(n<0)

{Console::WriteLine("n<0,please reinput an integer n:");

n=Int32::Parse(Console::ReadLine());

}

Console::WriteLine("循环输出阶乘n!="+xhuan(n));

Console::WriteLine("递归输出阶乘n!="+digui(n));

Console::ReadLine();

return 0;

} 3.goto语句

(1)创建控制台应用程序项目,编写和运行如下程序。主函数如下:

int data;

int isend;

do

{

Console::WriteLine("please input two number ");

isend= Int32::Parse(Console::ReadLine());

data= Int32::Parse(Console::ReadLine());

if (isend==0){

goto LOOP_EXIT;}

Console::WriteLine("no exit");

}while(data!=-1);

LOOP_EXIT:

Console::ReadLine();

isend不为0时,data为-1:

isend不为0时, data不为-1:

isend为0:

(2)将上述程序改写为没有goto语句的如下程序int data;

int isend;

Console::WriteLine("please input two number");

isend= Int32::Parse(Console::ReadLine());

data= Int32::Parse(Console::ReadLine());

while((isend!=0)&&(data!=-1))

{

Console::WriteLine("no exit");

Console::WriteLine("please input two number");

isend= Int32::Parse(Console::ReadLine());

data= Int32::Parse(Console::ReadLine());

}

Console::ReadLine();

isend不为0,data为-1:

.