数据结构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;
}

执行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3247436.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Xilinx FPGA DDR4 接口配置基础(PG150)

1. 简介 本文为硬件平台创建PL IP模块&#xff0c;创建PL内核&#xff0c;子系统功能仿真&#xff0c;并评估Vivado的时序、资源和功耗收敛。 本文设计过程的主题包括&#xff1a; ClockingResetsProtocol DescriptionCustomizing and Generating the CoreExample Design D…

Linux学习(2):shell脚本和正则

概述 一般使用/bin/bash&#xff0c;也就是bash解析器。最广泛&#xff0c;大家公认。 一般shell脚本的后缀都是 .sh 简单写一个: 执行方法&#xff1a;sh sh文件 or bash sh文件&#xff0c;&#xff08;不用x权限&#xff09;直接运行./sh文件可能会有权限问题&#xff…

定制开发AI智能名片商城微信小程序在私域流量池构建中的应用与策略

摘要 在数字经济蓬勃发展的今天&#xff0c;私域流量已成为企业竞争的新战场。定制开发AI智能名片商城微信小程序&#xff0c;作为私域流量池构建的创新工具&#xff0c;正以其独特的优势助力企业实现用户资源的深度挖掘与高效转化。本文深入探讨了定制开发AI智能名片商城微信…

《昇思25天学习打卡营第20天|GAN图像生成》

生成对抗网络&#xff08;GAN&#xff09;是一种深度学习模型&#xff0c;用于生成逼真的图像。在手写数字识别的任务中&#xff0c;GAN 可以用来生成与真实手写数字相似的图像&#xff0c;以增强模型的训练数据集。GAN 主要由两个部分组成&#xff1a;生成器&#xff08;Gener…

UDP客户端、服务端及简易聊天室实现 —— Java

UDP 协议&#xff08;用户数据包协议&#xff09; UDP 是无连接通信协议&#xff0c;即在数据传输时&#xff0c;数据的发送端和接收端不建立逻辑连接&#xff0c;简单来说&#xff0c;当客户端向接收端发送数据时&#xff0c;客户端不会确认接收端是否存在&#xff0c;就会发出…

FATE Flow 源码解析 - 日志输出机制

背景介绍 在 之前的文章 中介绍了 FATE 的作业处理流程&#xff0c;在实际的使用过程中&#xff0c;为了查找执行中的异常&#xff0c;需要借助运行生成的日志&#xff0c;但是 FATE-Flow 包含的流程比较复杂&#xff0c;对应的日志也很多&#xff0c;而且分散在不同的文件中&…

Go语言中的并发

简单介绍go中的并发编程. 涉及内容主要为goroutine, goroutine间的通信(主要是channel), 并发控制(等待、退出). 想查看更多与Go相关的内容, 可以查看我的Go编程栏目 Goroutine 语法 在一个函数调用前加上go即可, go func(). 语法很简单, 可以说是并发写起来最简单的程序语言…

【简单介绍Gitea】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

广联达Linkworks ArchiveWebService XML实体注入漏洞复现

0x01 产品简介 广联达 LinkWorks(也称为 GlinkLink 或 GTP-LinkWorks)是广联达公司(Glodon)开发的一种BIM(建筑信息模型)协同平台。广联达是中国领先的数字建造技术提供商之一,专注于为建筑、工程和建筑设计行业提供数字化解决方案。 0x02 漏洞概述 广联达 LinkWorks…

【C#】已知有三个坐标点:P0、P1、P2,当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致,该如何计算P3、P4?

问题描述 已知有三个坐标点&#xff1a;P0、P1、P2&#xff0c;当满足P3和P4连成的一条直线 与 P0和P1连成一条直线平行且长度一致&#xff0c;该如何计算P3、P4&#xff1f; 解决办法 思路一&#xff1a;斜率及点斜式方程 # 示例坐标 x0, y0 1, 1 # P0坐标 x1, y1 4, 4 # …

leetcode力扣_二分查找

69.x的平方根 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1&…

数据结构——线性表(循环链表)

一、循环链表定义 将单链表中终端结点的指针端由空指针改为指向头结点&#xff0c;就使整个单链表形成一 个环&#xff0c;这种头尾相接的单链表称为单循环链表&#xff0c;简称循环链表(circular linked list)。 循环链表解决了一个很麻烦的问题。如何从当中一 个结点出发&am…

C# 智慧大棚nmodbus4

窗体 &#xff1a;图表&#xff08;chart&#xff09;&#xff1a; 下载第三方&#xff1a; nmodbus4:可以实现串口直连&#xff0c;需要创建串口对象设置串口参数配置Serialport 如果需要把串口数据表通过tcp进行网口传递 需要创建tcpclient对象 ModbusSerialMaster master; /…

爬虫(二)——爬虫的伪装

前言 本文是爬虫系列的第二篇文章&#xff0c;主要讲解关于爬虫的简单伪装&#xff0c;以及如何爬取B站的视频。建议先看完上一篇文章&#xff0c;再来看这一篇文章。要注意的是&#xff0c;本文介绍的方法只能爬取免费视频&#xff0c;会员视频是无法爬取的哦。 爬虫的伪装 …

【Arduino IDE】安装及开发环境、ESP32库

一、Arduino IDE下载 二、Arduino IDE安装 三、ESP32库 四、Arduino-ESP32库配置 五、新建ESP32-S3N15R8工程文件 乐鑫官网 Arduino官方下载地址 Arduino官方社区 Arduino中文社区 一、Arduino IDE下载 ESP-IDF、MicroPython和Arduino是三种不同的开发框架&#xff0c;各自适…

基于Web的特产美食销售系统的设计与实现

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

SpringBoot框架学习笔记(二):容器功能相关注解详解

1 Spring 注入组件的注解 Component、Controller、 Service、Repository这些在 Spring 中的传统注解仍然有效&#xff0c;通过这些注解可以给容器注入组件 2 Configuration 2.1 应用实例 需求说明: 演示在 SpringBoot, 如何通过Configuration 创建配置类来注入组件 回顾…

客户端与服务器通讯详解(3):如何选择合适的通讯方式

上篇文章中&#xff0c;我们讲解了客户端与服务器通讯详解&#xff08;2&#xff09;&#xff1a;12种常见通讯方式&#xff0c;重点讲解了http、websocket和RESTful API三种&#xff0c;本文我们继续讲解如何依据场景选择最合适的通讯方式。欢迎友友们点赞评论。 一、客户端服…

微软研究人员为电子表格应用开发了专用人工智能LLM

微软的 Copilot 生成式人工智能助手现已成为该公司许多软件应用程序的一部分。其中包括 Excel 电子表格应用程序&#xff0c;用户可以在其中输入文本提示来帮助处理某些选项。微软的一组研究人员一直在研究一种新的人工智能大型语言模型&#xff0c;这种模型是专门为 Excel、Go…

PDF文件无法编辑?3步快速移除PDF编辑限制

正常来说,我们通过编辑器打开pdf文件后,就可以进行编辑了&#xff61;如果遇到了打开pdf却不能编辑的情况,那有可能是因为密码或是扫描件的原因&#xff61;小编整理了一些pdf文件无法编辑&#xff0c;以及pdf文件无法编辑时我们要如何处理的方法&#xff61;下面就随小编一起来…