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

news2024/12/23 9:38:40

一、作业

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.内存分配

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

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

相关文章

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序

什么是约瑟夫环问题&#xff1f; 约瑟夫问题是个有名的问题&#xff1a;N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被杀掉&#xff0c;最后剩下一个&#xff0c;其余人都将被杀掉。例如N6&#xff0c;M5&#xff0c;被杀掉的顺序是&#xff1a;5&#xff…

如何利用Idea创建一个Servlet项目(新手向)

&#x1f495;"Echo"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;如何利用Idea创建一个Servlet项目(新手向) Servlet是tomcat的api,利用Servlet进行webapp开发很方便,本文将介绍如何通过Idea创建一个Servlet项目(一共分为七步,这可能是我们写过的…

备战蓝桥杯---动态规划(应用1)

话不多说&#xff0c;直接看题&#xff1a; 首先我们考虑暴力&#xff0c;用二维前缀和即可&#xff0c;复杂度为o(n^4). 其实&#xff0c;我们不妨枚举任意2行&#xff0c;枚举以这个为边界的最大矩阵。 我们把其中的每一列前缀和维护出来&#xff0c;相当于把一个矩阵压缩成…

观察者模式和发布订阅模式的区别

从下图中可以看出&#xff0c;观察者模式中观察者和目标直接进行交互&#xff0c;而发布订阅模式中统一由调度中心进行处理&#xff0c;订阅者和发布者互不干扰。这样一方面实现了解耦&#xff0c;还有就是可以实现更细粒度的一些控制。比如发布者发布了很多消息&#xff0c;但…

【Vue3】搭建Pinia环境及其基本使用

下载 npm i pinia引入并注册 App.vue import { createApp } from vue import { createPinia } from pinia import App from ./App.vue // 1. 引入 import { createPinia } from piniaconst app createApp(App) // 2. 创建 const pinia createPinia() // 3. 注册 app.use(p…

python----面向对象

这里写目录标题 面向对象思想类类的定义类名的定义类的构造函数的定义类的属性类的方法定义 继承语法关于构造函数问题 文件操作绝对路径相对路径pycharm获取绝对路径和相对路径文件读写读文件open&#xff08;&#xff09;read&#xff08;&#xff09;readline&#xff08;&a…

2021年CSP-J认证 CCF信息学奥赛中小学初级组 第一轮真题-单项选择题解析

2021年 中小学信息学奥赛CSP-J真题解析 1、以下不属于面向对象程序设计语言的是 A、c B、python C、java D、c 答案&#xff1a;D 考点分析&#xff1a;主要考查编程语言&#xff0c;ABC都是面向对象语言&#xff0c;D选项c语言是面向过程语言&#xff0c;答案D 2、以下奖…

202427读书笔记|《猫的自信:治愈系生活哲学绘本》——吸猫指南书,感受猫咪的柔软慵懒与治愈

202427读书笔记|《猫的自信&#xff1a;治愈系生活哲学绘本》——吸猫指南书&#xff0c;感受猫咪的柔软慵懒与治愈 《猫的自信&#xff1a;治愈系生活哲学绘本》作者林行瑞&#xff0c;治愈系小漫画绘本&#xff0c;10分钟可以读完的一本书&#xff0c;线条明媚&#xff0c;自…

SQL注入工具之SQLmap入门操作

了解SQLmap 基础操作 SQLmap是一款自动化的SQL注入工具&#xff0c;可以用于检测和利用SQL注入漏洞。 以下是SQLmap的入门操作步骤&#xff1a; 1.下载SQLmap&#xff1a;可以从官方网站&#xff08;https://sqlmap.org/&#xff09;下载最新版本的SQLmap。 2.打开终端&#…

CDP和Chrome

CDP和Chrome CDP和WebDriver Protocol WebDriver和 Chrome DevTools Protocol&#xff08;CDP&#xff09; 是用于自动化浏览器的两个主要协议&#xff0c;大多数的浏览器自动化工具都是基于上述其中之一来实现的。可以通过这两种形式来和浏览器交互&#xff0c;通过代码来控…

