1、C程序设计课程实践报告中南大学化学化工学院C+语言程序设计实验报告专业班级:姓名: 学号: 同组人员:指导教师:完成日期:第一题(必做)31.题目32.系统功能模块结构图43.数据结构设计及说明(程序)54.程序结构(流程图)105.各模块的功能156.运行结果16第二题(必做)211.题目212.数据结构设计及说明(程序)213.程序结构(流程图)244.运行结果25第三题(选做)26第四题(选做)261.题目262.系统功能模块结构图273.数据结构设计及说明(程序)274.程序结构(流程图)305.各模块的功能316.运行结果31总结及参考文献35第一题一、题目:使用菜单选择趣味程序 菜
2、单是应用程序的界面,控制语句用来改变程序执行的顺序,是实现结构化设计的基础。 本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。 本题的设计分两步:(1)先设计一个含有多个菜单项的菜单演示程序;A、菜单内容:程序运行后,给出六个菜单项的内容和输出提示1、FindNum2、FindRoot3、Detective4、Bear5、Curve6、YearDay7、Goodbye!B、设计要求:使用数字1-7来选择菜单项,其他输入则不起作用。(2)再为上述菜单项配上相应的功能,即以上述菜单的设计为基础,增加菜单项的处理功能。菜单设计要求(这是6道编程题,要求在运行菜单时,能给出每个程序的运行结
3、果):1、FindNum有0、1、2、3、4、5、6、7、8、9十个数,按要求填入下列算式中,要求每个数只使用一次,首位数不能为零,输出时显示所有可能的组合并统计个数。 + = 2、FindRoot求方程在区间-8,8内的全部实根。3、Detective这是一个侦探题,有一辆汽车撞人后跑了,4个目击证人提供如下线索:牌照三、四位相同;牌号为31xxxx;牌照五、六位相同,三到六位是一个整数的平方。4、Bear有一只狗熊到玉米地里吃玉米,一边掰一边吃。第一天吃了一半,又拿走一个回去喂小熊。第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩
4、下一个玉米。求地里一共有多少玉米。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!这里除了输出一个信息外,还必须结束程序运行。二、系统功能模块结构图:三、
5、数据结构设计及说明(程序):#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;
6、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!=
7、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)
8、 do k=(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有一只狗熊到玉米
9、地里吃玉米,一边掰一边吃.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
10、 )| 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
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1