其他分享
首页 > 其他分享> > C语言学习笔记-2021-03-22

C语言学习笔记-2021-03-22

作者:互联网

一、结构体

------定义一个结构体--------
struct Student
{
	int age;
	float score;
	char sex;
}

int main(void)
{
	struct Student st = {80, 66.6, 'F'}
}

如何使用结构体

1. 使用结构体中的每一个属性成员

struct Student
{
...
} 
int main()
{
	struct Student st = {80, 66.6, 'F'};
	struct Student *pst = &st;
	pst->age = 88; --- 第一种方式
	st.age = 88; ---第二种方式
}

2. 结构体变量的运算

举例-动态构造存放学生信息的结构体

struct Student
{
	char name[100];
	int age;
	double source;	
}

int main(void)
{
	int len;
	struct Student * pArr;
	printf("请输入学生的个数:\n");
	scanf("%d", &len);
	pArr = (struct Student *)malloc(len * sizeof(struct Student ));  //为数组pArr分配内存,分配学生个数*每个结构体占据字节数量
	
	//录入学生信息
	for (i=0; i<len; ++i)
	{
		printf("请输入第%d个学生的信息:\n", i+1);
		printf("学生的姓名为:\n");
		scanf("%s",pArr[i].name);  // 因为name是数组名,本身存放的就是数组首元素的地址,不用加取地址符&
		printf("学生的年龄为:\n");
		scanf("%d",&pArr[i].age);
		printf("学生的分数为:\n");
		scanf("%f",&pArr[i].source);
	}

	//输出学生信息
	for...
	{
		...
	}

	//根据成绩进行排序--冒泡排序法
	int i,j;
	struct Student t;
	for(i=0; i<len-1; i++)
	{
		for(j=0; j<len-1-i; j++)
		{
			if (pArr[j].source > pArr[j+1].source)
			{
				t = pArr[j];
				pArr[j] = pArr[j+1];
				pArr[j+1] = t;
			}
		}
	}

	return 0;
}

该段程序重复性内容比较多,易读性比较差,可以通过函数改进

二、枚举

...
enum Weekday
{
	Monday, Tuesday, Wednsday, Thursday, Friday, Saturday, Sunday
};

int main(void)
{
	enum Weekday day = Monday; // day只能赋予定义的有效值
	printf("%d\n", day); // 会输出0
}

三、补码

1. 原码

2. 反码

3. 移码

4. 补码

  1. 正整数转二进制: 除以2取余,直至商为0,余数倒叙排序
  2. 负整数转二进制: 先求与该负数相对应的正整数的二进制代码,然后将所有位取反,末尾加1,不够位数时,左边补1
  3. 零的二进制: 全是0

四、链表简介-帮助理解算法

算法:

数据存储方式

1. 数组

2. 链表

  1. 首节点:存放第一个有效数据的节点
  2. 尾节点:存放最后一个有效数据的节点
  3. 头结点:和首节点数据类型一样,不存放有效数据,设置头结是为了方便对链表进行操作
  4. 头指针:存放头结点地址的指针变量
...
struct Node
{
	int data;
	struct Node * pNext;
}
//函数声明
struct Node * create_list(void);
void traverse_list(struct Node *);

int main(void)
{
		struct Node * pHead; // 定义头指针,存放链表头结点的地址
		pHead = create_list(); //创建一个非循环单链表,并将头结点的地址存放pHead中
		traverse_list(pHead); 输出链表
		return 0;
}

struct Node * create_list(void);// 函数返回值是头指针,因此声明类型为 struct Node *
{
	...	
}

void traverse_list(struct Node * pHead)
{
	struct Node * p = pHead->pNext;
	while (NULL !=p)
	{
		printf("%d\n", p->data);
		p = p->pNext; //关键理解这一句
	}
	
	return;
}

标签:Node,03,struct,22,int,C语言,链表,pArr,Student
来源: https://blog.csdn.net/weixin_43776493/article/details/115063645