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
求方程0133
=--x x 在区间[-8,8]内的全部实根。
3、Detective
这是一个侦探题,有一辆汽车撞人后跑了,4个目击证人提供如下线索:牌照三、四位
相同;牌号为31xxxx ;牌照五、六位相同,三到六位是一个整数的平方。 4、Bear
有一只狗熊到玉米地里吃玉米,一边掰一边吃。第一天吃了一半,又拿走一 个回去喂小熊。第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求地里一共有多少玉米。 5、Curve (可选作)
绘制一条滴定曲线(已知是0.1000mol/L 的氢氧化钠滴定20.00mL 同浓度的
盐酸)。曲线如图所示。
此题可以根据所给曲线大致形状,运用常规的编制图形的方法来绘制。也可
根据下面所列的方程式来绘出滴定曲线。
2
1
1
2
2
)
1(
4
)
1(
2
]
[?
?
?
?
?
?
+
-
+
-
=-
+
t
HCl
HCl K
a
c
a
c
H
。
其中[H]为氢离子浓度,c
HCl
为盐酸浓度,Kt=1014.00,a为滴定分数(令a 在0—2范围
内取值,步长为0.001),
20
/
b
V
a=,V
b
为氢氧化钠加入到盐酸中的瞬时浓度。
6、YearDay
已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历。
7、Goodbye!
这里除了输出一个信息外,还必须结束程序运行。
二、系统功能模块结构图:
主调main函数启动
Findnum Detective
Bear
Curve Goobye!
三、数据结构设计及说明(程序):
#include
#define YES 1 /* 定义符号常数“是” */ #define NO 0 /* 定义符号常数“否” */
void FindNum() //函数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() { 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) { 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<<"方程的实根为:"< } } } 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*j+j;//算出车牌后四位数的数学值 if(a*a==A) cout<<"车牌号为"<<"31"< } void Bear() { int day=10, x1, x2=1; cout<<"有一只狗熊到玉米地里吃玉米,一边掰一边吃."< cout<<"第一天吃了一半,又拿走一个回去喂小熊。"< cout<<"第二天又去吃了剩下的一半,走是仍带走一个回去喂小熊。"< cout<<"以后每天都吃前天剩下的一半,拿走一个。到第十天,地里只剩下一个玉米。求地里一共有多少玉米。"< while (day>0)//循环直到时间的始端0 { x1=(x2+1)*2;//前一天的数量是后一天加一的两倍 x2=x1; day--;//天数递减,倒退 } cout<<"玉米田里共有玉米"< intisleap(int year)/* 函数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<<"请输入年份:"; 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<<"星期日星期一星期二星期三星期四星期五星期六"< for(i=0;i cout<<" "; if(month==4 || month== 6 || month==9 || month==11) len_of_month = 30; else if(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< /* 打完一月应换行*/ } return 0; } int main() { int N; cout<<"----------------------趣味选择菜单程序---------------------"< 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) { case 1:FindNum(); cout< return main();//重新返回主函数,即可重新开始菜单选择case 2:FindRoot(); cout< return main(); case 3:Detective(); cout< case 4:Bear(); cout< case 5:cout<<"sorry,该程序未编写"< cout< case 7:cout<<"Goodbye!"< cout<<"-------------谢谢使用------------"< } else {cout<<"输入错误,请输入1~7的整数"< 四、程序结构(流程图):*主菜单程序结构图: C语言程序设计 实训报告 题目:红外避障机器人 院(系):信息工程系 专业:通信工程 学生姓名:韦嘉宝 学号: 24 指导教师:朱震周斌王旬全刘辉 2016 年10月8 日 目录 摘要 (1) 设计要求 (2) 设计步骤 (3) 代码编写 (4) 心得体会 (5) 参考文献 (6) 许多机器人使用雷达(RADAR)或者声纳(SONAR)来探测物体而不需要同物体接触。本文的方法是使用红外光来照射机器人前进的路线,然后确定何时有光线从被探测目标反射回来,通过检测反射回来的红外光就可以确定前方是否有物体。由于红外遥控技术的发展,现在红外线发射器和接收器已经很普及并且价格很便宜。 随着微电子技术的不断发展,微处理器芯片的集成程度越来越高,单片机已可以在一块芯片上同时集成CPU、存储器、定时器、并行和串行接口、看门狗、前置放大器、A/D转换器、D/A转换器等多种电路,这就很容易将计算机技术与测量控制技术结合,组成智能化测量控制系统。这种技术促使机器人技术也有了突飞猛进的发展,目前人们已经完全可以设计并制造出具有某些特殊功能的简易智能小车。 机器人使用红外线二极管LED 作为前灯,如图6-1 所示。红外线二极管发射红外光线,如果机器人前面有障碍物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。机器人的大脑——单片机A T89S52 基于这个传感器的输入控制伺服电机。红外线(IR)接收/检测器有内置的光滤波器,除了需要检测的980 nm 波长的红外线外,它几乎不允许其他光通过。红外检测器还有一个电子滤波器,它只允许大约38.5 kHz 的电信号通过。换句话说,检测器只寻找每秒闪烁38500 次的红外光。这就防止了普通光源像太阳光和室内光对IR 的干涉。太阳光是直流干涉(0Hz)源,而室内光依赖于所在区域的主电源,闪烁频率接近100 Hz 或120 Hz。由于120 Hz 在电子滤波器的38.5 kHz 通带频率之外,它完全被IR 探测器忽略。 本任务将搭建并测试红外线发射和检测器对。本讲需要用到的新部件如下: 元件清单 (1)红外检测器,2 个。 (2)IR LED(带套筒),2 个。 (3)470? 电阻,2 个。 (4)连接线,若干。 二、设计要求 (1)小车能够完成前进、后退、左转、右转等动作。 (2)机器人能够读出传感器电平变化,并作相应的动作变化。 (3)利用机器人所装配的两个探测器,探测和避开障碍物。 三、设计步骤 实 验 报 告 二级学院:信息与工程学院 系别:计算机科学与技术系 专业:信息管理与信息系统 课程名称:高级语言程序设计 班级:姓名: 实验名称: 电话订餐信息处理 实验目的: 题目要求: 一个小饭馆的生意非常红火,要想用餐必须提前一天打电话预订,假设我们是饭馆负责接受电话预订的服务员,我们需要做些什么呢?首先,需要准备一张大小适当的白纸,等待顾客的电话。李红最先打进了电话,她预约第2天中午12点用餐,用餐人数5人,服务员在纸上做了如下记录:“李红 12点 5人”;接着,刘娜、汪涵、孙杰和赵君分别来了电话,服务员根据他们的要求做了记录,此时纸上记录的内容是: 李红 12点 5人 刘娜 11点 2人 汪涵 11点20分 3人 孙杰 10点30分 5人 赵君 13点20分 6人 孙杰随后又来电话,将用餐时间推后一个小时,那么记录的内容也应该做相应的修改。刘娜来用餐以后,可以将其信息从纸上划去 编写程序处理电话订餐的情况 实验步骤: 首先建立结构体类型,然后函数声明,编写主函数,定义函数,调用函数。完成后,对程序进行调试,确定所编写的程序是否能够运行。 实验内容: #include<> #include<> #define max 30 struct guest { intnum; char name[40]; char time[20]; int sum; }guestlink[max]; void insert(int *p); void inquire(int); void change(int); void dele(int *p); void show(int); void main() { inti; int count=0; do {0 printf("1.......插入\n"); printf("2.......查询\n"); printf("3.......修改\n"); printf("4.......删除\n"); printf("5.......显示\n"); printf("6.......退出\n"); scanf("%d",&i); switch(i) { case 1: insert(&count);break; case 2: inquire(count);break; case 3: change(count);break; case 4: dele(&count);break; case 5: show(count);break; case 6:break; default:printf("输入错误!");break; } }while(i!=6); } C语言实习报告(用链表实现学生学籍管理) 绪言 C语言使国内外广泛使用的一种计算机语言。C语言功能丰富、表达能力强、使用灵活方便、应用面广、目标程序效率高、可移植性好。既具有高级语言的优点,又具有低级语言的许多特点,因此特别适合编写系统软件。 在经过一整个学期的C语言理论学习,我们已经能够掌握其基本语法,但是缺乏一定的实际运用的能力。为了让我们更好的理解和运用其解决实际问题,并且对结构化程序有更进一步的认识,学校组织了这一次C语言实习。 实习中,我们将按要求完成一个较为复杂的程序编写——学生学籍管理程序。 实习基本内容和要求: 1、总体功能要求 (1)链表的建立:每个节点包括:学号、姓名、性别、语文、数学、英语、总分; (2)节点的插入:按学号的顺序插入; (3)删除链表中的节点:按学号或者姓名; (4)链表的输出:按学号排序、按总分排序。 2、性能的要求: (1)各个功能分别用函数实现; (2)节点信息让用户通过键盘输入 (3)总分通过计算获得; (4)有简单的操作界面; 尽可能考虑程序的容错性、可操作性。 教材和主要参考书目: (1)教材:《C程序设计》,谭浩强编著,清华大学出版社(2)主要参考书目: ①《C程序设计教程》,谭浩强编著,清华大学出版社; ②《C语言程序设计——习题与实验指导》,谭浩强编著,清华大学出版社。实习过程: 我们将有5天的时间完成一个程序和一份实习报告。 1、我们要根据题目的要求进行需求分析和资料整理;(1天) 2、我们利用资料、教材和寻求他人帮助完成详细设计;(注: 关键部分解释说明)(3天) 3、完成一份对自己程序详细描述与解释的报告。(1天) 篇一:《C语言上机实验心得》 C语言上机实验心得 在科技高度发展的今天,计算机在人们之中的作用越来越突出。而C语言作为一种计算机的语言,学习它将有助于我们更好的了解计算机,与计算机进行交流,因此,我们一定要学好C语言,这对我们以后的发展是十分重要的。 说到这,上机实验当然就是一个必不可少的环节了,C语言灵活、简洁的特点,只有通过编程实践才能真正了解,真正说懂。为了更好地学习语法规定、掌握程序设计方法、提高程序开发能力,我们必须实际上机、编写程序。 通过实验我也发现了自己不少的问题,这都是只看书上的程序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了C语言那就大错特错了。 我主要存在以下的这些缺点 1、学习耐心与细心不足,如scanf(“%d”,&n);中的“&”有时候会忘了。而在最后 输出时又错写成printf(“%d”,&n);从而错误得输出了地址而不是我原来想要的答案。 2、编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解 题了。 3、 4、基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够 深刻。 5、 6、有时候不够精简,有一点用处不大或者说没有也可以的文字存在。英语水平较差,对错误的地方虽然电脑有说,但由于是英文,理解上还是存在 一点问题。 为了能更好地学好C语言,在今后学习中我要更多的动脑,综合运用所学,多看相关东西,多上机练习,提高电脑水平,增强自学能力,把已会的东西掌握好。 实验中我深刻意识到完成程序的编写,决不意味着万事大吉。认为万无一失的程序,实际上机运行时可能会出现很多意想不到的问题。有时编译程序检测出一大堆错误,有时程序能够顺利运行,但是运行结果并不是你预期中想要的。因为开发环境所提供的编译系统无法发现程序逻辑错误,或者是你原来所设计时的理论错误,这就只能靠自己的上机经验来分析判断错误的所在了。所以程序的调试是一个技巧性很强的工作,它可能比编一个程序耗时更 多。由此可看出上机实践的重要性。 通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。编程的时候有因为顺利编出程序而开心过、有因为做得比人家慢而郁闷过、有因为不知从何入手而无奈过、有因为不知错出在哪而彷徨过但随着练习的增多,我对C语言比以前熟了很多,不再只是纸上谈兵,我都有能力独立做出一些程序,可能对于一些“高手来说这不算什么,或者他们早就会了,但我依然觉得很开心,因为我跟我自己比是进步了。 《高级语言程序设计》课程设计报告 1、程序设计说明书 【设计题目】 雷霆行动游戏程序 【问题描述】 雷霆行动是一款供大家休闲娱乐的小游戏,游戏通过鼠标控制我方飞机hero的移动,达到躲闪敌机的目的;利用鼠标键发射子弹和导弹,达到击毁敌机的目的,摧毁敌机有积分。此游戏为闯关积分类小游戏。 【软件功能】 1.按鼠标左键,游戏开始。 2.利用鼠标移动控制hero自由移动,闪躲敌方子弹。 3.利用鼠标左键发射子弹,实现打中敌方飞机的功能;利用鼠标右键释放导弹,实现摧毁大量敌 机的功能,击中一个敌方飞机积一分。 4.hero碰到对方子弹会消耗生命,消耗生命的多少,依据子弹的不同而不同。 5.一关之后会进入下一关。 6.游戏右上角红色的进度条表示hero的生命,当红色全部消失之后,游戏结束,显示死亡。 7.游戏结束后,可重新开始,同1。 【算法思想】 1.创建游戏主界面,确定窗口的坐标。 2.设计游戏开始界面显示信息及信息坐标。 3.设置游戏进行中的信息,hero的移动、释放子弹和导弹,达到击毁敌机的目的。 4.处理游戏进行中的子弹、大爆、爆炸、敌机消失和存在的条件。 5.设置进入下一关的条件。 6.设计游戏结束界面显示信息及信息坐标。 7.处理游戏重新开始满足的条件。 8.装载图像。 9.对游戏进行调试和改进,使这个游戏更加完善。 【类的设计】 本程序共有七个类: 1.MainPanel 属性:BBv为子弹数组,EEv为敌机数组,BOMBv为爆炸数组,EBv为敌机子弹数组,DBv 为大爆数组,E-num为敌机数量,E-max敌机最大数,E-vel为敌机速度,E-mov为敌机 横移几率,E-hit为敌机开火几率,Sum为击毁敌机数量,hero-hp为hero生命,back至 db-2均为图片,tracker为媒体跟踪器,y为背景滚动变量,seq为hero的动画变量,isfire 为hero开火,isblast为是否发爆,blastnum为大爆的数量,blastc为控制大爆,f、ff、s、 ss均为游戏界面上显示的信息; 方法:MainPanel(Game)构造方法,paint(Graphics)建立游戏开始界面如显示的文字,run()控制对象移动,BBmove(int,int)子弹的移动方法,DBmove(int,int)大爆的移动方法, mouseDragged(MouseEvent) 鼠标的拖拽用来保证hero不出界,mouseMoved(MouseEvent) 鼠标的移动用来控制hero移动,mousePressed(MouseEvent) 鼠标按键在组件上按下时调 用,重新开始游戏,mouseClicked(MouseEvent)鼠标按键在组件上单击(按下并释放) 时调用,释放子弹,mouseReleased(MouseEvent)鼠标按钮在组件上释放时调用, mouseEntered(MouseEvent)鼠标进入组件上调用,mouseExited(MouseEvent)鼠标离开组 件时调用; 设计报告 一,实验目的: 通过上机实习,熟练掌握循环语句、选择语句、指针以及结构体的运用技巧。在实习中通过 实际操作,编写程序,发现问题,最后解决问题,提升对c语言实用性的理解,在实践中巩固各知 识点。 C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点,上 机实习可以帮助我们更好地理解这种结构式的 中级语言以及其各式各样的数据类型和高效率 的运算程序,为我们进一步学习C++打下坚实基 础。 同时,在实习过程中,通过互相发现问题,共同解决问题,不仅锻炼了我们的合作能力,而 且也让我们发现了一些自己的个人误区以及其 他人容易犯的错误,从而在今后的学习中更加谨 慎,达到事半功倍的效果;通过询问老师,也让 我们养成了不耻下问的好习惯,这将很有利于以 后的学习。 闲乐-一个人闲。不如大家一块儿乐https://www.360docs.net/doc/6211396851.html, 二,总体设计: 1,学生成绩排名 1,流程图: <通过冒泡法对数组进行排序> <测试时由于循环语句循环次数的错误导致部分数据没有排序,修改FOR语言中的条件即可调试成功>C语言实训报告
c语言实践报告
C语言实习报告
c语言实验报告总结
Java课程设计小游戏
C语言实习报告