数据结构day2

一、思维导图

内存分配

二、课后习题

分文件编译

//sys.h

#ifndef TEST_H
#define TEST_H
#define MAX_SIZE 100

//定义学生类型
typedef struct Stu
{
	char name[20]; 		//姓名
	int age; 			//年龄
	double score; 		//分数
}stu;

//定义班级类型
typedef struct Class
{
	struct Stu student[MAX_SIZE]; 	//定义学生容器
	int size; 						//实际学生人数
}class;

//创建班级
class *Create_Stu(int size);

    //信息录入
void Enter_Stu(class *ptr,int size);

//学生信息输出
void Print_Stu(class *ptr,int size);

//按成绩降序排序
void Sort_Stu(class *ptr,int size);

//输出成绩最值学生信息
void Print_Best(class *ptr,int size);

//销毁班级容器
void destroy(class *ptr);

#endif

//fun.c

#include <myhead.h>
#include "sys.h"

//创建班级
class *Create_Stu(int size)
{
	//申请size个学生结构体加上一个size的空间
	class *ptr = (class*)malloc(sizeof(stu) * size + sizeof(int));
 	if(NULL == ptr)
	{
		printf("申请失败\n");
		return NULL;
	}
	//申请成功
	//给内存空间初始化
	memset(ptr,0,sizeof(stu)*size+sizeof(int));

	//将size赋给班级结构体的size
	ptr->size = size;
	//将内存地址返回
	printf("创建班级成功\n");
	return ptr;
}

//信息录入
void Enter_Stu(class *ptr,int size)
{
	//判断是否成功申请内存
	if(NULL == ptr)
    {
        printf("error\n");
        return ;
    }

	//循环录入学生信息
	for(int i=0;i<size;i++)
	{
		
		printf("请输入第%d个学生姓名:",i+1);
		scanf("%s",ptr->student[i].name);
		getchar();

		printf("请输入第%d个学生年龄:",i+1);
		scanf("%d",&ptr->student[i].age);
		getchar();

		printf("请输入第%d个学生成绩:",i+1);
		scanf("%lf",&ptr->student[i].score);
		getchar();

		printf("\n");
	}
	//录入完成
	printf("录入成功\n");
}

//学生信息输出
void Print_Stu(class *ptr,int size)
{
	//判断是否成功申请内存
	if(NULL == ptr)
    {
        printf("error\n");
        return ;
    }

	//循环输出学生信息
	printf("**********学生信息如下*********\n");
	printf("姓名\t年龄\t成绩\n\n");
	for(int i=0;i<size;i++)
	{
		printf("%s\t%d\t%lf\n",\
				ptr->student[i].name,ptr->student[i].age,ptr->student[i].score);
		printf("\n");
	}

}

//按成绩降序排序
void Sort_Stu(class *ptr,int size)
{
	//判断是否成功申请内存
	if(NULL == ptr)
    {
        printf("error\n");
        return ;
    }

	 printf("************对学生成绩进行排序***********\n");   
	for(int i=1;i<size;i++)
	{
		for(int j=0;j<size;j++)
		{
			if(ptr->student[j].score < ptr->student[j+1].score)
			{
				//交换位置
				stu temp = ptr->student[j];
				ptr->student[j] = ptr->student[j+1];
				ptr->student[j+1] = temp;
			}
		}
	}
	//排序成功
	printf("排序成功\n");
}

