当前位置: 首页 > news >正文

CExercise_09_结构体和枚举_2VS的Debug模式查看它的内存布局,采用结构体数组的方式存储信息,调用函数打印结构体数组.

题目:

下面结构体类型的变量的内存布局是怎样的?请使用VS的Debug模式查看它的内存布局

typedef struct stundent_s {int number;char name[25];char gender;int chinese;int math;int english;
} Student;

// 结构体对象的声明和初始化 Student s1 = { 1, “Jack”, ‘m’, 100, 100, 100 };
要求:截图展示内存窗口中的对齐填充,然后提交截图。

第二题:

基于上述的结构体类型的定义,实现以下功能:

1.从键盘输入5个学生的信息,将这些同学的信息采用结构体数组的方式存储起来。(代码直接写在main函数里)

2.编写一个函数,用于打印单个结构体信息。然后在main函数里调用该函数,打印这个结构体数组。

3.编写一个函数,用于求三个学科的平均分。然后在main函数里调用该函数,打印这三个学科的平均分。


关键点


分析:


代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>#define MAX_BOOKS 10
#define TITLE_LENGTH 100
#define AUTHOR_LENGTH 50// 定义书籍类别的枚举类型
typedef enum {SCIENCE_FICTION,    // 科幻LITERATURE,         // 文学HISTORY,            // 历史TECHNOLOGY,         // 科技OTHER               // 其他
} Genre;// 定义书籍结构体类型
typedef struct {int id;char title[TITLE_LENGTH];char author[AUTHOR_LENGTH];Genre genre;
} Book;void print_book_info(Book *books, int count);   // 打印所有书籍信息
void find_books_by_genre(Book *books, int count, Genre genre);  // 根据书籍类别打印书籍
char *get_genre_name(Genre genre);    // 将书籍类别的枚举值转换成中文表示的类别int main() {Book books[MAX_BOOKS] = {{1, "三体", "刘慈欣", SCIENCE_FICTION},{2, "红楼梦", "曹雪芹", LITERATURE},{3, "中国通史", "吕思勉", HISTORY},{4, "时间简史", "史蒂芬·霍金", TECHNOLOGY},{5, "围城", "钱钟书", LITERATURE},{6, "傲慢与偏见", "简·奥斯汀", LITERATURE},{7, "呼啸山庄", "艾米莉·勃朗特", LITERATURE},{8, "活着", "余华", LITERATURE},{9, "明朝那些事儿", "当年明月", HISTORY},{10, "乌合之众", "古斯塔夫·勒庞", OTHER}};int count = MAX_BOOKS;// 打印所有书籍的信息print_book_info(books, count);// 用户输入书籍类别编号并查找该类别的书籍int genre;printf("请输入书籍类别编号 (0: 科幻, 1: 文学, 2: 历史, 3: 科技, 4: 其他)来查询书籍: ");scanf("%d", &genre);find_books_by_genre(books, count, (Genre)genre);return 0;
}// 打印所有书籍的信息
void print_book_info(Book *books, int count) {printf("---------------所有的书籍信息---------------\n\n");for (int i = 0; i < count; i++) {printf("编号: %d, 书名: %s, 作者: %s, 类别: %s\n",books[i].id, books[i].title, books[i].author, get_genre_name(books[i].genre));}printf("\n");
}// 根据书籍类别查找并打印该类别的所有书籍信息
void find_books_by_genre(Book *books, int count, Genre genre) {printf("类别为 %s 的书籍有:\n", get_genre_name(genre));for (int i = 0; i < count; i++) {if (books[i].genre == genre) {printf("编号: %d, 书名: %s, 作者: %s\n",books[i].id, books[i].title, books[i].author);}}
}// 将书籍类别的枚举值转换成中文表示的类别
const char *get_genre_name(Genre genre) {switch (genre) {case SCIENCE_FICTION: return "科幻";case LITERATURE: return "文学";case HISTORY: return "历史";case TECHNOLOGY: return "科技";case OTHER: return "其他";default: return "未知";}
}

