数据结构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://www.mzph.cn/diannao/47450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战:详解Spring创建bean的流程(图解+示例+源码)

概叙 这篇主要总结Spring中bean的创建过程&#xff0c;主要分为加载bean信息–>实例化bean–>属性填充–>初始化阶段–>后置处理等步骤&#xff0c;且每个步骤Spring做的事情都很多&#xff0c;这块源码还是很值得我们都去看一看的。而Spring中Bean的声明周期其实…

GEO数据挖掘从数据下载处理质控到差异分析全流程分析步骤指南

0. 综合的教学视频介绍 GEO数据库挖掘分析作图全流程每晚11点在线教学直播录屏回放视频&#xff1a; https://www.bilibili.com/video/BV1rm42157CT/ GEO数据从下载到各种挖掘分析全流程详解&#xff1a; https://www.bilibili.com/video/BV1nm42157ii/ 一篇今年近期发表的转…

捷配总结的SMT工厂安全防静电规则

SMT工厂须熟记的安全防静电规则&#xff01; 安全对于我们非常重要&#xff0c;特别是我们这种SMT加工厂&#xff0c;通常我们所讲的安全是指人身安全。 但这里我们须树立一个较为全面的安全常识就是在强调人身安全的同时亦必须注意设备、产品的安全。 电气&#xff1a; 怎样预…

IDEA 调试 Ja-Netfilter

首先本地需要有两款IDEA 可以是相同版本&#xff0c;也可以是不同版本。反正要有两个&#xff0c;一个用来调试代码&#xff0c;一个启动。 移除原有ja-netfiler 打开你的ja-netfiler的vmoptions目录&#xff0c;修改其中的idea.vmoptions文件。移除最后一行-javaagent ...参…

分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法

前言 树形结构是一种很常见的数据结构&#xff0c;类似于现实生活中的树的结构&#xff0c;具有根节点、父子关系和层级结构。 所谓根节点&#xff0c;就是整个树的起始节点。 节点则是树中的元素&#xff0c;每个节点可以有零个或多个子节点&#xff0c;节点按照层级排列&a…

AI智能名片S2B2C商城小程序在社群去中心化管理中的应用与价值深度探索

摘要&#xff1a;随着互联网技术的飞速发展&#xff0c;社群经济作为一种新兴的商业模式&#xff0c;正逐渐成为企业与用户之间建立深度连接、促进商业增长的重要途径。本文深入探讨了AI智能名片S2B2C商城小程序在社群去中心化管理中的应用&#xff0c;通过详细分析社群去中心化…

【DGL系列】DGLGraph.out_edges简介

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 函数说明 用法示例 示例 1: 获取所有边的源节点和目标节点 示例 2: 获取特定节点的出边 示例 3: 获取所有边的边ID 示例 4: 获取所有信息&a…

中国机器视觉行业上市公司市场竞争格局分析

中国机器视觉产业上市公司汇总&#xff1a;分布在各产业链环节 机器视觉就是用机器来代替人眼做测量和判断的系统&#xff0c;机器检测相较于人工视觉检测优势明显。目前&#xff0c;我国机器视觉产业的上市公司数量较多&#xff0c;分布在各产业链环节。具体包括&#xff1a;…

LeetCode-返回链表倒数第K个节点、链表的回文结构,相交链表

一、返回链表倒数第k个节点 . - 力扣&#xff08;LeetCode&#xff09; 本体思路参展寻找中间节点的方法&#xff0c;寻找中间节点是定义快慢指针&#xff0c;快指针每次走两步&#xff0c;慢指针每次走一步&#xff0c;当快指针为空或者快指针的下一个节点是空时&#xff0c;…

4000厂商默认账号密码、默认登录凭证汇总.pdf

获取方式&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1F8ho42HTQhebKURWWVW1BQ?pwdy2u5 提取码&#xff1a;y2u5

音视频开发入门教程(2)配置FFmpeg编译 ~共210节

