C语言基础知识(结构体)学习日志—2018.07.13



学习日志                     姓名:   王瑶           日期: 2017.07.13  

今日学习任务

c语言结构体学习,包括结构体、结构体和链表、内存管理、关键字unionenumtypedef等。

 

日任务完成情况

详细说明本日任务是否按计划完成,开发的代码量。)

 

本日任务按计划完成

1、回顾编写参数化列表实现冒泡排序的程序。

2、结构体概念的介绍、结构体的定义,以及使用头文件中结构体的方法。

3、结构体的声明、结构体变量、指针数组的定义及初始化。

扫描二维码关注公众号,回复: 2311704 查看本文章

4、结构体的内存分配及长度的计算。

5c语言中的内存管理。

6、共用体的声明及其用法。

7、以上学习均结合编程,编写结构体使用等程序约11个。

8、完成了学生信息管理系统的编写。

今日开发中遇到的问题汇总

1、结构体中的内存分配问题。

2、字符&<<的优先级问题。

日开发收获

1、结构体可以理解为一种新的数据类型。

2、声明(不分配空间) 、定义(一定要分配空间),结构体声明中不能初始化。

3、结构体长度计算规则:

1、结构体总长度一定是最长成员的整数倍(double除外,结果4的整数倍即可)

2、每个成员的偏移量一定是该成员长度数倍(所谓偏移量就是距离结构体开始位置的长度)。

4、结构体数组:顺序结构,连续的、链表:不连续,随机。

5c语言里的内存是虚拟内存,4G虚拟内存默认内核态:用户态(包括:数据段也叫静态数据区(全局变量、static静态变量)、代码段(代码、常量)、栈空间(局部变量、形参)、堆空间(使用malloc申请内存、calloc)····)=13使用

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;

}  

猜你喜欢

转载自blog.csdn.net/qq_40616514/article/details/81037148