MOOC清华《面向对象程序设计》第3章编程题第2题:重载下标运算符以统计分段人数

为了统计全年级学生考试成绩的分数段分布情况,即1~10、11~20、21~30、...、91~100等各个分数段的学生人数,拟设计实现一个重载了下标运算符的类,该类对象使用元素为考试成绩的数组和数组元素个数来初始化,当使用0~9的整数下标k来访问该对象时,返回 第k分数段(10*k + 1 <= e <= 10*k + 10)中的元素个数。(本题不计入总成绩) 提交要求:请将各个源文件(*.h, *.cpp)合并打印到一个PDF文件上传,要求各文件首行用注释说明文件名称。建议源代码中加上必要的注释,以便阅读。


//main.cpp
#include <iostream>
#include "Test.h"
using namespace std;

int main() {
	int array[50] = {98,99,56,53,78,  89,87,86,43,24,  
					25,67,77,78,79,  65,53,87,24,95,  
					79,76,77,79,80,  88,87,86,80,87,
					96,96,100,76,76,  90,98,97,99,92,
					87,89,91,93,95,  98,86,43,7,32};
	Test obj(array, 50);
	cout << "obj[9] = " << obj[9] << endl << endl;
	return 0;
}

//Test.h
#ifndef Test_h
#define Test_h

class Test{
private:
	int N;
	int array[1000];
	int temp[10];
	int count;
public:
	Test(int* src, int N);
	~Test();
	
	int& operator[] (const int n);
};

#endif

//Test.cpp
#include <iostream>
#include "Test.h"
using namespace std;

Test::Test(int* src, int n) {
		N = n;
		for(int i = 0; i < N; i++)
			array[i] = src[i];
	}
	
Test::~Test(){
	cout << "析构函数已调用!" << endl;
}

int& Test::operator[] (const int k){
	void QuickSort(int* array, int start, int end); 
	void OutputOfArray(int* array, int n); 
	QuickSort(array, 0, N);
	OutputOfArray(array, N);
	int tmp_1 = 10 * k + 1, tmp_2 = 10 * k + 10;
	count = 0;
	for(int i = 0; i < N; i++){
		if((array[i] <= tmp_2)&&(array[i] >= tmp_1))
			count++;
		if(array[i] < tmp_1) break;
	}
	return count;
}

void QuickSort(int* array, int start, int end)    
{    
    if(start >= end - 1)     
        return;      
        
    int left = start, right = end;      
    
    int pivot = array[left];    
    int temp = 0.0;    
        
    for(int i = left + 1; i < right;   )      
    {    
        if(array[i] > array[left])    
        {    
            temp = array[left];    
            array[left] = array[i];    
            array[i] = temp;    
            left++;    
            i++;    
        }    
        else    
        {    
            temp = array[i];    
            for(int j = i; j < right; j++)    
                array[j] = array[j + 1];        
            array[right - 1] = temp;      
            right--;     
        }    
    }    
    array[left] = pivot;    
    
    QuickSort(array, start, left);    
    QuickSort(array, left + 1, end);    
}  

void OutputOfArray(int* array, int n)      
{      
    for(int i = 0; i < n; i++)      
        cout << array[i] << '\t';  
    cout << endl;      
}    

测试结果:



版权声明:本文为sunshineman1986原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunshineman1986/article/details/77417530

智能推荐

使用Xdebug进行远程调试

为什么要用? 方便联调: 和客户端一起联调,是die(); exit(); 会影响其他人员是使用。 关注数据变化: 正常情况下,我们在调试和开发时,更关注数据的变化。频繁断点、效率比较低。 简单: 之前的开发自己比较懒,一直没用,用起来发现很简单。 原理 运行xdebug需要客户端IDE(phpstorm)、远程服务器配合,首先是客户端配置好端口,发送debug请求,请求会通过浏览器或者IDE的h...

【教程向】通过windows在树莓派3B上安装Ubuntu MATE 16.04.2 (Xenial)

本文参考了http://www.ituring.com.cn/article/273613 ================================================================= 1:因为树莓派3B的性能问题,所以使用这个特别为树莓派设计的版本。 2:准备: 树莓派3B * 1 16GB TF/Micro SD卡 *1(尽量用速度快一些的卡,因为以后这相...

LeetCode(7 整数反转)

如题 这就不用分析了,直接依次取每位即可,难点就是个越界判断...

Caused by: java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception

启动RMI报如下错误: 最后发现是端口冲突造成的,当时用的5003端口启动服务端的RMI刚好和本地的一个服务端口冲突。 输入netstat -aon|findstr "5003"查询它的pid为3056 继续输入tasklist|findstr "3056",查看是哪个进程或者程序占用了5003端口,结果是:magentproc.exe 找到PID后可以直接...

猜你喜欢

【LeetCode(Java) - 322】零钱兑换

文章目录 1、题目描述 2、解题思路 3、解题代码 1、题目描述 2、解题思路   定义 dp[i] 表示对于组成金额 i 的最少硬币个数。   如果方案存在,那么至少有一个硬币至少出现了一次:   如果是第 0 个硬币出现了一次,则:dp[i] = dp[i-coins[0]] + 1   如果是第 1 个硬币出现了...

在Visual Studio 2013中配置Entity Framework使用MySQL

环境 使用的软件及版本 - Microsoft Visual Studio Ultimate 2013 (版本 12.0.40629.00 Update 5) - Microsoft.Net Framework 版本 4.6.01055 - MySQL版本: 5.6.17 步骤 1. 创建空的MVC项目 2. 安装扩展 3. 在数据库中建立对应的表 必须在数据库内先新建表,否则asp.net mv...

Python才是世界上最好的言语,php,java靠边站

伟大的入门编程语言有什么特征呢?或者换一种方式问,“当我们教他们编程时,应该给予他们什么?”对于成年人和青少年学生,我认为以下五点非常重要。 学生从入门语言获得的五样东西 非常棒的首次体验,就像一本书的第一页,首先需要“入迷”,学习新知识不可避免的会遇到挫折,但要有持续的热情和好奇心,这对于那些从未接触过编码的年轻人来说是至关重要的; Web编程的能...

动态调整docker容器cpu资源

目的:动态调整系统cpu核数后,如何在不停止容器服务的情况下,docker动态使用最新的CPU资源 事件由来:     1、在ucloud上购买了一台可以热升级的机器,热升级指的是动态更改系统cpu和内存资源     2、随着业务的扩展,发现cpu、内存负载过高,需要在不停止业务的情况下动态扩容,因此使用了ucloud提供的热升级服务,从4核12G扩容为8核...

用python itchat包 爬取微信好友头像形成矩形头像集

原创作品,转载请注明作者 abysscarry-袁杰丶 初学python,我们必须干点有意思的事!从微信下手吧! 头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~ 话不多说,直接上代码,注释我写了比较多,大家应该能看懂 运行结果: ok!!!...