C程序设计课程实践报告.docx
《C程序设计课程实践报告.docx》由会员分享,可在线阅读,更多相关《C程序设计课程实践报告.docx(36页珍藏版)》请在冰豆网上搜索。
![C程序设计课程实践报告.docx](https://file1.bdocx.com/fileroot1/2022-10/12/d2f86533-099b-49b2-bb91-3d4636713b67/d2f86533-099b-49b2-bb91-3d4636713b671.gif)
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