C程序设计报告_第1页
C程序设计报告_第2页
C程序设计报告_第3页
C程序设计报告_第4页
C程序设计报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编写程序提示用户输入一个班级中的学生人数

n,再依次提示用户输入

n

个人在课程

A

中的考试成绩,然后计算出平均值,显示出来。

要求用到第九章中的数组类模板

Array

定义浮点型数组存储考试成绩。姓 名: 马雪峰学 号:专业班级: 计科一班完成日期: 2016

6

26

设计任务编写程序提示用户输入一个班级中的学生人数n,再依次提示用户输入

n

个人在课程

A

中的考试成绩,然后计算出平均值,显示出来。要求用到第九章中的数组类模板

Array

定义浮点型数组存储考试成绩。

目的。会

C++中面向对象的思想。设计流程,编写程序,上机调试去寻找并发现知识的缺陷,并想办法弥补。及用法,数组类模版,运算符重载,多文件结构,成员函数的实现等的熟练运用。

用数组类模板、析构函数、构造函数

、赋值构造函数、运算符重载、指针等语法来完成一个班级在某门课程中考试的平均值的程序。

设计指标:用C++完成一个班级在某门课程中的成绩储存并计算 到数组类模板。输入要求:在程序运行的页面根据提示输入班级学生人数

n,再依次输入每个人在课程A

中的成绩。输出要求:输出

n

个人在课程

A

中的平均成绩。2

设计过程(1)、分析程序的功能:使用户能根据程序提示输入班级学生人数n

n

个人在某门课中考试成绩,并能储存成绩然后计算平均值,显示出来。(2)、思考程序要用到的算法原理:使用数组类模板定义浮点型数A

中的总分之比的原理求平均值。(3)、设计程序流程图(见(4)、编写程序(见

使用户能根据程序提示输入班级学生人数n和n个人在某门课中考试成绩,并能储存成绩然后计算平均值,显示出来。

A

中的总分之比的原理求平均值。

开始输

结束输

结束出

输入班级人数

n

和每是i<n否AverScore=TotalScore/n

i++;TotalScore=TotalSc#ifndef

ARRAY_H#define

ARRAY_H#include

<iostream.h>#include

<stdlib.h>#ifndef

NULLconst

int

NULL

=

0;#endifenum

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

memoryAllocationError,

indexOutOfRange};char

*errorMsg[]

={"Invalid

array

size",

"Memory

allocation

error","Invalid

index:

"};template

<class

T>class

Array{private:T*

alist;

//T

类型指针,用于存放动态分配的数组内存首地址int

size;void

Error(ErrorType

error,int

badIndex=0)

const;public:Array(int

sz

=

50);Array(const

Array<T>&

A);~Array(void);//重载"="使数组对象可以整体赋值Array<T>&

operator=

(const

Array<T>&

rhs);T&

operator[](int

i);operator

T*

(void)

const;int

ListSize(void)

const;void

Resize(int

sz);};//以下为类成员函数的实现template

<class

T>void

Array<T>::Error(ErrorType

error,

int

badIndex)

const{cout

<<

errorMsg[error];if

(error

==

indexOutOfRange)cout

<<

badIndex;

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

<<

endl;exit(1);}template

<class

T>Array<T>::Array(int

sz){if

(sz

<=

0)

0,则输出错误信息Error(invalidArraySize);size

=

sz;alist

=

new

T[size];

size

T

类型的元素空间if

(alist

==

NULL)

//如果分配内存不成功,输出错误信息Error(memoryAllocationError);}template

<class

T>Array<T>::~Array(void){delete

[]

alist;}template

<class

T>Array<T>::Array(const

Array<T>&

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

<class

T>Array<T>&

Array<T>::operator=

(const

Array<T>&

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

<class

T>T&

Array<T>::operator[]

(int

n){//

检查下标是否越界if

(n

<

0

||

n

>

size-1)Error(indexOutOfRange,n);//

返回下标为

n

的数组元素return

alist[n];}template

<class

T>Array<T>::operator

T*

(void)

const{//

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

alist;}//取当前数组的大小template

<class

T>int

Array<T>::ListSize(void)

const{return

size;}//

将数组大小修改为sztemplate

<class

T>void

Array<T>::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;}#endifvoid

main(){int

n;double

AverScore,TotalScore

=

0;cout

<<

cin

>>

n;Array<float>

Score(n);for

(int

i=0;

i<n;

i++){cout

<<

<<

i+1

<<"个学生的课程A

成绩(0~100):";cin

>>

Score[i];TotalScore

+=

Score[i];}AverScore

=

TotalScore/n;cout

<<

<<

AverScore

<<

endl;}3

软件运行或者测试结果若一个班学生人数为A中的考试成绩分别为程序运行结果如图所示:

软件设计过程中遇到的问题以及解决办法在这次设计程序的过程中遇到了许多问题:比如对类模板、数组的内存分配、指针、析构函数等知识掌握不牢固,使得拿到题目无从

指针概解决了。谭浩强着、Visual C++编程之道。

总结这两周的

c++课程设计,时间上说长不长,说短也不短,却让我学到了很多:对很多函数有了新的认识,对c++有了更深刻的了解,增自己曾经不知道或一些不会用的函数,特别是多文件结构,类模板,运算符的重载等;也让我明白了学好c++是多么重要;在自己基础知识掌握不牢固的情况下,要设计一个程序是多么难。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论