结构体概念:可以把各种类型的数据放在一起,形成新的数据类型。
如何定义:关键字 struct
格式:
struct 结构名{ 数据类型 变量名1; 数据类型 变量名2; };
如:定义一个学生,他有姓名,年龄,语文成绩,数学成绩,英语成绩
struct student{ char name[20]; int age; int score1,score2,score3; };
访问结构体中的信息,通过 ”.”来访问
student stu; //定义一个结构体变量 stu strcpy(stu.name,"helloA"); //字符数组的特殊赋值方式 stu.age=13; stu.score1=88; stu.score2=99; stu.score3=100; printf("%s %d %d %d\n",stu.name,stu.age,stu.score1,stu.score2,stu.score3);//输出
结构体的定义形式
//方式 1 struct student{ char name[20]; int age; int score1,score2,score3; }stu1,stu2; //方式 2 student stu3,stu4;
结构体初始化赋值
struct student{ char name[20]; int age; int score1,score2,score3; }stu={"helloB", 14,99,100,100};//初始化赋值
结构体数组
struct student{ char name[20]; int age; int score1,score2,score3; }stu[N]; 或者:student stu[N];
结构体数组初始化赋值
方式一
#include<stdio.h> #include<string.h> struct student{ char name[20]; int age; int score1,score2,score3; }stu[3]={ {"helloA",13,88,99,100}, {"helloB",14,90,99,100}, {"helloC",15,100,100,100}}; int main(){ for(int i=0; i<3; i++){ printf("%s %d %d %d\n",stu[i].name,stu[i].age,stu[i].score1,stu[i].score2,stu[i].score3); } return 0; }
方式二
#include<stdio.h> #include<string.h> struct student{ char name[20]; int age; int score1,score2,score3; }; struct student stu[3]={{"helloA",13,88,99,100},{"helloB",14,90,99,100},{"helloC",15,100,100,100}}; int main(){ for(int i=0; i<3; i++){ printf("%s %d %d %d\n",stu[i].name,stu[i].age,stu[i].score1,stu[i].score2,stu[i].score3); } return 0; }
单个结构体信息输入输出
#include<stdio.h> #include<string.h> struct student{ char name[20]; int age; int score1,score2,score3; }stu; int main(){ char name[20]; scanf("%s %d%d%d%d", name, &stu.age, &stu.score1,&stu.score2,&stu.score3); strcpy(stu.name, name); printf("%s %d %d %d %d\n", stu.name,stu.age,stu.score1,stu.score2,stu.score3); return 0; }
多个结构体信息输入输出
#include<stdio.h> #include<string.h> #define N 1000 struct student{ char name[20]; int age; int score1,score2,score3; }stu[N]; int main(){ char name[20]; int n; scanf("%d", &n); for(int i=0; i<n; i++){ scanf("%s %d%d%d%d", name, &stu[i].age, &stu[i].score1,&stu[i].score2,&stu[i].score3); strcpy(stu[i].name, name); } for(int i=0; i<n; i++){ printf("%s %d %d %d %d\n", stu[i].name,stu[i].age,stu[i].score1,stu[i].score2,stu[i].score3); } return 0; }
struct student{ char name[20]; int age; int score1,score2,score3; int sum(){ return score1+score2+score3; //求得成绩总和 } }stu[N]; printf("sum()=%d\n", stu[i].sum()); //使用方法