编程马拉松(11)动态内存分配
这里主要说一下动态内存分配把马拉松10改为,改一下,改在,从键盘输入学生的个数。
输入每个学生的成绩,计算出总分和平均分,按总分进行排序,然后打印输出。要求用,结构体指针。有数学,语文,英语,物理,化学。5个科目。
freesoft:c++ 代码
#include <iostream>
using namespace std;
struct STU
{
int id;
char name;
int yuwen;
int shuxue;
int yingyu;
int wule;
int huaxue;
float pingjunf;
float zongfen;
};
void setdata(STU *s);
void show(STU *s);
void sort(STU *s);
void jisuan(STU *s);
int renshu=0;//声明全局变量(改1)
void main()
{
cout<<"请输入学生总数:";//定义指针变量(改2开始)
cin>>renshu;
STU *stu;
stu=new STU ;//动态分配内存(改2完)
setdata(stu); //依次调用函数进行赋值,计算,排序,显示。
jisuan(stu);
sort(stu);
show(stu);
delete []stu;//删除动态分配的内存(改3)
}
void show(STU *s)//此函数用于显示信息
{
int i;
cout<<"学号姓名语文数学英语物理化学平均分 总分\n";
for(i=0;i<renshu;i++)
{
cout
<<s.id<<""
<<s.name<<""
<<s.yuwen<<""
<<s.shuxue<<""
<<s.yingyu<<""
<<s.wule<<""
<<s.huaxue<<""
<<s.zongfen<<""
<<s.pingjunf<<endl;
}
}
void jisuan(STU *s)//此函数用于计算总分和平均分
{
int i;
for(i=0;i<renshu;i++)
{
s.zongfen=(float)(s.yuwen+s.shuxue+s.yingyu+s.wule+s.huaxue);
s.pingjunf=(float)(s.zongfen/5.0);
}
}
void sort(STU *s)//此函数用于按总分进行排序
{
int i,j;
STU temp;
for(i=0;i<renshu;i++)
{
for(j=i+1;j<renshu;j++)
{
if(s.zongfen<s.zongfen)
{
temp=s;
s=s;
s=temp;
}
}
}
}
void setdata(STU *s)//此函数用于添加数据
{
int i;
cout<<"请输入"<<renshu<<"位学生的资料\n";
for(i=0;i<renshu;i++)
{
cout<<"请输入第"<<i+1<<"学生的资料\n";
cout<<"学号:";
cin>>s.id;
cout<<"姓名:";
cin>>s.name;
cout<<"语文:";
cin>>s.yuwen;
cout<<"数学:";
cin>>s.shuxue;
cout<<"英语:";
cin>>s.yingyu;
cout<<"物理:";
cin>>s.wule;
cout<<"化学:";
cin>>s.huaxue;
}
}
对初学者还是很有用地,支持一下/:good
页:
[1]