main.cpp
#include"fun.h"
void main() {
Score a, b(5);
a.Input();
a.Show();
a.paixvA();
a.paixvB();
a.paixvC();
}
fun.h
#pragma once
#include<iostream>
using namespace std;
class Score {
public:
Score();
Score(int a);
~Score() {};
void Input();
void Show();
void paixvA();
void paixvB();
void paixvC();
private:
int l;
float a1[100];
float a2[100];
float a3[100];
string b[100];
};
void fu(char d[],float a[], int c);
源.cpp
#include"fun.h"
void fu(string d[], float a[], int c)
{
int i, j;
float b;
string e;
for (i = 0; i < c-1; i++) {
for (j = 0; j < c - i-1; j++) {
if (a[j] > a[j + 1]) {
b = a[j];
a[j] = a[j + 1];
a[j + 1] = b;
e = d[j];
d[j] = d[j + 1];
d[j + 1] = e;
}
}
}
}
Score::Score(){
l = 2;
}
Score::Score(int a) {
l = a;
}
void Score::Input() {
int i;
for (i = 0; i < l; i++) {
cout << "请输入姓名" << endl;
cin >> b[i];
cout << "请输入科目A成绩" << endl;
cin >> a1[i];
cout << "请输入科目B成绩" << endl;
cin >> a2[i];
cout << "请输入科目C成绩" << endl;
cin >> a3[i];
}
}
void Score::Show(){
int i;
float c;
for (i = 0; i < l; i++) {
c = a1[i] + a2[i] + a3[i];
cout << "姓名:"<<b[i] <<"科目A成绩"<<a1[i]<<"科目B成绩"<<a2[i]<<"科目C成绩"<<a3[i]<<"平均分"<<c/3<< endl;
}
}
void Score::paixvA() {
int i;
fu(b,a1,l);
for (i = 0; i < l; i++)
{
cout << "姓名" << b[i] << "成绩" << a1[i];
}
}
void Score::paixvB() {
int i;
fu(b, a2, l);
for (i = 0; i < l; i++)
{
cout << "姓名" << b[i] << "成绩" << a2[i];
}
}
void Score::paixvC() {
int i;
fu(b, a3, l);
for (i = 0; i < l; i++)
{
cout << "姓名" << b[i] << "成绩" << a3[i];
}
}
?在写代码的过程中发现当以数组为参数调动函数时,实参只能写数组名,否则会报错。在姓名输入时,得声明的是字符串或是字符数组,否则运行时会出现缓冲区溢出的问题。通过这次实验,我也加深了对类与对象函数的认识,学会了如何使用函数的重载。同时,我也尝试了多种不同的算法,这里是冒泡排序,我也尝试了堆排序与快速排序,其中,堆排序效率较高,但不宜懂,也相对不稳定。
|