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

下载本文档

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

文档简介

实 验 报 告 课程名称 _ 程序设计实践_ 实验项目 _子程序设计 实验仪器 _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);elsereturn (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(n0) Console:WriteLine(n0,please reinput an integer n:); n=Int32:Parse(Console:ReadLine(); Console:WriteLine(循环输出阶乘n!=+xhuan(n);Console:WriteLine(递归输出阶乘n!=+digui(n); Console:ReadLine();return 0;3goto语句(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: 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;i4;i+) Console: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(end_proc); Console:ReadLine(); 执行goto语句:不执行goto语句:(5)改写(4)中程序,要求利用嵌套的if-else语句消除goto的代码,得到与(4)相同的运行结果。int main(array args) int a4; for(int i=0;i4;i+) Console:WriteLine(please input number); ai= Int32:Parse(Console:ReadLine(); if (a0=0) Console:WriteLine(a0=0); else if (a1=0) Console:WriteLine(a1=0); else if (a2=0) Console:WriteLine(a2=0); else if (a3=0) Console:WriteLine(a3=0); END_PROC: Console:WriteLine(end_proc); Console:ReadLine(); return 0;结果:观察用if嵌套的程序与使用goto语句的程序的代码特点。4. 嵌套层次控制 (1)运行以下程序 int a4; for(int i=0;i4;i+) Console:WriteLine(please input number); ai= Int32:Parse(Console:ReadLine(); if (a0=0) Console:WriteLine(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;i4;i+) Console:WriteLine(please input number); ai= Int32:Parse(Console: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); else if(a0=0)& (a1=0) Console:WriteLine(a0=0); Console:WriteLine(a1=0); if(a2=0) Console:WriteLine(a2=0); else if(a0=0) Console:WriteLine(a0=0); if(a1=0) Console:WriteLine(a1=0); Console:ReadLine(); return 0;截图: 思考(2)中的代码与(1)中的代码相比的优缺点。一中代码量较少,但是难度增加,二中代码量多,难度减少(3)调试和运行如下程序。 int quantity;quantity= Int32:Parse(Console:ReadLine(); if (quantity30)if(quantity20)if(quantity10) Console:WriteLine(quantity quantity=10);elseConsole:WriteLine(30 quantity=20);elseConsole:WriteLine(quantity=30);(4)使用if-else if-else改写程序(3),减少(3)中的嵌套深度。int main(array args)int quantity;Console:WriteLine(please input number);quantity= Int32:Parse(Console:ReadL

温馨提示

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

评论

0/150

提交评论