一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗?

很明显不可能,这时就要使用数组。结构体中也有数组,称为结构体数组。它与前面讲的数值型数组几乎是一模一样的,只不过需要注意的是,结构体数组的每一个元素都是一个结构体类型的变量,都包含结构体中所有的成员项。

定义结构体数组的方法很简单,同定义结构体变量是一样的,只不过将变量改成数组。或者说同前面介绍的普通数组的定义是一模一样的,如:

struct STUDENT stu[10];

这就定义了一个结构体数组,共有 10 个元素,每个元素都是一个结构体变量,都包含所有的结构体成员。

结构体数组的引用与引用一个结构体变量在原理上是一样的。只不过结构体数组中有多个结构体变量,我们只需利用 for 循 环一个一个地使用结构体数组中的元素。

下面编写一个程序,编程要求:从键盘输入 5 个学生的基本信息,如姓名、年龄、性别、学号,然后将学号最大的学生的基本信息输出到屏幕。

# include

# include

struct STU

{

char name[20];

int age;

char sex;

char num[20];

};

void OutputSTU(struct STU stu[5]); //函数声明, 该函数的功能是输出学号最大的学生信息

int main(void)

{

int i;

struct STU stu[5];

for (i=0; i<5; ++i)

{

printf("请输入第%d个学生的信息:", i+1);

scanf ("%s%d %c%s", stu[i].name, &stu[i].age, &stu[i].sex, stu[i].num);/*%c前面要加空格, 不然输入时会将空格赋给%c*/

}

OutputSTU(stu);

return 0;

}

void OutputSTU(struct STU stu[5])

{

struct STU stumax = stu[0];

int j;

for (j=1; j<5; ++j)

{

if (strcmp(stumax.num, stu[j].num) < 0) //strcmp函数的使用

{

stumax = stu[j];

}

}

printf("学生姓名:%s 学生年龄:%d 学生性别:%c 学生学号:%s\n", stumax.name, stumax.age, stumax.sex, stumax.num);

}

输出结果是:

请输入第1个学生的信息:小红 22 F Z1207031

请输入第2个学生的信息:小明 21 M Z1207035

请输入第3个学生的信息:小七 23 F Z1207022

请输入第4个学生的信息:小欣 20 F Z1207015

请输入第5个学生的信息:小天 19 M Z1207024

学生姓名:小明 学生年龄:21 学生性别:M 学生学号:Z1207035

结构体数组定义时初始化

结构体数组的初始化与前面讲的数值型数组的初始化是一模一样的,数值型数组初始化的方法和需要注意的问题在结构体数组的初始化中同样适用,因为不管是数值型数组还是结构体数组都是数组。下面就将前面的一个程序修改一下。

# include

# include

struct STU

{

char name[20];

int age;

char sex;

char num[20];

};

void OutputSTU(struct STU stu[5]); //函数声明

int main(void)

{

struct STU stu[5] = {{"小红", 22, 'F', "Z1207031"}, {"小明", 21, 'M', "Z1207035"}, {"小七", 23, 'F', "Z1207022"}, {"小欣", 20, 'F', "Z1207015"}, {"小天", 19, 'M', "Z1207024"}};

OutputSTU(stu);

return 0;

}

void OutputSTU(struct STU stu[5])

{

struct STU stumax = stu[0];

int j;

for (j=1; j<5; ++j)

{

if (strcmp(stumax.num, stu[j].num) < 0)

{

stumax = stu[j];

}

}

printf("学生姓名:%s 学生年龄:%d 学生性别:%c 学生学号:%s\n", stumax.name, stumax.age, stumax.sex, stumax.num);

}

输出结果是:

学生姓名:小明 学生年龄:21 学生性别:M 学生学号:Z1207035

注意,字符要用单引号括起来,字符串要用双引号括起来。

