大学C语言程序设计
chapter 7 结构体
1. 结构体的认识
结构体概念:可以把各种类型的数据放在一起,形成新的数据类型。
如何定义:关键字 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;
}
2. 结构体信息输入输出
单个结构体信息输入输出
#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;
}
3. 结构体成员函数
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()); //使用方法