视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
C++程序设计报告
2025-09-29 02:59:55 责编:小OO
文档
 

成绩      
课程名称: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程序流程图

                

             

2.4 程序主要模块或者函数

#ifndef ARRAY_H

#define ARRAY_H 

#include

#include

#ifndef NULL

const int NULL = 0;

#endif

enum ErrorType 

//错误类型集合,共有三种类型

{invalidArraySize, memoryAllocationError, indexOutOfRange};

char *errorMsg[] =

{

"Invalid array size", "Memory allocation error

"Invalid index: "

};

template

class Array

{

private:

T* alist; //T类型指针,用于存放动态分配的数组内存首地址

int size; 

void Error(ErrorType error,int badIndex=0) const;

public:

Array(int sz = 50); 

Array(const Array& A);

~Array(void); 

//重载"="使数组对象可以整体赋值

Array& operator= (const Array& rhs);

T& operator[](int i); 

operator T* (void) const;

int ListSize(void) const; 

void Resize(int sz); 

};

//以下为类成员函数的实现

template

void Array::Error(ErrorType error, int badIndex) const

{

cout << errorMsg[error];

if (error == indexOutOfRange)

cout << badIndex; //如果是下标越界错,输出错误的下标

cout << endl;

exit(1);

}

template

Array::Array(int sz)

{

if (sz <= 0) //sz为数组大小(元素个数),若小于0,则输出错误信息

Error(invalidArraySize);

size = sz; 

alist = new T[size]; //动态分配size个T类型的元素空间

if (alist == NULL) //如果分配内存不成功,输出错误信息

Error(memoryAllocationError);

}

template

Array::~Array(void)

delete [] alist;

}

template

Array::Array(const Array& X)

{

//从对象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& Array::operator= (const Array& rhs)

{

int n = rhs.size;

if (size != n)

{

delete [] alist; 

alist = new T[n]; // 重新分配n个元素的内存

if (alist == NULL) 

Error(memoryAllocationError);

size = n; //记录本对象的数组大小

}

// 从rhs向本对象复制元素

T* destptr = alist;

T* srcptr = rhs.alist;

while (n--) 

*destptr++ = *srcptr++;

return *this;

}

// 重载下标操作符,实现与普通数组一样通过下标访问元素,并且具有越界检查功能

template

T& Array::operator[] (int n)

{

// 检查下标是否越界

if (n < 0 || n > size-1)

Error(indexOutOfRange,n);

// 返回下标为n的数组元素

return alist[n];

}

template

Array::operator T* (void) const

{

// 返回当前对象中私有数组的首地址

return alist;

}

//取当前数组的大小

template

int Array::ListSize(void) const

{

return size;

}

// 将数组大小修改为sz

template

void Array::Resize(int sz)

{

if (sz <= 0)

Error(invalidArraySize);

if (sz == size)

return;

T* newlist = new T[sz];

if (newlist == NULL)

Error(memoryAllocationError);

int n = (sz <= size) ? sz : size;

// 将原有数组中前n个元素复制到新数组中

T* srcptr = alist; 

T* destptr = newlist; 

while (n--) 

*destptr++ = *srcptr++;

delete[] alist;

alist = newlist;

size = sz;

}

#endif

void main()

{

int n;

double AverScore,TotalScore = 0;

cout << "请输入学生人数:";

cin >> n;

Array Score(n);

for (int i=0; i{

cout << "请输入第" << i+1 <<"个学生的课程A成绩(0~100):";

cin >> Score[i];

TotalScore += Score[i];

}

AverScore = TotalScore/n;

cout << "平均成绩为"  << AverScore << endl;

}

3软件运行或者测试结果

   若一个班学生人数为10,他们的在课程A中的考试成绩分别为88、78、90、93、69、、95、77、79、90,根据程序提示依次输入,则程序运行结果如图所示:

4 软件设计过程中遇到的问题以及解决办法

   在这次设计程序的过程中遇到了许多问题:比如对类模板、数组的内存分配、指针、析构函数等知识掌握不牢固,使得拿到题目无从下手;不知道重载运算符“=”可以对数组整体赋值;对this指针概念模糊;但最后都通过请教别人和翻课本,上网查找相关资料等途径解决了。

    参考文献:C++语言程序设计(第四版)、C++程序设计(第二版) 谭浩强著、Visual  C++编程之道。

5 总结

这两周的c++课程设计,时间上说长不长,说短也不短,却让我学到了很多:对很多函数有了新的认识,对c++有了更深刻的了解,增强了程序的编写能力,巩固了专业知识。在写程序的过程中我学到了自己曾经不知道或一些不会用的函数,特别是多文件结构,类模板,运算符的重载等;也让我明白了学好c++是多么重要;在自己基础知识掌握不牢固的情况下,要设计一个程序是多么难。总的来说,这次课程设计实习让我受益匪浅。

虽然在调试程序的过程中遇到了许多困难,有时候甚至觉得一点头绪都没有,无从下手,但最终都通过各种渠道,各种方式,一一解决了。从中也让我知道了要学好这门课程,仅学习课本上的知识,掌握理论是不够的,还要有较强的实践能力。只有多实践,多编写程序,多调试才能更好地学地掌握书本上的知识,从而学好这门课。此外,在上机调试的过程中一定要有耐心,耐心地去寻找错误并改正错误;还要记住经常犯的错误,保下次不再犯同样的错误;遇到自己不能解决问题要勤于翻书,查找资料,或者问别人,不要怕麻烦。

    下载本文

显示全文
专题