matlab 定义结构体数组,结构体数组及其定义和使用,C语言结构体数组详解相关推荐

  1. C语言动态内存开辟详解(malloc,calloc,realloc,free,柔型数组)

    目录 一.概述 二.相关库函数的使用 1.malloc 2.calloc malloc vs. calloc 异同 3.free的使用 4.realloc 三.易错点 四.C\C++程序的内存开辟规则 ...

  2. c语言智力题 操作符详解例题 数据存储 指针初阶 水仙花数 杨辉三角 逆序字符串 喝汽水问题 打印图形 猜凶手 使用指针打印数组内容 调整奇数偶数顺序 运动员猜名次

    [题目名称] 下面代码的结果是:a #include <stdio.h> int i; int main() {i--; //sizeof'的返回值是无符号整型if (i > siz ...

  3. c语言找出一个数组中出现次数最多的那个元素,c语言找出数组中出现次数最多地那个元素...

    matlab中如何找出不同维度矩阵出现次数最多的数组并记录其个数 首先是胞矩阵中的序列问题,不妨假设AA{1}是一个多行两列的数据,AA{2}同例.程序如下clcclearallAA{1}=[12;2 ...

  4. c语言 数组指针传递给函数_嵌入式开发-C语言-指针与数组

    1.指针与数组-掌握 在C语言中数组的指针:是指数组在内存中的起始地址,数组元素的地址:是指数组元素在内存中的起始地址一维数组的数组名为一维数组的指针(起始地址)例:double x[8];因些,x为 ...

  5. 微信小程序php返回数组,微信小程序 数组(增,删,改,查)等操作实例详解...

    微信小程序 数组(增,删,改,查)等操作 最近在做一个小程序的demo.由于不向后台请求数据,所以就涉及到对本地数据的操作,也遇到了一些坑,本文就以数组的增删改查为例,给新手分享一些经验. 首先这是原 ...

  6. 由ANSI标准定义的C语言关键字,C语言32个关键字详解

    C语言中32个关键字详解 由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register ...

  7. 第十章 结构体_C语言const的用法详解,C语言常量定义详解

    有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定.例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小.为了满足这一要求,可以使用const关键字对变量加以限定: 这样 ...

  8. 第十章 结构体_C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  9. 出参传递数组指针_C语言指针重难点详解

    1为什么使用指针 假如我们定义了 char a='A' ,当需要使用 'A' 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 ...

  10. C语言共用体(C语言union用法)详解

    转载重点:共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员.图形分析影响过程 通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语 ...

最新文章

  1. 活下去,是一种信念 !
  2. 在shell中编写函数
  3. android自定义属性的使用
  4. java注释 param_java注释文档(下)
  5. 在 C# 中,如何发现死锁并防止死锁
  6. java循环队列配对_循环队列 链式队列 的jJAVA实现
  7. java程序语言228_2019年Java面试题基础系列228道(5)
  8. 学术顶会再突破!计算平台MaxCompute论文入选国际顶会VLDB 2021
  9. 灰鸽子门徒自曝抓肉鸡内幕
  10. PPT Cookbook by Eric
  11. 数据聚合与分组运算——GroupBy
  12. Evaluation for Odometry里程计精度评估
  13. 拓端tecdat|R语言分解商业周期时间序列数据:线性滤波器、HP滤波器、Baxter King滤波器、Beveridge Nelson分解等去趋势方法
  14. 高斯滤波详解 附python和matlab高斯滤波代码
  15. NXP JN5169使用硬件I2C从机收发数据
  16. Android-弹窗AlterDialog对话框使用全解析
  17. C#,彩票数学——遗漏、和值、AC值、频率、直落号、大小、奇偶、质合、八卦、五行等常用彩票分析术语的统计学解释
  18. shell 编程-03-shell脚本简介和 set 的用法
  19. mysql数据库文件损坏的原因_MySQL数据库文件损坏如何解决
  20. App马甲包开发需要注意的地方

热门文章

  1. linux软连接出现红色闪烁
  2. CRMEB 知识付费模版消息修改教程
  3. 解读前端历届主流框架
  4. 硕士论文查重原理是什么?
  5. 红蜘蛛多媒体网络教室安装步骤:
  6. 我是一只幼鸟,望着那蓝蓝的天空时不时就想翱翔起来
  7. 神州数码java面试
  8. 山海经电子书古文/翻译白话文版发布,免费电子书。
  9. python计算2的n次方_python求n次方
  10. java 2的64次幂_2的N次方对照表 2的64次方等于几?