C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用

Posted 北芳科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用相关的知识,希望对你有一定的参考价值。

结构体数组

结构体数组的定义:

结构体数组格式:声明变量类型 数组名称[数组长度]

//定义一个结构体数组名为a,它里面包含有5个元素,每一个元素都是一个结构体变量
Wor a[5]=;
#include<stdio.h> 
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;
void main()
	WOR a[3]=
	
		"0001","陈文杰","男",1200,
		"0001","张三丰","女",500,
		"0001","张四丰","女",1200
	

对比记忆

结构体数组的输出

#include<stdio.h> 
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;
void main()
	WOR a[6]=
		"0001","陈文杰","男",1200,
		"0002","张三丰","女",5000,
		"0003","张四丰","女",1200, 
		"0004","张五丰","男",2200,
		"0005","张六丰","男",5200,
		"0006","张七丰","男",6200 
	;
	int i;
	for(i=0;i<6;i++)
		printf("%s,%s,%s,%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
	
	


结构体对象中的a[i]就代表一个对象,它已经不再是一个值了
所以我们应该用a[ii].成员名

改进以上程序

#include<stdio.h> 
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;
void output(WOR a[],int n)//次函数是用来输出长度为n的工人数组的信息 
	int i;
	printf("工号\\t姓名\\t性别\\t年龄\\n"); 
	for(i=0;i<6;i++)
		printf("%s\\t%s\\t%s\\t%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
	

void main()
	WOR a[6]=
		"0001","陈文杰","男",1200,
		"0002","张三丰","女",5000,
		"0003","张四丰","女",1200, 
		"0004","张五丰","男",2200,
		"0005","张六丰","男",5200,
		"0006","张七丰","男",6200 
	;
	output(a,6);

结构体的应用

案例一、

1、编写一个函数,它的目的是为了输出所有性别为男的的职工信息
算法分析:
1)这个函数它不用返回值因为该函数是为了完成输出
2)该函数要处理很多职工,就需要一个数组,数组的类型为职工类型
注意:在C语言当中字符串不能直接比较是否相同,要通过strcmp这个函数来比较其两个字符串是否相同

