题目:
用一个结构体数组存放 5 个学生 3 门课的成绩。要求建立 5 个子函数分别实现题目的 5
步。
1. 输入 5 个学生 3 门课的成绩存入结构体数组中;
2. 输出学生信息;
3. 求每个学生的平均分;
4. 按平均分从高到低排列;
5. 按平均分求每个学生的名次。
//第一种写法:系统开辟空间
#include <iostream>
using namespace std;
struct Stu
{
int id; //学号
int s1; //成绩1
int s2; //成绩2;
int s3; //成绩3;
int pingjunfen()//求学生平均分
{
return (s1+s2+s3)/3;
}
void input()//输入学生信息
{
cout<<"请输入该学生的第一门成绩"<<endl;
cin>>s1;
cout<<"请输入该学生的第二门成绩"<<endl;
cin>>s2;
cout<<"请输入该学生的第三门成绩"<<endl;
cin>>s3;
}
void disp()//输出学生信息
{
cout<<"学生的id,成绩1,成绩2,成绩3依次是"<<id<<":"<<s1<<":"<<s2<<":"<<s3<<endl;
}
};
//下面两个是全局的,放在哪里都能用
Stu all[5];//一共5个学生
int pjf[5];//平均分数组,方便排序
void f1()//输入所有学生信息
{
for(int i=0;i<5;i++)
{
all[i].id = i+1;
cout<<"请输入第"<<i<<"个学生的成绩"<<endl;
all[i].input();
}
}
void f2()//打印所有学生信息
{
cout<<"所有学生成绩如下:"<<endl;
for(int i= 0; i<5; i++)
{
all[i].disp();
}
}
void f3()//所有学生的平均分
{
cout<<"所有学生的平均分如下:"<<endl;
for(int i= 0; i<5; i++)
{
pjf[i]=all[i].pingjunfen();
cout<<"学生:"<<i<<"的平均分:"<<pjf[i]<<endl;
}
}
void f4()//给平均分数组排序,这个排序讲过,第一天讲的
{
for(int i=0; i<5; i++)
{
int min = pjf[i];
int pos;
for(int j = i+1; j<5; j++)
{
if(min>pjf[j])
{
min = pjf[j];
pos = j;
}
}
int temp = pjf[i];
pjf[i] = pjf[pos];
pjf[pos] = temp;
}
}
void f5()//打印平均分,从低到高打印
{
cout<<"学生的平均分依次为"<<endl;
cout<<"id"<<"\t"<<"平均分"<<endl;
for(int i=0; i<5; i++)
{
cout<<i<<"\t"<<pjf[i]<<endl;
}
}
int main()//实现所有的功能,就是调用f1 f2 f3 f4 f5
{
f1();
f2();
f3();
f4();
f5();
return 1;
}
//第二种写法:自己开辟数组空间,但是开辟后还是一个常规数组,不是地址数组。
#include <iostream>
using namespace std;
struct Stu
{
int id; //学号
int s1; //成绩1
int s2; //成绩2;
int s3; //成绩3;
int pingjunfen()//求学生平均分
{
return (s1+s2+s3)/3;
}
void input()//输入学生信息
{
cout<<"请输入该学生的第一门成绩"<<endl;
cin>>s1;
cout<<"请输入该学生的第二门成绩"<<endl;
cin>>s2;
cout<<"请输入该学生的第三门成绩"<<endl;
cin>>s3;
}
void disp()//输出学生信息
{
cout<<"学生的id,成绩1,成绩2,成绩3依次是"<<id<<":"<<s1<<":"<<s2<<":"<<s3<<endl;
}
};
//下面两个是全局的,放在哪里都能用
Stu *all = new Stu[5];//一共5个学生
int pjf[5];//平均分数组,方便排序
void f1()//输入所有学生信息
{
for(int i=0;i<5;i++)
{
all[i].id = i+1;
cout<<"请输入第"<<i<<"个学生的成绩"<<endl;
all[i].input();
}
}
void f2()//打印所有学生信息
{
cout<<"所有学生成绩如下:"<<endl;
for(int i= 0; i<5; i++)
{
all[i].disp();
}
}
void f3()//所有学生的平均分
{
cout<<"所有学生的平均分如下:"<<endl;
for(int i= 0; i<5; i++)
{
pjf[i]=all[i].pingjunfen();
cout<<"学生:"<<i<<"的平均分:"<<pjf[i]<<endl;
}
}
void f4()//给平均分数组排序,这个排序讲过,第一天讲的
{
for(int i=0; i<5; i++)
{
int min = pjf[i];
int pos;
for(int j = i+1; j<5; j++)
{
if(min>pjf[j])
{
min = pjf[j];
pos = j;
}
}
int temp = pjf[i];
pjf[i] = pjf[pos];
pjf[pos] = temp;
}
}
void f5()//打印平均分,从低到高打印
{
cout<<"学生的平均分依次为"<<endl;
cout<<"id"<<"\t"<<"平均分"<<endl;
for(int i=0; i<5; i++)
{
cout<<i<<"\t"<<pjf[i]<<endl;
}
}
int main()//实现所有的功能,就是调用f1 f2 f3 f4 f5
{
f1();
f2();
f3();
f4();
f5();
return 1;
}
//第三种写法:自己开辟5个数组空间,把开辟后的空间地址放入数组中,形成地址数组。
#include <iostream>
using namespace std;
struct Stu
{
int id; //学号
int s1; //成绩1
int s2; //成绩2;
int s3; //成绩3;
int pingjunfen()//求学生平均分
{
return (s1+s2+s3)/3;
}
void input()//输入学生信息
{
cout<<"请输入该学生的第一门成绩"<<endl;
cin>>s1;
cout<<"请输入该学生的第二门成绩"<<endl;
cin>>s2;
cout<<"请输入该学生的第三门成绩"<<endl;
cin>>s3;
}
void disp()//输出学生信息
{
cout<<"学生的id,成绩1,成绩2,成绩3依次是"<<id<<":"<<s1<<":"<<s2<<":"<<s3<<endl;
}
};
//下面两个是全局的,放在哪里都能用
Stu *all[5];//一共5个学生
int pjf[5];//平均分数组,方便排序
void init()//相比前两个,多了个初始化。把每个新开辟的地址放入数组中。
{
for(int i = 0; i<5; i++)
{
all[i] = new Stu;
}
}
void f1()//输入所有学生信息
{
for(int i=0;i<5;i++)
{
all[i]->id = i+1;
cout<<"请输入第"<<i<<"个学生的成绩"<<endl;
all[i]->input();
}
}
void f2()//打印所有学生信息
{
cout<<"所有学生成绩如下:"<<endl;
for(int i= 0; i<5; i++)
{
all[i]->disp();
}
}
void f3()//所有学生的平均分
{
cout<<"所有学生的平均分如下:"<<endl;
for(int i= 0; i<5; i++)
{
pjf[i]=all[i]->pingjunfen();
cout<<"学生:"<<i<<"的平均分:"<<pjf[i]<<endl;
}
}
void f4()//给平均分数组排序,这个排序讲过,第一天讲的
{
for(int i=0; i<5; i++)
{
int min = pjf[i];
int pos;
for(int j = i+1; j<5; j++)
{
if(min>pjf[j])
{
min = pjf[j];
pos = j;
}
}
int temp = pjf[i];
pjf[i] = pjf[pos];
pjf[pos] = temp;
}
}
void f5()//打印平均分,从低到高打印
{
cout<<"学生的平均分依次为"<<endl;
cout<<"id"<<"\t"<<"平均分"<<endl;
for(int i=0; i<5; i++)
{
cout<<i<<"\t"<<pjf[i]<<endl;
}
}
int main()//实现所有的功能,就是调用f1 f2 f3 f4 f5
{
init();//初始化
f1();
f2();
f3();
f4();
f5();
return 1;
}
这三种写法都可以。
第一种写法是系统开辟了5个学生的数组空间。
第二种写法是自己开辟了5个空间,把首地址交给了数组。等于数组中其实没有存地址。
第三种写法是自己开辟空间,把5个空间的地址放入到数组中。数组中存了地址。
第一种写法最省事。其实都这样写。
第二种写法是稍微费事,自己开辟,灵活一点。
第三种写法效率最高,只要要求高的地方使用。