【程序设计实践】实验报告__实验二_第1页
【程序设计实践】实验报告__实验二_第2页
【程序设计实践】实验报告__实验二_第3页
【程序设计实践】实验报告__实验二_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.实验报告课程名称_程序设计实践 _实验项目_子程序设计实验仪器_PC_系别 _计算机科学与工程_专业 _软件工程 _班级 / 学号 _B软工 0701/2007011801学生姓名_ XX_实验日期_2009-3-26_成绩 _指导教师_XX_;.实验二子程序设计一、实验目的1. 学习和掌握参数传递的方法;2学习和掌握递归调用;3了解 goto 语句的使用;4了解降低嵌套深度的方法;5了解复杂度的度量。二、实验要求1通过编程实现,学习和理解参数传递和递归调用的使用。2使用 goto 语句编写程序,用非goto 语句改写程序;3了解减少嵌套层次和度量复杂度的方法。三、实验内容和结果1. 参数传

2、递( 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 函数,交换整型变量

3、 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,in

4、t *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+"&qu

5、ot;+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

6、: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递归调用;.使用递归时,请注意如下原

7、则:a.确认递归能够停止(子程序中至少含有一条非递归的路径);b.把递归限制在一个子程序内;c.留心栈空间;使用递归前,先考虑可否用其他方式编写程序,可能效果更好。创建控制台应用程序项目,用递归方式计算阶乘,编写计算阶乘的函数,输入参数n,函数返回值为n 的阶乘。编写程序并运行结果。(注意溢出)创建控制台应用程序项目,用循环方式去计算阶乘。编写程序并运行结果。(注意溢出)long double digui(long double n)if(n=0|n=1)return(1);elsereturn (digui(n-1)*n);/ 递归函数long double xhuan(long doubl

8、e n)long double x=1;if(n=0|n=1)return(1);elsefor(int i=1;i<=n;i+)x=x*i;return x;/ 循环函数int main(array<System:String > 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 in

9、teger 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;doConsole:WriteLine("please input two number "); isen

10、d= 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:WriteLin

11、e("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:P

12、arse(Console:ReadLine();Console:ReadLine();isend不为 0,data 为-1:;.isend 不为 0,data 不为 -1:isend 为 0:比较结果与( 1)的不同。不执行 goto 语句:当 isend 不为 0,data 为-1 时两次显示结果不同,第二次没有“noexit”字样( 3)将(1)中程序改写为没有 goto 的程序,且运行结果要求与( 1)中一致。( 4)编写并运行下列带 goto 语句的程序int a4;(5)改写( 4)中程序,要求利用嵌套的if-else 语句消除 goto 的for(int i=0;i<4;i+

13、)代码,得到与( 4)相同的运行结果。int main(array<System:String > args)Console:WriteLine("please input number");ai= Int32:Parse(Console:ReadLine();int a4;for(int i=0;i<4;i+)if (a0=0)Console:WriteLine("please input number");Console:WriteLine("a0=0");ai= Int32:Parse(Console:Read

14、Line();goto END_PROC;if (a0=0)if (a1=0)Console:WriteLine("a0=0");elseConsole:WriteLine("a1=0");goto END_PROC;if (a1=0)Console:WriteLine("a1=0");if (a2=0)elseConsole:WriteLine("a2=0");if (a2=0)goto END_PROC;Console:WriteLine("a2=0");elseif (a3=0)if (a

15、3=0)Console:WriteLine("a3=0");Console:WriteLine("a3=0");goto END_PROC;END_PROC:Console:WriteLine("end_proc");END_PROC:Console:ReadLine();Console:WriteLine("end_proc");执行 goto 语句:Console:ReadLine();.return 0;结果:(2)用重复测试的非嵌套代码重写上程序,减少嵌套深度。提示: if 语句部分可以用如下思路来重写us

16、ing namespace Systemint main(array<System:String > args)int a4;for(int i=0;i<4;i+)观察用 if 嵌套的程序与使用goto 语句的程序的代码特点。Console:WriteLine("please input number");4. 嵌套层次控制ai= Int32:Parse(Console:ReadLine();(1)运行以下程序if (a0=0)&& (a1=0)&& (a2=0)int a4;for(int i=0;i<4;i+)Co

17、nsole:WriteLine("a0=0");Console:WriteLine("a1=0");Console:WriteLine("please input number");Console:WriteLine("a2=0");ai= Int32:Parse(Console:ReadLine();if (a3=0)if (a0=0)Console:WriteLine("a3=0");Console:WriteLine("a0=0");elseif (a1=0)if(a0

18、=0)&& (a1=0)Console:WriteLine("a1=0");if (a2=0)Console:WriteLine("a0=0");Console:WriteLine("a1=0");Console:WriteLine("a2=0");if(a2=0)if (a3=0)Console:WriteLine("a2=0");Console:WriteLine("a3=0");elseif(a0=0)Console:ReadLine();Console

19、:WriteLine("a0=0");if(a1=0)Console:WriteLine("a1=0");结果:Console:ReadLine();.return 0;截图:思考( 2)中的代码与( 1)中的代码相比的优缺点。一中代码量较少,但是难度增加,二中代码量多,难度减少( 3)调试和运行如下程序。intquantity;quantity= Int32:Parse(Console:ReadLine(); if (quantity<30)if(quantity<20)if(quantity<10)Console:WriteLine("quantity<10");elseConsole:WriteLine("20> quantity>=10");elseConsole:WriteLine("30> q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论