zoukankan      html  css  js  c++  java
  • c博客06结构体&文件

    1.本章学习总结

    1.1 学习内容总结

    结构体如何定义、成员如何赋值

    struct 结构名{
      类型名 结构成员名 1;
      类型名 结构成员名 2;
      类型名 结构成员名 3;
      ...
      类型名 结构成员名 n;
    };
    

    例如:

    struct student{
      int num;
      char name[100];
      int computer,english,math;
      double average;
    }s1,s2;
    

    结构体的嵌套定义:先定义成员的结构类型,在定义主结构类型

    引用结构变量成员的格式结构变量名.结构成员名
    结构变量的整体赋值:如果两个结构变量具有相同的格式,则允许将一个结构变量的值直接赋给另一个结构变量。
    例如 s1=s2
    等价于下列语句

    s2.num=s1.num;
    strcpy(s2.name,s1.name);
    s2.math=s1.math;
    

    只有相同结构类型的变量之间才可以直接赋值

    结构体数组排序做法(以课本p225为例)

    for (i = 0; i < n - 1; i++)
    {
    	index = i;
    	for (j = i + 1; j < n; j++)
    		if (students[j].average > students[index].average)//比较平均成绩
    			index = j;
    	temp = students[index];//交换数组元素
    	students[index] = students[i];
    	students[i] = temp;
    }
    

    结构体指针怎么用:
    用指针引用结构体变量成员的方式是:
    (*指针变量名).成员名
    p 两边的括号不可省略,因为成员运算符“.”的优先级高于指针运算符“”,所以如果 *p 两边的括号省略的话,那么 *p.num 就等价于 (p.num) 了。
    从该程序也可以看出:因为指针变量 p 指向的是结构体变量第一个成员的地址,所以 p 和第一个成员(
    p).name 是等价的。
    此外为了使用的方便和直观,用指针引用结构体变量成员的方式:
    (*指针变量名).成员名可以直接用:指针变量名->成员名来代替,它们是等价的。“->”是“指向结构体成员运算符”,它的优先级同结构体成员运算符“.”一样高。p->num 的含义是:指针变量 p 所指向的结构体变量中的 num 成员。p->num 最终代表的就是 num 这个成员中的内容。

    共用体、枚举类型做法

    union 共用体名
    {
    	共用体成员
    }变量表列;
    
    共用体名.共用体成员
    

    共用体变量所占内存长度等于最长的成员的长度
    同一内存段可以存放不同类型的成员,但在每一瞬间只能存放其中一种
    共用体变量起作用的成员是最后一次存放的成员
    共用体变量的地址和它各个成员的地址是同一个地址

    enum weekday{sun,mon,tue,wed,thu,fri,sat};//声明枚举类型weekday
    enum weekday d1,d2;  //定义枚举变量,d1,d2的值仅限于枚举类型weekday列举的值的范围
    //也可以将上述代码写为:
    enum weekday{sun,mon,tue,wed,thu,fri,sat} d1,d2;
    

    在C编译中,对枚举元素按常量处理,不能对枚举元素赋值,如:sun=0,mon=1是错误的
    C编译按枚举元素定义时的顺序,使它们的值为0,1,2,3,4,5,6
    C编译按枚举元素定义时的顺序,第一个元素默认为0,后续逐个加1。可以改变任何一个枚举元素(如wed)的值,改变后,wed后续的值逐个加1,wed前面的值不变。

    enum weekday{sun,mon,tue,wed=10,thu,fri,sat} d1,d2;
    	printf("%d %d %d %d %d %d %d",sun,mon,tue,wed,thu,fri,sat);
    

    结果:0 1 2 10 11 12 13
    给枚举变量赋值,只能使用声明枚举类型时列举的元素,例如,给d1赋值时只能使用从sun到sat七个值。
    (参考https://blog.csdn.net/qq_37611077/article/details/103372283)
    文件读写,文件中数据如何读进结构体数组

        if ((fp= fopen("name", "r+")) == NULL)
        {
            exit(0)
        }
    

    1.2 本章学习体会

    学习感受:这章的知识点比较多,经常记不住某个表达式的用法,应该要多多复习才不会导致遗忘
    代码量400+

    2.综合作业--“我爱成语”

    2.1文件介绍

    头文件idiom.h

    头文件中有两个结构体,以及四个函数,功能分别是输出成语数据,进行用户登录,主菜单函数以及查找成语函数

    文件1main.c

    这是主函数所在的文件,功能就是打开文件,并输出提示

    文件2Function.c

    封装了如图所示的四个函数




    2.2运行结果

    登录界面

    菜单界面

    输出成语

    查找成语

    输入0退出系统

    2.3
    小结:大作业比pta更具有挑战性,还可以综合地运用所学知识,古德古德

  • 相关阅读:
    Linux 进程学习(四) sigaction 函数
    Netty 编解码奥秘
    我的博客即将同步至 OSCHINA 社区,这是我的 OSCHINA ID:护国小将,邀请大家一同入驻:https://www.oschina.net/sharingplan/apply
    Netty数据如何在 pipeline 中流动
    PLM系统安装四:主卷服务安装(FSC缓存服务器plm4IP:42.20)
    Linux系统信息和进程相关命令(CPU,内存,进程)
    SAN交换机配置的备份还原,固件升级
    san交换机的级联
    PLM系统安装五(2):Corporate服务安装plm1IP:42.106
    第三步:服务器虚拟化XenServer实施部署文档
  • 原文地址:https://www.cnblogs.com/eeee9876/p/12045182.html
Copyright © 2011-2022 走看看