学习日志 姓名: 王瑶 日期: 2017.07.13
今日学习任务 |
c语言结构体学习,包括结构体、结构体和链表、内存管理、关键字union、enum、typedef等。 |
今日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量。)
|
本日任务按计划完成 1、回顾编写参数化列表实现冒泡排序的程序。 2、结构体概念的介绍、结构体的定义,以及使用头文件中结构体的方法。 3、结构体的声明、结构体变量、指针数组的定义及初始化。
扫描二维码关注公众号,回复:
2311704 查看本文章
4、结构体的内存分配及长度的计算。 5、c语言中的内存管理。 6、共用体的声明及其用法。 7、以上学习均结合编程,编写结构体使用等程序约11个。 8、完成了学生信息管理系统的编写。 |
今日开发中遇到的问题汇总 |
1、结构体中的内存分配问题。 2、字符&、<<的优先级问题。 |
今日开发收获 |
1、结构体可以理解为一种新的数据类型。 2、声明(不分配空间) 、定义(一定要分配空间),结构体声明中不能初始化。 3、结构体长度计算规则: 1、结构体总长度一定是最长成员的整数倍(double除外,结果4的整数倍即可) 2、每个成员的偏移量一定是该成员长度数倍(所谓偏移量就是距离结构体开始位置的长度)。 4、结构体数组:顺序结构,连续的、链表:不连续,随机。 5、c语言里的内存是虚拟内存,4G虚拟内存默认内核态:用户态(包括:数据段也叫静态数据区(全局变量、static静态变量)、代码段(代码、常量)、栈空间(局部变量、形参)、堆空间(使用malloc申请内存、calloc)····)=1:3使用 6、堆空间和栈空间区别:栈空间是操作系统管理的,由操作系统分配并释放,堆空间是用户管理的,申请和释放都由用户完成7、指针里必须有地址才可以用strcpy赋值。 7、共用体(联合体),只为最长的成员分配空间,所有成员共享同一段空间。 8、共用体用处:判断大小端 字节序: 大端:高字节存放在低地址,低字节存放在高地址 小端:高字节存放在高地址,低字节存放在低地纸 |
自我评价 (是否规范完成指定任务,需要改进的地方,与他人合作等。) |
对一些内容的理解还是很模糊,应该在思考问题是结合程序在内存中的分配等,这样会使思路更加清晰,在敲代码速度上还有待提高。 |
学生信息管理系统代码:
(student.h文件中)
#ifndef _STUDENT_H
#define _STUDENT_H//防止头文件重复包含
#define SIZE 10 //数组大小10
struct student
{
char name[20];
int age;
char sex;
int number;
};
int i;//数组下标
typedef struct student stu;//重新定义数据类型
#endif
(student.c文件中)
#include<stdio.h>
#include"student.h"
#include<stdlib.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",j+1);
printf("姓名: %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);
if(id<=i&&id>0)
{
for(j=0;j<i-id;j++)//i是长度
{
s[id+j-1]=s[id+j];
s[id+j-1].id=id+j;
}
i--;
}
else printf("输入错误\n");
}
void ModifyInfo(stu 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("输入错误\n");
}
int main()
{
char choice[10]={0};
stu student[SIZE]={0};
while(1)
{
menu();
printf("Please input your choice:\n");
scanf("%s",choice);
switch(atoi(&choice[0]))
{
case 1:AddInfo(student);break;
case 2:ShowInfo(student);break;
case 3:DeleteInfo(student);break;
}
}
while(1);
return 0;
}