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语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用