C++程序设计课程实践报告.docx
《C++程序设计课程实践报告.docx》由会员分享,可在线阅读,更多相关《C++程序设计课程实践报告.docx(37页珍藏版)》请在冰豆网上搜索。
C++程序设计课程实践报告
中南大学化学化工学院
《C++语言程序设计》
实验报告
专业班级:
姓名:
学号:
同组人员:
指导教师:
完成日期:
第一题(必做)·········································3
1.题目···············································3
2.系统功能模块结构图·································4
3.数据结构设计及说明(程序)···························5
4.程序结构(流程图)·································10
5.各模块的功能······································15
6.运行结果··········································16
第二题(必做)········································21
1.题目··············································21
2.数据结构设计及说明(程序)··························21
3.程序结构(流程图)··································24
4.运行结果··········································25
第三题(选做)········································26
第四题(选做)········································26
1.题目··············································26
2.系统功能模块结构图································27
3.数据结构设计及说明(程序)··························27
4.程序结构(流程图)··································30
5.各模块的功能······································31
6.运行结果··········································31
总结及参考文献·······································35
第一题
一、题目:
使用菜单选择趣味程序
△菜单是应用程序的界面,控制语句用来改变程序执行的顺序,是实现结构化设计的基础。
△本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。
△本题的设计分两步:
(1)先设计一个含有多个菜单项的菜单演示程序;
A、菜单内容:
程序运行后,给出六个菜单项的内容和输出提示
1、FindNum
2、FindRoot
3、Detective
4、Bear
5、Curve
6、YearDay
7、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在0—2范围
内取值,步长为0.001),
,Vb为氢氧化钠加入到盐酸中的瞬时浓度。
6、YearDay
已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历。
7、Goodbye!
这里除了输出一个信息外,还必须结束程序运行。
二、系统功能模块结构图:
三、数据结构设计及说明(程序):
#include
#include
usingnamespacestd;
#defineYES1/*定义符号常数“是”*/
#defineNO0/*定义符号常数“否”*/
voidFindNum()//函数1
{intA,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<<""<
}
}
}
}
cout<<"共有组合个数:
"<}
voidFindRoot()
{
floati,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)
{
do
{
k=(i+j)/2;
s=k*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<<"方程的实根为:
"<}
}
}
voidDetective()
{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*j+j;//算出车牌后四位数的数学值
if(a*a==A)
cout<<"车牌号为"<<"31"<
}
voidBear()
{
intday=10,x1,x2=1;
cout<<"有一只狗熊到玉米地里吃玉米,一边掰一边吃."<cout<<"第一天吃了一半,又拿走一个回去喂小熊。
"<cout<<"第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。
"<cout<<"以后每天都吃前天剩下的一半,拿走一个。
到第十天,地里只剩下一个玉米。
求地里一共有多少玉米。
"<while(day>0)//循环直到时间的始端0
{
x1=(x2+1)*2;//前一天的数量是后一天加一的两倍
x2=x1;
day--;//天数递减,倒退
}
cout<<"玉米田里共有玉米"<
intisleap(intyear)/*函数isleap():
判断某年是否闰年*/
{
intleap=NO;
if((year%4==0&&year%100!
=0)||year%400==0)
leap=YES;
returnleap;
}
/*函数week_of_newyears_day():
求元旦是星期几*/
intweek_of_newyears_day(intyear)
{
intn=year-1900;
n=n+(n-1)/4+1;
n=n%7;
returnn;
}
intYearDay()
{
intyear,month,day,weekday,len_of_month,i;
cout<<"请输入年份:
";
cin>>year;
/*因为你的要求是已知2000年1月1日是星期六,所以这里不用week_of_newyears_day去求星期六了*/
weekday=week_of_newyears_day(year);/*求元旦是星期几*/
cout</*打印年份*/
for(month=1;month<=12;month=month+1)/*打印12个月的月历*/
{
cout<cout<<"-------------------------------------------------------------"<cout<<"星期日星期一星期二星期三星期四星期五星期六"<cout<<"-------------------------------------------------------------"<for(i=0;icout<<"";
if(month==4||month==6||month==9||month==11)
len_of_month=30;
elseif(month==2)
{
if(isleap(year))
len_of_month=29;
else
len_of_month=28;
}
else
len_of_month=31;
for(day=1;day<=len_of_month;day=day+1)/*打印当月日期*/
{
cout<if(day<10)cout<<"";
elsecout<<"";
weekday=weekday+1;
if(weekday==7)/*打满一星期应换行*/
{
weekday=0;
cout<}
}
cout</*打完一月应换行*/
}
return0;
}
intmain()
{intN;
cout<<"----------------------趣味选择菜单程序---------------------"<cout<<"1.FindNum"<cout<<"2.FindRoot"<cout<<"3.Detective"<cout<<"4.Bear"<cout<<"5.Curve(不可使用)"<cout<<"6.YearDay"<cout<<"7.Goodbye"<cout<<"请输入菜单项N:
";
cin>>N;
if(N>0&&N<8)
switch(N)
{
case1:
FindNum();
cout<returnmain();//重新返回主函数,即可重新开始菜单选择
case2:
FindRoot();
cout<returnmain();
case3:
Detective();
cout<case4:
Bear();
cout<case5:
cout<<"sorry,该程序未编写"<case6:
YearDay();
cout<case7:
cout<<"Goodbye!
"<cout<<"-------------谢谢使用------------"<}
else{cout<<"输入错误,请输入1~7的整数"<}
四、程序结构(流程图):
*主菜单程序结构图:
*分程序结构图:
1、findnum
2、findroot:
3、detective
4、Bear:
5、Curve
6、yearday:
7、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
usingnamespacestd;
voidmain()
{
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"};
intb[]={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;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<<"";
elseif(i==5&&j==2)
{cout<<"57-71"<<"";k=72;}
elseif(i==6&&j==2)
{cout<<"89-103"<<"";k=104;}//镧系锕系分行
else
{cout<
}
cout<for(j=0;j<18&&l<=112;j++)
{
if(((i==0)&&(j>0&&j<17))||((i>0&&i<3)&&(j>1&&j<12)))
cout<<"";
elseif(i==5&&j==2)
{cout<<"La-Lu"<<"";l=72;}
elseif(i==6&&j==2)
{cout<<"Ac-Lr"<<"";l=104;}
else
{cout<}
cout<}
for(i=57;i<72;i++)
cout<
cout<for(i=56;i<71;i++)
cout<cout<for(i=89;i<104;i++)
cout<
cout<for(i=88;i<103;i++)
cout<cout<cout<<"请选择:
1.退出;2.输入原子序数找对应元素;3.输入元素找对应原子序数"<cin>>j;
if(j==1)cout<<"退出!
"<elseif(j==2)
{intk;cout<cout<<"原子序数k=";
cin>>k;
if((k>0)&&(k<=112))
for(i=0;i<112;i++)//通过循环找到对应序数的对应元素
if(k==b[i])cout<<"该原子序数对应的元素:
"<elseif(j==3)
{charm[4],*n;
cout<cout<<"元素符号:
";
cin>>m;
for(i=0;i<112;i++)//通过循环找到对应元素的对应序数
{n=a[i];
if(strcmp(n,m)==0)//strcmp函数比较字符是否相同,相同返回非0值
cout<<"该元素对应的原子序数:
"<
}
}
}
运用数组和for语句循环输出整个元素周期表,且使元素与其元素符号和元素序数相对应,便于下面元素查找。
3.通过if语句输入的是原子序数还是元素符号,再通过for语句与之对应的元素符号或序数并输出。
三、程序结构(流程图):
输入原子序
数找对应元素
四、运行结果:
1、输出周期表
2、按原子序数查找元素符号
3、元素符号查找原子序号
第三题(选做)
对学生的成绩信息进行管理。
学生信息包括:
学号、姓名、学期、每门课程的成绩、平均成绩、名次。
实现:
学生信息的录入;修改;删除和查询,按学期、学号、成绩不及格等查询。
第四题(选做)
一、题目:
小学生数学测试软件的编写
要求:
(1)可选择题型(+,-,*,/);
(2)可选择每次答题的个数;
(3)随机生成两个数进行运算;
(4)每次在输入答案后应判断对错,若答案错误,应给出正确答案;
(5)最后给出做对题目的总个数。
注意:
产生随机数的方法——使用随机数函数
二、系统功能模块结构图:
三、数据