




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验2 用C+实现面向过程的程序设计(1)参看答案1、 完成下列实验并按照要求写出相关程序和分析(1) 阅读并上机实现课本P16 “1.44 VC+6下的C+程序实现实例”的内容,学习单文件和多文件程序的实现方法。答:(略)(2) 建立一个单文件程序,文件名为exp1_1.cpp,文件内容如下:#include using namespace std;void swap (int x,int y);int main( ) int x=10,y=20; coutBefore swap, x=x y=yendl; swap (x,y); coutAfter swap, x=x y=yendl; return 0; void swap (int x,int y) int t=x; x=y; y=t; 首先在本地盘上建立一个自己学号的目录,然后进入编程环境(本教材中默认为VC+6.0),在此编辑源文件,然后再编译、链接并运行程序,观察自己目录下生成文件夹和文件的情况,观察运行结果。l 程序编译(compile)后生成文件:.dsp文件 :VC开发环境生成的工程文件,文本格式。.ncb文件 :NCB是“No Compile Browser”的缩写,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成。无编译浏览文件。当自动完成功能出问题时可以删除此文件。编译工程后会自动生成), .plg 文件:编译信息文件,编译时的error和warning信息文件生成文件夹debug和文件:.OBJ:由编译器或汇编工具生成的目标文件,是模块的二进制中间文件。.PCH:预编译头文件,比较大,由编译器在建立工程时自动生成,其中存放有工程中已经编译的部分代码,在以后建立工程时不再重新编译这些代码,以便加快整个编译过程的速度。.idb文件:记录了哪些文件是修改过的,需要重新编译的。(对于VC60编译的文件是VC60.IDB).PDB:程序数据库文件,在建立工程时自动生成,其中存放程序的各种信息,用来加快调试过程的速度。记录了程序有关的一些数据和调试信息。l 程序连接(builde)后又生成文件:.ILK:连接过程中生成的一种中间文件,只供LINK工具使用。.exe:可执行程序l 运行结果为:Before swap, x=10 y=20After swap, x=10 y=20Press any key to continuel 关闭上述程序工作空间或退出VC+6.0,会生成文件:.dsw:VC开发环境生成的项目文件,用来把多个工程组织到一个项目中,文本格式。.dsp文件、.ncp文件、.opt文件更新 根据调试器的使用方法,对以上程序的运行进行单步跟踪。注意:在运行到语句swap (x,y);时使用F11键(Step Into)跟踪,观察swap函数执行的每一步各变量的变化情况;其余语句处使用F10键(Step Over)跟踪,记录实际参数x、y的内存地址&x、&y,以及x、y在调用swap函数前后的变化情况;记录形式参数x、y的内存地址&x、&y,注意与实际参数的地址是否相等,以及形式参数x、y在调用swap函数过程中的变化情况,解释实际参数未能发生交换的原因。l 实际参数x、y的地址分别为:0x0012ff44, 0x0012ff40, 运行到swap (x,y);时,形式参数x、y的地址分别为:0x0012feec, 0x0012fef0, 实参和形参的地址不同。l 实际参数x、y在调用swap函数前后的没有变化。实际参数未能发生交换的原因是swap函数的参数是“传值”,即只传递“实参值”到形式参数,交换的是形式参数的值,不会影响实际参数的值。 将上述程序代码中函数原型声明及函数定义首部的void swap (int x,int y)修改为 void swap (int &x,int &y),再次运行程序,观察运行结果。l 修改程序后运行的结果表明实际参数的值发生了交换。 采用与第步同样的方法作单步跟踪,记录实际参数x、y的内存地址&x、&y,以及x、y在调用swap函数前后的变化情况;记录形式参数x、y的内存地址&x、&y,注意与实际参数的地址是否相等,以及形式参数x、y在调用swap函数过程中的变化情况,解释实际参数发生了交换的原因。l 修改程序后运行的结果表明实际参数的值发生了交换,这是因为swap函数的参数是“传地址”,实参的地址传递给了形参,形式参数x、y的地址:0x0012ff44, 0x0012ff40等同于实际参数的地址,所以交换形式参数的值就等同于交换了实际参数的值。 在上一步的基础上,将函数原型声明及函数定义首部的void swap (int &x,int &y)修改为 int& swap (int &x,int &y),同时在该函数体的最后增加一条return y;语句,在主函数中将调用语句swap (x,y);修改为swap (x,y)100;,观察程序的运行结果,理解引用作为函数返回值的特殊用法。l 修改程序后运行的结果为:Before swap, x=10 y=20After swap, x=20 y=100Press any key to continue说明当引用作为函数返回值类型时,返回的是y的地址,作为地址的式子swap (x,y)可以放到赋值语句的左部,因此,语句swap (x,y)100;给y重新赋值为100,所以最后的输出结果是y的值变成了100. 再将上述代码中函数原型声明及函数定义首部的int& swap (int &x,int &y) 修改为 void swap (int *x,int *y),同时将函数体内的第一条语句int t=x;修改为int *t=x;并将return y;从函数体内删除,主函数中的调用语句由swap (x,y)100; 修改为swap (&x,&y);,再次运行程序,观察运行结果。l 修改程序后运行的结果为:Before swap, x=10 y=20After swap, x=10 y=20Press any key to continue 采用与第步同样的方法作单步跟踪,记录实际参数x、y的内存地址&x、&y,以及x、y在调用swap函数前后的变化情况;记录形式参数x、y的内存地址值在调用swap函数过程中的变化情况,解释实际参数未发生交换的原因。l 实际参数x、y的地址分别为:0x0012ff44, 0x0012ff40, 运行到swap (x,y);时,形式参数x、y的地址分别为:0x0012feec, 0x0012fef0, 实参和形参的地址不同。l 实际参数x、y在调用swap函数前后的值没有变化。实际参数值未能发生交换的原因是swap函数体中,进行了形式参数的交换(形式参数的值是地址),没有对形参指向的地址内容进行交换,所以不会影响实际参数的值。 在上一步的基础上,不修改函数原型,仍以指针作形式参数,修改swap函数的代码,使实际参数能发生值的交换。l 修改函数原型为:void swap (int *x,int *y) int t=*x;*x=*y;*y=t;完成了实际参数值的交换。(3) 完成课本P23 example2_01.cpp程序、P27 example2_04.cpp程序 、P29 example2_05.cpp程序、P30 example2_06.cpp程序、P31 example2_07.cpp程序、P32 example2_08_1.cpp程序、P34 example2_09.cpp程序的“思考与练习”答:(略)见面向对象程序设计及C+实验指导(第2版)中相关内容2、写出下列程序的功能和运行结果(1)#include #include using namespace std;bool is_prime(int n);/函数声明void print_prime(int n, int count);/函数声明int main()int i,n,count=1;cout n; /从键盘输入一个正整数if (n 2) return -1;cout 2 ,; /输出第一个素数;for (i=3; in; i+=2)if (is_prime(i)count+;print_prime(i, count);cout endl;return 0;bool is_prime(int n)int i,j;for (i=2, j=sqrt(n); i=j; i+)if (n%i = 0) return false;return true;void print_prime(int n, int count)cout n ,;if (count % 6 = 0) cout endl;答:该程序的运行结果为:请输入一个正整数:222,3,5,7,11,13,17,19,Press any key to continue该程序的功能是输出小于给定正整数n(n2)的所有素数,以每行6个素数的格式输出。其中函数is_prime(i)的功能是判断i是否为素数,如果是,则返回TRUE,否则返回FLASE.。函数print_prime(int n, int count)的功能是输出n的值,并在count的值为6的倍数时输出换行。(2)#include #include int get_volume(int length, int width = 2, int height = 3);int main()int x = 10, y = 12, z = 15; cout The volume of box ( ; cout ) is get_volume(x, y, z) . endl; cout The volume of box ( ; cout ) is get_volume(x, y) . endl; cout The volume of box ( ; cout ) is get_volume(x) . endl; cout The volume of box ( ; cout ) is get_volume(x,7) . endl; cout The volume of box ( ; cout ) is get_volume(5,5,5) . endl; return 0;int get_volume(int length, int width, int height) coutsetw(5)length setw(5)widthsetw(5)height ; return length * width * height;答:该程序的运行结果为:The volume of box ( 10 12 15 ) is 1800.The volume of box ( 10 12 3 ) is 360.The volume of box ( 10 2 3 ) is 60.The volume of box ( 10 7 3 ) is 210.The volume of box ( 5 5 5 ) is 125.Press any key to continue该程序的功能是计算给定长、宽、高长度的箱子体积。其中计算体积的函数get_volume中的参数有默认形参值int width = 2, int height = 3(3)#include struct stu int num;char *name;char sex;float score;boy5=101,Zhou ping,M,45,102,Zhang ping,M,62.5,103,Liou fang,F,92.5,104,Cheng ling,F,87,105,Wang ming,M,58;void main()stu *ps;coutNotNamettSextScoretendl;for(ps=boy;psboy+5;ps+)coutnumtnametsextscoreendl;答:该程序的运行结果为:No Name Sex Score101 Zhou ping M 45102 Zhang ping M 62.5103 Liu fang F 92.5104 Cheng ming F 87105 Wang ming M 58Press any key to continue该程序的功能是按照水平制表的格式 使用指针调用结构体数组boy,输出5个结构体数组下标变量的内容,包含编号、姓名、性别和成绩的学生信息。3、 约瑟夫(Josephus)问题。有N个小孩围坐成一圈,从某个小孩开始顺时针报数,报到M的小孩从圈子离开,然后,从下一个小孩开始重新报数,每报到M,相应的小孩从圈子离开,最后一个离开圈子的小孩为胜者,问胜者是哪一个小孩?分析:采用一个一维数组in_circle来表示小孩围成一圈:bool in_circleN; in_circlei为true表示编号为i的小孩在圈子里。圈子中i的下一个位置j=(i+1)%N /变量num_of_children_remained表示圈中剩下的小孩数目,其初始值为N /变量count来对成功的报数进行计数/变量index表示要报数的前一个小孩的下标 找出胜者编号的程序如下:#include using namespace std;const int N=20,M=5;int main()bool in_circleN;int num_of_children_remained,index;/初始化数组in_circle。for (index=0; index 1)int count = 0;while (count M) /对成功的报数进行计数。index = (index+1)%N; /计算要报数的小孩的编号。if (in_circleindex) count+; /如果编号为index的小孩在圈子中,该报数为成功的报数。 in_circleindex = false; /小孩离开圈子。num_of_children_remained-; /圈中小孩数减1。/找最后一个小孩for (index=0; indexN; index+) if (in_circleindex) break;cout The winner is No. index .n;return 0;要求:修改这个程序,使得输出结果为每个小孩的编号和离开次序。答:约瑟夫(Josephus)问题 程序修改如下:(修改部分为红色)#include using namespace std;const int N=20,M=5;int main()bool in_circleN;int num_of_children_remained,index;/初始化数组in_circle。for (index=0; index 1)int count = 0;while (count M) /对成功
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030餐饮业人工智能客服系统应用场景与用户体验研究报告
- 柴桑区总医院自聘人员招聘【21人】备考考试题库附答案解析
- 2025-2030食品数字营销行业市场发展分析及前景趋势与投融资发展机会研究报告
- 2025年安庆岳西县公开选调城区幼儿园保教人员13名考试参考题库及答案解析
- 专业保安服务合作协议
- 会昌县2025年县城学校公开选调教师【165人】备考考试题库附答案解析
- 节能减排实施方案范例
- 2025江西吉安市吉水县园区开发建设有限公司及下属子公司招聘运营岗、工程管理岗2人备考考试试题及答案解析
- 2025中国人民大学党委教师工作部(人才办)招聘2人备考模拟试题及答案解析
- 2025江西吉安市井冈山市自然资源局面向社会招聘食堂管理员1人备考考试试题及答案解析
- 北师大版(2024版)三年级上册第七单元第6节《生活中的小数》教学设计
- 2025年中国银行招聘考试试题及答案
- 土石方工程的合作协议书
- (完整版)铝合金门窗施工方案
- 医疗质量安全专项整治行动自查清单8-患者隐私
- 字体设计字体标志与版式设计
- 2025人教版(2024)八年级上册英语教学计划
- 建筑垃圾处理厂运行管理方案
- 2025年重庆全国导游资格考试(政策与法律法规、导游业务)历年参考题库含答案详解(5套)
- 2025年高校教师面试关于师德师风的试题(附答案)
- 农机机械基础课件
评论
0/150
提交评论