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

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体:

    1. 结构体类型定义:

嵌入式学习第十三天!(const指针、函数指针和指针函数、构造数据类型)-CSDN博客

    2. 结构体变量的定义:

嵌入式学习第十三天!(const指针、函数指针和指针函数、构造数据类型)-CSDN博客

    3. 结构体元素的访问:

嵌入式学习第十三天!(const指针、函数指针和指针函数、构造数据类型)-CSDN博客

    4. 结构体的存储:

        内存对齐:

            char      按照1字节对齐

            short     按照2字节对齐

            int         按照4字节对齐

            double  按照4字节对齐

        结构体整体的大小必须为最大基本类型长度的整数倍

    5. 结构体作为函数参数:

struct student stu;GetAllStuInfo(&stu);
int GetAllStuInfo(struct student *pstu);

    6. 结构体数组:

        练习:定义一个学生的类型,封装一个函数GetStuInfo获得学生信息放入结构体中,再封装一个函数PutStuInfo打印学生信息

#include <stdio.h>struct student
{char name[100];char sex;int age;int score;
};int GetAllStuInfo(struct student *pstu, int maxlen)
{int i = 0;int curlen = 0;printf("请输入学生个数:\n");scanf("%d",&curlen);	for(i = 0; i < curlen; i++){scanf("%s", pstu[i].name);scanf(" %c", &pstu[i].sex);scanf("%d", &pstu[i].age);scanf("%d", &pstu[i].score);}return curlen;
}int PutAllStuInfo(struct student *pstu, int len)
{int i = 0;for(i = 0; i < len; i++){printf("姓名:%s\n", pstu[i].name);printf("性别:%c\n", pstu[i].sex);printf("年龄:%d\n", pstu[i].age);printf("分数:%d\n", pstu[i].score);}
}int main(void)
{struct student s[100];int n = 0;n = GetAllStuInfo(s, 100);PutAllStuInfo(s, n);return 0;
}

2. 共用体:

union 共用体名
{数据类型1 成员变量1;数据类型2 成员变量2;数据类型3 成员变量3;...
};

    共同体所有成员变量共享同一片空间

    内存大小端:

        1. 内存小端:

            内存低地址存放低数据位

            内存高地址存放高数据位

        2. 内存大端:

            内存低地址存放高数据位

            内存高地址存放低数据位

        举例应用:

#include <stdio.h>union s
{char a;int b;
};int main(void)
{union s s1;s1.b = 1;if(s1.a){printf("小端\n");}else{printf("大端\n");}#if 0int num = 0x11223344;char *p = NULL;p = (char *)&num;if(*p == 0x11){printf("大端\n");}else{printf("小端\n");}
#endifreturn 0;
}

3.枚举

enum 枚举类型名
{枚举常量1,枚举常量2,枚举常量3,    };

    1. 枚举类型一般说明将来变量的值在给定的常量中选择其一作为它的值

    2. 枚举常量的值总是前一个枚举常量的值+1,第一个默认为0值

    3. 枚举常量默认为int类型,可以直接在程序中使用

4. 位运算运算符:

&按位与与0得0
|按位或或1置1
^按位异或相同为0,相异为1
~按位取反
>>右移右移n位,等价于让该数 /2^n
<<左移z左移n位,等价于让该数 *2^n

    按位异或实现数据交换:

a = a ^ b;  
b = a ^ b;   //b = a ^ b ^ b = a ^ 0 = a;
a = a ^ b;   //a = a ^ b ^ (a ^ b ^ b) = a ^ b ^ a ^ b ^ b = a ^ b ^ a ^ 0//  = a ^ b ^ a = a ^ a ^ b = 0 ^ b = b

    将变量的第n位置0:

 num = num & ~(1 << n)

    将变量的第n位置1:

num = num | (1 << n)

作业:

        有一个班的5个学生,有3门课程。

                1、求第一门课的平均分;

                2、找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均分

                3、找出平均分在90分以上或全部课程成绩在85分以上的学生。

                分别编写三个函数来实现以上三个要求

