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

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上中南大学化学化工学院C+语言程序设计实验报告专业班级:姓名: 学号: 同组人员:指导教师:完成日期:目录第一题(必做)······································

2、···31. 题目··············································

3、·32. 系统功能模块结构图·································43. 数据结构设计及说明(程序)···········

4、················54. 程序结构(流程图)································

5、;·105. 各模块的功能······································156. 运行结果·······

6、83;··································16第二题(必做)··············

7、··························211. 题目·······················

8、;·······················212. 数据结构设计及说明(程序)························

9、;··213. 程序结构(流程图)··································244. 运行结果··········

10、································25第三题(选做)················

11、83;·······················26第四题(选做)·························

12、···············261. 题目··································

13、;············262. 系统功能模块结构图································273. 数据结构设计及说明(程序)

14、83;·························274. 程序结构(流程图)······················&

15、#183;···········305. 各模块的功能····································&#

16、183;·316. 运行结果··········································31总结及参考文献···&#

17、183;···································35第一题一、题目:使用菜单选择趣味程序 菜单是应用程序的界面,控制语句用来改变程序执行的顺序,是实现结构化设计的基础。 本题的任务是设计一个比较实用的菜单,通过菜单选择不

18、同的功能。 本题的设计分两步:(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十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为

19、零,输出时显示所有可能的组合并统计个数。 + = 2、FindRoot求方程在区间-8,8内的全部实根。3、Detective这是一个侦探题,有一辆汽车撞人后跑了,4个目击证人提供如下线索:牌照三、四位相同;牌号为31xxxx;牌照五、六位相同,三到六位是一个整数的平方。4、Bear有一只狗熊到玉米地里吃玉米,一边掰一边吃。第一天吃了一半,又拿走一个回去喂小熊。第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求地里一共有多少玉米。5、Curve(可选作)绘制一条滴定曲线(已知是0.1000mol/L的氢氧化钠滴定20.00

20、mL同浓度的盐酸)。曲线如图所示。此题可以根据所给曲线大致形状,运用常规的编制图形的方法来绘制。也可根据下面所列的方程式来绘出滴定曲线。其中H为氢离子浓度,cHCl为盐酸浓度,Kt=1014.00,a为滴定分数(令a在02范围内取值,步长为0.001),Vb为氢氧化钠加入到盐酸中的瞬时浓度。6、YearDay已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历。7、Goodbye!这里除了输出一个信息外,还必须结束程序运行。二、系统功能模块结构图:主调main函数启动DetectiveFindnumCurveGoobye!BearFindrootYearday三、数据结构设计及

21、说明(程序):#include<iostream>#include <cmath>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+) /多层

22、循环对可能的数字进行组合 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)

23、&&(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)&&(

24、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)/判断各位数

25、字不相等,并且符合题意等式要求 cout<<" "<<B<<"+"<<C<<"="<<A<<endl;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*s2<0)dok=(i+j)/2; s=k*

26、k*k-3*k-1;if(s1*s<0)j=k;s2=s;else i=k;s1=s;/二分法循环逼近所求实根while(fabs(double)s)>=1e-6);/利用数学函数对输出的解进行精度控制cout<<"方程的实根为:"<<k<<endl;void Detective() inta,A,i,j;for(i=0;i<=9;i+) for(j=0;j<=9;j+)/车牌后四位的排列组合 for(a=0;a<100;a+)/对所有可能的数字进行平方,为之后的比较做准备 A=1000*i+100*i+10

27、*j+j;/算出车牌后四位数的数学值if(a*a=A)cout<<"车牌号为"<<"31"<<i<<i<<j<<j<<endl; void Bear()int day=10, x1, x2=1;cout<<"有一只狗熊到玉米地里吃玉米,一边掰一边吃."<<endl;cout<<"第一天吃了一半,又拿走一个回去喂小熊。"<<endl;cout<<"第二天又去吃了剩下

28、的一半,走是仍带走一个回去喂小熊。"<<endl;cout<<"以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求地里一共有多少玉米。"<<endl;/基本故事叙述 while (day>0)/循环直到时间的始端0 x1=(x2+1)*2;/前一天的数量是后一天加一的两倍x2=x1; day-;/天数递减,倒退 cout<<"玉米田里共有玉米"<<x1<<"个"<<endl;intisleap(int year)/*

29、 函数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; cout&

