当前位置: 首页 > news >正文

数据结构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赋给班级结构体的sizeptr->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;
}

执行效果

相关文章:

  • 【区块链 + 智慧政务】涉税行政事业性收费“e 链通”项目 | FISCO BCOS应用案例
  • Golang | Leetcode Golang题解之第234题回文链表
  • Qt Style Sheets-样式表语法
  • vue检测页面手指滑动距离,执行回调函数,使用混入的语法,多个组件都可以使用
  • 微信小程序与本地MySQL数据库通信
  • 2024.7.17 ABAP面试题目总结
  • Hadoop-34 HBase 安装部署 单节点配置 hbase-env hbase-site 超详细图文 附带配置文件
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • 3D问界—MAYA制作铁丝栅栏(透明贴图法)
  • 用Python轻松批量生成Word合同:解放双手,喝口咖啡就搞定!☕
  • 【Karapathy大神build-nanogpt】Take Away Notes
  • Android 12系统源码_存储(二)StorageManager类介绍
  • MySQL数据库慢查询日志、SQL分析、数据库诊断
  • 1.厦门面试
  • 学习Python的IDE功能--(一)入门导览
  • 自己简单写的 事件订阅机制
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【comparator, comparable】小总结
  • CSS 三角实现
  • linux安装openssl、swoole等扩展的具体步骤
  • Map集合、散列表、红黑树介绍
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Redash本地开发环境搭建
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Spring Boot 分片上传文件
  • ​马来语翻译中文去哪比较好?
  • #pragma 指令
  • (12)Hive调优——count distinct去重优化
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C#)获取字符编码的类
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (搬运以学习)flask 上下文的实现
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (区间dp) (经典例题) 石子合并
  • (十二)Flink Table API
  • (原創) 未来三学期想要修的课 (日記)
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • (转)为C# Windows服务添加安装程序
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core使用ef 6
  • .Net Remoting常用部署结构
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET中的十进制浮点类型,徐汇区网站设计
  • //解决validator验证插件多个name相同只验证第一的问题
  • @AliasFor注解
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [ C++ ] STL---stack与queue
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149