结构数组的三种写法

2022-08-28 已有0人阅读 作者: IT航班
标签:

题目:

 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个空间的地址放入到数组中。数组中存了地址。


第一种写法最省事。其实都这样写。

第二种写法是稍微费事,自己开辟,灵活一点。

第三种写法效率最高,只要要求高的地方使用。


微信图片_20220827233810.jpg

微信图片_20220827233837.jpg微信图片_20220827233844.jpg