嵌入式学习第十四天

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

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

相关推荐
Fairy_sevenseven11 分钟前
【二十八】【QT开发应用】模拟WPS Tab
开发语言·qt·wps
蜡笔小新星19 分钟前
Python Kivy库学习路线
开发语言·网络·经验分享·python·学习
凯子坚持 c19 分钟前
C语言复习概要(三)
c语言·开发语言
无限大.31 分钟前
c语言200例 067
java·c语言·开发语言
余炜yw32 分钟前
【Java序列化器】Java 中常用序列化器的探索与实践
java·开发语言
攸攸太上32 分钟前
JMeter学习
java·后端·学习·jmeter·微服务
无限大.33 分钟前
c语言实例
c语言·数据结构·算法
篝火悟者33 分钟前
问题-python-运行报错-SyntaxError: Non-UTF-8 code starting with ‘\xd5‘ in file 汉字编码问题
开发语言·python
Death20036 分钟前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
六点半88837 分钟前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法