结构体
结构体变量的创建需要靠关键字struct来实现,结构类型既不是基本类型也不是指针,它是若干个相同或不同数据类型的集合。
结构体可以将不同类型的数据结合到一起方便应用。
声明结构体类型,并定义变量,没有结构体变量,不分配空间
struct stu{ //声明结构体类型,没有分配空间
int id; //学号
char name[20]; //姓名
int age; //年龄
char add[20]; //地址
};
定义结构体变量,并初始化结构体变量,初始化有多种方式可以定义
struct stu stu_01; //str_01初始化结构体变量
stu_01.id=123456;
strcpy(stu_01.name,"张三");
stu_01.age=22;
strcpy(stu_01.add,"西安");
struct stu{
int id;
char name[20];
int age;
char add[20];
}stu_02={2002,"李四",22,"北京"};
初始化结构体变量时,要与结构体内顺序一致。
局部初始化,指针定义结构体变量不能更改。
结构体嵌套
利用结构体对学生整体信息进行排序
这个题的话,就是说,通过比较学生的成绩,然后将学生的信息按照成绩高低顺序排下来,这样就需要通过结构体来实现,通过比较成绩,来调动整个结构体
#include <Stdio.h>
//学生信息函数
struct student{
int id;
char name[20];
float score;
};
//初始化学生信息
void chushi(struct student sco[4],int n){
// struct student stu[4];
for(int i=0;i<4;i++){
printf("请输入第%d学生 学号 姓名 成绩:\n",i+1);
scanf("%d",&sco[i].id);
getchar();
gets(sco[i].name);
scanf("%f",&sco[i].score);
}
}
//比较成绩高低进行排序
void compare(struct student sco[4],int n){
int i,j;
struct student t;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(sco[j].score>sco[j+1].score){
t = sco[j];
sco[j] = sco[j+1];
sco[j+1] = t;
}
}
}
}
//输出 排序结果
void sort(struct student sco[4],int n){
for(int i=0;i<4;i++){
printf("学号%d 姓名%s 成绩%f\n",sco[i].id,sco[i].name,sco[i].score);
}
}
void test(){
struct student stu[4];
chushi(stu,4);
compare(stu,4);
sort(stu,4);
}
//主函数
int main(){
test();
return 0;
}