#include <stdio.h>
#include <string.h>struct student
{char name[32];int no;int score[3];
};double GetAvgScore(struct student *pstu, int len)
{int i = 0;int sum = 0;for(i = 0; i < len; i++){sum += pstu[i].score[0];}return sum / (len+0.0);
}int OutputFailStuInfo(struct student *pstu, int len, int num)
{int i = 0;int j = 0;int k = 0;int cnt = 0;double sum = 0;printf("\n两门以上不及格学生为:\n");for(j = 0; j < len; j++){for(i = 0; i < num; i++){if(pstu[j].score[i] < 60){cnt++;}sum += pstu[j].score[i];}if(cnt >= 2){printf("姓名:%s\n", pstu[j].name);printf("学号:%d\n", pstu[j].no);for(k = 0; k < num; k++){printf("第%d门分数为:%d\n", k+2, pstu[j].score[k]);}printf("平均分数为:%.2lf\n", sum/(num+0.0));printf("\n");}cnt = 0;sum = 0;}return 0;
}int OutputBestStuInfo(struct student *pstu, int len, int num)
{int i = 0;int j = 0;int k = 0;int cnt = 0;int sum = 0;printf("平均分在90分以上或全部成绩在85分以上的学生为:\n");for(j = 0; j < len; j++){for(i = 0; i < num; i++){sum += pstu[j].score[i];if(pstu[j].score[i] > 85){cnt++;}}if(cnt == 3 || sum/num > 90){printf("%s\n", pstu[j].name);}cnt = 0;sum = 0;}
}int main(void)
{struct student stu[5]={{"zhangsan", 202401, {78, 69, 81}},{"lisi", 202402, {49, 57, 73}},{"wangwu", 202403, {32, 53, 67}},{"maliu", 202404, {95, 94, 99}},{"zhaoqi", 202405, {87, 91, 86}}};double avg = 0;avg = GetAvgScore(stu, 5);printf("所有学生第一门课的平均分为: %.2lf\n", avg);OutputFailStuInfo(stu, 5, 3);OutputBestStuInfo(stu, 5, 3);return 0;
}

相关文章:

嵌入式学习第十四天!(结构体、共用体、枚举、位运算)

1. 结构体&#xff1a; 1. 结构体类型定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和指针函数、构造数据类型&#xff09;-CSDN博客 2. 结构体变量的定义&#xff1a; 嵌入式学习第十三天&#xff01;&#xff08;const指针、函数指针和…...

Unix/Linux上的五种IO模型

a.阻塞 blocking 调用者调用了某个函数&#xff0c;等待这个函数返回&#xff0c;期间什么也不做&#xff0c;不停的去检查这个函数有没有返回&#xff0c;必须等这个函数返回才能进行下一步动作。 注意&#xff1a;阻塞并不是函数的行为&#xff0c;而是跟文件描述符有关。通…...

电脑风扇控制温度软件 Macs Fan Control Pro 中文

Macs Fan Control Pro是一款专为Mac用户设计的风扇控制软件&#xff0c;旨在提供更精细的风扇转速控制和温度监控。这款软件通过实时监测Mac内部硬件的温度&#xff0c;自动或手动调整风扇的转速&#xff0c;以确保系统温度保持在理想范围内。 Macs Fan Control Pro提供了直观…...

初谈C++:引用

文章目录 前言概述引用特性应用场景做参数做返回值 传值、传引用效率比较引用和指针的区别 前言 在学习C语言的时候会遇到指针&#xff0c;会有一级指针、二级指针…很容易让人头昏脑胀。在C里面&#xff0c;引入了引用的概念&#xff0c;会减少对指针的使用。引用相当于给一个…...

C++ 数论相关题目 博弈论:拆分-Nim游戏

给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以取走其中的一堆石子&#xff0c;然后放入两堆规模更小的石子&#xff08;新堆规模可以为 0 &#xff0c;且两个新堆的石子总数可以大于取走的那堆石子数&#xff09;&#xff0c;最后无法进行操作的人视为失…...

EDR、SIEM、SOAR 和 XDR 的区别

在一个名为网络安全谷的神秘小镇&#xff0c;居住着四位守护者&#xff0c;他们分别是EDR&#xff08;艾迪&#xff09;、SIEM&#xff08;西姆&#xff09;、SOAR&#xff08;索亚&#xff09;和XDR&#xff08;艾克斯&#xff09;。他们各自拥有独特的能力&#xff0c;共同守…...

修复idea,eclipse ,clion控制台中文乱码

控制台乱码问题主要原因并不在编译器IDE身上&#xff0c;还主要是Windows的控制台默认编码问题。。。 Powershell&#xff0c;cmd等默认编码可能不是UTF-8&#xff0c;无需改动IDE的settings或者properties&#xff08;这治标不治本&#xff09;&#xff0c;直接让Windows系统…...

怎样使用Oxygen XML Editor将MS Word转换成DITA

▲ 搜索“大龙谈智能内容”关注公众号▲ 前阵子分享过一篇文章&#xff1a;《如何将Word/PDF转成高质量XML》。 文章中分享了将Word/PDF转换成高质量XML的思路和大体步骤。有朋友问&#xff1a;有什么工具可以做这个数据转换&#xff0c;具体怎么操作呢&#xff1f; 今天就来…...

