嵌入式学习第十四天

1.结构体(2):

(1)结构体类型定义

(2)结构体变量的定义

(3)结构体元素的访问

(4)结构体的存储:

内存对齐:

char 按照1字节对齐

short 按照2字节对齐

int 按照4字节对齐

double 按照4字节对齐

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

(5)结构体作为函数参数

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

再封装一个函数PutStuInfo打印学生信息

复制代码
#include <stdio.h>

struct student 
{
	char name[32];
	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);
	}

	return 0;
}

int main(void)
{
	struct student s[100];
	int n = 0;

	n = GetAllStuInfo(s, 100);
	PutAllStuInfo(s, n);

	return 0;
}

(6)结构体数组:

struct student s[5];

2.共用体:

union 共用体名

{

数据类型1 成员变量1;

数据类型2 成员变量2;

数据类型3 成员变量3;

...

};

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

复制代码
#include <stdio.h>

union u 
{
	char a;
	short b;
	int c;
};

int main(void)
{
	union u u1;

	u1.a = 'A';
	printf("%c\n", u1.a);

	u1.b = 20;
	printf("%d\n", u1.b);

	u1.c = 50;
	printf("%d\n", u1.c);
	printf("%d\n", u1.b);

	return 0;
}

内存大小端:

1.内存小端:

内存低地址存放低数据位

内存高地址存放高数据位

2.内存大端:

内存低地址存放高数据位

内存高地址存放低数据位

3.枚举:

enum 枚举类型名

{

枚举常量1,

枚举常量2,

枚举常量3,

..

};

注意:

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

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

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

复制代码
#include <stdio.h>

enum weekday 
{
	Monday = 1,
	Tuesday,
	Wednesday,
	Thurday,
	Friday,
	Saturday,
	Sunday
};

int main(void)
{
	enum weekday day;
	
	printf("请输入今天星期几:\n");
	scanf("%d", (int *)&day);

	switch (day)
	{
		case Monday:printf("1和6限号!\n");break;
		case Tuesday:printf("2和7限号!\n");break;
		case Wednesday:printf("3和8限号!\n");break;
		case Thurday:printf("4和9限号!\n");break;
		case Friday:printf("0和5限号!\n");break;
		case Saturday:
		case Sunday:printf("不限行!\n");
	}

	return 0;
}

4.位运算运算符:

& 按位与

| 按位或

^ 按位异或 相同为0 相异为1

~ 按位取反

>> 右移 右移n位 等价于 让该数 / 2^n

<< 左移 左移n位 等价于 让该数 * 2^n

(1)按位异或实现数据交换:

a = a ^ b;

b = a ^ b;

a = a ^ b;

复制代码
#include <stdio.h>

int main(void)
{
	int a = 100;
	int b = 200;

	a = a ^ b;
	b = a ^ b;
	a = a ^ b;

	printf("a = %d, b = %d\n", a, b);

	return 0;
}

(2)将变量的第n位置0:

num = num & ~(1 << n)

(3)将变量的第n位置1:

num = num | (1 << n)

作业:

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

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

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

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

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

相关推荐
leo__5206 分钟前
IEC 104 协议 C 语言实现
c语言·数据库
CHANG_THE_WORLD6 分钟前
python 批量终止进程exe
开发语言·python
古城小栈8 分钟前
从 cargo-whero 库中,找到提升 rust 的契机
开发语言·后端·rust
晓梦林24 分钟前
MAZESEC-X1靶场学习笔记
笔记·学习
我的xiaodoujiao1 小时前
API 接口自动化测试详细图文教程学习系列15--项目实战演练2
python·学习·测试工具·pytest
TImCheng06091 小时前
职场人AI学习周期评估:不同学习路径的时间成本
人工智能·学习
周末也要写八哥1 小时前
C4D/Cinema 4D 2026超详细下载与安装教程(附资源包)
学习·数学建模
xinzheng新政1 小时前
openclaw dashboard报错 internal server error
学习
Gary Studio1 小时前
安卓HAL C++基础-智能指针
开发语言·c++
啧不应该啊2 小时前
Day1 Python 与 C 的类型区别
c语言·开发语言