结构体数组

结构体数组的定义:

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

//定义一个结构体数组名为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;//英语成绩
}STU;
//编写一个函数,它的目的是为了输出所有学生的总分与平均分
void fun(STU a[],int n){int sum=0,i;printf("学号\t姓名\t语文\t数学\t英语\t总分\t平局分\n"); //要访问里面的每一个学生 for(i=0;i<n;i++){//对于一个学生a[i]而言我们要来输出它的信息printf("%s\t%s\t%d\t%d\t%d\t%d\t%.1f\n",a[i].Id,a[i].Name,a[i].China,a[i].Math,a[i].English,a[i].China+a[i].Math+a[i].English,(a[i].China+a[i].Math+a[i].English)/3.0); sum = a[i].China+a[i].Math+a[i].English;}
}
void main(){STU a[8]={{"S1","张一军",127,150,100}, {"S2","张二军",75,85,89}, {"S3","张三军",67,58,86}, {"S4","张四军",120,101,87}, {"S5","张五军",136,100,82}, {"S6","张六军",141,52,83}, {"S7","张七军",125,85,81},  {"S8","张八军",136,65,79}};fun(a,8);
}


案例变换:
注意字符串也不能够直接赋值,要通过一个函数来对字符串进行赋值
strcpy:通过这个函数才可以给字符串进行赋值

#include<stdio.h>
#include<string.h>
typedef struct stud{//定义了一个结构体  char Id[10];//学号 char Name[10];//姓名 int China;//语文成绩int Math;//数学成绩int English;//英语成绩
}STU;
//编写一个函数,求出每一个学生的优秀科目,目的不是输出分数,而是要输出对应科目的名称
void Perferct(STU a[],int n){int sum=0,i;char per[20];int maxscore;//用来确保最优科目的分数 //要输出标题 printf("学号\t姓名\t语文\t数学\t英语\t最优秀科目\n"); //要访问里面的每一个学生,对于第i学生要确认它的最优科目名称(语文,数学,英语) //科目名称是字符串,所以要先定义一个字符串来确保保存最优科目名称for(i=0;i<n;i++){maxscore=a[i].China;//认为第i个学生的语文是最优秀的 strcpy(per,"语文");if(maxscore<a[i].Math){maxscore = a[i].Math;strcpy(per,"数学");} if(maxscore<a[i].English){maxscore = a[i].Math;strcpy(per,"英语");} printf("%s\t%s\t%d\t%d\t%d\t%s\n",a[i].Id,a[i].Name,a[i].China,a[i].Math,a[i].English,per); }
} void main(){STU a[8]={{"S1","张一军",127,150,100}, {"S2","张二军",75,85,89}, {"S3","张三军",67,58,86}, {"S4","张四军",120,101,87}, {"S5","张五军",136,100,82}, {"S6","张六军",141,52,83}, {"S7","张七军",125,85,81},  {"S8","张八军",136,65,79}};Perferct(a,8);
}

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

  1. python定义一个空数组_python数组 1_python 数组最后一个元素_python定义一个空数组 - 云+社区 - 腾讯云...

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 感悟: 1.python列表操作里不允许变量类型的指针2.case1类似于冒泡排 ...

  2. json数组 js html标签,js定义json对象数组 json 数组也是数组 //

    var jsonstr="[{'name':'a','value':1},{'name':'b','value':2}]"; var jsonarray = eval('('+js ...

  3. java定义int数组_怎样用java定义一个int数组

    展开全部 数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是32313133353236313431303231363533e4b893e5b19e31333363373731一连 ...

  4. python定义二维数组_在python中定义二维数组

    原博文 2016-08-30 19:16 − 发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思. 先看一段 ...

  5. C语言经典例71-编写函数输出结构体数据

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 编写input()和output()函数输入,输出5个学生的数据记录. 2 分析 定义结构体,声明结构体数组,再编写函数传入结构体数组指针到 ...

  6. int java 声明_怎样用java定义一个int数组 C++ 怎么声明一个整型数组?

    导航:网站首页 > 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 相关问题: 匿名网友: int[] anA ...

  7. c++如何定义二维数组结构体_原来数组还可以这么玩(宏把数组玩坏了)

    点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 想起青春追寻的昨天,你也是曾经追风的少年. 文 章 导 读 今天给小伙伴们介绍下用宏对数组值进行分类使用的方式,比较大的程序中的寄存器经常会这 ...

  8. 一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

     打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h> void main(void) { int a[ ...

  9. 结构体后面定义一个空数组的含义

    最近在写C代码,经常看到Linux 的头文件中有的结构体后面会定义一个空数组,不知道其为何作用?经过高人指点终于明白其要点! struct inotify_event {    __s32 wd;   ...

  10. new 一个结构体数组_每天一个IDA小技巧(四):结构体识别

    之前提到IDA可以将一长串的数组数据声明变成一行数组声明,简化反汇编代码,对于结构体,IDA也同样支持通过各种设置工具来改善结构体代码的可读性. 这篇文章的目标是将[edx+10h]之类的结构体元素访 ...

最新文章

  1. 基础知识——if语句和字典(四)
  2. 初次遇见NLP:从词向量到BERT
  3. OpenCV中的全景拼接例程
  4. NR 5G 密钥与安全详解
  5. java rotatetransition_transition过渡,transform变换
  6. Live Writer 在oschina上的代码高亮插件推荐
  7. Gym - 101334F 单调栈
  8. python的scripts里没有pip_解决python scripts和pip缺失问题
  9. disk genius_如何预约Apple Store商店或Genius Bar
  10. leetcode132. 分割回文串 II(dp)
  11. 详解 Cookie 纪要(vue.cookie,jquery.cookie简化)
  12. 队列Java舞会_周末舞会(队列)
  13. 1、什么是Spring框架,Spring框架有哪些主要模块
  14. 创建一个路由节点struct fib_node
  15. java抛出异常thorw和throws的用法
  16. Faster-RCNN 训练自己的数据
  17. swiftui动画之tab自定义切换动画_Unity动画系统详解1:在Unity中如何制作动画?
  18. PythonWEB框架之Tornado
  19. Cesium:向地图中添加面的方法
  20. Kubernetes Ingress解析

热门文章

  1. dva的用法_使用 dva 构建小型前端项目 (一)
  2. 抖音话题怎么选热门?为什么要做抖音话题
  3. 一些学习gis有关的文章
  4. APNS部署教程2(证书配置)
  5. Oracle转MySQL存储函数percentile_cont(比例) WITHIN GROUP( ORDER BY to_number(分数) )用法
  6. 什么是指令重排序?为什么要重排序?
  7. python十字坐标轴绘制_matplotlib画十字坐标图
  8. C# 发送邮件方法2
  9. vue z-index层级显示问题
  10. IP-Prefix List