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更具有挑战性,还可以综合地运用所学知识,古德古德