《C++程序设计》课程设计指导书
一、课程设计的目的
课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机地结合起来,锻炼学生的分析解决实际问题的能力。提高学生运用所学知识解决实际问题的能力。利用所学的面向对象及C++编程知识和技巧,通过布置具有一定难度的程序设计题目,并且要求学生独立完成所布置题目,在分析设计过程中,要求学生养成良好的编程习惯,学会分析简单的实际问题,并能利用所学的知识建立系统的逻辑结构,学会简单的调试技巧和方法。根据系统的功能要求,要求学生在教师的指导下逐步完成程序的设计。
二、课程设计题目、结构及要求
第一部分 小程序练习(必须全部完成) 数组:
1. 一数组中已存放了10个有序的整数,现由键盘输入一个整数,将此数插入到该数组中,使数组仍然是有序的。 算法提示:
假设数组是由小到大的顺序来排列的:
1) 先要确定插入的新数x在数组中的位置,即确定m在数组中的下标
2) 用x去跟数组中的元素逐个比较,数组中的某个元素满足a[k]>m,则k为m的下标
3) 将数组从a[k]开始的所有元素向后面移动一个位置 4) 从最后一个元素开始移动,即执行循环:
for(m=9;m>k;m--) a[m+1]=a[m]
5) 将m插入数组中a[k]=m
2. 输入20个整数存入数组中,输出其中的偶数及偶数之和。
函数
3.用函数实现求result =1+(1+2)+(1+2+3)+……+(1+2+3+……+n)的值,n的值由键盘输入。 算法提示:
1) 根据题目要求,需要调用函数lj来求1+2+3+……+n的和
2) 把对函数lj的调用放在循环结构中,循环变量i做为实参 3) 形参变量x得到i的值,再被调函数中求出每次的累加和 4) 循环变量i的取值为(i=1;i<=n;i++) 5) 将调用函数求得的值累加到l中,即result=result+lj(i)
4. 输出50—100间的所有素数,其中判断一个数是否为素数用函数完成。 算法提示:
第 1 页 共 7 页
1) 输出50至100间的素数,所以函数的调用应放在循环中 2) 被调函数ss中,要判断m是否为素数 3) 若是素数,则返回值t1=1,否则t1=0 4) 主函数中若返回值为1,证明是素数,则输出
数组与函数
5.有一个一维数组score,内放10个学生成绩,求平均成绩。
6.写一函数,要求数组作函数的参数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。 算法提示:
1) 输入任意的字符串,需要将数组的长度定义的足够大,即char a[80] 2) 在被调函数中首先求出字符串的长度,可用函数strlen()
3)将数组前一半的元素与对应的后一半元素互换,所以循环的条件是(i=0;i 4)将元素b[i]与 b[n-i]互换 指针 7.由键盘输入10个数,找出它们的最大值、最小值并求出平均值。(要求用指针实现) 8. 从键盘输入两个字符串,将它们合并成一个新的字符串。 算法提示: 1)合并字符串就是将一个字符串接到另一个字符串的末尾 2)定义指针变量p,指向数组a,即p=a 3)让指针p移动至数组a的末尾,可利用一个循环结构来实现,循环体语句为空,即for(p=a;*p!='\\0'; p++) ; 4)定义指针变量q,指向数组b的首部,即q=b 5)将q指向的元素放到p指向的数组,即*p=*q 6)连接好字符串后,在末尾加上’\\0’,即*p='\\0' 数组、函数与指针 8.编写函数f(char *s1,char *s2),将字符串s2连接到字符串s1的后面。 算法提示: 将s2中的字符依次存到从s1的’\\0’开始的位置。要求s1必须要有足够的空间放下s2中的所有字符。 类与对象 9.构建一个类score,其中用私有数据成员number表示学号,computer、english、average分别表示计算机成绩、英语成绩和平均分数。公有成员函数inscore()用于输入学号和各科成绩,以及计算平均分数;成员函数showscore() 用来输出成绩。 要求:在主程序定义stu1为score类的对象,stu2为指向score类对象的指针,由它们 分别调用成员函数inscore()和showscore()来实现输入、计算和输出功能。 第 2 页 共 7 页 10.设计一个学生成绩管理系统,能输入学生的学号、姓名和成绩等数据,能按成绩从高到低进行排序,并能将排序的结果输出。 提示: (1) 设计一个学生类student,包含三个私有数据成员,即学号sno、姓名sname和成员 score (2) 在学生类student中再设计三个公有成员函数 setdata、display和getscore,分 别用于完成输入学生信息、输出学生信息、返回某个学生成绩的功能 (3) 定义一个manage类,它有一个student类型的私有数据成员s[num],其中num表示 学生人数 (4) 在manage类中分别定义三个公有成员函数input、output、sort,分别用于完成输 入、输出和排序功能。 继承与派生 11.设计一个图书借阅管理系统。每本书有书号、书名和作者姓名属性,读者有借书证号、读者姓名和每位读者最多能够借阅的图书数量属性。(要求使用类的继承和派生知识点实现) 提示: 由于图书和读者都具有编号和名称两个属性,所以可以定义一个能够对编号和名称进行管理的类object,然后在object类的基础上派生出图书类book和读者类reader。 虚函数与多态 12.定义一个抽象类Shape,在其中说明一个纯虚函数area()作为一个接口,用来计算圆形、三角形、正方形和长方形的面积。要求由抽象类派生出圆形、三角形、正方形和长方形4个派生类。在各派生类中分别实现求各个图形的面积。 模板 13.用函数模板的方式设计可以对某种数据类型的数组中的数据用选择法进行从大到小排序,然后用整型数据和字符型数据进行验证。 文件 14.编写一个程序,统计data.txt文件的行数,并将所有行前加上行号后写到data1.txt文件中。 算法提示: 行与行之间以回车符分隔,而getline()函数以回车符作为终止符。因此,可以采用getline()函数读取每一行,再用一个变量i计算行数。 第二部分 小型软件的开发(选做一题,且由个人独立开发完成) 面向对象程序设计不仅能进行功能抽象,而且能进行数据抽象。“对象”实 第 3 页 共 7 页 际上是功能抽象和数据抽象的统一。C++语言的“对象”是“类”的实例,课程设计的基础是设计类,所以类的有关概念是重点,尤其要抓住抽象、封装、继承和多态性等要素。要求学生的课程设计中要涉及类、继承的使用。 类设计的重点是如何选择数据成员和成员函数。成员函数设计的难点是选择函数类型及其参数传递方式。数据类型及程序控制方式仍然是C++语言的基础;数组、指针、类和结构的使用方法是编程的核心技术。学生学习时,常常避开多文件编程和使用文件,但这些要求是程序员必备的知识,因此课程设计中应加强这方面的训练。 本课程设计供选择了几个类型的设计题目,不是用一个独立的例子涵盖这些知识点,而是按层次逐步深入。为了使学生理解它们之间如何相互配合,设计要求使用接近实际需要的方式编程。简要说明如下: 1.使用类和对象设计程序 设计类就是根据数据封装的要求,抽象出合适的类。换言之,就是如何选择数据成员和成员函数。这部分的任务就是根据测试程序及其输出结果,设计一个满足要求的类。这各类涉及到类的构造函数和析构函数,并要求使用多种方法实现本课程设计。 2.使用菜单 菜单是应用程序的界面。控制语句用来改变程序的执行顺序,是实现结构化程序设计的基础。这部分的任务是设计一个含有多个菜单项并且比较使用的菜单,通过菜单选择不同的功能。文件操作是非常有用而重要的技术,需要多多练习。编制实用程序都离不开文件存取,这方面应该给与足够的重视。要求使用类实现这些菜单项,并熟悉多文件菜单编程和面向对象程序设计的思想。 3.通过组合和派生构成新的类 这部分的设计任务是使用组合和派生构成新的类。可以通过包含及派生两种方法实现。目的是使学生掌握在不同的实现方法中,如何设计相应的构造函数和拷贝构造函数,进一步理解程序如何调用它们及析构函数的执行顺序。 公有继承的赋值兼容性规则是一个重要规则。通过这部分的设计,可以进一步理解这个概念,为理解虚函数的多态性打下基础。 4.函数的设计 第 4 页 共 7 页
相关推荐: