结构体的概念
结构体:是由一系列具有相同类型或不同类型的数据构成的数据集合(是一种数据类型)
结构体的定义
关键字:struct
定义语法:strut 结构体名
{
成员列表
};
访问成员的规则
1、普通变量通过“.”来访问成员,例如Tom.num
2、结构体指针变量通过“->”访问成员,例如p->id
结构体变量的定义,三种方法
1、先声明类型,再定义变量
//声明结构体
struct student{
int num;
int c_score;
int ps_score;
float avg;
};
int main()
{
int c=0;
//struct student是类型名,Tom是变量名
struct student Tom={10,98,90,95.5};//定义变量
c=50;
Tom.num=12;
Tom.c_score=95;
Tom.ps_score=92;
Tom.avg=96.5;
printf("序号:%d\n",Tom.num);
printf("C语言成绩:%d\n",Tom.c_score);
printf("PS成绩:%d\n",Tom.ps_score);
printf("平均分:%f\n",Tom.avg);
return 0;
}
2、声明结构体的同时,定义变量
//声明结构体
struct student{
int num;
int c_score;
int ps_score;
float avg;
}Tom;//Tom是结构体变量
3、省略结构体名,直接定义结构体变量
//声明结构体
struct {
int num;
int c_score;
int ps_score;
float avg;
}Tom;//Tom是结构体变量
typedef的使用
typedef 已有的类型 别名
例如,typedef int TYPE
TYPE与int等价,如TYPE a=int a
typedef的使用
定义一个结构体,包含学生的信息(序号、三门课成绩、平均分),
从键盘输入学生的信息,计算平均分
#include <stdio.h>
#include <stdlib.h>
typedef int TYPE;
#define SIZE 3
typedef struct student{
int num;
int score[SIZE];
float avg;
}STU;//STU是结构体struct student的别名
int main()
{
STU Tom;//相当于struct student Tom;
Tom.avg=0;
printf("请输入序号:");
scanf("%d",&Tom.num);
for(int i=0;i<SIZE;i++)
{
printf("请输入学生第%d门的成绩:",i+1);
scanf("%d",&Tom.score[i]);
Tom.avg+=Tom.score[i];
}
Tom.avg=Tom.avg/SIZE ;//求平均分
printf("我的序号是:%d\n",Tom.num);
for(int i=0;i<3;i++)
{
printf("第%d门的成绩是:%d\n",i+1,Tom.score[i]);
}
printf("平均分为:%f\n",Tom.avg);
return 0;
}
结构体数组的定义
1、先声明,后定义 ,语法:struct 结构体名 数组名【数组长度】:
struct 结构体名
{
成员变量
};
结构体数组的使用
有n个学生的信息,包括学号、成绩,找出成绩的最高的学生,并输出该学生的信息
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct student{
int num;
int score;
}STU;
int main()
{
STU class3[N]={{10,90},{14,87},{12,96}};
//存放最高分所在的结构体数组元素下标
int max=0;
for(int i=0;i<N;i++)
{
if(class3[i].score>class3[max].score)
max=i;
}
printf("成绩最高的学生:\n");
printf("序号是:%d\n",class3[max].num);
printf("序号是:%d\n",class3[max].score);
return 0;
}