使用maven集成spring在测试的时候报出了如下的异常:version 60

使用maven集成spring在测试的时候报出了如下的异常&#xff1a; Caused by: java.lang.IllegalArgumentException: Unsupported class file major version 60 解决&#xff1a;

MAC M1安装vmware和centos7虚拟机并配置静态ip

一、下载vmware和centos7镜像 1、VMWare Fusion 官网的下载地址是&#xff1a;下载地址 下载好之后注册需要秘钥&#xff0c;在官网注册后使用免费的个人秘钥 2、centos7 下载地址&#xff1a; https://biosyxh.cn:5001/sharing/pAlcCGNJf 二、虚拟机安装 直接将下…

比特币正在蚕食黄金

号外&#xff1a;教链内参2.19《内参&#xff1a;蹭热点、骗流量、割韭菜》 众所周知&#xff0c;自从美国SEC批准比特币现货ETF登陆美股市场之后&#xff0c;打开了美国金融市场泛滥的流动性向比特币流入的大门。只用了短短的30个交易日&#xff0c;比特币ETF就从零膨胀到了近…

基于RBAC的权限管理的理论实现和权限管理的实现

权限管理的理论 首先需要两个页面支持&#xff0c;分别是角色管理和员工管理&#xff0c;其中角色管理对应的是角色和权限的配合&#xff0c;员工管理则是将登录的员工账号和员工所处的角色进行对应&#xff0c;即通过新增角色这个概念&#xff0c;让权限和员工并不直接关联&a…

Ubuntu18.04有线连接后,无法设置ip地址以及显示网口设置

前提&#xff1a;首先测试过网线是完全没问题的 桌面端找不到设置网口 终端输入&#xff1a; ifconfig 没有找到网口设置和对应IP 然后查询网口驱动是否正常安装&#xff0c;输入&#xff1a; lspci | grep Ethernet 有输出说明网口驱动正常安装 然后查询电脑的ip地址&am…

2023年全球软件开发大会(QCon北京站2023)2月:核心内容与学习收获(附大会核心PPT下载)

本次峰会是一个汇集了最新技术趋势、最佳实践和创新思维的盛会。对于从事软件开发和相关领域的专业人士来说&#xff0c;参加这样的大会将有助于他们了解行业动态、提升技能水平、拓展职业视野&#xff0c;并与同行建立联系和合作。 本次峰会包含&#xff1a;AI基础架构、DevO…

Stable Diffusion 绘画入门教程(webui)-lora

通过前边的文章&#xff0c;相信大家已经能够自己产出好看的小姐姐或者小哥哥了&#x1f923; 不知道有没有发现每次生成的脸、身材、衣服、环境、风格等等可能都会有所差异&#xff0c;那么如果这个问题不解决&#xff0c;实用性将大大降低&#xff0c;因此lora诞生了。 文章…

人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096

使用centos安装,注意安装之前,保证系统可以联网,然后执行yum update 先去更新一下系统,可以省掉很多麻烦 20240219_150031 这里我们使用centos系统吧,使用习惯了. ChatGlm首先需要一台个人计算机,或者服务器, 要的算力,训练最多,微调次之,推理需要算力最少 其实很多都支持C…

SpringBoot常见问题

1 引言 Spring Boot是一个基于Spring框架的快速开发脚手架&#xff0c;它简化了Spring应用的初始化和搭建过程&#xff0c;提供了众多便利的功能和特性&#xff0c;比如自动配置、嵌入式Tomcat等&#xff0c;让开发人员可以更加专注于业务逻辑的实现。   Spring Boot还提供了…

IO进程线程作业day2

使用fread和fwrite完成两个图片文件的拷贝 #include <myhead.h> #define high 541 #define wide 541 int main(int argc, const char *argv[]) {//以只读的方式打开图片文件1.bmpFILE *fp NULL;if((fp fopen("./1.bmp", "r")) NULL){perror(&qu…