//输出成绩最值学生信息
void Print_Best(class *ptr,int size)
{
	//判断是否成功申请内存
	if(NULL == ptr)
    {
        printf("error\n");
        return ;
    }

	//定义最值学生容器
	stu stu_max;
	stu stu_min;

	//定义最值分数容器
	double max_score = 0;
	double min_socre = 0;

	//将第一个学生当做最值
	stu_max = *ptr->student;
	stu_min = *ptr->student;
	max_score = ptr->student[0].score;
	min_socre = ptr->student[0].score;

	//循环比较刷新最值
	for(int i=1;i<size;i++)
	{
		if(ptr->student[i].score > max_score)
		{
			max_score = ptr->student[i].score;
			stu_max = ptr->student[i];
		}
		if(ptr->student[i].score < min_socre)
		{
			min_socre = ptr->student[i].score;
			stu_min = ptr->student[i];
		}
	}
	//输出成绩最值学生信息
    printf("************成绩最值学生信息************\n");
	printf("成绩最高学生信息:\n");
	printf("姓名\t年龄\t成绩\n\n");
	printf("%s\t%d\t%lf\n",\
			stu_max.name,stu_max.age,stu_max.score);

	printf("成绩最低学生信息:\n");
	printf("姓名\t年龄\t成绩\n\n");
	printf("%s\t%d\t%lf\n",\
				stu_min.name,stu_min.age,stu_min.score);
}

//销毁班级容器
void destroy(class *ptr)
{
	//释放内存
	if(ptr != NULL)
	{
		free(ptr);
		ptr =NULL;
	}
}

//Stu_sys(主函数)

#include <myhead.h>
#include "sys.h"

int  main(int argc, const char *argv[])
{
	printf("\t\t************学生信息管理系统************\n");
	printf("\t\t=======1、        创建班级          =======\n");
	printf("\t\t=======2、      录入学生信息        =======\n");
	printf("\t\t=======3、      查看学生信息        =======\n");
	printf("\t\t=======4、   学生成绩降序排序       =======\n");
	printf("\t\t=======5、  输出成绩最值学生信息    =======\n");			
	printf("\t\t=======6、       销毁班级           =======\n");			
	printf("\t\t=======0、         退出             =======\n");			
	//菜单
	int menu =0;
	//初始化人数
	int size = 0;
	do
	{
		printf("请输入选项>>>");
		scanf("%d",&menu);
		getchar();

		//多分支选择执行对应功能
		switch(menu)
		{
		case 1://创建班级  
				printf("请输入班级人数:");
				scanf("%d",&size);
				getchar();
				//定义指针接收申请的班级结构体内存
	            class *P =Create_Stu(size);
				break;
		case 2://录入学生信息
				Enter_Stu(P,P->size);
				break;
		case 3://查看学生信息
				Print_Stu(P,P->size);
				break;
		case 4://按成绩降序排序
				 Sort_Stu(P,P->size);
				 //输出排序后信息
				 Print_Stu(P,P->size);
				break;
		case 5://输出成绩最值学生信息
				Print_Best(P,P->size);
				break;
		case 6://销毁班级容器
				destroy(P);
				P == NULL;
				printf("销毁成功\n");
				break;
		case 0://退出
				break;
		default:
				printf("输入错误,请重新输入\n");
				break;
		}

	} while(menu !=0);

	return 0;
}

执行效果

相关推荐

  1. 数据结构day2

    2024-07-18 09:40:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 09:40:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 09:40:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 09:40:02       57 阅读
  4. Python语言-面向对象

    2024-07-18 09:40:02       68 阅读

热门阅读

  1. 树莓派docker安装lnmp

    2024-07-18 09:40:02       18 阅读
  2. 人像视频预处理v1.2 优化检测、处理速度

    2024-07-18 09:40:02       21 阅读
  3. c++ extern 关键字

    2024-07-18 09:40:02       22 阅读
  4. 【C++】C++ 文件模式标志

    2024-07-18 09:40:02       23 阅读
  5. nginx域名跳转到另一个域名

    2024-07-18 09:40:02       22 阅读
  6. ios 设置行距和获取文本行数

    2024-07-18 09:40:02       21 阅读
  7. (86)组合环路--->(01)RGB值

    2024-07-18 09:40:02       18 阅读
  8. 详细说一下axios的特点

    2024-07-18 09:40:02       22 阅读
  9. log4j.appender.Logfile.File=./logs/its_log

    2024-07-18 09:40:02       20 阅读