• 第5次oop作业总结


    7-1 友元很简单2016final (15分)
    C++考试正在进行。请设计一个学生类student,学号、本次考试成绩是其私有数据成员,同时有一个求本次考试成绩最高分的学生的友元函数 student* average(student *p,int count)

    以上类名和友元函数的形式,均须按照题目要求,不得修改。

    输入格式:
    输入是 学号([00001,99999])和成绩,以0结束。(不超过100个学生)
    输出格式:
    输出是最高分学生的 学号 。 提示:如果是并列最高分,需要将并列最高分学生的学号都输出,以一个空格间隔。

    输入样例:
    在这里给出一组输入。例如:
    10001 90
    10002 93
    0

    输出样例:
    在这里给出相应的输出。例如:
    10002

    作业中出现的问题:
    1、在主函数中调用了average函数,一开始写成了student* average(student tt, int i);这导致了执行到这一函数时直接跳过,一直以为是因为每遍循环结束时自动调用的析构函数导致的,其实不是,是由于调用写错的缘故,正确写法应是average(tt, i);
    AC代码

    #include<iostream>
    using namespace std;
    class student {
    private:
    	int num;
    	double score;
    public:
    	student() {}
    	student(int a,double b):num(a),score(b){}
    	friend student* average(student* p, int count);
    	
    	~student() {}
    };
    student* average(student* p, int count) {
    	int m = 0;
    	int n = 0,g=0;
    	for (m = 0; m < count; m++) {
    		if (p[m].score > p[n].score) {
    			n = m;
    		}
    	}
    	for (m = 0; m < count; m++) {
    		if (p[m].score == p[n].score) {
                g++;
    			if (g==1){
                    printf("%05d", p[m].num);
                }
                else{
                    printf(" %05d", p[m].num);
                }
    		}
    	}
    	return p;
    }
    int main() {
    	student* tt = new student[100];//创建指向对象数组的指针
    	int  i,j;
    	double k;
    	for (i = 0;; i++) {	
    		cin >> j;
    		if (j == 0) {
    			break;
    		}
    		cin >> k;
    		tt[i] = student(j, k);//进一步初始化对象
    	}//每次循环到这时都会调用析构函数
    	/*for (int t = 0; t < i; t++) {
    		tt[t].print();
    	}*/
    	//cout << "hello world " << endl;
    	average( tt, i);
    	delete[]tt;
    	return 0;
    }
    

    7-2 2018Final友元函数(体检表) (10分)

    体育已经成为一门重要的中考科目,但身体存在某些疾病的同学可以免考。
    为此,凤湖中学每年需要整理一下毕业班同学(学生数不超过300人)的体检表中的体检结论,筛选出需要免考的同学,建议其申请免考。

    要求建立一个类Exam,每个Exam类对象存储一位同学的体检信息,包括私有数据成员:

    string num;//学号
    int disease[10];//疾病信息
    int count;//疾病数
    

    该类还包括一些必要的公有成员函数。
    此外,该类还有一个友元函数void print(Exam*e, int count, int *d) 用于输出需要申请免考的学生信息,这里e是一个指向Exam类对象数组元素的指针,count是学生数量,d是一个指向值得关注病病数组元素的指针。

    输入格式:
    首先输入学生的体检信息,每位学生一行,以0结束输入。首先输入学生的学号(000-999,每位同学的学号各不相同);接着输入疾病数T(T<=10);然后是T个疾病信息,每种疾病用一个正整数编号(100-999)表示,每种疾病对应的编号不同。 在输入学生体检信息后,输入一行值得关注的疾病编号(相邻的编号以单个空格隔开),最后一个编号为0,标识结束输入病病编号。
    输出格式:
    输出由于患有值得关注疾病,需要申请免考的同学的学号,以及所患疾病编号(在存在多个值得关注的疾病时,仅输出编号最小的那个),每位同学一行,按照输入顺序输出。

    输入样例:

    103 0
    109 1 101
    002 3 105 101 107
    825 4 108 775 109 104
    0
    105 101 0
    

    输出样例:

    109 101
    002 101
    

    完成过程中遇到以及搜索过的问题以及相关资料
    问题一:数据成员为数组怎么初始化
    方法:可以在初始化列表中初始化(包括传入数组名或指针的情况);
    参考资料 传送门
    问题二:sort函数的使用
    sort(数组首地址,需要排序的最后一个地址,排序函数cmp);
    sort(start,end,cmp);

  • 相关阅读:
    Map集合
    Collection的另外一个子类LinkedList&Set集合
    多项式牛顿迭代 学习笔记
    《混凝土数学》第二章 和式 学习笔记
    洛谷P5039 最小生成树 题解
    gdfzoj#236 | 提高组练习题16 Set
    CF979E 题解
    CF1039D 题解
    CF886E 题解
    CF1061C 题解
  • 原文地址:https://www.cnblogs.com/xiao-qingjiang/p/12923276.html
Copyright © 2020-2023  润新知