嵌入式学习第十四天

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

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

相关推荐
deng-c-f17 分钟前
Linux C/C++ 学习日记(29):IO密集型与CPU密集型、CPU的调度与线程切换
linux·学习·线程·cpu·io密集·cpu密集
四谎真好看2 小时前
Java 黑马程序员学习笔记(进阶篇18)
java·笔记·学习·学习笔记
洋洋的笔记2 小时前
银行测试学习计划
学习
应用市场2 小时前
构建自定义命令行工具 - 打造专属指令体
开发语言·windows·python
Dfreedom.2 小时前
一文掌握Python四大核心数据结构:变量、结构体、类与枚举
开发语言·数据结构·python·变量·数据类型
一半烟火以谋生2 小时前
Python + Pytest + Allure 自动化测试报告教程
开发语言·python·pytest
虚行2 小时前
C#上位机工程师技能清单文档
开发语言·c#
Allan_20253 小时前
数据库学习
数据库·学习
报错小能手3 小时前
linux学习笔记(43)网络编程——HTTPS (补充)
linux·网络·学习
小羊在睡觉3 小时前
golang定时器
开发语言·后端·golang