30、lt;<"请输入年份:"cin>>year; /*因为你的要求是已知2000年1月1日是星期六,所以这里不用week_of_newyears_day去求星期六了*/ weekday = week_of_newyears_day(year); /* 求元旦是星期几 */cout<<year<<"年"<<endl; /* 打印年份 */ for(month=1; month<=12;month=month+1) /* 打印12个月的月历 */ cout<<month<<&qu

31、ot;月"<<endl;cout<<"-"<<endl;cout<<"星期日星期一星期二星期三星期四星期五星期六"<<endl;cout<<"-"<<endl; for(i=0;i<weekday;i=i+1) /* 找当月1日的打印位置 */cout<<" "if(month=4 | month= 6 | month=9 | month=11)len_of_month = 30;else if(mont

32、h=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)/* 打印当月日期 */ cout<<day;if(day<10) cout<<" "elsecout<<" "weekday = weekday+1; if(weekday=7) /* 打满一星期应换行 */ weekday = 0;cout<<endl

33、; cout<<endl; /* 打完一月应换行 */ return 0;int main() int N;cout<<"-趣味选择菜单程序-"<<endl;cout<<"1.FindNum"<<endl;cout<<"2.FindRoot"<<endl;cout<<"3.Detective"<<endl;cout<<"4.Bear"<<endl;cout<&

34、lt;"5.Curve(不可使用)"<<endl;cout<<"6.YearDay"<<endl;cout<<"7.Goodbye"<<endl;/输出菜单内容cout<<"请输入菜单项N:"cin>>N;if(N>0&&N<8)switch(N) case 1:FindNum();cout<<endl; return main();/重新返回主函数,即可重新开始菜单选择case 2:Find

35、Root();cout<<endl;return main();case 3:Detective();cout<<endl;return main();case 4:Bear();cout<<endl;return main(); case 5:cout<<"sorry,该程序未编写"<<endl;return main();case 6:YearDay();cout<<endl;return main();case 7:cout<<"Goodbye!"<<e

36、ndl;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+结束F

37、alseFalseFalsetureC<=999A<=9999tureture开始2、findroot:i<=7j=i+1;s1=i*i*i-3*i-1s2=j*j*j-3*j-1;s1*s2<0k=(i+j)/2; s=k*k*k-3*k-1s1*s<0j=k;s2=sture精度在小数点后六位fabs(double)s)>=1e-6Flase输出符合的根i+a*a=A输出车牌开始i=0j<=9j=0j+a+A=1000*i+100*i+10*j+ja=0i+结束FalseFalseFalseturea<100i<=93、detectiv

38、eturetureture4、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、

39、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。 + = 2、FindRoot输出方程在区间-8,8内的全部实根。3、Detective解出侦探题:有一辆汽车撞人后跑了,4个目击证人提供如下线索:牌照三、四位相同;牌号为31xxxx;牌照五、六位相同,三到六位是一个整数的平方。4、Bear有一只狗熊到玉米地里吃玉米,一边掰一边吃。第一天吃了一半,又拿走一个回去喂小熊。第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求出地里一共有多少玉米。

40、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.对于此程序,需要

41、在运行时输出整个元素周期表,且对应有相应的原子序数和元素符号,且具有查找功能,即输入原子序数或元素符号时,能相应的输出元素符号或原子序数。2.程序:#include <iostream>#include <cstring>using namespace std;void main()char *a="H","He","Li","Be","B","C","N","O","F","Ne&

42、quot;,"Na","Mg","Al","Si","P","S","Cl","Ar","K","Ca","Sc","Ti","V","Cr","Mn","Fe","Co","Ni","Cu","Zn"

43、;,"Ga","Ge","As","Se","Br","Kr","Rb","Sr","Y","Zr","Nb","Mo","Tc","Ru","Rh","Pd","Ag","Cd","In","Sn"

44、,"Sb","Te","I","Xe","Cs","Ba","La","Ce","Pr","Nd","Pm","Sm","Eu","Gd","Tb","Dy","Ho","Er","Tm","Yb",

45、"Lu","Hf","Ta","W","Re","Os","Ir","Pt","Au","Hg","Ti","Pb","Bi","Po","At","Rn","Fr","Ra","Ac","Th",&

46、quot;Pa","U","Np","Pu","Am","Cm","Bk","Cf","Es","Fm","Md","No","Lr","Rf","Db","Sg","Bh","Hs","Mt","Uun",&

47、quot;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,

