学习日志 姓名: 徐雪 日期: 2017.07.13
今日学习任务 | 结构体,结构体和链表,内存管理,union enum typedef |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量。)
| 今日任务已按计划完成。在老师的指导下编写了结构体的使用,字节序测试,大端小端转换,学生信息管理系统等程序。
|
今日开发中遇到的问题汇总 | 使用指针时要分配空间; 野指针,指向一段不能使用的内存;
|
今日未解决问题 | 无 |
今日开发收获 | 1.结构体总长度一定是最长成员的整数倍(double除外还是按8字节算,但总长度只要是4的整数倍); 2.每个成员的偏移量一定是该成员长度的整数倍(偏移量 :距离结构体开始位置的长度); 3.虚拟内存 4G 1比3分配 内核态与用户态 内部分为【数据段】:也叫静态数据区,全局变量,静态变量 【代码段】:代码,常量 【栈空间】:局部变量,形参 【堆空间】:malloc 4.堆空间栈空间的区别:栈空间是操作系统管理的,由操作系统分配,由操作系统释放 堆空间是用户管理的,申请和释放都由用户完成 5.union:联合体 节约空间,只为最长的成员分配空间,所有成员共享同一段空间 6.字节序: 大端:高字节存放在低地址 低字节存放在高地址 小端:高字节存放在高地址 低字节存放在低地址
|
自我评价 (是否规范完成指定任务,需要改进的地方,与他人合作等。) | 在规定的时间完成了学生信息管理系统的相关编程,对大小端有了更深的认识,会转换的编程,老师讲的很形象,容易理解。 |
其他 | 无 |
|
|
#include <stdio.h>
#include<stdlib.h>
#define SIZE 10//数组大小
struct student
{
int id;
char name[20];
int age;
char sex;
int number;
};
int i;//数组下标
void menu()
{
printf("****************************\n");
printf("1.输入信息 2.显示信息\n");
printf("3.删除信息 4.修改信息\n") ;
printf("****************************\n");
}
void AddInfo(struct student 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( struct student s[] )
{
int j;
for(j=0;j<i;j++)
{
printf("学生%d信息:\n",s[j].id);
printf("姓名: %s年龄: %d 性别:%c 学号: %d\n",s[j].name,s[j].age,s[j].sex,s[j].number);
}
}
void DeleteInfo(struct student s[] )
{
int id,j;
printf("请输入删除学生的编号:\n");
scanf("%d",&id);
for(j=0;j<i-id;j++)
{
s[id+j-1]=s[j+id];
s[id+j-1].id=j+id;
}
i--;
}
void ModifyInfo(struct student s[])
{
int id;
printf("请输入修改学生的编号:\n");
scanf("%d",&id);
if(id<=i&&id>0)
{ printf("请输入修改后的姓名,年龄,性别,学号:\n");
scanf("%s %d %c %d",&s[id-1].name,&s[id-1].age,&s[id-1].sex,&s[id-1].number);
}
else printf("输入错误");
}
int main()
{
char choice[10]={0};
struct student stu[SIZE]={0};
while(1)
{
menu();
scanf("%s",choice);
switch(atoi(&choice[0]))
{
case 1:
AddInfo(stu);
break;
case 2:
ShowInfo(stu);
break;
case 3:
DeleteInfo(stu);
break;
case 4:ModifyInfo(stu);
break;
}
}
return 0;
}