五、结构体
在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:
struct 结构体名{
结构体所包含的变量或数组
};
结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member)。请看下面的一个例子:
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
};
stu 为结构体名,它包含了 5 个成员,分别是 name、num、age、group、score。结构体成员的定义方式与变量和数组的定义方式相同,只是不能初始化。
注意大括号后面的分号
;
不能少,这是一条完整的语句。
结构体也是一种数据类型,它由程序员自己定义,可以包含多个其他类型的数据。
像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。
1、输入3个学生的学号,姓名,成绩,按照成绩降序排列
#include "stdio.h"
typedef struct student
{
int num;
char name[12];
int score;
}a[3];
int main()
{
struct student a[3];
int i,j;
struct student t;
for(i=0;i<3;i++)
{
scanf("%d %s %d ",&a[i].num,&a[i].name,&a[i].score);
}
for(j=0;j<2;j++)
{
for(i=0;i<2-j;i++)
{
if((a[i].score) < (a[i+1].score))
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
for(i=0;i<3;i++)
{
printf("%d %s %d\n",a[i].num,a[i].name,a[i].score);
}
return 0;
}
2、把初始代码中的结构数组作为参数传递给函数print,并在函数中打印出结构体数组的内容;
jone 12345 339.0 david 13916 449.0 marit 27519 311.0 yoke 12335 511.0
#include "stdio.h"
struct person
{
char name[20];
double num;
double grade;
};
int fun(struct person n)
{
printf("%s %.2lf %.2lf\n", n.name, n.num,n.grade);
return 0;
}
int main()
{
struct person a[4]={"jone",12345,339.0,"david",13916,449.0,"marit",27519,311.0,"yoke",12335,511.0};
int i;
for(i=0;i<4;i++)
fun(a[i]);
return 0;
}