【云上建站】快速在云上构建个人网站3——网站选型和搭建

快速在云上构建个人网站3——网站选型和搭建 一、网站选型二、云市场镜像方式一&#xff1a;方式二&#xff1a;1. 进入ECS实例详情页面&#xff0c;点击停止&#xff0c;确保更换操作系统的之前ECS实例处于已停止状态&#xff0c;点击更换操作系统&#xff0c;进行镜像配置。2…...

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数

这个算法的核心思想是通过交换操作&#xff0c;将每个数放到它应该在的位置上。然后再次遍历数组&#xff0c;找到第一个不在正确位置上的数&#xff0c;其索引加一即为缺失的最小正整数。 def first_missing_positive(nums):n len(nums)# 第一次遍历&#xff0c;将数组中的每…...

C#使用RabbitMQ-4_路由模式(直连交换机)

简介 RabbitMQ中的路由模式是一种根据Routing Key有条件地将消息筛选后发送给消费者的模式。在路由模式中&#xff0c;生产者向交换机发送消息时&#xff0c;会指定一个Routing Key。交换机接收生产者的消息后&#xff0c;根据消息的Routing Key将其路由到与Routing Key完全匹…...

PyTorch 之 nn.Parameter

文章目录 使用方法&#xff1a;为什么使用 nn.Parameter&#xff1a;示例使用&#xff1a; 在 PyTorch 中&#xff0c;nn.Parameter 是一个类&#xff0c;用于将张量包装成可学习的参数。它是 torch.Tensor 的子类&#xff0c;但被设计成可以被优化器更新的参数。通过将张量包装…...

KAFKA高可用架构涉及常用功能整理

KAFKA高可用架构涉及常用功能整理 1. kafka的高可用系统架构和相关组件2. kafka的核心参数2.1 常规配置2.2 特殊优化配置 3. kafka常用命令3.1 常用基础命令3.1.1 创建topic3.1.2 获取集群的topic列表3.1.3 获取集群的topic详情3.1.4 删除集群的topic3.1.5 获取集群的消费组列表…...

3d模型上的材质怎么删除---模大狮模型网

在大多数3D软件中&#xff0c;可以通过以下步骤来删除3D模型上的材质&#xff1a; 选择要删除材质的模型&#xff1a;首先&#xff0c;从场景中选择包含目标材质的模型。可以使用选择工具或按名称查找模型。 进入编辑模式&#xff1a;将模型切换到编辑模式。这通常需要选择相应…...

leetcode hot100跳跃游戏Ⅱ

本题和上一题还是有不一样的地方&#xff0c;这个题中&#xff0c;我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。 那么我们还是采用覆盖范围的概念&#xff0c;但是我们需要两个&#xff0c;一个是在当前位置的覆盖范围&#xff0c;另一个是下一步的覆盖…...

大数据期望最大化(EM)算法:从理论到实战全解析

文章目录 大数据期望最大化&#xff08;EM&#xff09;算法&#xff1a;从理论到实战全解析一、引言概率模型与隐变量极大似然估计&#xff08;MLE&#xff09;Jensen不等式 二、基础数学原理条件概率与联合概率似然函数Kullback-Leibler散度贝叶斯推断 三、EM算法的核心思想期…...

【鸿蒙】大模型对话应用(二):对话界面设计与实现

Demo介绍 本demo对接阿里云和百度的大模型API&#xff0c;实现一个简单的对话应用。 DecEco Studio版本&#xff1a;DevEco Studio 3.1.1 Release HarmonyOS SDK版本&#xff1a;API9 关键点&#xff1a;ArkTS、ArkUI、UIAbility、网络http请求、列表布局、层叠布局 对话页…...

MySQL 导入数据

我们可以将已有的数据导入到MySQL数据库中&#xff0c;下面是几种方式&#xff1a; 1、mysql 命令导入 使用 mysql 命令导入语法格式为&#xff1a; mysql -u用户名 -p密码 < 要导入的数据库数据(shulanxt.sql) 实例&#xff1a; # mysql -uroot -p123456 < …...

探索数字经济:从基础到前沿的奇妙旅程

新一轮技术革命方兴未艾&#xff0c;特别是以人工智能、大数据、物联网等为代表的数字技术革命&#xff0c;催生了一系列新技术、新产业、新模式&#xff0c;深刻改变着世界经济面貌。数字经济已成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。预估到20…...

