C语言 结构体数组详解及示例代码

C语言 结构体数组详解及示例代码

结构体是C语言中最为基础的数据结构之一,它可以将多个数据类型组合成一个整体,方便地进行访问和管理。而结构体数组则是将多个相同结构体类型的变量按照一定规律排列在一起的一种数据结构。本文将详细讲解C语言中结构体数组的使用方法及示例代码。

定义结构体

首先,我们需要定义一个结构体类型。结构体类型需要指定名称、成员变量及其数据类型:

struct student {
    int id;  // 学号
    char name[20]; // 姓名
    int age;  // 年龄
} ;

上述结构体定义了一个名为student的结构体类型,它包含三个成员变量,分别为id(整型)、name(字符型数组)和age(整型)。定义好了结构体类型之后,我们就可以定义结构体变量了。

定义结构体数组

定义结构体数组的语法格式如下:

struct student stu_list[3] = {
    {1, "Tom", 18}, 
    {2, "Jerry", 19}, 
    {3, "Lucy", 20} 
};

上述代码定义的是一个包含三个student类型的结构体数组,每个结构体包含了idnameage三个成员变量,且分别赋值为1、"Tom"、18、2、"Jerry"、19、3、"Lucy"、20。这样,我们就定义了一个名为stu_list的结构体数组,其中包含了三个学生的信息。

在定义结构体数组时,我们可以使用初始化列表对各个元素的值进行多种赋值。而且,结构体数组的元素个数并不固定,可以根据实际情况需求来定义。

访问结构体数组

访问结构体数组的元素时,首先需要通过下标访问到具体的元素,然后再通过.操作符访问具体的成员变量。例如,访问stu_list中第一个学生的姓名可以使用以下语法:

printf("%s", stu_list[0].name);

这里使用了下标0来访问第一个元素,然后使用.操作符访问到该元素中的成员变量name

示例代码 1

我们来看一个结构体数组的完整示例。下面这个程序定义了一个学生信息结构体类型,使用结构体类型定义了一个包含10个学生信息的结构体数组,并对这些学生的信息进行了打印:

#include<stdio.h>

struct student {
    int id;
    char name[20];
    float score;
} stu_list[10] = {
    {1, "Tom", 78},
    {2, "Jerry", 89},
    {3, "Lucy", 90},
    {4, "Mary", 67},
    {5, "Bob", 80},
    {6, "Jim", 75},
    {7, "Lisa", 86},
    {8, "David", 65},
    {9, "Frank", 98},
    {10, "John", 88}
};

int main()
{
    int i;
    for(i=0; i<10; i++) {
        printf("id:%d, name:%s, score:%.1f\n", stu_list[i].id, stu_list[i].name, stu_list[i].score);
    }
    return 0;
}

运行结果:

id:1, name:Tom, score:78.0
id:2, name:Jerry, score:89.0
id:3, name:Lucy, score:90.0
id:4, name:Mary, score:67.0
id:5, name:Bob, score:80.0
id:6, name:Jim, score:75.0
id:7, name:Lisa, score:86.0
id:8, name:David, score:65.0
id:9, name:Frank, score:98.0
id:10, name:John, score:88.0

该程序定义了一个名为stu_list的结构体数组,其中包含了10个学生的信息。然后程序利用循环遍历了该结构体数组中的每个元素,并访问了其中的idnamescore这三个成员变量,并将这些变量的值打印输出。

示例代码 2

我们再看一个结构体数组的应用示例,如下所示,程序定义了一个学生信息结构体类型,通过输入运用结构体数组对其进行排序:

#include<stdio.h>
#include<string.h>

struct student {
    char name[20];
    int age;
};

int main()
{
    int i, j, n;
    struct student stu_list[100];
    struct student temp;

    printf("请输入学生数量:");
    scanf("%d", &n);

    for(i=0; i<n; i++) {
        printf("请输入第%d个学生的姓名和年龄(用空格分隔):", (i+1));
        scanf("%s %d", stu_list[i].name, &stu_list[i].age);
    }

    for(i=0; i<n-1; i++) {
        for(j=i+1; j<n; j++) {
            if(strcmp(stu_list[i].name, stu_list[j].name) > 0) {
                temp = stu_list[i];
                stu_list[i] = stu_list[j];
                stu_list[j] = temp;
            }
        }
    }

    printf("按姓名排序后的结果为:\n");
    for(i=0; i<n; i++) {
        printf("姓名:%s, 年龄:%d\n", stu_list[i].name, stu_list[i].age);
    }

    return 0;
}

运行结果:

请输入学生数量:3
请输入第1个学生的姓名和年龄(用空格分隔):Lucy 18
请输入第2个学生的姓名和年龄(用空格分隔):Tom 20
请输入第3个学生的姓名和年龄(用空格分隔):Jerry 19
按姓名排序后的结果为:
姓名:Jerry, 年龄:19
姓名:Lucy, 年龄:18
姓名:Tom, 年龄:20

