构造数据类型是根据已定义的一个或多个数据类型按一定方法构造而成的新数据类型。C语言提供的构造数据类型有数组、结构体、共用体、枚举类型。接下来的内容主要总结结构体、共用体和枚举类型的概念、定义及使用。
目录
三、举例: 通过键盘输入三个学生的学号以及语文数学英语三门课成绩,分别统计他们的三门课平均分,最后输出平均分以及学号
一、结构体类型说明
struct 结构体名{
类型说明符 成员名1;
类型说明符 成员名2;
...
类型说明符n 成员名n;
};
说明:1.struct是C语言的关键字,是结构体类型的引导字,用于声明结构体类型以及定义结构体变量。
2.成员类型也可以是另一个结构体类型,即可构成嵌套结构。(但是也要先声明后使用)
3.多个成员数据类型相同可以用逗号隔开,放在同一语句中。
注意:1.结构体类型说明只说明了该类型的构成形式,系统并不为其分配存储空间;当定义了结构体类型的变量或数组后编译系统才给分配存储空间。
2.如果两个结构体其他全部相同但结构体名不同也是两个不同的结构体类型。
3.成员名可以与程序中的变量名相同。
二、结构体变量
1.结构体变量的定义(三种)
(1)先声明结构体类型再定义结构体变量
struct studenttype{
int stuid;
char name[10];
char sex;
int age;
float score;
};
struct studenttype student1,student 2;
//student 1/student 2都是结构体类型stuct studenttype的变量,系统会为他们分配存储空间
一般格式:struct 结构体名 变量名列表;
(2)在声明结构体类型的同时定义变量
struct studenttype{
int stuid;
char name[10];
char sex;
int age;
float score;
}student 1,student 2;
格式如下:
struct 结构体名{
成员列表;
}变量名列表;
(3)不指定结构体名而直接定义结构体变量
struct {
int stuid;
char name[10];
char sex;
int age;
float score;
}student 1,student 2;
一般格式如下:struct{
成员列表;
}变量名列表;
2.结构体变量的初始化
struct studenttype{
int stuid;
char name[10];
char sex;
int age;
float score;
}stu1={1001,"mike",'m',"18",90.5};
struct studenttype stu2={1002,"jasmine",'f',"18",92.5};
各个数据以逗号‘,’分隔,当结构体具有嵌套结构时内层结构体的初值也要用{}括起来。
3.结构体变量的引用
stu1.stuid=1001;//引用学生的学号
stu1.sex='m';//引用学生的性别
一般格式:结构体变量. 成员名
说明:1."."称为结构体成员运算符,在C语言中的运算优先级是最高的。
2.对于嵌套结构体成员的使用,应按照从最外层到最内层的顺序逐层使用成员名,每个成员名之间用结构体成员运算符隔开,只能对最内层的成员进行存取及运算操作。
3.可以引用结构体变量成员的地址,也可以引用结构体变量的地址
scanf("%d",&student1.stuid);//输入stu1.stuid的值
printf("%p",&student1);//输出结构体变量student1的首地址
4.同类型的结构体变量可以相互赋值。
三、举例: 通过键盘输入三个学生的学号以及语文数学英语三门课成绩,分别统计他们的三门课平均分,最后输出平均分以及学号
#include<stdio.h>
int main()
{
struct studenttype {
int stuid;//学号
int score[3];//三门课成绩
double average;//平均分
}stu1,stu2,stu3;
int i;
printf("please input the id and scores:\n");//输入三个学生的学号以及三门课成绩
scanf("%d", &stu1.stuid);
for (i = 0; i < 3; i++)
{
scanf("%d", &stu1.score[i]);
}
scanf("%d", &stu2.stuid);
for (i = 0; i < 3; i++)
{
scanf("%d", &stu2.score[i]);
}
scanf("%d", &stu3.stuid);
for (i = 0; i < 3; i++)
{
scanf("%d", &stu3.score[i]);
}
//以下计算平均分
stu1.average = 0.0;
for (i = 0; i < 3; i++)
{
stu1.average = stu1.average + stu1.score[i];
}
stu1.average = stu1.average / 3.0;
stu2.average = 0.0;
for (i = 0; i < 3; i++)
{
stu2.average = stu2.average + stu2.score[i];
}
stu2.average = stu2.average / 3.0;
stu3.average = 0.0;
for (i = 0; i < 3; i++)
{
stu3.average = stu3.average + stu3.score[i];
}
stu3.average = stu3.average / 3.0;
printf("%d:%6.2f\n", stu1.stuid, stu1.average);//输出学号和平均分
printf("%d:%6.2f\n", stu2.stuid, stu2.average);
printf("%d:%6.2f\n", stu3.stuid, stu3.average);
return 0;
}
本期博客到这里就结束啦~后期还有结构体相关内容哟,感兴趣点个赞收藏持续关注吧!!