解决方案总结:

相关文章:

CExercise_09_结构体和枚举_2VS的Debug模式查看它的内存布局,采用结构体数组的方式存储信息,调用函数打印结构体数组.

题目&#xff1a; 下面结构体类型的变量的内存布局是怎样的&#xff1f;请使用VS的Debug模式查看它的内存布局 typedef struct stundent_s {int number;char name[25];char gender;int chinese;int math;int english; } Student;// 结构体对象的声明和初始化 Student s1 { 1, …...

LeetCode 热题 100_零钱兑换(85_322_中等_C++)(动态规划)

LeetCode 热题 100_零钱兑换&#xff08;85_322&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;动态规划&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;动态规划&#xff09;&a…...

Java——抽象方法抽象类 接口 详解及综合案例

1.抽象方法抽象类 介绍 抽象方法: 将共性的行为(方法)抽取到父类之后&#xff0c; 由于每一个子类执行的内容是不一样&#xff0c; 所以&#xff0c;在父类中不能确定具体的方法体。 该方法就可以定义为抽象方法。 抽象类: 如果一个类中存在抽象方法&#xff0c;那么该类就必须…...

国产芯片解析:LDR6501 Type-C接口OTG充电PD芯片详解

LDR6501 是一款专为 USB Type-C 设备设计的单C口DPR接口PD通信芯片&#xff0c;封装形式为 SOT23-6。此款芯片具有多项实用功能&#xff0c;在耳机转接器、领夹麦克风以及 OTG 转接头等应用中表现出色。 应用领域 ‌耳机转接器‌&#xff1a;许多新型耳机采用 Type-C 接口&am…...

Payoneer(P卡)会关联吗?如何有效防止P卡关联?

随着跨境电商和全球支付需求的增加&#xff0c;Payoneer&#xff08;简称P卡&#xff09;成为了许多商家和个人进行国际支付和收款的重要工具。Payoneer是一种全球支付平台&#xff0c;支持用户跨国收款、汇款&#xff0c;并提供多种货币的账户支持。 许多从事跨境电商的商家和…...

前端基础之《Vue(3)—计算属性》

一、computed选项 1、计算属性 语法&#xff1a;在computed选项中&#xff0c;定义计算属性方法&#xff0c;在方法体使用声明式变量进行若干计算。 2、计算属性一定是个函数。一定有返回值。 3、计算属性的作用 &#xff08;1&#xff09;用于优化指令的表达式&#xff0c;…...

【Linux】Linux 权限:数字背后的神秘 “门禁卡” 系统

目录 权限的基本概念Linux上用户的分类超级用户和普通用户用户之间的切换文件访问者的分类 文件属性与访问权限Linux下的文件类型文件后缀在Linux中的作用文件自身的属性【⭐】文件访问者的三种权限【rwx】文件权限值的表示方法 文件访问权限的相关设置方法chmod——设置文件的…...

Java中List方法的使用详解

目录 一、List接口概述二、List常用方法&#xff08;一&#xff09;创建List对象&#xff08;二&#xff09;添加元素&#xff08;三&#xff09;删除元素&#xff08;四&#xff09;查找元素&#xff08;五&#xff09;遍历列表&#xff08;六&#xff09;列表的大小&#xff…...

多模态大语言模型arxiv论文略读(十一)

Can We Edit Multimodal Large Language Models? ➡️ 论文标题&#xff1a;Can We Edit Multimodal Large Language Models? ➡️ 论文作者&#xff1a;Siyuan Cheng, Bozhong Tian, Qingbin Liu, Xi Chen, Yongheng Wang, Huajun Chen, Ningyu Zhang ➡️ 研究机构: 浙江大…...

JS—防抖和节流:1分钟掌握防抖和节流

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–防抖三–节流四–进阶应用五–总结 二. 防抖&#xff08;Debounce&#xff09; 防抖&#xff08;Debebounce&#xff09;和节流&#xff08;Throttle&#xff09;都是前端开发中用于优化高频事件性能的两…...