该程序定义了一个名为stu_list的结构体数组,并利用循环遍历每一个结构体变量,输入其中的名字和年龄。然后该程序使用冒泡排序方法对数组进行了按名字排序,并打印输出了姓名和年龄两个成员变量的值。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 结构体数组详解及示例代码 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Python数据结构之顺序表的实现代码示例

    针对“Python数据结构之顺序表的实现代码示例”,我可以给出以下完整攻略: 什么是顺序表 顺序表是一种线性结构,是用一维数组来存储数据元素的有序集合。它支持随机访问,可以对任意位置的元素进行查找、插入、删除等操作。 顺序表的实现代码示例 以下是Python中实现顺序表的示例代码,以及相关的操作函数,包括创建空表、获取表长度、查找元素、插入元素、删除元素等。…

    数据结构 2023年5月17日
    00
  • 详解Java集合中的基本数据结构

    详解Java集合中的基本数据结构 Java语言提供了丰富的集合框架,可以帮助我们高效地管理和操作数据。在这个库中,最基本的数据结构有数组、列表、映射和集合。本文将详细讲解Java集合中的基本数据结构。 数组 数组是Java中最基本的数据结构,它可以存储同一种数据类型的多个元素。在Java中,数组属于对象类型。可以通过以下方式来声明一个数组: int[] ar…

    数据结构 2023年5月17日
    00
  • C语言数据结构之模式匹配字符串定位问题

    C语言数据结构之模式匹配字符串定位问题 什么是模式匹配字符串定位? 模式匹配字符串定位即在一个文本串中匹配一个模式串,并且返回模式串在文本串中第一次出现的位置。 例如,对于文本串“this is a test string”,我们想要匹配模式串“test”,我们期望得到的结果是第一次出现的位置为10。 KMP算法 算法思路 KMP算法是一种高效的字符串匹配算…

    数据结构 2023年5月16日
    00
  • c语言实现单链表算法示例分享

    下面是详细的攻略。 C语言实现单链表算法示例分享 什么是单链表 单链表是一种数据结构,它由一个个节点组成,每个节点包含两个部分:一个是数据部分,另一个是指针部分,指针部分指向下一个节点的位置。单链表的节点是动态分配的,可以随时插入、删除,是一种非常灵活的数据结构。 为什么要使用单链表 在进行一些操作时,数组或者普通的指针会遇到很多麻烦。比如在删除数组元素时,…

    数据结构 2023年5月17日
    00
  • C语言学习之链表的实现详解

    下面我将详细讲解“C语言学习之链表的实现详解”的完整攻略。 1. 链表的定义 链表是一种数据结构,它由一系列节点组成。每个节点由一个数据部分和一个指向下一个节点的地址部分组成。链表可以有多种形式,例如单向链表、双向链表、循环链表等。 2. 链表的实现 2.1. 单向链表 单向链表是最简单的链表形式,一个节点只包含一个指向下一个节点的指针。在C语言中,我们可以…

    数据结构 2023年5月17日
    00
  • C语言数据结构实现链表逆序并输出

    下面是C语言数据结构实现链表逆序并输出的完整攻略。 1. 题目分析 本题目要求实现对链表的逆序,并依次输出各节点的值。而链表的逆序可以通过改变各节点之间的连接方式来实现。 2. 思路分析 创建一个指针,指向原链表的头结点。 遍历链表,将每个节点的next指针指向它前面的节点,从而实现链表的逆序。 遍历逆序后的链表,从头结点开始,依次输出每个节点的值。 3. …

    数据结构 2023年5月17日
    00
  • C语言类的双向链表详解

    C语言类的双向链表详解 基本概念 什么是双向链表? 双向链表是链表的一种,它有两个指针域:一个指向前一个结点,一个指向后一个结点。每个结点包含两个部分:数据和指针域,指针域分别指向前一个结点和后一个结点,所以每个结点都是由数据和两个指针域构成的。 双向链表的作用? 双向链表可以支持O(1)时间复杂度的在任何一个结点前或后插入一个结点。 双向链表的实现方式? …

    数据结构 2023年5月17日
    00
  • JS数据结构之队列结构详解

    JS数据结构之队列结构详解 什么是队列结构? 队列结构是一种遵循先进先出(FIFO)原则的线性数据结构,它可以用来存储一系列待处理的数据,其中队首是最先进入队列的元素,队尾是最后进入队列的元素。 在队列中,添加元素的操作叫做enqueue,移除元素的操作叫做dequeue。同时,队列还包括peek方法,查看队列头的元素,以及isEmpty方法,判断队列是否为…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部