C语言:结构体数组

目录

1;数组

数组的声明

数组初始化

访问数组元素

2:结构体

结构体的定义

结构体变量的初始化

3:结构体数组


1;数组

数组的声明

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

数组的声名不是一个个单独的变量的声明,而是声明一个数组变量。

所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。

num[0] num[1] num[2] .....

数组中的个体可以通过索引访问,即上面代码段上的num[i]。

数组声明的要指定元素的类型和元素的数量

type arrayName [ arraySize ];

其中type可以是任意有效的C语言数据类型,如int char float等。

int stu[10];

这样就定义了一个可容纳10个类型为1int的数据。

数组初始化

C语言的数组可以逐一初始化,也可以使用一个初始化语句。

int stu[4]={1,2,3,4};

其中数组的数量数据可以省略,则默认为初始化数组的数量的大小。

int stu[]={1,2,3,4};

访问数组元素

数组元素的下标是从0开始的,即第一个数据为stu[0];

可以借组循环语句访问数组的各个元素:

#include int main()
{
    int num[5]={2,3,4,5,6};
    for(int i=0;i<5;i++)
        printf("num[%d]=%d\n",i,num[i]);
    return 0;
}

输出结果为:

num[0]=2
num[1]=3
num[2]=4
num[3]=5
num[4]=6

以上简单的介绍了数组的概念。

2:结构体

前面提到,C语言数组可以储存相同类型的数据,而结构体允许用户储存不同类型的数据。

结构体的成员可以是基本的C语言数据类型(int char float等),也可以是指针等。

结构体的定义

struct tag { 
    member-list
    member-list 
    member-list  
    ...
} variable-list ;

结构体定义用关键字struct和结构名组成,

tag是结构名,member-list 是标准的变量定义,variable-list 结构变量,定义在结构的末尾,最后一个分号之前,您可以指定一个或多个结构变量。

struct students{
	int age;
	cahr name;
	int num;
}stu;

在一般情况下,tag、member-list、variable-list 这 3 部分至少要出现 2 个。

#include struct stu{
	int age;
	cahr name;
	int num;
};                        //结构体的声明
int main()
{
	struct stu s[10];    //结构体变量的定义,将是s[10]定义为stu类型。
	return 0;
}

结构体声明之后,还要进行定义变量。

结构体变量的初始化

和其它类型变量一样,对结构体变量可以在定义时指定初始值。

#include struct students{
	int age;
	char name[10];
	int num;
}student={18,"liudage",2};
int main()
{
	printf("%d %s %d",student.age,student.name,student.num);
	return 0;
}

输出结果为:

18 liudage 2

3:结构体数组

结构体和数组经常放在一起解决实际问题,如输入学生信息并筛选。

要求储存学生的年龄,性别,学号,姓名,并进行筛选。

#include struct student{
	int sno,ssex,sage;
	char sname[20];
}stu[5]={
		{1,'M',18,"liuyifeng"},
		{2,'M',20,"liuerfeng"},
		{3,'W',20,"liusanfeng"},
		{4,'M',14,"liusifeng"},
		{5,'M',20,"liuwifeng"}	
};                                    //结构体的声明于初始化。
int main()
{
	int i,j;
	for(i=0;i<5;i++)        
	{
		if(stu[i].sage>=18)        
		{
			if(stu[i].ssex=='M')
			{
				printf("学号:%d\n性别:%c\n年龄:%d\n姓名:%s\n\n",stu[i].sno,stu[i].ssex,stu[i].sage,stu[i].sname);
			}
		}
	
		
	} 
	return 0;
}

其次就是要求用户输入学生信息与筛选信息,并进行筛选输出,代码比较简单,所以用户比较忙,得一个一个输入按回车键。

#include int main() 
{
	struct students{
		int	sno;
		char sname[20];
		int	ssex;
		int	sage;
		
	};
	
	int i,j;
	struct students stu[5];
	
	for(i=0;i<5;i++)
	{
	
		j=i+1;
		printf("请输入第%d位同学的信息\n",j);
		
		printf("请输入学生的学号:");
		scanf("%d",&stu[i].sno);
		
		
		printf("请输入学生的姓名:");
		scanf("%s",&stu[i].sname);
		
		
		printf("请输入学生的性别(1表示男,0表示女):");
		scanf("%d",&stu[i].ssex);
		
		printf("请输入该生的年龄:");
		scanf("%d",&stu[i].sage); 
	}
	
	int n,m;
	printf("请输入筛选信息\n请输入学生性别\n");
	scanf ("%d",&n);
	
	printf("请输入年龄信息\n");
	scanf("%d",&m);
	 
	int b,c;
	for(b=0;b<5;b++)
	{
		c=stu[b].ssex;
		if(c==n)
		{
			c=stu[b].sage;
			if(c>=m)
			{
				printf("筛选结果为:\n");
				printf("学号:%d\n",stu[b].sno);
				printf("性别:%d\n",stu[b].ssex);
				printf("年龄:%d\n",stu[b].sage);
				printf("姓名:%s\n",stu[b].sname);
			}
			
		}
	}
	
	return 0;
}

完。