MCP基础学习二:MCP服务搭建与配置

文章目录 MCP服务搭建与配置一&#xff0c;学习目标&#xff1a;二&#xff0c;学习内容&#xff1a;1. 如何搭建MCP服务端服务端初始化与配置MCP服务架构与数据流交互图核心实现注册服务功能服务器启动与API暴露 2. 本地应用与MCP服务的集成客户端SDK实现客户端应用实现功能演…...

MyBatis 操作数据库

目录 什么是MyBatis? 注释 Mapper注释的介绍和使用 Select注释的介绍和使用 SpringBootTest注释的介绍和使用 Test注释的介绍的使用 MyBatis入门​ 1&#xff09;准备工作 <1>创建工程​ <2>数据准备​ 2&#xff09;配置数据库连接字符串 3&#xff…...

蓉光:科技与自然的千年交响

故事背景 故事发生在中国四川成都&#xff0c;这座千年古城在近未来完成蜕变&#xff0c;青城山的云雾与锦江的碧波间&#xff0c;智能建筑如雨后春笋般生长。全城建筑采用太阳能皮肤&#xff0c;街道流淌着数字化的都江堰水系&#xff0c;杜甫草堂的飞檐与机械芙蓉树共舞&…...

[C语言]gets和fgets函数区别及详解

一、gets 每当讨论 gets 函数时&#xff0c;大家不由自主地就会想起 1988 年的“互联网蠕虫”&#xff0c;它在 UNIX 操作系统的 finger 后台程序中使用一个 gets 调用作为它的攻击方式之一。很显然&#xff0c;对蠕虫病毒的实现来说&#xff0c; gets 函数的功劳不可小视。不…...

【场景应用3】audio_classification:音频分类的微调

