结构:
是C语言中一种新的结构数据类型,它能够把有内在联系的不同类型的数据汇聚成一个整体,使它们互相关联。结构类型是由用户根据需要,按规定的格式自行定义的数据类型。
结构类型定义的一般形式:
struct 结构名
{
类型名 结构成员名1;
类型名 结构成员名2;
。。。
类型名 结构成员名n;
};
大括号内的内容是结构所包括的结构成员,也叫结构分量。大括号中定义的成员信息被聚合成了一整体并形成了一个新的数据类型。
关键词struct和它后面的结构名一起组成一个新的数据类型名。结构的定义以分号结束。在c语言中把结构的定义看成一条语句。
例子:(平面的点坐标)
struct point
{
double x;
double y;
};
结构变量的定义以及初始化:
1.单独定义:
指先定义一个结构类型,在定义这种结构类型的变量。
关键字struct和结构名student必须联合使用,因为它们合起来表示一个数据类型名。
例子:
struct student
{
int num;
char name[10];
int computer,ehglish,math;
double average;
};
struct student max,stu;
2.混合定义:
指在定义结构类型的同时定义结构变量。
例:
struct student
{
int num;
char name[10];
int computer,ehglish,math;
double average;
}s1,s2;
这种方式的本质与方法1是一样的,都是即定义了结构类型,也定义了结构变量。
3.无类型名定义:
定义时省略结构名。但由于没有给出结构名,在此定义语句后无法在定义这个类型的其他结构变量。
例:
struct
{
int num;
char name[10];
int computer,ehglish,math;
double average;
}s1,s2;
结构变量的初始化:
struct student stu={102,“zhang",78,79,89}
结构类型变量的存储布局按其类型定义中成员的先后顺序排列。
结构的嵌套定义:
struct address
{
char city[10];
char street [10];
int zip;
};
struct nest_student
{
int num;
char name[10];
struct adderss addr;
int competer,math,english;
double average;
};
结构类型struct nest_student的成员变量addr被定义成结构类型struct address,而struct address中又含有三个成员,即一个结构的成员被定义成另一个结构类型。使成员数据被进一步细分。
结构变量的使用:
1.结构变量的引用:
使用结构成员操作符 ‘.' 来引用结构成员,格式为:
结构变量名.结构成员名
结构成员运算符的优先级属最高级别。
2.结构变量的整体赋值:
如果两个结构变量具有相同的类型,则允许将一个结构变量的值直接赋给另一个结构变量。这是结构中唯一的整体操作方式。
s1=s2;
等价于:
s2.num=s1.num;
s2.math=s1.num ;
...
s2.average=s1.average;
结构变量代码:输出平均分最高的学生信息:
#include<stdio.h>
struct student
{
int num;
char name[10];
int computer,ehglish,math;
double average;
};
int main(void)
{
int i,n;
struct student max,stu;
printf("enter n: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("No %d:",i);
scanf("%d%s%d%d%d",&stu.num,stu.name,&stu.computer,&stu.ehglish ,&stu.math );
stu.average =(stu.computer +stu.ehglish +stu.math )/3;
if(i==1)
{
max =stu ;
}
if(stu.average >max.average )
{
max=stu;
}
}
printf("num:%d,name:%s,average:%.2lf",max.num ,max.name ,max.average );
}