程序设计实践实验报告_第1页
程序设计实践实验报告_第2页
程序设计实践实验报告_第3页
程序设计实践实验报告_第4页
已阅读5页,还剩8页未读, 继续免费阅读

下载本文档

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

文档简介

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函数,交换整型变量a和b的值。编写并运行修改后的程序,比较与(1)中程序运行结果的不同之处

3、及原因。(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;/指针传递函数in

4、t 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:);c

5、onsole: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.确认递归能够停止(子程序中

6、至少含有一条非递归的路径);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 double n)long double x=

7、1;if(n=0|n=1)return(1);elsefor(int i=1;ix=x*i;return x;/循环函数int main(array args)console:writeline(please input an integer n:);long double n=int32:parse(console:readline();while(nconsole:writeline(nn=int32:parse(console:readline();console:writeline(循环输出阶乘n!=+xhuan(n);console:writeline(递归输出阶乘n!=+digui

8、(n);console:readline();return 0; 3goto语句(1)创建控制台应用程序项目,编写和运行如下程序。主函数如下:int data;int isend;doconsole: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:r

9、eadline();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

10、 two number);isend= int32:parse(console:readline();data= int32:parse(console:readline();console:readline();isend不为0,data为-1:. . isend不为0,data 不为-1: isend 为0: 比较结果与(1)的不同。当isend 不为0,data 为-1时两次显示结果不同,第二次没有“no exit ”字样(3)将(1)中程序改写为没有goto 的程序,且运行结果要求与(1)中一致。(4)编写并运行下列带goto 语句的程序 int a4;for(int i=0;icon

11、sole:writeline(please input number); ai= int32:parse(console:readline(); if (a0=0) console:writeline(a0=0); goto end_proc; if (a1=0) console:writeline(a1=0); goto end_proc; if (a2=0) console:writeline(a2=0); goto end_proc; if (a3=0) console:writeline(a3=0); goto end_proc; end_proc:console:writeline(

12、end_proc); console:readline(); 执行goto 语句: 不执行goto 语句: (5)改写(4)中程序,要求利用嵌套的if-else 语句消除goto 的代码,得到与(4)相同的运行结果。 int main(array args) int a4;for(int i=0;iconsole:writeline(please input number); ai= int32:parse(console:readline(); if (a0=0)console:writeline(a0=0); else if (a1=0)console:writeline(a1=0); e

13、lse if (a2=0)console:writeline(a2=0); else if (a3=0)console:writeline(a3=0); end_proc:console:writeline(end_proc); console:readline(); 结果: 观察用if嵌套的程序与使用goto语句的程序的代码特点。4. 嵌套层次控制(1)运行以下程序int a4;for(int i=0;iconsole:writeline(please input number);ai= int32:parse(console:readline();if (a0=0)console:writ

14、eline(a0=0);if (a1=0)console:writeline(a1=0);if (a2=0)console:writeline(a2=0);if (a3=0)console:writeline(a3=0);console:readline();结果:(2)用重复测试的非嵌套代码重写上程序,减少嵌套深度。提示:if语句部分可以用如下思路来重写using namespace systemint main(array args)int a4;for(int i=0;iconsole:writeline(please input number);ai= int32:parse(cons

15、ole:readline();if (a0=0)& (a1=0)& (a2=0)console:writeline(a0=0);console:writeline(a1=0);console:writeline(a2=0);if (a3=0)console:writeline(a3=0);elseif(a0=0)& (a1=0)console:writeline(a0=0);console:writeline(a1=0);if(a2=0)console:writeline(a2=0);elseif(a0=0)console:writeline(a0=0);if(a1=0)console:wri

16、teline(a1=0);console:readline();. . 截图: 思考(2)中的代码与(1)中的代码相比的优缺点。 一中代码量较少,但是难度增加,二中代码量多,难度减少 (3)调试和运行如下程序。 int quantity;quantity= int32:parse(console:readline(); if (quantityconsole:writeline(quantity quantity=10); else console:writeline(30 quantity=20); else console:writeline(quantity=30); (4)使用if-else if-else 改写程序(3),减少(3)中的嵌套深度。int main(array args) int quantity;console:writeline(please input number); quantity= int32:parse(con

温馨提示

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

评论

0/150

提交评论