已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程实习报告中国地质大学(武汉)信息工程学院高级语言课程设计实习报告 专业:地理信息系统 班级:114122 学号:20121002074 姓名:李佳蓉实习题目一 进制转换【需求说明】 编写一个程序,实现2/8/10/16进制数之间转换。即实现用户输入一个十进制的数字,利用函数实现转化为2进制、8进制、16进制,并实现输出。【算法设计】(1)设计思想用户输入一个十进制数字,通过函数实现除以进制取余法来完成进制的转换。特别注意由于十六进制中超过9的数字需用字幕来表示,故需要对十六进制的运算结果通过switch语句进行进一步判断。(2)总体设计 用户输入一个十进制数字由于需要把余数分别输出,故需要将余数放在一个数组内。 调用进制转换函数f1分别输出2进制,8进制,16进制。void f1(double p,int q) /定义一个无返回值类型的函数f1.形参为double型的p和int型的q。p即为需要转换的数字,q为需要转换为的进制。int i,m,n,t=0,a100; /定义int型变量i,m,n,t,并将t初始化为0,定义一个数组a100,用来存放取余结果。for(i=0;i+) /通过for循环实现取余并逐位输出。 n=(int)p/q; m=(int)p%q; p=n; ai=m; t+;if(n=0) break; for(i=t-1;i=0;i-) switch(ai) case 10: coutA; break;case 11: coutB; break;case 12: coutC; break;case 13: coutD; break;case 14: coutE; break;case 15: coutF; break;default: cout=0;i-) /实现逆序输出。switch(ai) case 10: coutA; break;case 11: coutB; break;case 12: coutC; break;case 13: coutD; break;case 14: coutE; break;case 15: coutF; break;default: coutai; break; void main() double p;for(;) coutp; /用户输入需要转换的数字。cout输出转换后的实数:n;cout 2进制: ; f1(p,2); /调用f1。cout ; cout 8进制: ; f1(p,8); /调用f1。cout ; cout16进制: ; f1(p,16); /调用f1。coutendl;【调试报告】 调试中十六进制转换过程中出现了10以上的数字,通过用switch语句进行进一步判断解决了问题。代码仍然比较复杂,并且用户无法实现自由选取需要转换的进制,需要进一步改进。【用户手册】 用户需要根据提示输入一个10进制的数字,即可输出相对应的2进制,8进制,16进制数字。实习题目二 五猴分桃【需求说明】 五只猴子摘了一堆桃子,约好第二天早上来分。第一只猴子来得早,它将桃子平分成五堆,多出一个,它把多出的一个吃了,把属于自己的一堆拿走了,将剩下的还混成一堆其他猴子来了也正好按一样的方法处理。编程求出原来最少有多少个桃子。(用递归函数。) 即利用递归函数逐个判断符合条件的数字,输出最小的数字。(1)设计思想 利用逆向思维,从桃子数i符合的条件入手,寻找符合条件的最小的数字i。(2)总体设计 通过分析题目,容易知道每一次的桃子数目总是满足除以5余数为1,每一次剩下的桃子总为上一次每堆的桃子数目减1除以5乘以4。直到运算的次数为5后跳出循环。猴子数为0,开始判断的数字i为0. 判断猴子数目n是否为5是否判断i是否满足i%5=1.否调用结束,输出桃子数ii=i/5*4,n=n+1是int fun(int n,int num) /n为猴子数,num为桃子数if(n=5) /如果猴子数为5调用结束return 0; if(num%5=1) /如果桃子数满足条件 桃子数分为5份num=num/5*4;else return 1; /否则 跳出函数n+; /猴子数+1return fun(n,num); /若没有跳出函数 则继续调用 (3)详细设计 #includeusing namespace std;int fun(int n,int num)/n为猴子数,num为桃子数if(n=5) /如果猴子数为5调用结束return 0; if(num%5=1)/如果桃子数满足条件 桃子数分为5份num=num/5*4;else return 1; /否则 跳出函数n+; /猴子数+1return fun(n,num);/若没有跳出函数 则继续调用 int main()int i=0;while(1)/无限循环。只有当得到正确的解答时,循环才会跳出if(fun(0,i)=0)break;i+; coutiendl;return 0;【调试报告】调试过程中出现了错误的结果,原因是i自加的位置不对。改正后得到正确结果。但是仍需要进一步优化程序,使运算结果显示的更加美观。【用户手册】 用户可根据需要改变n和i的值,实现多种运算。实习题目三 出圈问题 【需求说明】有25个人围成一个圈(编号024),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一个人为止。问此人最初的位置是多少号?(1)设计思想利用两个计数器,计数器一用来计数报数,计数器二用来记录幸存人数。当计数器二的值变为1之后,游戏停止。通过for循环实现依次查找符合条件的数据。 (2)总体设计这是一个典型的约瑟夫环问题。需要定义一个长度为25的数组,将参与者放入数组中。定义两个计数器,计数器一用来计数报数,计数器二用来记录幸存人数。当计数器二的值变为1之后,游戏停止。(3)详细设计 #includeusing namespace std;void main()int a25;for(int i=0;i25;i+)ai=1; /1代表幸存。int count1=0; /计数器一,计数报数。int count2=25;/计数器二,计数剩下的人数。for(int m=0;count2!=1;m+) /判断是否继续。m%=25; /保证循环一圈一圈的走。if(am=1)/如果am为1,则报数count1+; if(count1%3=0)/如果报数为3的倍数,则赋值为0. am=0; count2-;/幸存人数减一。 else continue;if(count2=1)for(int n=0;n25;n+)if(an=1)cout最后留下来的人是nendl;【调试报告】首次调试过程中没有注意需要让循环一圈一圈的往下执行所以得到错误的答案。后来发现后通过m%=25的语句来保证循环直到幸存者为1时候才结束。【用户手册】 用户可根据需要更改count1取余的数字和count2的初始数字来实现多种运算。 实习题目四 矩阵乘法问题【需求说明】4. 编写一个函数实现M行K列矩阵与K行N列矩阵的乘法。设A为M行K列矩阵,B为K行N列矩阵,则C=AB,乘积C为M行N列矩阵。矩阵乘法的规则是:设Am,k,Bk,n,则Cm,n= Am,k Bk,n。其中(见公式4-2):例如: (1)设计思想利用for循环实现矩阵的乘法,再利用for循环实现矩阵的输出。(2)总体设计即编写一个函数实现两个已知矩阵的乘法。再利用for循环实现计算后矩阵的输出。void sunm(int m23,int n32) /定义一个函数,变量为两个矩阵。int c22;for(int x=0;x2;x+)/把c初始化全部为0.for(int y=0; y2;y+)cxy=0;for(int i=0;i2;i+)/实现矩阵的乘法。for(int j=0;j2;j+)for(int k=0;k3;k+) cij+=mik*nkj;for(int p=0;p2;p+)/实现矩阵的输出。for(int q=0; q2;q+)coutcpq ;coutendl;(3)详细设计 #includeusing namespace std;void sunm(int m23,int n32) /定义一个函数,变量为两个矩阵。int c22;for(int x=0;x2;x+)/把c初始化全部为0.for(int y=0; y2;y+)cxy=0;for(int i=0;i2;i+)/实现矩阵的乘法。for(int j=0;j2;j+)for(int k=0;k3;k+) cij+=mik*nkj;for(int p=0;p2;p+)/实现矩阵的输出。for(int q=0; q2;q+)coutcpq ;coutendl; int main() int a23=1,2,3,4,5,6; int b32=1,4,2,5,3,6; cout第1个矩阵是endl; for(int x=0;x2;x+) for(int y=0; y3;y+)coutaxy ;coutendl; cout第2个矩阵是endl; for(int m=0;m3;m+) for(int n=0; n2;n+)coutbmn ;coutendl; cout矩阵的结果是:endl; sunm(a,b);/调用函数。 return 0;【调试报告】 调试时候要注意输出的结果要以矩阵的形式输出。注意在输出时候数字与数字之间要有空格,行与行之间需要换行。【用户手册】用户可根据自身需要改编两个矩阵的行数列数以及具体数值实现矩阵的乘法运算。实习题目五 排序问题【需求说明】 编写一个排序函数,该函数既能完成从小到大排序,又能完成从大到小排序。主函数的功能:(1)输入n个数;(2)找出最大数所在的位置,并以此为界:前段数据从小到大排序,后段数据从大到小排序;(3)输出排序后的结果。即先找出最大的数字,然后运用冒泡排序法分别对前后两段进行排序。(1)设计思想定义一个以指针为形参的函数,实现在最大数字前面和后面分别用冒泡排序法进行从小到大和从大到小的排序。(2)总体设计 由于不能确定用户需要输入的数字个数,所以需要定义一个以指针为形参的函数,实现在最大数字前面和后面分别用冒泡排序法进行从小到大和从大到小的排序。在主函数内实现输入和输出。 void fun(int *p,int m, int n)/定义一个变量是指针的函数,m是最大的数字所在的位置,n是数字的个数) int t2=0,t1=0;for(int i=0;im;i+) /m前的数字从小到大排列。for(int j=i+1;jpj) t1=pj;pj=pi; pi=t1; for(int x=0;xm&xn;x+)/m后的数据从大到小排列。for(int y=x+1;yn;y+)if(pxpy) t2=py;py=px;px=t2;(3)详细设计#includeusing namespace std;void fun(int *p,int m, int n)/定义一个变量是指针的函数,m是最大的数字所在的位置,n是数字的个数) int t2=0,t1=0;for(int i=0;im;i+) /m前的数字从小到大排列。for(int j=i+1;jpj) t1=pj;pj=pi; pi=t1; for(int x=0;xm&xn;x+)/m后的数据从大到小排列。for(int y=x+1;yn;y+)if(pxpy) t2=py;py=px;px=t2;void main()int n,i=0;int *p;cout请输入您要输入的个数n;p=new intn;cout请逐个输入您要输入的数字。 endl;for(int r=0;rn;r+)cout第rpr; int max=p0; int m; for(int h=0;hn;h+)/max逐个和p中的数字比较大小,找到最大数所在的位置。 if(max=ph) max=ph; m=h; cout排序后的结果为:endl; cout endl; fun(p,m,n); for (i=0;i=n-1;i+) coutpiendl; deletep;【调试报告】 排序结果的显示方式还有待改善。 【用户手册】 用户需要先输入需要输入的数字个数,然后逐个输入数字,即可完成排序。实习题目六 加密问题【需求说明】编写程序实现如下字符串加密解密功能。加密规则:加密后字符原始字符原始字符在原始字符串中位置序号(序号从1开始)。例如:原始字符串:abcdmz 加密后:bdfhrf(1)设计思想定义一个形参为指针的函数,利用判断语句实现加密。(2)总体设计 由于不能确定用户输入字符串的长度,所以要定义一个形参为指针的函数,利用判断语句实现加密。在主函数里实现输入和输出。 void fun(char*p,int n) /定义一个变量为指针的函数int a=0;cout加密后的字符串为:endl;for(int j=0;j26)a=a-26;if(a=0) /通过对a的值的判断实现字符串加密。couta; if(a=1)coutb; if(a=2)coutc; if(a=3)coutd; if(a=4)coute; if(a=5)coutf; if(a=6)coutg; if(a=7)couth; if(a=8)couti; if(a=9)coutj; if(a=10)coutk; if(a=11)coutl; if(a=12)coutm; if(a=13)coutn; if(a=14)couto; if(a=15)coutp; if(a=16)coutq; if(a=17)coutr; if(a=18)couts; if(a=19)coutt; if(a=20)coutu; if(a=21)coutv; if(a=22)coutw; if(a=23)coutx; if(a=24)couty; if(a=25)coutz;【调试报告】调试过程中要注意英文字母只有26个,所以一旦字母表中位置数加上字符串中位置数超过25就要减去25.【用户手册】用户需要根据提示输入要输入的字符的个数,并且逐个输入字符,即可得加密后的字符。实习题目七 计算器【需求说明】定义一个计算器类CCalculator实现计算器的常用功能,如:加、减、乘、除、平方根等。【算法设计】(1)设计思想 定义一个计算器类CCalculator,通过成员函数实现计算器功能。(2)总体设计Public中的成员函数:double add() return a+b;/实现加法。 double sub() return a-b;/实现减法。 double cur() return a*b;/实现乘法。 double sqr() return sqrt(a*b);/实现求二次根号下a*b double geta() return a; double getb() return b;在主函数中通过构造函数初始化对象,调用以上各个成员函数实现计算器功能。(3)详细设计 #include#includeusing namespace std;class CCalcualatopublic:CCalcualato(double newa,double newb)a=newa;b=newb;double add() return a+b;/实现加法。 double sub() return a-b;/实现减法。 double cur() return a*b;/实现乘法。 double sqr() return sqrt(a*b);/实现求二次根号下a*b double geta() return a; double getb() return b;private:double a,b;int main()double m,n;cout请输入要计算的数m;cinn;CCalcualato h(m,n);cout加法结果为 h.add()endl;cout减法结果为 h.sub()endl;h.cur();cout乘法结果为 h.cur()endl;cout开平方结果为 h.sqr()endl;return 0;【调试报告】缺点是用户无法自由选择需要进行的运算种类,需进一步通过if判断来决定调用哪一个成员函数。【用户手册】用户按照提示输入要计算的两个数字即可。实习题目八 坐标问题【需求说明】设有一描述坐标点的CPoint类,其私有变量x和y代表一个点的x、y坐标值。请编写程序实现以下功能:利用构造函数传递参数,在定义对象时将x、y坐标值初始化为(60,75),并利用成员函数Display()输出这一坐标值;利用公有成员函数SetPoint()将坐标值修改为(80, 150),并利用成员函数输出修改后的坐标值。【算法设计】(1)设计思想定义一个描述坐标点的CPoint类,其私有变量x和y,利用构造函数传递参数,在定义对象时将x、y坐标值初始化,再利用成员函数实现修改坐标。(2)总体设计利用构造函数将对象初始化为(60,75) 结束再次调用成员函数输出对象的值。利用成员函数改变对象的值利用成员函数输出对象Public中的成员函数:CPoint(int a,int b);Display();/实现输出的函数。SetPoint(int newa,int newb);/实现改变对象的值。private:int x,y;CPoint:CPoint(int a,int b)x=a;y=b;CPoint:SetPoint(int newa,int newb)x=newa;y=newb;CPoint:Display()cout(x,y)endl;(3)详细设计#includeusing namespace std;class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年安徽省公务员面试真题及参考答案
- 小学校园安全隐患大排查大整治百日攻坚专项行动实施方案
- 2025年综合执法题库教程及答案
- 香河社工面试题库及答案(3篇)
- 2025年下半年湖南益阳市工业和信息化局所属事业单位选调重点基础提升(共500题)附带答案详解
- 2025年下半年湖南湘西自治州气象部门招聘全日制普通应届高校毕业生2人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年湖南岳阳平江县乡镇事业站所招聘乡村振兴专干10人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年湖南宁远县事业单位公开招聘工作人员112名易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年湖北鹤晟建筑限公司第一次招聘工作人员11人易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年湖北荆州沙市区事业单位统一招聘工作人员50人易考易错模拟试题(共500题)试卷后附参考答案
- 氧化呼吸链张承玉讲解
- 医院6S管理培训课件
- 2025年中国菊花行业市场调查研究及投资前景预测报告
- 多元智能与个性化学习路径设计
- 化工厂冬季四防安全知识培训
- 2024年个人信息保护合规评估合同
- 《光电信息科学与工程专业毕业设计》课程教学大纲
- 24秋国家开放大学《公共关系学》实训任务(5)答案
- 2023-2024学年湖北省武汉市硚口区八年级(上)期中物理试卷
- 第7课《回忆我的母亲》公开课一等奖创新教学设计
- AQ 1066-2008 煤层瓦斯含量井下直接测定方法(正式版)
评论
0/150
提交评论