成绩
课程名称: C++ 课程设计
设计题目: 编写程序提示用户输入一个班级中的学生人数n,
再依次提示用户输入n个人在课程A中的考试成绩,然后计算出平均值,显示出来。 要求用到第九章中的数组类模板 Array定义浮点型数组存储考试成绩。
姓 名: 石东梅 学 号: 1108020102 专业班级: 网络1101 班 完成日期: 20012 年 6 月 27日
1 设计任务
编写程序提示用户输入一个班级中的学生人数n,再依次提示用户输入n个人在课程A中
点型数组存储考试成绩。
的考试成绩,然后计算出平均值,显示出来。要求用到第九章中的数组类模板Array定义浮
1.1 设计目的
(1)、加强C++课程学习,将课本上的理论知识运用于实践,通过实际的程序操作来提高
自己编写程序的能力,达到理论与实践相结合的目的。 (2)、培养自己动脑思考,动手操作的能力,在实际操作过程中体会C++中面向对象的思想。
(3)、在实际的操作过程中去衡量自己理论知识掌握的程度,通过设计流程,编写程序,上机调试去寻找并发现知识的缺陷,并想办法弥补。
(4)、在本程序中主要是要达到能对类的定义及用法,数组的定义及用法,数组类模版,运算符重载,多文件结构,成员函数的实现等的熟练运用。
1.2设计内容
用数组类模板、析构函数、构造函数 、赋值构造函数、运算符重载、指针等语法来完成一个班级在某门课程中考试的平均值的程序。
1.3设计指标或者要求
设计指标:用C++完成一个班级在某门课程中的成绩储存并计算平均值的程序,要求用 到数组类模板。
输入要求:在程序运行的页面根据提示输入班级学生人数n,再依次输入每个人在课程A中的成绩。
输出要求:输出n个人在课程A中的平均成绩。
2 设计过程
(1)、分析程序的功能:使用户能根据程序提示输入班级学生人数n和n个人在某门课中考试成绩,并能储存成绩然后计算平均值,显示出来。
(2)、思考程序要用到的算法原理:使用数组类模板定义浮点型数组存储考试成绩;利用班级总人数与其在课程A中的总分之比的原理求平均值。 (3)、设计程序流程图(见2.3)。 (4)、编写程序(见2.4)。
2.1 程序功能
使用户能根据程序提示输入班级学生人数n和n个人在某门课中考试成绩,并能储存成
绩然后计算平均值,显示出来。
2.2算法原理
(1)、使用数组类模板定义浮点型数组存储考试成绩;
(2)、利用班级总人数与其在课程A中的总分之比的原理求平均值。
2.3程序流程图
开始
输入班级人数n和每个人的
考试成绩Score[i]
是
i 否 AverScore=TotalScore/n 输出AverScore 结束 i++;TotalScore=TotalScore+Score[i] 2.4 程序主要模块或者函数 #ifndef ARRAY_H #define ARRAY_H #include enum ErrorType //错误类型集合,共有三种类型 {invalidArraySize, memoryAllocationError, indexOutOfRange}; char *errorMsg[] = { \\}; template private: T* alist; //T类型指针,用于存放动态分配的数组内存首地址 int size; void Error(ErrorType error,int badIndex=0) const; public: Array(int sz = 50); Array(const Array //重载\使数组对象可以整体赋值 Array }; //以下为类成员函数的实现 template void Array cout << errorMsg[error]; if (error == indexOutOfRange) cout << badIndex; //如果是下标越界错,输出错误的下标 cout << endl; exit(1); } template Array if (sz <= 0) //sz为数组大小(元素个数),若小于0,则输出错误信息 Error(invalidArraySize); size = sz; alist = new T[size]; //动态分配size个T类型的元素空间 if (alist == NULL) //如果分配内存不成功,输出错误信息 Error(memoryAllocationError); } template delete [] alist; } template Array //从对象X取得数组大小,并赋值给当前对象的成员 int n = X.size; size = n; alist = new T[n]; if (alist == NULL) //如果分配内存不成功,输出错误信息 Error(memoryAllocationError) T* srcptr = X.alist; T* destptr = alist; while (n--) *destptr++ = *srcptr++; } // 重载\运算符,将对象rhs赋值给本对象。实现对象之间的整体赋值 template Array int n = rhs.size; if (size != n) { delete [] alist; alist = new T[n]; // 重新分配n个元素的内存 if (alist == NULL) Error(memoryAllocationError); size = n; //记录本对象的数组大小 } // 从rhs向本对象复制元素