#include<stdio.h>
#include<string.h> 
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;
void QueryWorker(WOR a[],int n)//次函数是用来输出长度为n的工人数组的信息 
	int i;
	printf("全部员工:\\n"); 
	printf("工号\\t姓名\\t性别\\t年龄\\n"); 
	for(i=0;i<6;i++)
		printf("%s\\t%s\\t%s\\t%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
	
	printf("所有男员工:\\n"); 
	printf("工号\\t姓名\\t性别\\t年龄\\n"); 
	for(i=0;i<6;i++)
		if(strcmp(a[i].sex,"男")==0) 
			printf("%s\\t%s\\t%s\\t%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
		 
	
	printf("所有女员工:\\n"); 
	printf("工号\\t姓名\\t性别\\t年龄\\n"); 
	for(i=0;i<6;i++)
		if(strcmp(a[i].sex,"女")==0) 
			printf("%s\\t%s\\t%s\\t%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
		 
	

void main()
	WOR a[6]= 
		"0001","陈文杰","男",1200,
		"0002","张三丰","女",5000,
		"0003","张四丰","女",1200, 
		"0004","张五丰","男",2200,
		"0005","张六丰","男",5200,
		"0006","张七丰","男",6200 
	;
	QueryWorker(a,6);


2、能够输出指定性别的职工

#include<stdio.h> 
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;
void QueryBySex(WOR a[],int n,char b[])//次函数是用来输出长度为n的工人数组的信息 
	int i;
	
	printf("工号\\t姓名\\t性别\\t年龄\\n");  
	for(i=0;i<6;i++)
		if(strcmp(a[i].sex,b)==0) 
			printf("%s\\t%s\\t%s\\t%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
		 
	
	

void main()
	WOR a[6]= 
		"0001","陈文杰","男",1200,
		"0002","张三丰","女",5000,
		"0003","张四丰","女",1200, 
		"0004","张五丰","男",2200,
		"0005","张六丰","男",5200,
		"0006","张七丰","男",6200 
	;
	char b[10];
	printf("请输入您要查询的性别 :\\n");
	scanf("%s",b);
	QueryBySex(a,6,b);

案例二、

让用户输入一个工号,然后在一个结构体数组当中去查找有没有这个工人,如果有则输出这个工人的信息,如果没有则找不到此人

#include<stdio.h> 
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;

void FindById(WOR a[],int n,char id[])
	//我们要访问数组里面每一个工人,如果发现了一个工人,就退出循环。如果找不到就输出找不到此人
	int i;
	for(i=0;i<n;i++)
		if(strcmp(a[i].id,id)==0)//说明第i个工人就是我们要找的职工 
			break;//强制终止循环 
		
	 
	
	//在退出循环之后,再来检查i与n的关系
	if(i<n)//说明循环在中途就break,发现了职工 
		printf("%s\\t%s\\t%s\\t%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
	 
	else//找不到职工 
	
		printf("找不到此人");
	


void main()
	WOR a[6]= 
		"0001","陈文杰","男",1200,
		"0002","张三丰","女",5000,
		"0003","张四丰","女",1200,
		"0004","张五丰","男",2200,
		"0005","张六丰","男",5200,
		"0006","张七丰","男",6200 
	;
	char b[10];
	printf("请输入您要查询的id :\\n");
	gets(b);
	FindById(a,6,b);

案例三、

求出所有职工中最高工资那个职工的信息
注意:这里有一个知识点:成员比较整体赋值

#include<stdio.h> 
#include<string.h>
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;
void max(WOR a[],int n)
	WOR m=a[0];
	int i;
	for(i=0;i<n;i++)
		if(m.pay<a[i].pay)//如果m的工资小于a[i]的工资,就把m赋值给a[i]
			m=a[i];
		
	
	printf("%s\\t%s\\t%s\\t%d\\n",m.id,m.name,m.sex,m.pay);
	//假设第一个工人是最高工资的那个工人	 
 
void main()
	WOR a[6]= 
		"0001","陈文杰","男",1200,
		"0002","张三丰","女",7000,
		"0003","张四丰","女",1200,
		"0004","张五丰","男",2200,
		"0005","张六丰","男",5200,
		"0006","张七丰","男",6200 
	;
	max(a,6);


上方程序改进
输出所有工资大于平均工资的职工
1、必须要先求出平均
2、在访问每一个职工,如果发现这个职工的工资要小于平均工资的话,就输出这个职工的信息。

#include<stdio.h> 
#include<string.h>
typedef struct worker
	char id[10];
	char name[10];
	char sex[10];
	int pay;
WOR;
void QueryByAver(WOR a[],int n)
	int i;
	float aver; 
	int sum = 0; 
	//求出总工资 
	for(i=0;i<n;i++)
		sum+=a[i].pay;
	
	//求出平均工资aver 
	aver =(float)sum/n;
	printf("平均工资为%f\\n",aver);
	printf("大于平均工资为:\\n");
	//访问每一个职工 
	for(i=0;i<n;i++)
		if(a[i].pay>=aver)//如果发现职工的工资大于等于平局工资,就输出对应职工的信息 
			printf("%s\\t%s\\t%s\\t%d\\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
		
		

void main()
	WOR a[6]= 
		"0001","陈文杰","男",3200,
		"0002","张三丰","女",7000,
		"0003","张四丰","女",1200,
		"0004","张五丰","男",2200,
		"0005","张六丰","男",5200,
		"0006","张七丰","男",6200 
	;
	QueryByAver(a,6);


算法变换

#include<stdio.h> 
#include<string.h> 
typedef struct stud//定义了一个结构体  
	char Id[10];//学号 
	char Name[10];//姓名 
	int China;//语文成绩
	int Math;//数学成绩
	int English;C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用

c 语言结构体中包含结构体 是数组吗

c语言结构体数组赋值问题 如果用同一个结构体定义了2个不同的数组1和数组2。可以 数组1=数组2;

C语言结构体数组 的输入方式

C语言结构体数组排序

c语言中返回结构体数组