




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中南大学化学化工学院C+语言程序设计实践报告专业班级: 姓名: 学号: 同组人员: 指导教师: 完成日期: 目录第一题(必做)31. 题目32. 系统功能模块结构图43. 数据结构设计及说明(程序)54. 程序结构(流程图)105. 各模块的功能156. 运行结果16第二题(必做)211. 题目212. 数据结构设计及说明(程序)213. 程序结构(流程图)244. 运行结果25第三题(选做)26第四题(选做)261. 题目262. 系统功能模块结构图273. 数据结构设计及说明(程序)274. 程序结构(流程图)305. 各模块的功能316. 运行结果31总结及参考文献35第一题一、题目:使用菜单选择趣味程序 菜单是应用程序的界面,控制语句用来改变程序执行的顺序,是实现结构化设计的基础。 本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。 本题的设计分两步:(1)先设计一个含有多个菜单项的菜单演示程序;A、菜单内容:程序运行后,给出六个菜单项的内容和输出提示1、FindNum2、FindRoot3、Detective4、Bear5、Curve6、YearDay7、Goodbye!B、设计要求:使用数字1-7来选择菜单项,其他输入则不起作用。(2)再为上述菜单项配上相应的功能,即以上述菜单的设计为基础,增加菜单项的处理功能。菜单设计要求(这是6道编程题,要求在运行菜单时,能给出每个程序的运行结果):1、FindNum有0、1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。 + = 2、FindRoot求方程在区间-8,8内的全部实根。3、Detective这是一个侦探题,有一辆汽车撞人后跑了,4个目击证人提供如下线索:牌照三、四位相同;牌号为31xxxx;牌照五、六位相同,三到六位是一个整数的平方。4、Bear有一只狗熊到玉米地里吃玉米,一边掰一边吃。第一天吃了一半,又拿走一个回去喂小熊。第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求地里一共有多少玉米。5、Curve(可选作)绘制一条滴定曲线(已知是0.1000mol/L的氢氧化钠滴定20.00mL同浓度的盐酸)。曲线如图所示。此题可以根据所给曲线大致形状,运用常规的编制图形的方法来绘制。也可根据下面所列的方程式来绘出滴定曲线。其中H为氢离子浓度,cHCl为盐酸浓度,Kt=1014.00,a为滴定分数(令a在02范围内取值,步长为0.001),Vb为氢氧化钠加入到盐酸中的瞬时浓度。6、YearDay已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历。7、Goodbye!这里除了输出一个信息外,还必须结束程序运行。二、系统功能模块结构图:主调main函数启动DetectiveFindnumCurveGoobye!BearFindrootYearday三、数据结构设计及说明(程序):#include#include using namespace std;#define YES 1 /* 定义符号常数“是” */#define NO 0 /* 定义符号常数“否” */void FindNum() /函数1intA,B,C,N,M,O,a,b,c,d,e,f,g,h,i,j,mm=0;cout符合条件的组合是:; for(A=1000;A=9999;A+) for(B=100;B=999;B+) for(C=100;C=999;C+) /多层循环对可能的数字进行组合 N=A;a=N/1000;N=N%1000; b=N/100;N=N%100; c=N/10;N=N%10; d=N; M=B;O=C; e=M/100;M=M%100; f=M/10;M=M%10; g=M; h=O/100;O=O%100;i=O/10;O=O%10; j=O; /提取出各位数字 if(a!=b)&(a!=c)&(a!=d)&(a!=e)&(a!=f)&(a!=g)&(a!=h)&(a!=i)&(a!=j)&(b!=c)&(b!=d)&(b!=e)&(b!=f)&(b!=g)&(b!=h)&(b!=i)&(b!=j)&(c!=d)&(c!=e)&(c!=f)&(c!=g)&(c!=h)&(c!=i)&(c!=j)& (d!=e)&(d!=f)&(d!=g)&(d!=h)&(d!=i)&(d!=j)&(e!=f)&(e!=g)&(e!=h)&(e!=i)&(e!=j)&(f!=g)&(f!=h)&(f!=i)&(f!=j)&(g!=h)&(g!=i)&(g!=j)&(h!=i)&(h!=j)&(i!=j)&(A=B+C)/判断各位数字不相等,并且符合题意等式要求 cout B+C=Aendl;mm+; cout共有组合个数:mm;/输出组合的个数voidFindRoot()float i,j,k,s1,s2,s;for(i=-8;i=7;i+) j=i+1;s1=i*i*i-3*i-1;s2=j*j*j-3*j-1;if(s1*s20)dok=(i+j)/2; s=k*k*k-3*k-1;if(s1*s=1e-6);/利用数学函数对输出的解进行精度控制cout方程的实根为:kendl;void Detective() inta,A,i,j;for(i=0;i=9;i+) for(j=0;j=9;j+)/车牌后四位的排列组合 for(a=0;a100;a+)/对所有可能的数字进行平方,为之后的比较做准备 A=1000*i+100*i+10*j+j;/算出车牌后四位数的数学值if(a*a=A)cout车牌号为31iijjendl; void Bear()int day=10, x1, x2=1;cout有一只狗熊到玉米地里吃玉米,一边掰一边吃.endl;cout第一天吃了一半,又拿走一个回去喂小熊。endl;cout第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。endl;cout以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求地里一共有多少玉米。0)/循环直到时间的始端0 x1=(x2+1)*2;/前一天的数量是后一天加一的两倍x2=x1; day-;/天数递减,倒退 cout玉米田里共有玉米x1个endl;intisleap(int year)/* 函数isleap(): 判断某年是否闰年 */int leap = NO;if(year%4=0 & year%100!=0 )| year%400=0)leap = YES;return leap;/* 函数week_of_newyears_day(): 求元旦是星期几 */intweek_of_newyears_day(int year)int n = year-1900; n = n+(n-1)/4+1; n = n%7;return n;intYearDay()int year, month, day, weekday, len_of_month, i; coutyear; /*因为你的要求是已知2000年1月1日是星期六,所以这里不用week_of_newyears_day去求星期六了*/ weekday = week_of_newyears_day(year); /* 求元旦是星期几 */coutyear年endl; /* 打印年份 */ for(month=1; month=12;month=month+1) /* 打印12个月的月历 */ coutmonth月endl;cout-endl;cout星期日星期一星期二星期三星期四星期五星期六endl;cout-endl; for(i=0;iweekday;i=i+1) /* 找当月1日的打印位置 */cout ;if(month=4 | month= 6 | month=9 | month=11)len_of_month = 30;else if(month=2) if(isleap(year)len_of_month = 29;elselen_of_month = 28; elselen_of_month = 31; for(day=1;day=len_of_month;day=day+1)/* 打印当月日期 */ coutday;if(day10) cout ;elsecout ;weekday = weekday+1; if(weekday=7) /* 打满一星期应换行 */ weekday = 0;coutendl; coutendl; /* 打完一月应换行 */ return 0;int main() int N;cout-趣味选择菜单程序-endl;cout1.FindNumendl;cout2.FindRootendl;cout3.Detectiveendl;cout4.Bearendl;cout5.Curve(不可使用)endl;cout6.YearDayendl;cout7.Goodbyeendl;/输出菜单内容coutN;if(N0&N8)switch(N) case 1:FindNum();coutendl; return main();/重新返回主函数,即可重新开始菜单选择case 2:FindRoot();coutendl;return main();case 3:Detective();coutendl;return main();case 4:Bear();coutendl;return main(); case 5:coutsorry,该程序未编写endl;return main();case 6:YearDay();coutendl;return main();case 7:coutGoodbye!endl;cout-谢谢使用-endl; else cout输入错误,请输入17的整数endl;return main(); 四、程序结构(流程图):*主菜单程序结构图:输出菜单及提示信息12346其它7Findnum()Findroot()Detective()Goodbye!结束输入错误Yearday()Bear()数字判断开始5Curve()*分程序结构图:1、findnum开始A=1000B=999B=100B+C+判断各位数字是否相同,等式是否成立C=100A+结束FalseFalseFalsetureC=999A=9999tureture开始2、findroot:i=7j=i+1;s1=i*i*i-3*i-1s2=j*j*j-3*j-1;s1*s20k=(i+j)/2; s=k*k*k-3*k-1s1*s=1e-6Flase输出符合的根i+a*a=A输出车牌开始i=0j=9j=0j+a+A=1000*i+100*i+10*j+ja=0i+结束FalseFalseFalseturea100i=93、detectiveturetureture4、Bear:开始bear()n=10bear(10)=1returnn=92*bear(10)+1returnn=82*bear(9)+1returnn=22*bear(3)+1returnn=32*bear(4)+1returnn=12*bear(2)+1return结束并返回值5、Curve输出sorry(此题未编写结束开始6、yearday:开始输入年份按闰年方式打印年历判断是否闰年计算各月天数,打印年历结束,返回主菜单7、goodbye输出goodbye菜单程序结束开始五、各模块的功能:一、main输出菜单格式,并指向个分程序二、1、FindNum有0、1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。 + = 2、FindRoot输出方程在区间-8,8内的全部实根。3、Detective解出侦探题:有一辆汽车撞人后跑了,4个目击证人提供如下线索:牌照三、四位相同;牌号为31xxxx;牌照五、六位相同,三到六位是一个整数的平方。4、Bear有一只狗熊到玉米地里吃玉米,一边掰一边吃。第一天吃了一半,又拿走一个回去喂小熊。第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求出地里一共有多少玉米。5、Curve 输出sorry(此题未编写)6、YearDay已知2000年1月1日为星期六,输入任一年的年份后,可打印该年的年历。7、Goodbye!这里输出“Goodbye!-谢谢使用-”,且结束程序运行。六、运行结果:程序运行后,显示菜单内容和输出提示 (1)Findnum(2)Findroot(3)Detective (4)Bear (5)Curve(6)YearDay(7)Goodbye(8)输入错误数字时第二题一、题目: 输出一份元素周期表; 要求有原子序数和元素符号; 在输入原子序数或元素符号时,能相应的输出元素符号或原子序数 二、数据结构设计及说明(程序):1.对于此程序,需要在运行时输出整个元素周期表,且对应有相应的原子序数和元素符号,且具有查找功能,即输入原子序数或元素符号时,能相应的输出元素符号或原子序数。2.程序:#include #include using namespace std;void main()char *a=H,He,Li,Be,B,C,N,O,F,Ne,Na,Mg,Al,Si,P,S,Cl,Ar,K,Ca,Sc,Ti,V,Cr,Mn,Fe,Co,Ni,Cu,Zn,Ga,Ge,As,Se,Br,Kr,Rb,Sr,Y,Zr,Nb,Mo,Tc,Ru,Rh,Pd,Ag,Cd,In,Sn,Sb,Te,I,Xe,Cs,Ba,La,Ce,Pr,Nd,Pm,Sm,Eu,Gd,Tb,Dy,Ho,Er,Tm,Yb,Lu,Hf,Ta,W,Re,Os,Ir,Pt,Au,Hg,Ti,Pb,Bi,Po,At,Rn,Fr,Ra,Ac,Th,Pa,U,Np,Pu,Am,Cm,Bk,Cf,Es,Fm,Md,No,Lr,Rf,Db,Sg,Bh,Hs,Mt,Uun,Uuu,Uub;int b=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112;inti,j,k=1,l=1;for(i=0;i7;i+) for(j=0;j18&k0&j0&i1&j12)cout ;else if(i=5&j=2) cout57-71 ;k=72;else if(i=6&j=2) cout89-103 ;k=104;/镧系锕系分行else coutbk-1 ;k+;coutendl;for(j=0;j18&l0&j0&i1&j12)cout ;else if(i=5&j=2) coutLa-Lu ;l=72;else if(i=6&j=2) coutAc-Lr ;l=104;else coutal-1 ;l+; coutendl; coutendl; for(i=57;i72;i+)coutbi-1 ;coutendl;for(i=56;i71;i+)coutai ;coutendl;coutendl;for(i=89;i104;i+)coutbi-1 ;coutendl;for(i=88;i103;i+)coutai ;coutendl;coutendl;cout请选择:1.退出;2.输入原子序数找对应元素;3.输入元素找对应原子序数j;if(j=1)cout退出!endl;else if(j=2)intk;coutendl;coutk;if(k0)&(k=112)for(i=0;i112;i+)/通过循环找到对应序数的对应元素if(k=bi)cout该原子序数对应的元素:aiendl;else if(j=3) char m4,*n;coutendl;coutm; for(i=0;i112;i+)/通过循环找到对应元素的对应序数 n=ai;if(strcmp(n,m)=0)/ strcmp函数比较字符是否相同,相同返回非0 值cout该元素对应的原子序数:biendl;运用数组和for语句循环输出整个元素周期表,且使元素与其元素符号和元素序数相对应,便于下面元素查找。3. 通过if语句输入的是原子序数还是元素符号,再通过for语句与之对应的元素符号或序数并输出。三、程序结构(流程图):开始输入元素周期表输出菜单输入数字231输入元素找对应原子序数输入原子序数找对应元素退出结束输入原子序数找对应元素四、运行结果:1、输出周期表2、按原子序数查找元素符号3、元素符号查找原子序号第三题(选做)对学生的成绩信息进行管理。学生信息包括:学号、姓名、学期、每门课程的成绩、平均成绩、名次。实现:学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。第四题(选做)一、题目:小学生数学测试软件的编写要求:(1)可选择题型(+,-,*,/);(2)可选择每次答题的个数;(3)随机生成两个数进行运算;(4)每次在输入答案后应判断对错,若答案错误,应给出正确答案;(5)最后给出做对题目的总个数。注意:产生随机数的方法使用随机数函数二、系统功能模块结构图:主调main函数加法计算减法计算乘法计算除法计算三、数据结构设计及说明(程序):#include using namespace std;int main()inti,j,k,R=0,n;cout小学数学测试endl;cout请选择想测试的题型:1.+ 2.- 3.* 4./i;if(i=1) coutj; for(int n=0;nj;n+)/循环j次,产生j个题目 int x1=rand()%100;int x2=rand()%100; /产生任意两正整数随机函数coutx1+x2k;if(k=x1+x2) cout回答正确!endl; R+;/正确个数递加 elsecout回答错误!正确答案为:x1+x2endl; else if(i=2) coutj;for(int n=0;nx2 coutx2-x1k;if(k=x2-x1) cout回答正确!endl; R+; elsecout回答错误!正确答案为:x2-x1endl; else if(i=3) coutj;for(int n=0;nj;n+) int x1=rand()%100;int x2=rand()%100; /产生任意非0整数随机函数coutx1*x2k;if(k=x1*x2) cout回答正确!endl; R+; elsecout回答错误!正确答案为:x1*x2endl; else if(i=4) coutj;for(int n=0;nj;n+) int x1=rand()%100+1;/产生正整数int x2=x1*(rand()%10); /产生可被X1整除的非负整数coutx2/x1k;if(k=x2/x1) cout回答正确!endl; R+; elsecout回答错误!正确答案为:x2/x1endl; cout这次测试你回答正确的题目的个数为R个endl; coutn; if(n=1) cout下面开始重新测试endl; return main();/返回main函数,重新开始测试return 0; 四、程序结构(流程图):01结束3214-/*+开始输出菜单及提示信息数字判断正确个数数字判断结束进行四则运算n+,R+Rnj?开始题目数j生成两个随机数五、各模块的功能:1、由main函数指向四个运算2、进行加减乘除四则运算六、运行结果:1、输出题头2、加法运算3、减法运算4、乘法运算5、除法运算6、退出:输出答对正确题目的个数总结及参考文献:这次实践使我认识到了C+程序设计是一门实践性很强的学科,我们学校C+不仅仅是为了学习而学习,还能锻炼我们的创新能力,合作精神等等,我们不仅要按照要求完成作业,还要在设计时加上自己的想法及理解,开始是以为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 育苗知识与技能培训考核试卷
- 科研伦理审查与违规处理考核试卷
- 染整行业绿色制造与清洁生产考核试卷
- 染料在农业生物防治中的应用考核试卷
- 竞赛场地布局与设计考核试卷
- 批发商财务管理与风险控制考试考核试卷
- 租赁农机在农业机械化推广中的作用考核试卷
- 拼多多农产品电商平台活动策划代运营服务协议
- 海关关员岗位海关业务流程优化聘用合同
- 城市管理系统数据收集与合规利用协议
- 2025-2030海上风电产业行业市场现状供需分析及投资评估规划分析研究报告
- 正比例函数性质课件
- T-CACM 1212-2019 中医妇科临床诊疗指南 产后小便不通
- 影音室安装协议合同
- 部门工作目标管理制度
- 【大单元教学】第三单元《幸福一家人》单元整体设计(含教学评价)
- 农产品跨境贸易合作协议方案书
- 肾动脉狭窄介入护理
- 2025年人教部编版语文小学二年级下册期中测试题附答案(一)
- 《合成抗菌材料》课件
- 2025山东能源集团中级人才库选拔易考易错模拟试题(共500题)试卷后附参考答案
评论
0/150
提交评论