自学内容网 自学内容网

华清数据结构day2 24-7-17

1> 完成班级的创建,创建时,需要传递班级实际人数
2> 完成班级学生的信息录入工作
3> 完成将班级学生按成绩进行降序排序工作
4> 输出班级中成绩最好和最差学生的信息
5> 完成信息的输出工作
6> 完成班级的销毁工作
要求:班级创建在堆区,尽量分文件编译完成

 zy.h文件

#ifndef ZY_H
#define ZY_H
#define MAX 100            //最大容量
//定义学生类型
struct Stu
{
    char name[20];
    int age;
    double score;
};
//定义班级类型
struct Class
{
    struct Stu student[MAX];       //存放学生的容器
    int size;                      //实际人数
};
int *create( int size);
void input(struct Class *ptr , int size);  //录入函数
void sort(struct Class *ptr , int size) ; //降序排序函数
void maxandmin(struct Class *ptr, int size);   //输出最好和最差的学生
void output(struct Class *ptr , int size);      //输出学生
void destroy(struct Class *ptr );       //释放内存的函数

#endif

 zy.c文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100            //最大容量
//定义学生类型
struct Stu
{
    char name[20];
    int age;
    double score;
};
//定义班级类型
struct Class
{
    struct Stu student[MAX];       //存放学生的容器
    int size;                      //实际人数
};
int *create( int size)
{
    struct Class *ptr = (struct Class* *)malloc(sizeof(struct Class*) * size);
    if (ptr == NULL)
    {
        printf("申请失败\n");
        return NULL;
    }
    memset(ptr, 0, sizeof(int)*size);
    return ptr;
}
void input(struct Class *ptr , int size)  //录入函数
{
     if (ptr == NULL)
    {
        printf("申请失败\n");
        return ;
    }
    for (int i = 0; i < size; i++)
    {
        printf("请输入第%d个学生的姓名,年龄,成绩(空格分开):",i+1);
        scanf("%s %d %lf",ptr->student[i].name,&ptr->student[i].age,&ptr->student[i].score);
    }
    
}
void sort(struct Class *ptr , int size)  //降序排序函数
{
      if (ptr == NULL)
    {
        printf("申请失败\n");
        return ;
    }
    for (int i = 1; i < size; i++)
    {
        for (int j = 0; j < size -i ; j++)
        {
            if (ptr->student[j].score<ptr->student[j+1].score)
            {
                struct Stu temp = ptr->student[j];
                ptr->student[j] = ptr->student[j + 1];
                ptr->student[j + 1] = temp;
            }        
        }
    }
    
}
void maxandmin(struct Class *ptr, int size)    //输出最好和最差的学生
{
    if (ptr == NULL)
    {
        printf("申请失败\n");
        return ;
    }
   int max = 0,min = 0;
   for (int i = 1; i < size; i++)
   {
      if (ptr->student[max].score<ptr->student[i].score)
      {
         max = i;
      }
      if (ptr->student[min].score>ptr->student[i].score)
      {
        min = i;
      }
   }
    printf("最好的学生的姓名=%s,年龄=%d,成绩=%.2lf:\n",ptr->student[max].name,ptr->student[max].age,ptr->student[max].score);
    printf("最差的学生的姓名=%s,年龄=%d,成绩=%.2lf:\n",ptr->student[min].name,ptr->student[min].age,ptr->student[min].score);
    
}
void output(struct Class *ptr , int size)       //输出学生
{
      if (ptr == NULL)
    {
        printf("申请失败\n");
        return ;
    }
    printf("输出学生信息:\n");
    for (int i = 0; i < size; i++)
    {
        printf("第%d个学生的姓名=%s,年龄=%d,成绩=%.2lf:\n",i+1,ptr->student[i].name,ptr->student[i].age,ptr->student[i].score);
    }
    
}
void destroy(struct Class *ptr )       //释放内存的函数
{
    free(ptr);
}

 zymain.h文件

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"zy.h"

int main(int argc, char const *argv[])
{
    int size = 0;
    printf("请输入你要输入的人数:");
    scanf("%d",&size);
    struct Class * P = create(size);
    //调用录入函数
    input(P,size);
    //降序排序函数
    sort(P,size);
    //输出最好和最差的学生
    maxandmin(P,size);
    //输出学生
    output(P,size);
    //释放内存的函数
    destroy(P);
    P = NULL;
    return 0;
}


原文地址:https://blog.csdn.net/m0_62859255/article/details/140505135

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!