嵌入式学习第十四天

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 s5;

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分以上的学生。

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

相关推荐
朝朝辞暮i7 小时前
C++ 第 23 课:class —— 开始真正进入面向对象
开发语言·c++·算法
小师兄吃牛肉8 小时前
C语言篇:宏
c语言·开发语言
郑同学的笔记8 小时前
【c++随笔28】strcmp 和 memcmp对比
开发语言·c++
炸膛坦客8 小时前
单片机开发工具篇:(十四)配置输出 .map 文件及其本地路径
c语言·单片机·嵌入式硬件
言乐69 小时前
Python根据无法识别搜索词找出可能输入内容模型
开发语言·python·django·virtualenv·pygame
weixin_307779139 小时前
有限产能智能排产与动态重排智能体:从需求解构到技术实现
开发语言·人工智能·算法·架构
kakakahahahaha9 小时前
Windows C盘临时文件清理:%temp%、Windows Temp、Prefetch、Windows.old与hiberfil.sys处理指南
c语言·开发语言·windows
朝朝辞暮i9 小时前
C++ 第 27 课:智能指针 shared_ptr
开发语言·c++·算法
朝朝辞暮i10 小时前
C++ 第 29 课:回调函数 Callback
开发语言·c++·算法
笨笨饿10 小时前
140_AI新手村MCP与Skills是干嘛的
开发语言·人工智能·python·stm32·单片机·嵌入式硬件·物联网