【INTEL(ALTERA)】如何在 Windows 操作系统上设置 Design Space Explorer II 远程 SSH 场

说明 从英特尔 Quartus Prime Pro Edition 软件 22.1 版本开始&#xff0c;您可以选择使用 Windows OpenSSH 服务器设置 Design Space Explorer II &#xff08;DSE II&#xff09;。 解决方法 1.让 DSE II 与 OpenSSH 协同工作的第一步是 安装 OpenSSH。应在远程主机上安装 Op…...

3分钟搞定100个Excel文件:极速多表格查询工具让数据搜索效率提升30倍

3分钟搞定100个Excel文件&#xff1a;极速多表格查询工具让数据搜索效率提升30倍 【免费下载链接】QueryExcel 多Excel文件内容查询工具。 项目地址: https://gitcode.com/gh_mirrors/qu/QueryExcel 你是否经历过这样的绝望时刻&#xff1f;当领导要求从20个Excel报表中…...

3张表搞定财务BP工作!财务BP必须会的3张表

做了这么多年财务数据分析&#xff0c;我发现国内很多公司的财务BP&#xff0c;还停留在自己造表的阶段。每人一套表&#xff0c;格式五花八门&#xff0c;数据口径对不上。结果就是BP花大量时间在拉表、对数的琐事上&#xff0c;真正花在业务分析和决策支持上的时间少之又少。…...

S2-Pro模型推理服务高可用部署:基于Docker与Kubernetes的架构

S2-Pro模型推理服务高可用部署&#xff1a;基于Docker与Kubernetes的架构 1. 为什么需要高可用部署 在实际生产环境中&#xff0c;AI模型推理服务的稳定性直接影响业务连续性。想象一下&#xff0c;当你的电商平台正在举行大促活动&#xff0c;AI推荐系统突然宕机&#xff0c…...

【米家IoT开发】巧用Charles抓包,高效定位与调试网络接口

1. 为什么Charles是米家IoT开发的调试神器 当你开发米家扩展程序时&#xff0c;最头疼的莫过于接口返回异常数据&#xff0c;或者请求莫名其妙失败。这时候如果只能靠猜问题出在哪里&#xff0c;那简直就是在黑暗中摸索。我刚开始做米家IoT开发时&#xff0c;就经常被这种问题困…...

基于GOOSE - Transformer - LSTM的数据回归预测探索

基于GOOSE-Transformer-LSTM的数据回归预测 模型结合Transformer的全局注意力机制和LSTM的短期记忆及序列处理能力 首先&#xff0c;采用Transformer自注意力机制捕捉数据的全局依赖性&#xff0c;并输出一个经过全局上下文编码的表示&#xff1b;然后&#xff0c;采用2024年最…...

ai赋能开发:让快马智能助手帮你诊断和优化openclaw ubuntu部署难题

最近在Ubuntu上部署OpenClaw项目时&#xff0c;遇到了不少头疼的问题。从依赖冲突到参数调优&#xff0c;每一步都可能踩坑。不过我发现&#xff0c;借助AI辅助开发工具&#xff0c;这些问题可以变得更可控。今天就来分享下如何构建一个AI工具箱来优化OpenClaw的部署和开发体验…...

OpenShamrock:零基础搭建QQ智能交互系统完全指南

OpenShamrock&#xff1a;零基础搭建QQ智能交互系统完全指南 【免费下载链接】OpenShamrock A Bot Framework based on Xposed with OneBot11 项目地址: https://gitcode.com/gh_mirrors/op/OpenShamrock 核心价值解析&#xff1a;为什么选择OpenShamrock构建QQ机器人&a…...

ESXI系统安装全流程详解:从U盘启动到网络配置

1. 制作ESXI系统U盘启动盘 准备一个容量至少8GB的U盘&#xff0c;建议使用USB3.0接口的高速U盘&#xff0c;这样写入速度会快很多。我实测过&#xff0c;用USB2.0的U盘写入一个ESXI镜像可能需要20分钟&#xff0c;而USB3.0通常5分钟就能搞定。 首先需要下载两个关键文件&#x…...

终极窗口置顶指南:如何让重要窗口永远不被遮挡

终极窗口置顶指南&#xff1a;如何让重要窗口永远不被遮挡 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop AlwaysOnTop 是一个轻量级的 Windows 应用程序&#xff0c;它能够将任…...

为什么90%的词库转换都会失败?输入法词库迁移的终极解决方案:全方位指南

为什么90%的词库转换都会失败&#xff1f;输入法词库迁移的终极解决方案&#xff1a;全方位指南 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化时代&#x…...