C/C++课程设计选题(24题)[2023-12-03]
程序设计(上机)实践课程大纲
一. 课程设计内容与目的
课程设计内容:本课程是物联网工程与网络工程专业的集中实践类课程,是继高级语言程序设计后的第一门专业实践课,为数据结构、数学建模、操作系统等课程提供必要的实现基础。课程题目分为基础题目与应用型题目两种类型,学生审题后完成所有基础题目,并在应用题目中选一题进行分析、设计、调试、并根据要求撰写实验报告。报告需包含具体内容如下:
(1)分析问题域中所需处理数据的逻辑结构,合理地选择存储结构;
(2)基于问题域功能搭建完整的程序设计框架;
(3)应用程序设计语言(C、C++)编写代码对各题目进行实现;
(4)在数据集上对实现程序进行测试,分析测试结果;
(5)调试算法实现过程中出现的问题并总结开发心得;
(6)根据要求撰写实验报告。
通过集中时间上机实验,充分发挥已有的编程能力,熟悉编译环境,培养学生独立分析问题并设计相关程序对问题进行求解的综合能力。
课程设计目的:深化学生对高级语言程序设计、面向对象程序设计课程中的概念、理论、方法的理解。为学生提供分析、设计、实现求解实际问题的实践机会,将理论知识运用于实际算法设计与实现中,综合运用所学的理论知识。提高学生熟练应用程序设计语言的能力与技巧,完成设计算法的编码与调试。
二. 实施方法及进度安排
- 实施方法
(1)每位同学独立完成课程设计内容;
(2)上机演示设计的算法,回答老师的问题;
(3)提交程序设计报告与源代码;
(4)总结课程设计心得。 - 课题进度安排
内容 学时
查阅资料、审题、选题 2
讨论、问题分析、需求制定 4
设计数据结构 4
程序设计与分析 12
功能实现 12
程序测试 6
实践报告撰写 8
三. 考核方法及进度安排
本课程考核由平时出勤、程序设计与实现、实践报告三部分组成。其中,平时成绩占总成绩30%,程序设计与实现占总成绩40%,实践报告占总成绩30%。
注:如有以下情况,成绩视为不及格:
(1)与已验收的程序明显雷同;
(2)中期检查或终期检查时无法解释程序中的某些基本功能,或对所写程序一无所知。
四. 课程选题及问题描述
Part 1 基础型题目
- 输入某年某月某日,判断这一天是这一年的第几天?
- 编写一个3人对战的“猜拳游戏”。由计算机来担任2个角色,这2个角色的手势都用随机数来生成。要求玩家可以选择是否重复进行游戏。
- 编写一个“记忆力训练”程序,玩家按照相反的顺序输入已记忆的字符串序列,例如提示的题目是5892,屏幕显示n秒钟后,题目数字自动消失,并提示输入,玩家需输入2985。
- 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
- 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- 输入一个整数n,当n为偶数时,调用函数求1/2+1/4+…+1/n,当n为奇数时,调用函数求1/1+1/3+…+1/n。
Part 2 应用型题目
1.个人账务管理系统
(一)问题描述
用C或C++语言实现一个简单的个人账务管理系统,该系统要求个人能对某月的支出情况进行统计和分析。通过此课题,熟练掌握数组、文件、结构体、指针的各种操作,以及一些算法思想的应用。
(二)课题要求
课题分基本要求和扩展要求,基本要求是必须完成的,扩展要求视能力自选一个或多个完成。
- 基本要求
(1) 支出信息包括:支出类型(主要可以分为食品、学习、交通、通信、礼品等小项),金额,消费地点,消费日期等。
(2) 消费情况的录入功能,可以任意输入某日期,并记录该日的某项消费情况。对于同一天,可以输入多条消费记录,如记录10月1日中餐的消费情况,再记录10月1日的晚餐消费情况。将相关的信息记录在文件中,每次程序启动可以从文件中读入数据。
(3) 实现对某段时间进行分类统计和明细条目排序。分类统计指可以对指定时间区间内的消费情况进行汇总,用户可以对所有类型或指定类型进行统计,如对10月1日至11月15日期间所有类型进行统计时,依次统计各类型的消费金额汇总,如食品总消费1000元,交通总消费200元等。也可以指定查询10月1日至11月15日期间交通消费总金额。明显条目排序,指对指定时间区间内的消费情况进行明细排列,并能按金额大小或日期顺序进行排序。例如查看10月1日至11月15日期间“学习”消费的明细情况,对“学习”的每笔花费按金额大小或日期顺序进行排序。可以将分类统计和明细条目排序相结合,如在统计出交通消费总金额的同时,在其后列举消费明细。
(4) 显示功能:将排序后的内容存为文件,形成个人财务报表。
(5) 排序功能:按消费的金额升序或降序排序。 - 扩展要求
(1) 对日期输入的合法性进行判断,如不能输入2010-2-30.
(2) 界面友好,输入信息符合逻辑如金额不为负数等。数据使用文件存储,无需重复输入数据或所需时间等)。
2.运动会分数统计
(一)问题描述
参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20)
(二)基本要求
(1) 可以输入各个项目的前三名或前五名的成绩。
(2)能统计各学校总分。
(3)可以按学校编号、学校总分、男女团体总分排序输出;
(4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)
输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;
3.打印万年历
(一)课题内容
用C或C++编程实现一个简单、实用的万年历程序。主要功能为在屏幕上显示任意年月的月历,按每行两个月的格式输出当年或指定的任意年的年历。通过此课题,熟练掌握数组、格式输出、字符串处理、时间函数的调用、文件的各种操作,以及一些基本的日期算法思想。
(二)课题要求
课题分基本要求和扩展要求,基本要求是必须完成的,扩展要求视能力自选一个或多个完成。
- 基本要求
(1) 读取系统时钟,计算与日期相关的信息,首先打印出当月的月历,在当月月历的最下方也下列两行方式显示与当前有关的信息:
今天是: 2005年12月20日,星期二
当前时间是:22时40分43秒
(2) 输入任意年号能得到指定年的年历(万年历)。
(3) 将屏幕上显示的月历和年历均存为文本文件以便今后读取。
(4) 按每行两个月的格式显示今年的日历,形式如下:
***** ***** ***** *****
* * * * * * *
***** * * * * *****
* * * * * *
***** ***** ***** *****
Jan Feb
________________________________ ________________________________
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat
1 1 2 3 4 5
2 3 4 5 6 7 8 6 7 8 9 10 11 12
…… ……
- 扩展要求
(1) 重要节假日用一个文本文件进行设置,文件格式为txt。程序应通过读取节假日文件的信息来对日历上的节假日日期进行标注。从而在日历上显示节假日信息。如十月份的1号显示为:国庆节 1。
(2) 提供按年上下翻页的功能来实现对上一年或下一年的年历的查询功能。
4.超市前台管理系统
(一)问题描述
编写一个超市管理系统,系统至少包括商品录入、进货管理、销售管理、收银业务等功能。
(二)基本要求
(1) 商品录入
根据超巿业务特点制定相关功能,可以通过输入唯一商品编号、商品名称等来实现精确或模糊的商品录入。
(1) 收银业务
通过直接输入商品名称等方式自动计算本次交易的总金额。
(3) 进货管理
根据销售情况及库存情况,自动制定进货计划。
(3) 销售管理
商品正常销售、促销与限量、限期及禁止销售控制。 综合查询各种销售明细记录、各地收银员收银记录以及交结账情况等。按多种方式统计生成销售排行榜,灵活察看和打印商品销售日、月、年报表。 ²
(4) 库存管理
综合查询库存明细记录。 库存状态自动告警提示。如库存过剩、少货、 缺货等。软件为您预警,避免库存商品积压损失和缺货。
(5) 人员管理
员工、会员、供货商、厂商等基本信息登记管理。 4、学校运动会管理系统
5.火车票务管理系统
(一)课题内容
用C或C++语言实现一个简单的火车票务系统,能实现火车车次信息管理、查询、统计、排序等功能,并提供售票及退票服务。通过此课题,熟练掌握文件、数组、结构体的各种操作,以及一些算法思想的应用。
(二)课题要求
课题分基本要求和扩展要求,基本要求是必须完成的,扩展要求视能力自选一个或多个完成。
- 基本要求
(1) 提供录入功能,录入一个火车站的n个发车班次信息存于文件schedule.dat中,具体有下列信息:
车次 发车时间 起点站 终点站 行车时间 额定载量 余票数量
(2) 可随时增加、修改、删除车次数据。
(3) 浏览班次信息,可显示出所有车次当前状况(如果当前系统时间超过了某班次的发车时间,则显示“此车已发出”的提示信息)。
(4) 查询路线:可按班次号、起点站、终点站查询售票情况。
(5) 按发车时间的先后给出发车时间表(排序方法自选),存入文件保存(sort.dat)。
(6) 售票和退票功能:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新余票数量;退票时,输入退票的班次,在本车次发出前半小时才可以退票,自动更新已售票数和余票数量。 - 扩展要求
(1) 角色区分:以上的功能(1)和(2)只有管理员凭密码才能操作;其余所有的功能管理员和普通访客均可操作。
(2) 某人一旦购买了某一天的某一趟火车,则不允许他预订同一天其他班次的火车。
6.学生综合测评系统
(一)问题描述
每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。
(二)基本要求
A、学生信息处理
(1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。
提示:学生信息可先输入到数组中,排序后可写到文件中。
(2) 插入(修改)同学信息:
提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容,
(3) 删除同学信息:
提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删除后的信息写到文件中。
(4) 浏览学生信息:
提示:打开文件,显示该文件的学生信息。
B、学生数据处理:
(1) 按考试科目录入学生成绩并且按公式:考试成绩=(语文+数学+外语)/3 计算考试成绩,并计算考试名次,提示:先把学生信息读入数组,然后按提示输入每科成绩,计算考试成绩,求出名次,最后把学生记录写入一个文件中。
(2) 学生测评数据输入并计算综合测评总分及名次。
提示:综合测评总分=(考试成绩)0.6+(同学互评分)0.1+品德成绩0.1+任课老师评分0.2。
(3) 学生数据管理
提示:输入学号,读出并显示该同学信息,输入新数据,将改后信息写入文件
(4) 学生数据查询:
提示:输入学号或其他信息,即读出所有数据信息,并显示出来。
C、学生综合信息输出
提示:输出学生信息到屏幕。
7. 文本文件单词的检索与计数
(一)问题描述
要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。
(二)基本要求
(1) 建立文本文件
(2) 给定单词的计数
(3) 检索单词出现在文本文件中的行号、次数及其位置
(4)主控菜单程序的结构
① 头文件包含
② 菜单选项包含
建立文件、单词定位、单词计数、退出程序
③ 选择1-4执行相应的操作,其他字符为非法。
8.飞机订票系统
(一)课题内容
设计一飞机订票系统,通过此系统可以实现以下功能:
(二)基本要求
(1) 录入:可以录入航班情况(数据可以存在一个数据文件中,数据结构/具体数据自定);
(2) 查询:可以查询某个航线的情况(如航班编号,起降时间,起飞地大城市,票价等),可以输入起飞抵达城市,查询飞机航班情况;
(3) 订票:可以订票,如果航班已经无票,可以提供相关可选择航班(订票情况存在一个数据文件中,结构自己设定);
(4) 退票:可以退票,退票后修改相关数据文件。客户资料信息有姓名,证件号码,订票数量及航班情况,订单要有编号;
(5) 修改航班信息:当航班信息改变可以修改航班数据文件。
9.图书管理系统
(一)问题描述
主要包括管理图书的库存信息、每一本书的借阅信息以及每一个人的借书信息。每一种图书的库存信息包括编号、书名、作者、出版社、出版日期、金额、类别、总入库数量、当前库存量、已借出本数等。每一本被借阅的书都包括如下信息:编号、书名、金额、借书证号、借书日期、到期日期、罚款金额等。每一个人的借书信息包括借书证号、姓名、班级、学号等。
(二)基本要求
A、借阅资料管理
要求把书籍、期刊、报刊分类管理,这样的话操作会更加灵活和方便,可以随时对其相关资料进行添加、删除、修改、查询等操作。
B、借阅管理
(1) 借出操作
(2) 还书操作
(3) 续借处理
提示:以上处理需要互相配合以及赔、罚款金额的编辑等操作完成图书借还业务的各种登记。例如:读者还书时不仅更新图书的库存信息,还应该自动计算该书应罚款金额。并显示该读者所有至当日内到期未还书信息。
C、读者管理
读者等级:对借阅读者进行分类处理,例如可分为教师和学生两类。并定义每类读者的可借书数量和相关的借阅时间等信息。
读者管理:对读者信息可以录入,并且可对读者进行挂失或注销、查询等服务的作业。
D、统计分析
随时可以进行统计分析,以便及时了解当前的借阅情况和相关的资料状态,统计分析包括借阅排行榜、资料状态统计和借阅统计、显示所有至当日内到期未还书信息等功能分析。
E 系统参数设置:可以设置相关的罚款金额,最多借阅天数等系统服务器参数。
10.客户消费积分管理系统
(一)问题描述
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
(二)基本要求
(1) 采用一定的存储结构进行客户信息的存储;
(2) 对客户的信息可以进行修改、删除、添加;
(3) 能够根据消费情况进行客户积分的计算;
(4) 根据积分情况实行不同程度的打折优惠;
11.机房机位预约模拟系统
(一)问题描述
20台机器,从早8点到晚8点,每两个小时一个时间段。
(二)基本要求
(1)查询,根据输入时间,输出当前全部机位信息和可用空闲机位信息;
(2)机位预定,根据输入的日期和时间段查询是否有空机位,若有则预约,若无则提供最近时间段的空机信息。另外,如果用户要求在非空时间上机,则将用户信息插入该时间段的等待列表。
(3)退出预定,根据输入的时间撤销该时间的预定。
(4)查询是否有等待信息,若有则按顺序显示联系方式,若无则显示提示信息。
12.宿舍管理查询软件
(一)问题描述
为宿舍管理人员编写一个宿舍管理查询软件,程序设计要求:
(1)采用交互工作方式;
(2)可以增加、删除、修改信息;
(3)可实现按关键字(姓名、学号、房号)进行排序显示;
(4) 查询:a.按姓名查询 、b.按学号查询 、c.按房号查询,输出任一查询结果(可以连续操作)。
提高部分:建立外部.txt文件,同步宿舍全部人员的数据,并按关键字房号排序存储。
13.通讯录管理系统的设计与实现
(一)问题描述
完成通讯录的一般性管理工作。其中,每条记录至少包括姓名、手机号、QQ、电子邮箱、地址等信息。分别以电话号码和用户名为关键字建立不同的哈希表。:
(二)基本要求
(1)添加信息:可新增人员信息;
(2)显示信息:按照哈希表的存储位置信息排序显示;
(3)查找:用名字和手机号分别作为查找的依据,进行查找;
(4)编辑信息:修改完善人员信息;
(5)删除信息:删除人员信息;
(6)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。
14.简单目录管理系统的设计与实现
(一)问题描述
利用树型结构设计并实现一个简单的目录管理系统。功能主要包括:
(二)基本要求
(1) 系统可以对所有目录进行管理,类似C盘、D盘、E盘;
(2) 实现子目录和文件的新建、删除、查询、子目录和文件名称修改等功能;
(3) 按某种顺序输出所有子目录及文件信息(树的遍历操作);
提高部分:以树型结构输出所有子目录和文件的信息。
15.产品进销存管理系统
(一)问题描述
针对某一种行业的库房产品进行进销存情况的管理。
(二)基本要求
(1) 采用一定的存储结构对库房的货品及其数量进行分类管理;
(2) 可以实现进库房时,产品类的添加、产品的添加、产品数量的添加;
(3) 能够查询库房每种产品的总量、进货日期、销出数量、销售时间等;
(4) 可以实现产品出库房时,产品数量修改以及达到临界值提醒的功能;
(5) 演示程序以用户和计算机的对话方式进行。
16.客户消费积分管理系统
(一)问题描述
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
(二)基本要求
⑴采用一定的存储结构进行客户信息的存储;
⑵对客户的信息可以进行修改、删除、添加;
⑶能够根据消费情况进行客户积分的累加;
⑷根据积分情况,对客户实行不同程度的打折优惠;
⑸演示程序以用户和计算机的对话方式进行。
提高部分:利用外部.txt文件同步存储客户和积分信息。
17.家谱管理系统的设计与实现
(一)问题描述
设计并实现一个简单的家谱管理系统。
(二)基本要求
(1) 建立家族关系树,并能存储到外部文件中。
(2) 实现家族成员的添加、删除功能。
(3) 可以查询家族成员的双亲、祖先、兄弟、 孩子和后代等信息。
(4) 按某种顺序输出家谱信息(树的遍历操作)、以树型结构输出家谱资料等功能。
(5) 界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。
提高部分:通过读取外部.txt文件,建立家族关系树,添加和删除后的结果同步到外部文件。
18.教师工资管理系统
(一)问题描述
每个教师的信息为:教师号、姓名、性别、单位名称、家庭住址、联系电话、基本工资、津贴、生活补贴、应发工资、电话费、水电费、房租、所得税、卫生费、公积金、合计扣款、实发工资。注:应发工资=基本工资+津贴+生活补贴;合计扣款=电话费+水电费+房租+所得税+卫生费+公积金;实发工资=应发工资 - 合计扣款。
(二)基本要求
A、教师信息处理
(1) 输入教师信息
(2) 插入(修改)教师信息:
(3) 删除教师信息:
(4) 浏览教师信息:
提示:具体功能及操作参考题1。
B、教师数据处理:
(1) 按教师号录入教师基本工资、津贴、生活补贴、电话费、水电费、房租、所得税、卫生费、公积金等基本数据。
(2) 教师实发工资、应发工资、合计扣款计算。
提示:计算规则如题目。
(3) 教师数据管理
提示:输入教师号,读出并显示该教师信息,输入新数据,将改后信息写入文件
(4) 教师数据查询:
提示:输入教师号或其他信息,即读出所有数据信息,并显示出来。
(5) 教师综合信息输出
提示:输出教师信息到屏幕。
19.学生信息管理系统
(一)问题描述
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:
(二)基本要求
(1) 系统以菜单方式工作
(2) 学生信息录入功能(学生信息用文件保存)—输入
(3) 学生信息浏览功能——输出
(4) 查询、排序功能——算法
A、按学号查询
B、按姓名查询
(5) 学生信息的删除与修改(可选项)
(6) 有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新输入;
(三)算法分析
首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式:是定义一个数组来存储,还是定义一个链表呢?在这里假如我们以数组的方式来存储,当然可以,但是我们知道,假如我们定义一个数组的话,我们首先必须知道学生人数大概是多少,以便我们确定数组的大小,但是题目中没有给出,而且题目要求中有大量的删除、插入操作,所以用链表的方式比较方便。
对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。
20.学生成绩管理系统
(一)问题描述
现有学生成绩信息文件 1(1.txt),内容如下
姓名 学号 语文 数学 英语
张明明 01 67 78 82
李成友 02 78 91 88
张辉灿 03 68 82 56
王露 04 56 45 77
陈东明 05 67 38 47
…. … … … …
学生成绩信息文件 2(2.txt),内容如下:
姓名 学号 语文 数学 英语
陈果 31 57 68 82
李华明 32 88 90 68
张明东 33 48 42 56
李明国 34 50 45 87
陈道亮 35 47 58 77
(二)基本要求
(1)实现对两个文件数据进行合并,生成新文件 3.txt
(2)抽取出三科成绩中有补考的学生并保存在一个新文件 4.txt
(3)合并后的文件 3.txt 中的数据按总分降序排序(至少采用两种排序方法实现)
(4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)
(5)要求使用结构体,链或数组等实现上述要求。
(6)采用多种方法且算法正确,可适当加分。
21. 英语单词学习软件
设计并开发一款英语单词学习软件,用户可以选择背诵的词库,并可以编辑自己的词库,还应有词语预览学习功能。系统可以给出中文,让学生输入其英文词意,也可输入英文让学生输入其中文词意,并判定词意是否正确。如不正确则给出提示并要求用户重新输入,如正确则加分。
22. 基于win32控制台应用程序的俄罗斯方块
设计并开发一款基于Win32控制台应用程序的俄罗斯方块小游戏程序。游戏规则为:一个随机形状的方块组合从游戏界面顶端以一定的速率落下;玩家通过向上键可控制随机形状旋转,得到玩家想要的形状;玩家可通过向下键来加速方块的下落速度;每当游戏界面上的方块填满一行,这行将会被消除,游戏分数增加,累计增加到一定分数后下降速度变快;方块堆积到游戏界面顶部,则游戏结束。
23、电视大赛观众投票及排名系统(排序应用)
【问题描述】
在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。现在要求编写一程序模拟实现上述系统的功能。
【实现提示】
在本例中,首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来开辟存放选手信息的顺序表。将选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志。投票结束后进行排序,在此采用希尔排序,然后为每个选手计算名次,得票相同的名次也相同,
(1)存储类型的定义
参赛选手信息存储类型的定义:
typedef struct node{
char name[8]; /选手姓名/
int num; /选手编号/
int score; /选手得分/
int tax; /选手名次/
}Node;
24、程序分析
【问题描述】
读入一个C程序,统计程序中代码、注释和空行的行数以及函数的个数和平均行数,并利用统计信息分析评价该程序的风格。
【基本要求】
(1) 把 C 程序文件按字符顺序读入源程序;
(2) 边读入程序,边识别统计代码行、注释行和空行,同时还要识别函数的开始和结束,以便统计其个数和平均行数。
(3) 程序的风格评价分为代码、注释和空行三个方面。每个方面分为 A,B,C 和 D 四个等级 , 等级的划分标准是 :
A级 B级 C级 D级
代码(函数平均长度) 10~15行 89或1620行 57或2124行 <5或>24行
注释(占总行数比率) 15~25% 1014或2630% 59或3135% <5%或>35%
空行(占总行数比率) 15~25% 1014或2630% 59或3135% <5%或>35%
【测试数据】
先对较小的程序进行分析。当你的程序能正确运行时,对你的程序本身进行分析。
【实现提示】
为了实现的方便,可作以下约定:
(1) 头两个字符是 FFF 的行称为注释行(该行不含语句)。除了空行和注释行外,其余均为代码行(包括类型定义、变量定义和函数头)。
(2) 每个函数代码行数(除去空行和注释行)称为该函数的长度。
(3) 每行最多只有一个"{" 、“}”、“switch” 和"struet"(便于识别函数的结束行)。
【选作内容】
(1) 报告函数的平均长度。
(2) 找出最长函数及其在程序中的位置。
(3) 允许函数的嵌套定义,报告最大的函数嵌套深度。
五. 参考教材
[1] 林菲,马虹,李卫明. 程序设计综合实践.西安电子科技大学出版社,2021.
[2] 柴田望洋. 明解C语言.北京:人民邮电出版社,2015.
[3] 谭浩强.C程序设计(第二版).北京:清华大学出版社,2004.
[4] StephenPrata. C++ Primer Plus(第6版)中文版. 北京:人民邮电出版社,2020.
[5] 吴伟敏.程序设计(上机)指导书.南京:南京邮电大学自编教材,2006
[6] 郑莉. C++语言程序设计.北京:清华大学出版社,2022
[7] 张福炎.大学计算机信息技术教程.南京:南京大学出版社,2003