• c博客06-结构体&文件


    1.本章学习内容总结

    1.1学习内容总结

    1.结构体如何定义及成员如何赋值

    • 先定义结构体再定义变量
    struct  结构体名
    {
    数据类型   成员名1;
    数据类型   成员名2;
    :
    数据类型   成员名n;
    };
    struct 结构体名 变量名;
    
    • 在定义结构体同时定义变量
    struct 结构体名
    {
    数据类型 成员名1;
    数据类型 成员名2;
    ....
    }变量名;
    
    • 成员的赋值
      假如变量名是s,直接赋值:s.成员名=内容、当s是数组名是,利用strcpy赋值,赋值时注意是否需要加&

    2.结构体数组排序做法

    1.冒泡排序

    for (i = 0;i < n - 1;i++)
    {
    	for (j = 0; j < n - 1 - i; j++)
    	{
    		if (student[j].num < student[j + 1].num)
    		{
    			change = student[j];
    			student[j] = student[j + 1];
    			student[j + 1] = change;
    		}
    	}
    }
    

    2.选择排序

    for (i = 0; i < n - 1; i++)
    {
    	index = i;
    	for (j = i + 1; j < n; j++)
    		if (student[j].num > student[index].num)
    			index = j;
    	change = student[index];
    	student[index] = student[i];
    	student[i] = change;
    }
    

    3.结构体指针怎么用

    定义结构体指针:struct 结构体名 p;
    利用(
    p)成员名或p->成员名访问结构体成员

    # include <stdio.h>
    struct STU
    {
        char name[20];
        int age;
        char sex;
        char num[20];
    };
    int main(void)
    {
        struct STU stu[5] = {{"小红", 22, 'F', "Z1207031"}, {"小明", 21, 'M', "Z1207035"}, {"小七", 23, 'F', "Z1207022"}};
        struct STU *p = stu;
        return 0;
    }
    

    此时指针变量 p 就指向了结构体数组的第一个元素,即指向 stu[0]。当一个指针指向一个数组后,指针就可以通过移动的方式指向数组的其他元素。这个原则对结构体数组和结构体指针同样适用,所以 p+1 就指向 stu[1] 的首地址;p+2 就指向 stu[2] 的首地址……所以只要利用 for 循环,指针就能一个个地指向结构体数组元素。同样需要注意的是,要将一个结构体数组名赋给一个结构体指针变量,那么它们的结构体类型必须相同。

    4.共用体、枚举类型做法

    • 共用体
    定义:union 共用体名
    {
        成员列表
    };
    union 共用体名 变量名;
    

    结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
    共用体占用的内存等于最长的成员占用的内存。

    • 枚举类型
    enum 枚举类型标识名
    {
    枚举列表;
    }
    

    例如: enum weekday{sun,mon,tue,wed,thu,fri,sat};
    上面定义了名字为weekday,关键词为enum的枚举类型,{}中为枚举值,即变量可以取的值
    枚举类型变量也有三种说明形式:
    (1)先说明枚举类型名,再说明枚举变量。如:enum weekday s;
    (2)在说明枚举类型名时,同时说明枚举变量。如: enum weekday{ sun,mon,tue,wed,thu,fri,sat }s;
    (3)直接按枚举类型的结构模式说明枚举变量。如:enum{ sun,mon,tue,wed,thu,fri,sat }s;

    5.文件读写,文件中数据如何读进结构体数组

    • 定义文件指针:FILE *fp,FILE是文件类型定义符,fp是文件类型的指针变量
    • 打开文件:fopen("文件名","文件打开方式");
    • 关闭文件:fclose(文件指针);
    • 将文件数据写入结构体数组可以用到fscanf函数或fgets函数。

    1.2本章学习体会

    • 结构体和文件的的学习使得c语言的功能有拓展了许多,本章内容难度较高,但也容易理解,关键在于多多练习,这次大作业使得我对结构体的掌握更深了一层。
    • 代码量大约600行

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

    2.1文件介绍

    头文件介绍

    • idiom.h第一个结构体用来存放成语,第二个用来操作用户登录,函数功能如图所示

    函数实现文件介绍

    • 1.check.cpp用来检查用户登录的函数
    • 2.idiomMain.cpp用来放主函数,菜单函数,功能选择函数

    • 3.idiom.cpp存放成语进结构体函数,输出全部成语及意思函数,单一查找成语函数,添加成语函数,随机数函数,成语游戏函数





    2.2运行结果

    1.用户界面

    2.全部输出

    3.添加成语

    4.查找成语

    5.成语游戏

    2.3大作业总结

    1.碰到问题及解决办法

    • 随机数并不随机,利用time是随机数变化
    • 用户选择功能时容易陷入循环,改为了int类型
    • 调用文件不方便,先把文件中的成语放入结构体,并返回结构体指针
      2.小结
    • 本次代码实现功能较少,且问题层出不穷,但也学到很多东西
    • 本来想象中似乎比上次函数要简单一些,但真正写起来却很吃力
    • 与班上几位同学相比,相差太远,有巨大的提升空间,可以从他们身上学到很多,希望之后可以做得更好
  • 相关阅读:
    基贝叶斯后验概率的拼写检查器实现 python
    Hadoop The Definitive Guide 2nd Edition 笔记
    DGV删除当前选中行
    DGV设置单元不可编辑
    DGV获取当前选中单元格
    HDU2112_HDU Today_有地名的最短路_map+SPFA
    HDU1026_优先队列+广搜+打印路径
    HDU2757_Ocean Currents_优先队列+广搜_入门题_十四周模拟赛
    自己写的SPFA模板(可打印路径)
    HDU2782_暴力深搜_第十四周模拟赛
  • 原文地址:https://www.cnblogs.com/xingyufen/p/12045019.html
Copyright © 2020-2023  润新知