C++程序设计课程实践报告.docx

上传人:b****6 文档编号:6184601 上传时间:2023-01-04 格式:DOCX 页数:37 大小:914.73KB
下载 相关 举报
C++程序设计课程实践报告.docx_第1页
第1页 / 共37页
C++程序设计课程实践报告.docx_第2页
第2页 / 共37页
C++程序设计课程实践报告.docx_第3页
第3页 / 共37页
C++程序设计课程实践报告.docx_第4页
第4页 / 共37页
C++程序设计课程实践报告.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

C++程序设计课程实践报告.docx

《C++程序设计课程实践报告.docx》由会员分享,可在线阅读,更多相关《C++程序设计课程实践报告.docx(37页珍藏版)》请在冰豆网上搜索。

C++程序设计课程实践报告.docx

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;i

cout<<"";

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)最后给出做对题目的总个数。

注意:

产生随机数的方法——使用随机数函数

二、系统功能模块结构图:

 

三、数据

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1