今日学习任务 | 结构体、结构体和链表、内存管理、关键字union、enum、typedef等。 |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量。)
| 1、结构体概念的介绍、结构体的定义,以及使用头文件中结构体的方法。 2、结构体的声明、结构体变量、指针数组的定义及初始化。 3、结构体的内存分配及长度的计算。 4、c语言中的内存管理。 5、共用体的声明及其用法。 |
今日开发中遇到的问题汇总 | 1、结构体总长度一定是最长成员的整数倍 2、字符&、<<的优先级问题。 |
今日开发收获 | 1、声明(不分配空间) 、定义(一定要分配空间),结构体声明中不能初始化。 2、结构体长度计算规则: (1)结构体总长度一定是最长成员的整数倍(double除外,结果4的整数倍即可) (2)每个成员的偏移量一定是该成员长度数倍(所谓偏移量就是距离结构体开始位置的长度)。 3、结构体数组:顺序结构,连续的、链表:不连续,随机。 4、栈空间和堆空间的区别: 栈空间是操作系统管理的,由操作系统分配,由操作系统释放; 5、共用体(联合体),只为最长的成员分配空间,所有成员共享同一段空间。 6、共用体用处:判断大小端 字节序: 大端:高字节存放在低地址,低字节存放在高地址 小端:高字节存放在高地址,低字节存放在低地纸 |
自我评价 (是否规范完成指定任务,需要改进的地方,与他人合作等。) | 学习c语言,还是要多敲代码,才能学好。 |
#include<stdlib.h>
#include"student.h"
void menu()
{
printf("****************************\n");
printf("1、输入信息 2、显示信息\n");
printf("3、删除信息 4、修改信息\n");
printf("****************************\n");
}
void AddInfo(stu s[])
{
printf("请输入姓名、年龄、性别、学号:\n");
scanf("%s%d %c %d", s[i].name, &s[i].age, &s[i].sex, &s[i].number);
s[i].id = i + 1;
i++;
}
void ShowInfo(stu s[])
{
int j;
for(j = 0; j< i; j++)
{
printf("学生%d信息:\n", s[j].id);
printf("\t姓名:%s 年龄:%d 性别:%c 学号:%d\n",s[j].name, s[j].age, s[j].sex, s[j].number);
}
}
void DeleteInfo(stu *s)
{
int id, j;
printf("请输入删除学生的编号:\n");
scanf("%d", &id);
for(j = 0; j < i - id; j++)
{
s[id + j - 1] = s[id + j];
s[id + j - 1].id = id + j;
}
i--;
}
void ChangeInfo(stu s[])
{
int id, j;
printf("请输入修改学生的编号:\n");
scanf("%d", &id);
printf("请输入新的信息:\n");
scanf("%s%d %c %d", s[id - 1].name, &s[id - 1].age, &s[id - 1].sex, &s[id - 1].number);
}
int main()
{
char choice[10] = {0};
stu student[SIZE] = {0};
while(1)
{
menu();
scanf("%s", choice);
switch(atoi(&choice[0]))
{
case 1:
AddInfo(student);
break;
case 2:
ShowInfo(student);
break;
case 3:
DeleteInfo(student);
break;
case 4:
ChangeInfo(student);
break;
}
}
return 0;
}