首页 > 其他分享 >每日打卡-20.1

每日打卡-20.1

时间:2023-05-10 21:22:57浏览次数:68  
标签:20.1 const int 每日 list 数组 Array 打卡 size

一.问题描述

编写程序提示用户输入一个班级中的学生人数 n,再依次提示用户输入 n 个人在课程 A 中的考试成绩,然后计算出平均成绩,显示出来。请使用本书第 9 章中的数组类模板 Array定义浮点型数组存储考试成绩。

二.设计思路

按照题目要求编写代码

三.流程图

四.伪代码 

1

五.代码实现 

//Array.h
#ifndef ARRAY_H
#define ARRAY_H
 
#include <cassert>//提供一个assert的宏定义
 
template <class T>//数组类模板定义
class Array {
private:
	T* list;	//T类型指针,用于存放动态分配的数组内存首地址
	int size;	//数组大小(元素个数)
public:
	Array(int sz = 50);			//构造函数
	Array(const Array<T> &a);	//拷贝构造函数
	~Array();	//析构函数
	Array<T> & operator = (const Array<T> &rhs); //重载"="使数组对象可以整体赋值
	T & operator [] (int i);	//重载"[]",使Array对象可以起到C++普通数组的作用
	const T & operator [] (int i) const;	//"[]"运算符的const版本
	operator T * ();	//重载到T*类型的转换,使Array对象可以起到C++普通数组的作用
	operator const T * () const;	//到T*类型转换操作符的const版本
	int getSize() const;	//取数组的大小
	void resize(int sz);	//修改数组的大小
};
 
//构造函数
template <class T>
Array<T>::Array(int sz) {
	assert(sz >= 0);	//sz为数组大小(元素个数),应当非负
	size = sz;	// 将元素个数赋值给变量size
	list = new T [size];	//动态分配size个T类型的元素空间
}
 
//析构函数
template <class T>
Array<T>::~Array() {
	delete [] list;
}
 
//拷贝构造函数
template <class T>
Array<T>::Array(const Array<T> &a) {
	//从对象x取得数组大小,并赋值给当前对象的成员
	size = a.size;
	//为对象申请内存并进行出错检查
	list = new T[size];	// 动态分配n个T类型的元素空间
	//从对象X复制数组元素到本对象
	for (int i = 0; i < size; i++)
		list[i] = a.list[i];
}
 
//重载"="运算符,将对象rhs赋值给本对象。实现对象之间的整体赋值
template <class T>
Array<T> &Array<T>::operator = (const Array<T>& rhs) {
	if (&rhs != this) {
		//如果本对象中数组大小与rhs不同,则删除数组原有内存,然后重新分配
		if (size != rhs.size) {
			delete [] list;		//删除数组原有内存
			size = rhs.size;	//设置本对象的数组大小
			list = new T[size];	//重新分配n个元素的内存
		}
		//从对象X复制数组元素到本对象
		for (int i = 0; i < size; i++)
			list[i] = rhs.list[i];
	}
	return *this;	//返回当前对象的引用
}
 
//重载下标运算符,实现与普通数组一样通过下标访问元素,并且具有越界检查功能
template <class T>
T &Array<T>::operator[] (int n) {
	assert(n >= 0 && n < size);	//检查下标是否越界
	return list[n];			//返回下标为n的数组元素
}
 
template <class T>
const T &Array<T>::operator[] (int n) const {
	assert(n >= 0 && n < size);	//检查下标是否越界
	return list[n];			//返回下标为n的数组元素
}
 
//重载指针转换运算符,将Array类的对象名转换为T类型的指针,
//指向当前对象中的私有数组。
//因而可以象使用普通数组首地址一样使用Array类的对象名
template <class T>
Array<T>::operator T * () {
	return list;	//返回当前对象中私有数组的首地址
}
 
template <class T>
Array<T>::operator const T * () const {
	return list;	//返回当前对象中私有数组的首地址
}
 
//取当前数组的大小
template <class T>
int Array<T>::getSize() const {
	return size;
}
 
