freesoft 发表于 2007-8-23 07:52:54

编程马拉松(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;
        }
}

zhimingcom 发表于 2007-8-23 12:50:12

对初学者还是很有用地,支持一下/:good
页: [1]
查看完整版本: 编程马拉松(11)动态内存分配