一、定义结构体类型
结构体类型是一种由用户根据实际需要自己构造的数据类型,所以必须要“先定义,后使用”。也就是说,用户必须首先构造一个结构体类型,然后才能使用这个结构体类型来定义变量或数组。
C语言提供的定义结构体类型的语句格式为:
struct 结构体类型名
{
数据类型 1 成员名 1;
数据类型 2 成员名 2;
…
数据类型 n 成员名 n;
};
struct 是c语言中的关键字,表明是在定义一个结构体类型
注:结构体可以嵌套定义,就是一个结构体内部成员的数据类型可以是另一个已经定义过的结构体类型。
二、结构体变量的定义
在定义完一个结构体类型后,系统并不会为其分配存储空间,结构体类型定义好后,可以像c中提供的基本数据类型一样使用,即可以用它来定义结构体变量或结构体数组,系统会为该变量或数组分配相应的存储空间。
定义结构体变量有3中方法
*********法一:先定义结构体,后定义变量
//结构体定义
struct student
{
char no[8]; //学号
char name[8]; //姓名
float eng; //英语成绩
float math; //数学成绩
float ave; //平均成绩
};
int main()
{
struct student stu[30]; //定义结构体类型的数组
struct student stu 1; //定义一个结构体类型的变量
}
定义一个结构体类型 struct student 的变量,该变量就可以存储一个学生的信心;
struct student stu[30]; 这里定义了一个包含30个元素的数组,每一个数组元素都有一个结构体类型的数据,可以保存30个学生的信息。
*****法二:趁热打铁,定义结构体,之后直接定义变量
*****法三:匿名结构体,直接定义变量
建议用法一,法二。
三、结构体变量初始化
结构体变量初始化方式与数组初始化方式类似,在定义结构体变量的同时,把赋给各个成员的初始值用 { } 括起来,称为初始值表,各数据以逗号分隔,如下所示:
struct student
{
char no[8]; //学号
char name[8]; //姓名
float eng; //英语成绩
float math; //数学成绩
float ave; //平均成绩
}stu1 = {“56”,“hjf”,67,85,93};
四、结构体变量的引用
结构体变量的引用包括:
结构体成员变量的引用和将结构体变量本身作为操作对象的引用两种。
4.1结构体变量成员的引用格式如下:
结构体变量名.成员名
其中“ . ”是专门的结构体成员运算符,用于连接结构体变量名和成员名,属于高级运算符,结构体成员的引用表达式在任何地方出现都是一个整体,如 stu.age、stu.score等。
4.2结构体变量本身的引用
stu2=stu1;
举个栗子
结构体元素的输入和输出。要求从键盘输入5名学生的姓名、性别、年龄、和分数,输出其中所有学生的信息。
//结构体定义
#include <stdio.h>
#include <iostream>
using namespace std;
struct student
{
char name[8]; //姓名
char sex; //m代表男性、f代表女性
int age;
float score;
}stu[5];
int main()
{
int i;
printf("请依次输入学生姓名、姓别、年龄、分数:");
for (i = 0; i < 5; i++)
{
cin >> stu[i].name >> stu[i].sex >> stu[i].age >> stu[i].score;
}
printf("输出结果为:");
for (i = 0; i < 5; i++)
{
cout << "姓名:"<< stu[i].name<<"性别:" << stu[i].sex <<"年龄:"<< stu[i].age<<"分数:" << stu[i].score<<endl;
}
system("pause");
}
结构体的函数传参问题
//求三角型的面积
#include <stdio.h>
#include <iostream>
using namespace std;
struct triangle
{
int lenth;
int with;
int high;
};
float area(struct triangle side)
{
float a;
a = (side.lenth*side.high) / 2;
return a;
}
int main()
{
struct triangle side;
printf("请输入三角形的三条边:\n");
cin >> side.high >> side.lenth >> side.with;
printf("%f", area(side));
system("pause");
}
结构体作为函数的返回值
**结构体练习题
定义一个结构体数组,存放N个学生的信息,每位学生的信息是一个结构体类型的数据,其成员分别为:学号、姓名、三门成绩,并输出信息总分
//结构体定义
#include <stdio.h>
#include <iostream>
using namespace std;
#define N 5
struct student
{
int sno;
char sname[8];
float math;
float english;
float chinese;
float total;
} student[N];
float s(struct student student[N])
{
int i;
for(i=0;i<N;i++)
student[i].total= student[i].math+student[i].english+student[i].chinese;
return student[i].total;
}
int main()
{
int i,total;
printf("请输入依次输出学生学号、学生姓名、数学成绩、英语成绩、语文成绩\n");
for (i = 0; i < N; i++)
cin >> student[i].sno >> student[i].sname >> student[i].math >> student[i].english >> student[i].chinese;
total = s(student);
printf("学号 姓名 数学成绩 英语成绩 语文成绩 总成绩 \n");
for (i = 0; i < N; i++)
printf("%d %s %-3.2f %-3.2f %-3.2f %-3.2f\n", student[i].sno,student[i].sname, student[i].math ,student[i].english,student[i].chinese,student[i].total);
system("pause");
}
加油!美少女!