数据结构:动态内存分配+内存分区+宏+结构体

一、作业

1.定义一个学生结构体,包含结构体成员:身高,姓名,成绩;定义一个结构体数组有7个成员,要求终端输入结构体成员的值,根据学生成绩,进行冒泡排序。

#include <stdio.h>
#include <string.h>
typedef struct {
	int high;
	char name[10];
	float score;
}stu;
int main(int argc, const char *argv[])
{
	int i,j;
	stu temp; //其中的temp需要类型重定义
	stu arr[7]={{100,"1",95},{110,"2",84},{120,"3",70},{130,"4",42},{140,"5",99},{150,"5",77},{160,"6",66}};
	for(i=1;i<7;i++){
		for(j=0;j<7-i;j++){
			if(arr[j].score>arr[j+1].score){
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
	for(i=0;i<7;i++){
		printf("%d %s %f\n",arr[i].high,arr[i].name,arr[i].score);
	}
	return 0;
} 

二、知识回顾 

1.申请一个10个int类型的堆区空间,并实现选择排序(需要导入头文件 #include <stdlib.h>)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//申请一个10个int类型的堆区空间,并实现选择排序
int main(int argc, const char *argv[]){
	int *p=(int *)malloc(sizeof(int)*10);
	int i,j,index,temp;
	for(i=0;i<10;i++){
		printf("请输入数字\n");
		scanf("%d",(p+i));
	}
	for(i=0;i<10;i++){
		index=i;
		for(j=i;j<10;j++){
			if(*(p+j)>*(p+index))
				index=j;
		}
		temp=*(p+i);
		*(p+i)=*(p+index);
		*(p+index)=temp;
	}
	for(i=0;i<10;i++){
		printf("%d\n",*(p+i));
	}

	free(p);
	return 0;
}

2.用##拼接带参宏的参数

#include <stdio.h>
#include <string.h>
//用##实现字符串的拼接
#define unit_32 unsigned int
#define TYPE(a,b) a##b
int main(int argc, const char *argv[])
{
	TYPE(unit,_32) a=100;
	//unit_32 a=100
	//unsigned int a=100
	printf("%d\n",a);
	return 0;
}

3.宏函数(最后一行作为返回值,不需要return)

#include <stdio.h>
#include <string.h>
#define MAX(a,b) ({if(a>b) ret = a; else ret=b; ret;})

int main(int argc, const char *argv[])
{
	int ret;
	printf("%d\n",MAX(90,78));
	return 0;
}

4.访问结构体成员

4.1通过结构体变量访问
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
		char name[100];
		char sex;
		int high;
		int score;
}stu,*stu_p;

int main(int argc, const char *argv[])
{ //指针指向桟区申请的空间
	stu s1;
	//strcpy(s1.name,"lisi");
	//s1.name="lisi"; 这是错误的,不能给数组赋值,数组名代表的是数组首地址,是一个常量,不能给常量赋值
	scanf("%s",s1.name);
	s1.sex='m';
	printf("%s\n",s1.name);

	return 0;
}
4.2通过结构体指针间接访问结构体成员
法一:用指针指向栈区申请的空间
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
		char name[100];
		char sex;
		int high;
		int score;
}stu,*stu_p;

int main(int argc, const char *argv[])
{ //指针指向桟区申请的空间

	stu s1;
	stu_p p=&s1;
	(*p).high=100;
	//strcpy(p->name,"lisi");
	//s1.name="lisi"; 这是错误的,不能给数组赋值,数组名代表的是数组首地址,是一个常量,不能给常量赋值
	scanf("%s",p->name);
	p->sex='m';
	printf("%s\n",s1.name);


	return 0;
}

法二:指针指向堆区申请的空间

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
		char name[100];
		char sex;
		int high;
		int score;
}stu,*stu_p;

int main(int argc, const char *argv[])
{ 

	//指针指向堆区申请的空间
	stu_p p=(stu_p)malloc(sizeof(stu));
	gets(p->name);
	p->high=100;
	p->sex='m';
	printf("%s\n",p->name);


	free(p);
	p=NULL;


	return 0;
}

5.结构体数组

#include <stdio.h>
#include <string.h>
typedef struct{
	char name[100];
	int high;
	char sex;
}stu;

int main(int argc, const char *argv[])
{
	stu arr[3]={{"zhangsan",100,'m'},{"lisi",110,'m'}};
	for(int i=0;i<3;i++){
		printf("%s %d %c\n",(arr+i)->name,arr[i].high,arr[i].sex);
	}
	
	return 0;
}

6.内存分配

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据技术之 Kafka

大数据技术之 Kafka 文章目录 大数据技术之 Kafka第 1 章 Kafka 概述1.1 定义1.2 消息队列1.2.1 传统消息队列的应用场景1.2.2 消息队列的两种模式 1.3 Kafka 基础架构 第 2 章 Kafka 快速入门2.1 安装部署2.1.1 集群规划2.1.2 集群部署2.1.3 集群启停脚本 2.2 Kafka 命令行操作…

【Go语言】Go语言中的变量和常量

Go语言中的变量和常量 1 变量 变量相当于是对一块数据存储空间的命名&#xff0c;程序可以通过定义一个变量来申请一块数据存储空间&#xff0c;之后可以通过引用变量名来使用这块存储空间。 Go 语言是强类型静态语言&#xff0c;所以变量的声明与赋值方式与 PHP/Python 等动…

基于java的眼镜店仓库管理系统

源码获取&#xff0c;加V&#xff1a;qq2056908377 摘要&#xff1a; 随着电子商务的兴起&#xff0c;越来越多的商家选择在线销售他们的产品。眼镜店作为零售业的一种&#xff0c;也不例外。随着市场需求的不断增加&#xff0c;眼镜店需要更加高效的管理他们的仓库和库存&…

代码随想录算法训练营DAY20 | 二叉树 (8)

一、LeetCode 701 二叉搜索树中的插入操作 题目链接&#xff1a; 701.二叉搜索树中的插入操作https://leetcode.cn/problems/insert-into-a-binary-search-tree/description/ 思路&#xff1a;见缝插针罢辽。 class Solution {public TreeNode insertIntoBST(TreeNode root, i…

Spring基础-IOC理解及自己创建类+第三方提供的类注入的方法

Spring全称为Spring Framework,是一款主流的JAVA EE 开原框架,主要功能有:IOC(控制反转,层间解耦)、AOP&#xff08;面向切面编程&#xff0c;公共代码抽取&#xff09;、MVC&#xff08;开发web应用程序&#xff09;、数据库事务管理、web单元测试&#xff08;与测试框架集成&…

【深入理解设计模式】单例设计模式

单例设计模式 概念&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。 单例设计模式是一种创建型设计模式&#xff0c;其主要目的是确保类在应用程序中的一个实例只有一个。这意味着无论在应用程序的哪个位置请求该类的实例&a…

自定义异常处理演示

​ 为了防止黑客从前台异常信息&#xff0c;对系统进行攻击。同时&#xff0c;为了提高用户体验&#xff0c;我们都会都抛出的异常进行拦截处理。 一、全局异常处理 编写一个异常拦截类&#xff0c;如下&#xff1a;ControllerAdvice&#xff0c;很多初学者可能都没有听说过…

商品图放大镜效果实现

业务拆解 鼠标经过商品小图&#xff0c;展示块会显示对应商品图片鼠标经过展示块&#xff0c;右侧会显示放大镜效果的大图大图可跟随鼠标移动而显示对应的部分 关键JS代码 // 1. 获取三个盒子// 2. 小盒子 图片切换效果const small document.querySelector(.small)// 中盒子…

极狐GitLab 如何配置多个 LDAP?

本文仅适用于极狐GitLab私有化部署场景。 场景化痛点 极狐GitLab 的多 LDAP 接入功能解决了企业在以下场景中可能遇到的痛点&#xff1a; 多个组织/部门的整合&#xff1a;在大型企业或跨国公司中&#xff0c;往往存在多个组织或部门&#xff0c;它们可能拥有独立的 LDAP 服务…

las数据转pcd数据

las数据转pcd数据 一、算法原理1.介绍las2.主要函数 二、代码三、结果展示3.1 las数据3.2 las转换为pcd 四、相关数据链接 一、算法原理 1.介绍las LAS文件按每条扫描线排列方式存放数据,包括激光点的三维坐标、多次回波信息、强度信息、扫描角度、分类信息、飞行航带信息、飞…

LeetCode算法实践——前缀和从入门到入土

前缀和算法 对于一个数组a&#xff0c;和为s数组&#xff1b;其每一个下标的前缀和为s[0]0,s[i]s[i-1]a[i]。 从上面可以推导出left到right之间的前缀和为是s[right1]-s[left]。 例如a[3,2,1,2]&#xff0c;对应的前缀和数组为s[0,3,5,6,8]。a的子数组[2,1,2]的和就可以用s[…

ubuntu22.04@laptop OpenCV Get Started: 015_deep_learning_with_opencv_dnn_module

ubuntu22.04laptop OpenCV Get Started: 015_deep_learning_with_opencv_dnn_module 1. 源由2. 应用Demo2.1 C应用Demo2.2 Python应用Demo 3. 使用 OpenCV DNN 模块进行图像分类3.1 导入模块并加载类名文本文件3.2 从磁盘加载预训练 DenseNet121 模型3.3 读取图像并准备为模型输…

用pandas做简单策略回测

一&#xff0c;RSI策略 数据&#xff1a; 代码 import pandas as pd# 读取贵州茅台股票历史交易数据 df pd.read_csv(贵州茅台股票历史交易数据.csv) missing_values df.isnull().sum()# print("缺失值数量&#xff1a;") # print(missing_values)# 计算RSI指标 …

Windows 使设置更改立即生效——并行发送广播消息

目录 前言 1 遍历窗口句柄列表 2 使用 SendMessageTimeout 发送延时消息 3 并行发送消息实现模拟广播消息 4 修改 UIPI 消息过滤器设置 5 托盘图标刷新的处理 6 完整代码和测试 本文属于原创文章&#xff0c;转载请注明出处&#xff1a; https://blog.csdn.net/qq_5907…

PostgreSQL里实现计算多个数字的排列组合

在进行排列组合的时候&#xff0c;每一次需要知道是否有重复的值&#xff0c;并过滤出已经排列过的值。这个可以创建支持可变参数的函数来实现。下边的函数用到了聚合判断&#xff0c;并且可变参数使用variadic标记的数组。 postgres<16.1>(ConnAs[postgres]:PID[188277…

SICTF Round#3 wp web

web hacker sql无列名注入&#xff1b; 提示查询username参数&#xff0c;flag在flag表中&#xff1b; 传参测试发现&#xff0c;union select 可用&#xff0c;空格被过滤可以使用/**/代替 &#xff0c;or也被过滤了且无法大小写、双写等绕过&#xff0c;导致无法查询flag表…

在线SM3 HMAC加密工具

在线HMAC加密工具提供一站式服务&#xff0c;支持MD5至SHA512、RIPEMD160及SM3等多种哈希算法&#xff0c;用户可便捷选择算法并生成安全的HMAC散列值&#xff0c;确保消息完整性与验证来源。适用于开发调试、网络安全测试及敏感数据处理场景。 在线HMAC加密 - BTool在线工具软…

【VSCode编写JavaScript】

VSCode编写JavaScript ■ 下载安装VSCode■ VSCode统一配置■ 格式化工具■ Tab size &#xff08;代码缩进 2个字符&#xff09;![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7b79c59636f147c8b08a0fff37886e0a.png) ■ VSCode安装JS插件■ VSCode新建JS工程代码…

性能测试概述

1.性能测试介绍 好处: 有效的性能测试能给研发、运维团队提供有效的容量规划能力、系统风险识别、系统瓶颈识别、性能调优指导,保障尽量避免这些问题的发生。 例如: 假设:以下场景,不可用10分钟,带来的经济损失 天猫双十一峰值处理订单58.3万笔每秒 京东金融618战报…

fastApi笔记01-路径参数

路径参数 使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量" from fastapi import FastAPIapp FastAPI()app.get("/items/{item_id}") def read_item(item_id):return {"item_id": item_id} http://127.0.0.1:8000/i…