48、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;i<7;i+) for(j=0;j<18&&k<=112;j+)/循环分行输出周期表if(i=0) && (j>0&&j<17) | (i>0&&i<3) && (j>1&&j<12)cout<<" "else if(i

49、=5&&j=2) cout<<"57-71"<<" "k=72;else if(i=6&&j=2) cout<<"89-103"<<" "k=104;/镧系锕系分行else cout<<bk-1<<" "k+;cout<<endl;for(j=0;j<18&&l<=112;j+) if(i=0) && (j>0&&j

50、<17) | (i>0&&i<3) && (j>1&&j<12)cout<<" "else if(i=5&&j=2) cout<<"La-Lu"<<" "l=72;else if(i=6&&j=2) cout<<"Ac-Lr"<<" "l=104;else cout<<al-1<<" "

51、;l+; cout<<endl; cout<<endl; for(i=57;i<72;i+)cout<<bi-1<<" "cout<<endl;for(i=56;i<71;i+)cout<<ai<<" "cout<<endl;cout<<endl;for(i=89;i<104;i+)cout<<bi-1<<" "cout<<endl;for(i=88;i<103;i+)

52、cout<<ai<<" "cout<<endl;cout<<endl;cout<<"请选择:1.退出;2.输入原子序数找对应元素;3.输入元素找对应原子序数"<<endl;cin>>j;if(j=1)cout<<"退出!"<<endl;else if(j=2)intk;cout<<endl;cout<<"原子序数k="cin>>k;if(k>0)&&(

53、k<=112)for(i=0;i<112;i+)/通过循环找到对应序数的对应元素if(k=bi)cout<<"该原子序数对应的元素:"<<ai<<endl;else if(j=3) char m4,*n;cout<<endl;cout<<"元素符号:"cin>>m; for(i=0;i<112;i+)/通过循环找到对应元素的对应序数 n=ai;if(strcmp(n,m)=0)/ strcmp函数比较字符是否相同,相同返回非0 值cout<<"

54、该元素对应的原子序数:"<<bi<<endl;运用数组和for语句循环输出整个元素周期表,且使元素与其元素符号和元素序数相对应,便于下面元素查找。3. 通过if语句输入的是原子序数还是元素符号,再通过for语句与之对应的元素符号或序数并输出。三、程序结构(流程图):开始输入元素周期表输出菜单输入数字231输入元素找对应原子序数输入原子序数找对应元素退出结束输入原子序数找对应元素四、运行结果:1、输出周期表2、按原子序数查找元素符号3、元素符号查找原子序号第三题(选做)对学生的成绩信息进行管理。学生信息包括:学号、姓名、学期、每门课程的成绩、平均成绩、名次。实现

55、:学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。第四题(选做)一、题目:小学生数学测试软件的编写要求:(1)可选择题型(+,-,*,/);(2)可选择每次答题的个数;(3)随机生成两个数进行运算;(4)每次在输入答案后应判断对错,若答案错误,应给出正确答案;(5)最后给出做对题目的总个数。注意:产生随机数的方法使用随机数函数二、系统功能模块结构图:主调main函数加法计算减法计算乘法计算除法计算三、数据结构设计及说明(程序):#include <iostream>using namespace std;int main()inti,j,k,R=0,n;cout&

56、lt;<"小学数学测试"<<endl;cout<<"请选择想测试的题型:1.+ 2.- 3.* 4./"<<endl;cin>>i;if(i=1) cout<<"请输入测试题的个数:"cin>>j; for(int n=0;n<j;n+)/循环j次,产生j个题目 int x1=rand()%100;int x2=rand()%100; /产生任意两正整数随机函数cout<<x1<<"+"<<x2&

57、lt;<"=:"cin>>k;if(k=x1+x2) cout<<"回答正确!"<<endl; R+;/正确个数递加 elsecout<<"回答错误!正确答案为:"<<x1+x2<<endl; else if(i=2) cout<<"请输入测试题的个数:"cin>>j;for(int n=0;n<j;n+) int x1=rand()%100;int x2=x1+rand()%50; /产生两个非0整数随机数

58、,但是x1>x2 cout<<x2<<"-"<<x1<<"=:"cin>>k;if(k=x2-x1) cout<<"回答正确!"<<endl; R+; elsecout<<"回答错误!正确答案为:"<<x2-x1<<endl; else if(i=3) cout<<"请输入测试题的个数:"cin>>j;for(int n=0;n<j;n+) int x1=rand()%100;int x2=rand()%100; /产生任意非0整数随机函数cout<<x1<<"*"<<x2<<"=:"cin>>k;if(k=

温馨提示

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

评论

0/150

提交评论