数据结构day2

news2024/9/23 15:33:31

一、思维导图

内存分配

二、课后习题

分文件编译

//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;
}

执行效果

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

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

相关文章

4.作业--Jquery,JS

目录 作业题目&#xff1a;1.使用Jquery完成点击图片变换图片颜色 A图 B代码 HTML的部分 JQ的部分 作业题目&#xff1a;2.使用JS中的DOM操作完成背景颜色渐变方向变换。点击背景&#xff0c;渐变方向发生改变。 A图 B代码 学习产出&#xff1a; 作业题目&#xff1a;1…

2014-2024年腾势D9N7N8EVDMI维修手册和电路图资料线路图接线图

经过整理&#xff0c;2014-2024年腾势汽车全系列已经更新至汽修帮手资料库内&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对照表…

ORA-00756 ORA-10567故障处理---惜分飞

数据库异常断电之后&#xff0c;recover 报ORA-00756 ORA-10567等错 SQL> recover database; ORA-00756: 恢复操作检测到数据块写入丢失 ORA-10567: Redo is inconsistent with data block (file# 1,block# 113855,file offset is 932700160 bytes) ORA-10564: tablespace S…

【学术会议征稿】第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024)

第四届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 第四届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2024&#xff09;将…

请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段

在Spring框架中&#xff0c;Bean的实例化是Bean生命周期中的一个重要阶段。这个过程包括两个关键的子阶段&#xff1a;Bean实例化前阶段和Bean实例化阶段本身。 BeanFactoryPostProcessor&#xff1a;BeanFactoryPostProcessor是容器启动阶段Spring提供的一个扩展点&#xff0…

科技出海|百分点科技智慧政务解决方案亮相非洲展会

近日&#xff0c;华为非洲全联接大会在南非约翰内斯堡举办&#xff0c;吸引政府官员行业专家、思想领袖、生态伙伴等2,000多人参会&#xff0c;百分点科技作为华为云生态合作伙伴&#xff0c;重点展示了智慧政务解决方案&#xff0c;发表《Enable a Smarter Government with Da…

Transformer系列专题(四)——Swintransformer

文章目录 九、SwinTransformer9.1 整体网络架构9.2 Transformer Blocks9.3 Patch Embedding&#xff08;将图像切割成小块&#xff08;Patch&#xff09;&#xff09;9.4 window_partition9.5 W-MSA&#xff08;Window Multi-head Self Attention&#xff09;9.6 window_revers…

LinuxShell编程2——shell搭建Discuzz论坛网站

目录 一、环境准备 ①准备一台虚拟机 ②初始化虚拟机 1、关闭防火墙 2、关闭selinux 3、配置yum源 4、修改主机名 二、搭建LAMP环境 ①安装httpd(阿帕奇apache&#xff09;服务器 查看是否安装过httpd 启动httpd 设置开机启动 查看状态 安装网络工具 测试 ②安装…

Android C++系列:Linux线程(三)线程属性

linux下线程的属性是可以根据实际项目需要,进行设置,之前我们讨论的线程都是采用线程的默认属性,默认属性已经可以解决绝大多数开发时遇到的问 题。如我们对程序的性能提出更高的要求那么需要设置线程属性,比如可以通过设置线程栈的大小来降低内存的使用,增加最大线程个数…

数据结构——栈和队列(C语言实现)

写在前面&#xff1a; 栈和队列是两种重要的线性结构。其也属于线性表&#xff0c;只是操作受限&#xff0c;本节主要讨论的是栈和队列的定义、表示方法以及C语言实现。 一、栈和队列的定义与特点 栈&#xff1a;是限定仅在表尾进行插入和删除的线性表。对栈来说&#xff0c;表…

【Elasticsearch7.11】reindex问题

参考博文链接 问题&#xff1a;reindex 时出现如下问题 原因&#xff1a;数据量大&#xff0c;kibana的问题 解决方法&#xff1a; 将DSL命令转化成CURL命令在服务上执行 CURL命令 自动转化 curl -XPOST "http://IP:PORT/_reindex" -H Content-Type: application…

防洪墙的安全内容检测+http请求头

1、华为的IAE引擎&#xff1a;内部工作过程 IAE引擎主要是针对2-7层进行一个数据内容的检测 --1、深度检测技术 (DPI和DPF是所有内容检测都必须要用到的技术) ---1、DPI--深度包检测&#xff0c;针对完整的数据包&#xff0c;进行内容的识别和检测 1、基于特征子的检…

Spark算子--take(访问量前十网站)

1.题目需求 利用数据集SogouQ2012.mini.tar.gz 将数据按照访问次数进行排序&#xff0c;求访问量前10的网址&#xff0c;每一行数据代表一个url被访问1次 2.代码 from pyspark import SparkContext, SparkConfdef main():conf SparkConf().setMaster("local[*]").s…

【操作系统】文件管理——文件存储空间管理(个人笔记)

学习日期&#xff1a;2024.7.17 内容摘要&#xff1a;文件存储空间管理、文件的基本操作 在上一章中&#xff0c;我们学习了文件物理结构的管理&#xff0c;重点学习了操作系统是如何实现逻辑结构到物理结构的映射&#xff0c;这显然是针对已经存储了文件的磁盘块的&#xff0…

连锁零售门店分析思路-人货场 数据分析

连锁零售门店分析思路 以下是一个连锁零售门店的分析思路&#xff1a; 一、市场与竞争分析 二、门店运营分析&#xff08;销售分析&#xff09; 三、销售与财务分析 四、客户分析 五、数字化与营销分析 最近帮一个大学生培训&#xff0c;就门店销售分析 &#xff0c;说到门店…

尚品汇-(二十)

目录&#xff1a; 一&#xff1a;商品详情页面优化 &#xff08;1&#xff09;思路 &#xff08;2&#xff09;整合redis到工程 &#xff08;3&#xff09;使用redis进行业务开发相关规则 &#xff08;4&#xff09;缓存常见问题 二&#xff1a;分布式锁 本地锁的局限性…

【BUG】已解决:java.lang.reflect.InvocationTargetException

已解决&#xff1a;java.lang.reflect.InvocationTargetException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城市开发…

【STL详解 —— map和set的使用】

STL详解 —— map和set的使用 关联式容器键值对setset的介绍set的使用set的模板参数列表set的构造set的迭代器set的容量set的修改操作 mapmap的介绍map的使用map的模板参数列表map的构造map的迭代器map的容量与元素访问map中元素的修改 multisetmultimap 关联式容器 在初阶阶段…

Mindspore框架CycleGAN模型实现图像风格迁移|(一)Cycle神经网络模型构建

Mindspore框架&#xff1a;CycleGAN模型实现图像风格迁移算法 Mindspore框架CycleGAN模型实现图像风格迁移|&#xff08;一&#xff09;CycleGAN神经网络模型构建Mindspore框架CycleGAN模型实现图像风格迁移|&#xff08;二&#xff09;实例数据集&#xff08;苹果2橘子&#…

彻底搞定C指针系列

1.指针是什么&#xff1f; 运行一下代码 #include <stdio.h> int main() { int i 39; printf("%d\n", i); printf("%d\n",&i); return 0; } 运行结果&#xff1a; 39 618561996 运行测试代码&#xff1a; #include <stdio.…