1 引言 本笔记展示了如何对多语种预训练的语音模型进行微调,以实现自动语音识别(Automatic Speech Recognition)。 本笔记旨在使用SUPERB数据集中的关键词检测子集,并且可以使用任何来自模型库(Model Hub)的语音模型检查点,只要该模型有一个包含序列分类头(Sequence …...

【前端】【难点】前端富文本开发的核心难点总结与思路优化

前端富文本开发的核心难点总结 富文本编辑器在前端开发中广泛应用于内容管理系统、文章发布、评论区等场景。其开发与集成存在较多复杂性&#xff0c;涵盖内容结构管理、交互体验、跨平台兼容性等方面&#xff0c;以下逐项分析。 二、富文本开发的具体难点分析 &#xff08;一…...

如何优雅使用 ReentrantLock 进行加解锁:避免常见坑点,提高代码可维护性

引言&#xff1a;锁的基本概念和问题 在多线程编程中&#xff0c;为了确保多个线程在访问共享资源时不会发生冲突&#xff0c;我们通常需要使用 锁 来同步对资源的访问。Java 提供了不同的锁机制&#xff0c;其中 ReentrantLock 是一种最常用且功能强大的锁&#xff0c;它属于…...

帕金森患者行动迟缓,日常生活怎么破局?

帕金森病&#xff0c;是一种常见于中老年人的神经退行性疾病&#xff0c;正悄然改变着无数患者的生活轨迹。它初期症状隐匿&#xff0c;常以手抖为信号&#xff0c;起初可能只是在安静状态下&#xff0c;手部出现轻微且有节律的震颤&#xff0c;随着时间推移&#xff0c;震颤逐…...

7-openwrt-one通过web页面配置访客网络、无线中继等功能

前几个章节一直在介绍编译、分区之类的,都还没正常开始使用这个路由器的wifi。默认wifi是没有启动的,前面还是通过手动修改uci配置启动的,这个章节介绍下官方web页面的使用。特别是访客网络、无线中继 1、开启wifi,配置wifi基本信息 我们使用有线连接路由器,通过192.168.…...

塑造现代互联网的力量:Berkeley在网络领域的影响与贡献

引言 “Berkeley” 这个名字在计算机网络和互联网领域中具有举足轻重的地位&#xff0c;许多关键的技术、协议和工具都与其紧密相关。它与 加利福尼亚大学伯克利分校&#xff08;UC Berkeley&#xff09; 密切相关&#xff0c;该校在计算机科学与网络研究中做出了许多开创性的…...

大数据学习(105)-Hbase

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

c# 系列pdf转图片 各种处理3--net3.1到net8 PDFtoImage

最近一直在做pdf渲染图片的问题&#xff0c;nuget PDFtoImage 支持3.1到net8 &#xff0c;直接上代码 private static void DownloadFileAsync(string url, string localPath){using (HttpClient client new HttpClient()){client.DefaultRequestHeaders.Add("User-Agen…...

宁德时代25年春招笔试演绎数字推理SHL测评题库

宁德时代校招测评包含演绎推理数字推理两部分&#xff0c;请单击以下链接进行测评&#xff0c;详细操作指引请参见如下指引&#xff0c;请在测试前了解&#xff0c;大约用时60分钟。正式测评有两个部分:数字推理18分钟演绎推理18分钟&#xff0c;数字推理共10题&#xff0c;演绎…...

C# 看门狗策略实现

using System; using System.Threading;public class Watchdog {private Timer _timer;private volatile bool _isTaskAlive;private readonly object _lock new object();private const int CheckInterval 5000; // 5秒检测一次private const int TimeoutThreshold 10000; …...

聊透多线程编程-线程池-5.C# 线程池(ThreadPool)详解

1. 线程池的基本概念 线程池的作用 由于每创建一个线程都需要该线程分配一定的内存空间&#xff0c;因此创建大量线程会导致内存使用量迅速增加&#xff0c;并可能导致性能问题。线程池的主要目的是减少线程创建和销毁的开销&#xff0c;从而提高程序性能。线程池维护了…...

清华DeepSeek教程又双叒叕更新了!(共7份PDF下载)

清华团队的DeepSeek教程又双叒叕更新了&#xff0c;目前共计有7份DeepSeek的教程&#xff0c;分别是《DeepSeek从入门到精通》、《DeepSeek赋能职场》、《普通人如何抓住DeepSeek红利》、《DeepSeekDeepResearch&#xff1a;让科研像聊天一样简单》、《DeepSeek与AI幻觉》、《A…...

免费在线文档工具,在线PDF添加空白页,免费在任意位置插入空白页,多样化的文件处理

小白工具&#xff08;https://www.xiaobaitool.net/files/pdf-add-page/ &#xff09;是一款免费的在线文档工具&#xff0c;专注于为用户提供便捷的 PDF 空白页添加服务。 功能特点&#xff1a;该工具支持在 PDF 文件的任意位置插入单页或多页空白页&#xff0c;能满足用户不同…...

MATLAB在哪些特定领域比Python更有优势?

文章目录 前言科学研究与工程计算数值计算信号处理控制系统设计 教育领域易于学习和上手教学资源丰富 快速原型开发集成开发环境便捷 前言 MATLAB 在以下特定领域比 Python 更具优势&#xff1a; 科学研究与工程计算 数值计算 高效矩阵运算&#xff1a;MATLAB 以矩阵为基本数…...

CAN协议

CAN简介 TJA1050(高速CAN收发器) 5V供电 界定符用来隔开各个数据 这个时候就要用到采样了 谁先谁后&#xff1f;&#xff1f;仲裁机制 发送邮箱用来放帧的 正常模式&#xff1a;正常收发 静默模式&#xff1a;只收不发 环回模式&#xff1a;不读&#xff0c;自己收 环回静…...

MFC案例:用鼠标移动窗口图像的实验

当使用基于对话框的MFC项目窗口显示图像时&#xff0c;如窗口的尺寸小于图像的尺寸&#xff0c;在不做缩放的情况下按照原图尺寸在窗口显示&#xff0c;那么只能看到图像的局部&#xff0c;这时我们希望可以通过鼠标移动图像进而显示其它部分。今天就进行这个实验&#xff0c;编…...

Linux基础IO(五)之用户缓冲区

文章目录 缓冲区FILE初步实现缓冲区 缓冲区 FILE 因为IO相关函数与系统调用接口对应&#xff0c;并且库函数封装系统调用&#xff0c; 所以本质上&#xff0c;访问文件都是通过fd访问的。 所以C库当中的FILE结构体内部&#xff0c;必定封装了fd。 编写代码and查看现象&…...

【Scrapy】Scrapy教程12——中间件

中间件这部分算是一个高阶的Scrapy内容,即便不了解这部分也可以使用Scrapy,但是一些特殊情况使用中间件就比较方便处理了,比如修改请求和响应等。 通过之前的工作原理图中,我们了解到Scrapy中有两个中间件,分别是下载器中间件和爬虫中间件,本节将一一讲解如何激活、编写自…...

C++学习之ORACLE①

目录 1.ORACLE数据库简介 2..ORACLE数据库安装 3..ORACLE体系结构 4..ORACLE基本概念 5..ORACLE基本元素 6..ORACLE数据库启动和关闭 7.SQLPLUS登录ORACLE数据库相关操作 8.SQLPLUS的基本操作 9.oracle中上课使用的方案 10.SQL语言分类 11.SQL中的select语句语法和注…...

vue---按钮防抖和节流----项目问题

一般来说前端都需要做按钮防抖避免一个时间被重复触发&#xff0c;首先可能会出现bug&#xff0c;消耗服务器性能&#xff0c;用户体验也不是很好。 1.防抖 解决方法&#xff1a;main.js文件自定义指令 Vue.directive("preventReClick", {inserted(el, binding) {…...

【LunarVim】解决which-key 自定义键位注册不成功问题

问题描述 LunarVim将which-key设置放在一个keymaps.lua中&#xff0c;然后config.lua调用reload “user.keymaps”&#xff0c;键位没用注册成功&#xff0c;而直接写在config.lua中&#xff0c;就注册成功 这暴露了LunarVim 插件和配置加载顺序的一些细节坑&#xff0c;下面解…...

湖北趣豆智能科技有限公司浅析XR技术对传统游戏的影响

在科技飞速发展的当下&#xff0c;XR&#xff08;扩展现实&#xff09;技术正以前所未有的态势重塑游戏行业格局。湖北趣豆智能科技有限公司凭借在XR技术与游乐设备融合领域的创新实践&#xff0c;对XR技术给传统游戏带来的影响有着深刻见解。 沉浸体验升级&#xff0c;重塑游戏…...

[操作系统] 进程间通信:system V共享内存

文章目录 内存共享示意图共享内存的管理代码shmget 函数原理先创建共享内存如何保证两个不同的进程拿到的是一块共享内存 shmctl 函数IPC_RMID参数 shmat函数无同步机制同步机制是什么模拟演示非同步效果如何提供保护机制 shmdt再谈描述共享内存的数据结构struct shmid_dsstruc…...

科技快讯 | 阿里云百炼MCP服务上线;英伟达官宣:CUDA 工具链将全面原生支持 Python

李飞飞团队最新AI报告&#xff1a;中美模型性能差距近乎持平 4月8日&#xff0c;斯坦福大学以人为本人工智能研究所发布《2025年人工智能指数报告》。报告显示&#xff0c;2023年AI性能显著提升&#xff0c;AI应用加速&#xff0c;投资增长&#xff0c;中美AI模型差距缩小。报告…...

踩雷,前端一直卡在获取token中

问题&#xff1a;一直卡在var token SecureStorage.Default.GetAsync("auth_token").Result; public VideoService(){_httpClient new HttpClient();var token SecureStorage.Default.GetAsync("auth_token");} 这是一个典型的同步等待异步操作导致的死…...

MATLAB双目标定

前言&#xff1a; 现在有许多双目摄像头在出厂时以及标定好&#xff0c;用户拿到手后可以直接使用&#xff0c;但也有些双目摄像头在出厂时并没有标定。因而这个时候就需要自己进行标定。本文主要介绍基于matlab工具箱的自动标定方式来对双目相机进行标定。 1、MATLAB工具箱标…...

4.10学习总结

完成两道算法题&#xff08;感觉对贪心的思路很难去想到如何解&#xff09; 完成stream流的学习&#xff0c;开始学习方法引用...

QML自定义组件

自定义组件是 QML 开发中的核心概念&#xff0c;它允许您创建可重用的 UI 元素和逻辑单元。以下是创建和使用自定义组件的完整方法。 1. 基本自定义组件创建 创建单独组件文件 (推荐方式) qml // MyButton.qml&#xff08;单独一个qml文件&#xff09;import QtQuick 2.15R…...

多模态大语言模型arxiv论文略读(十)

Towards End-to-End Embodied Decision Making via Multi-modal Large Language Model: Explorations with GPT4-Vision and Beyond ➡️ 论文标题&#xff1a;Towards End-to-End Embodied Decision Making via Multi-modal Large Language Model: Explorations with GPT4-Vi…...

关于 Spring Boot + Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明,涵盖从开发到生产部署的全流程

以下是关于 Spring Boot Vue 前后端开发的打包、测试、监控、预先编译和容器部署 的详细说明&#xff0c;涵盖从开发到生产部署的全流程&#xff1a; 1. 打包 1.1 后端&#xff08;Spring Boot&#xff09; 打包方式 使用 Maven 或 Gradle 打包成可执行的 JAR/WAR 文件&…...

【Raqote】 1.1 路径填充ShaderMaskBlitter 结构体(blitter.rs)

ShaderMaskBlitter 结构体实现了 Blitter trait&#xff0c;用于带遮罩的着色器渲染。 结构体定义 pub struct ShaderMaskBlitter<a> {pub x: i32, // 目标区域的起始x坐标pub y: i32, // 目标区域的起始y坐标pub shader: &a dyn Shader, //…...

如何用 esProc 实现 Oracle 和 MySQL 的混合运算

逻辑数仓可以实现多源混算&#xff0c;但需要配置视图、预处理数据&#xff0c;结构太沉重。duckdb 是轻量级的方案&#xff0c;但没有内置 Oracle 的 connector&#xff0c;自己开发难度又太高。同为轻量级方案&#xff0c;esProc 支持 JDBC 公共接口&#xff0c;可以实现任何…...

zabbix和prometheus选择那个监控呢

文章目录 Zabbix 介绍概述架构组成特点适用场景 Prometheus 介绍概述架构组成特点适用场景 Zabbix vs Prometheus 对比架构与组件Zabbix 架构Prometheus 架构 监控要点与最佳实践告警与可视化ZabbixPrometheus Alertmanager Grafana 伸缩与高可用ZabbixPrometheus 运维成本与…...

SQL 查询中使用 IN 导致性能问题的解决方法

当 SQL 查询中使用 IN 子句导致查询长时间运行或挂起时&#xff0c;通常是由于以下几个原因造成的&#xff1a; 常见原因 IN 列表中的值过多 - 当 IN 子句包含大量值时&#xff08;如数千或更多&#xff09;&#xff0c;数据库需要处理大量比较操作 缺乏合适的索引 - 被查询的…...

UML-饮料自助销售系统(无法找零)序列图

一、题目&#xff1a; 在饮料自动销售系统中&#xff0c;顾客选择想要的饮料。系统提示需要投入的金额&#xff0c;顾客从机器的前端钱币口投入钱币&#xff0c;钱币到达钱币记录仪&#xff0c;记录仪更新自己的选择。正常时记录仪通知分配器分发饮料到机器前端&#xff0c;但可…...

Go语言中的runtime包是用来做什么的?

在Go语言中&#xff0c;runtime包提供了与Go运行时系统的交互接口。以下是runtime包的主要功能和用途&#xff1a; 1. 运行时信息 runtime包可以获取关于Go程序运行时的信息&#xff0c;包括&#xff1a; 内存使用情况&#xff1a;可以查看内存分配和使用的统计信息&#xf…...