在上一篇博客介绍了安装&#xff0c;音视频开发入门教程&#xff08;1&#xff09;如何安装FFmpeg&#xff1f;共210节-CSDN博客 感兴趣的小伙伴&#xff0c;可以继续跟着老铁&#xff0c;一起开始音视频剪辑功能&#xff0c;&#x1f604;首先查看一下自己的电脑是几核的&…

SCSA第七天

防火墙的可靠性 因为防火墙上不仅需要同步配置信息&#xff0c;还需要同步状态信息&#xff08;会话表等&#xff09;&#xff0c;所以&#xff0c;防火墙不能 像路由器那样单纯的靠动态协议来实现切换&#xff0c;需要用到双机热备技术。 1&#xff0c;双机 --- 目前双机热…

Golang面试题整理(持续更新...)

文章目录 Golang面试题总结一、基础知识1、defer相关2、rune 类型3、context包4、Go 竞态、内存逃逸分析5、Goroutine 和线程的区别6、Go 里面并发安全的数据类型7、Go 中常用的并发模型8、Go 中安全读写共享变量方式9、Go 面向对象是如何实现的10、make 和 new 的区别11、Go 关…

破解反爬虫策略 /_guard/auto.js(二)实战

这次我们用上篇文章讲到的方法来真正破解一下反爬虫策略&#xff0c;这两个案例是两个不同的网站&#xff0c;一个用的是 /_guard/auto.js&#xff0c;另一个用的是/_guard/delay_jump.js。经过解析发现这两个网站用的反爬虫策略基本是一模一样&#xff0c;只不过在js混淆和生成…

HTML2048小游戏(最新版)

比上一篇文章的2048更好一点。 控制方法&#xff1a;WASD键&#xff08;小写&#xff09;或页面上四个按钮 效果图如下&#xff1a; 源代码在图片后面 源代码 HTML <!DOCTYPE html> <html lang"en"> <head><meta charset&…

pyspark使用 graphframes创建图的方法

1、安装graphframes的步骤 1.1 查看 spark 和 scala版本 在终端输入&#xff1a; spark-shell --version 查看spark 和scala版本 1.2 在maven库中下载对应版本的graphframes https://mvnrepository.com/artifact/graphframes/graphframes 我这里需要的是spark 2.4 scala 2.…

什么是AGI?以及AGI最新技术如何?

首先&#xff0c;AGI是Artificial General Intelligence的缩写&#xff0c;意为人工通用智能。AGI指的是一种拥有与人类相当智能水平的人工智能系统&#xff0c;能够在各种不同的任务和环境中进行智能决策和问题解决。与目前大多数人工智能系统只能在特定领域下执行特定任务不同…

Kafka Producer之ACKS应答机制

文章目录 1. 应答机制2. 等级03. 等级14. 等级all5. 设置等级6. ISR 1. 应答机制 异步发送的效率高&#xff0c;但是不安全&#xff0c;同步发送安全&#xff0c;但是效率低。 无论哪一种&#xff0c;有一个关键的步骤叫做回调&#xff0c;也就是ACKS应答机制。 其中ACKS也分…

线性表的链式存储结构————双链表(java)

线性表的链式存储结构————双链表&#xff08;java&#xff09; 文章目录 线性表的链式存储结构————双链表&#xff08;java&#xff09;双链表双链表的创建插入数据元素头插法尾插法 求链表的长度输出双链表删除双链表中的指定元素总代码运行效果用Java内部类实现双链表…

Tecnomatix Plant Simulation 这本书的翻译

这本书我准备自己翻译一下&#xff0c;一是学习这个软件&#xff0c;而是提高一下英文能力。 翻译主要是利用chatgpt 书名《Tecnomatix Plant Simulation Modeling and Programming by Means of Examples》 通过示例进行建模和编程 第二版 目录 前言 1 基础知识 1.1 介绍…