// 将数组大小修改为sz
template <class T>
void Array<T>::resize(int sz) {
	assert(sz >= 0);	//检查sz是否非负
	if (sz == size)	//如果指定的大小与原有大小一样,什么也不做
		return;
	T* newList = new T [sz];	//申请新的数组内存
	int n = (sz < size) ? sz : size;	//将sz与size中较小的一个赋值给n
	//将原有数组中前n个元素复制到新数组中
	for (int i = 0; i < n; i++)
		newList[i] = list[i];
	delete[] list;		//删除原数组
	list = newList;	// 使list指向新数组
	size = sz;	//更新size
}
#endif  //ARRAY_H
//main文件
 
#include<iostream>
#include<iomanip>
#include"Array.h"
using namespace std;
 
int main()
{
    int n;
    double averscore, totalscore = 0;
    cout << "请输入学生人数:";
    cin >> n;
    Array<float> Score(n);
    for (int i = 0; i < n; i++)
    {
    	cout<<"请输入这"<<n<<"个学生在课程A中的考试成绩:";
        cin >> Score[i];
        totalscore += Score[i];
    }
    averscore = totalscore / n;
    cout << "平均成绩为:" << averscore;
    return 0;
}

 

标签:20.1,const,int,每日,list,数组,Array,打卡,size
From: https://www.cnblogs.com/leapssisbird/p/17389374.html

相关文章

  • 每日打卡-20.2
    一.问题描述初始化int类型数组datal[]={1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20},应用本章的直接插入排序函数模板进行排序。对此函数模板稍做修改,加入输出语句,在每插入一个待排序元素后显示整个数组,观察排序过程中数据的变化,加深对插入排序算法的理解。二.设计思路三.流程图四.......
  • 5-10打卡 练习
    typedefstructlist{ intdata; list*next;}list;list*initlist(){ list*a=newlist; a->data=0; a->next=NULL; returna;}voidpushback(list**h,intn){list*a=newlist;a->data=n;a->next=NULL;list*......
  • 每日总结-23.5.10
    <%@pageimport="java.util.Calendar"%><%@pageimport="wangzhan.Thesql"%><%@pageimport="wangzhan.Pd_P_assignment"%><%@pageimport="wangzhan.Pd_S_assignment"%><%@pagelanguage=&......
  • 每日打卡
    回文数问题描述:回文数指形如abcba类的数,求小于n<256的回文数问题分析:看千位权重与十位相同需要用循环写出个位t与十位i代码:#include<stdio.h> intmain() {            intm[16],n,i,t,count=0;            longunsigneda,k;      ......
  • 每日总结 5.10
    今日操作了python的大作业。随后进行了供货商web端的页面显示。实现每条请求所需要付款数 实现对于售卖机的页面改进广告弹窗的自动关闭和主动关闭 ......
  • 5月10日打卡
    例4-11题目描述:设计一个结构体存储学生的成绩信息,需要包括学号年级和成绩三项内容,学号的范围是0到99999999,年级分为freshman、sophomore、junior、、senior四种,成绩包括A、S、C、D四个等级。分析:1.学号包括27个二进制位有效信息,而年级、成绩各包括2个二进制位有效信息,采用......
  • 5.10打卡
    一、问题描述:求任意两个正整数的最小公倍数(LCM)。二、设计思路:对于输入的两个正整数m和n,每次输入的大小顺序可能不同,为了使程序具有一般性,首先对整数m和n进行大小排序,规定变量m中存警大数、变量n中存储小数。若输入时m的值小于变量n的值,则需要交换两个变量中存储的内容。再次强调:......
  • 打卡第十九天
    计算正五边形的面积和周长 一、正五边形的面积公式为:S=a2×25+10×5​​/4二、三、#include<iostream>#include<cmath>usingnamespacestd;intmain(){doublea,b,c;cin>>a;c=5*a;b=a*a*(sqrt(25+10*sqrt(5)))/4;cout<<b<<endl<<c<<end......
  • 第19天打卡
    问题: 算法设计:可以全部看成同一种单位角,所以1元的为10角可以取整10数(0,50),同时5角可以取被五整除的数范围相同,一角可以取0,50所有的数,让他们加到一起等于50即可;源代码:#include<stdio.h>intmain(){ intx,y,z,count=1; for(x=0;x<=50;x+=10) for(y=0;y<=50-x;y+=5) for(z=0;z<=......
  • 打卡11
    importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Stringa=sc.next(),b=sc.next();if(a.length()<b.length()){Stringt=a;a=b;......