文档介绍:第十一章结构体
概述
在实际应用中,有不少应用问题如果只采用已学的变量和数组作为数据结构显得很不方便。
例:输入100个学生的学号、姓名和考试成绩,编写程序找出高分者和低分者。
用变量和数组作数据结构可编写程序如下:
main()
{ int i, num, maxnum, minnum;
char name[20], maxname[20], minname[20];
int score, maxscore, minscore;
maxscore=0; minscore=100;
for(i=1; i<=100; i++)
{ scanf(%d%s%d”,&num,name,&score);
if(score>maxscore)
{ maxscore=score; maxnum=num; strcpy(maxname,name); }
if(score<minscore)
{minscore=score; minnum=num; strcpy(minname,name);}
}
输出
}
明显缺点:
①变量过多,同一学生的各个数据无联系,没有整体概念,不便管理。
②操作不便(如更新过程)。
显然,选用一种能把一个学生的数据构造成一个整体的构造型数据结构更合适,但不能是数组。
对于这种情况,可以将一个学生的数据定义为一个结构体类型:
struct student 类型名
{
int num; 成员表
char name[20];
int score;
};
定义了一个结构体类型,它包含三个成员。
定义结构体类型变量的方法
前面定义的结构体类型只是一种“模型”,还必须定义结构体变量后才能存放数据。
定义结构体变量有三种方法:
1、先定义结构体类型再定义结构体变量
定义了结构体类型后:
struct student st, stmax, stmin;
类型符变量名
定义了三个结构体变量,每个变量包含三个成员,每个变量可存放一个学生的数据。
2、在定义结构体类型的同时定义结构体变量
struct student
{
int num;
char name[20];
int score;
}st, stmax, stmin;
3、直接定义结构体类型变量
struct 不出现类型名
{
int num;
char name[20];
int score;
}st, stmax, stmin;
常用第一种方法
说明:
①类型与变量不同,只对变量分配空间与操作。
②对成员可以单独使用,相当于普通变量。
③成员也可以是一个结构体变量。
struct date struct student
{ int month; { int num;
int day; char name[20];
int year; struct date birthday;
}; }st1, st2;
④成员名可以与程序中的变量名相同,两者代表不同的对象。
结构体变量的引用 ■成员引用
可以对成员单独引用,形式为:
结构体变量名. 成员名
成员运算符
=1001;=90;strcpy(,”Li”);
printf(“%d%s%d”,,,);
scanf(“%d%s%d”,&,,&) ;
可以引用成员的地址
如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员,只能对最低级的成员进行存取与运算。
=1960;
=5;
=15;