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日

相关文章

  • C++数据结构与算法之判断一个链表是否为回文结构的方法

    当我们遇到判断一个链表是否为回文结构的问题时,可以考虑使用如下的方法: 遍历链表,将链表节点的值存储到一个数组或者栈中。 遍历链表,将链表节点的值与前面存储的值进行比较,如果全部相同,则证明链表为回文结构。 下面是详细的代码实现和示例说明: 实现 首先,我们需要定义一个链表节点的结构体,包括节点值和指向下一个节点的指针: struct ListNode { …

    数据结构 2023年5月17日
    00
  • PAT甲级真题1020.树的遍历

    翻译和代码思路:Acwing 一个二叉树,树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。 输入格式 第一行包含整数 N,表示二叉树的节点数。 第二行包含 N个整数,表示二叉树的后序遍历。 第三行包含 N 个整数,表示二叉树的中序遍历。 输出格式 输出一行 N个整数,表示二叉树的层序遍历。 数据范围 1<=N<…

    算法与数据结构 2023年4月17日
    00
  • C语言数据结构之顺序数组的实现

    C语言数据结构之顺序数组的实现 前言 顺序数组是数据结构的一个重要部分,它代表着一种基本的数据结构,能够在数据存储与访问方面发挥极大的作用。本文将详细讲解如何在C语言中实现顺序数组。 简介 顺序数组是在物理内存中顺序存储的一组元素数据,可以通过下标访问任意一个元素。通常情况下,顺序数组的数据类型是相同的,而且每一个元素的大小也是相同的。 实现 实现顺序数组主…

    数据结构 2023年5月17日
    00
  • C语言编程数据结构线性表之顺序表和链表原理分析

    C语言编程数据结构线性表之顺序表和链表原理分析 线性表的定义 线性表是由n(n>=0)个数据元素a1、a2、…、an组成的有限序列,通常用(a1, a2, …, an)表示,其中a1是线性表的第一个元素,an是线性表的最后一个元素。线性表中的元素个数n称为线性表的长度,当n=0时,线性表为空表。 线性表的分类 根据存储结构,线性表可以分为顺序表…

    数据结构 2023年5月17日
    00
  • 集合框架及背后的数据结构

    集合框架及背后的数据结构 集合框架是Java编程语言中的一组接口和实现类,用于存储数据的集合。集合框架中提供了许多不同类型的集合,包括List、Set、Map等。背后的数据结构是实现集合框架的关键,不同的数据结构适用于不同的集合类型和场景。 集合框架中的接口和实现类 Java中的集合框架定义了一些接口以及这些接口的实现类,在使用Java集合的时候,主要是使用…

    数据结构 2023年5月17日
    00
  • Python内存管理器如何实现池化技术

    Python内存管理器使用了池化技术来进行内存管理,这使得Python程序的内存管理效率比较高。下面我将详细介绍Python内存管理器如何实现池化技术: 1. 内存分配 Python内存管理器在Python运行时,会维护多个大小不同的内存块池,每个池的大小相同。当Python程序需要分配内存时,会首先在池中寻找是否有剩余内存块可以分配。如果有,则分配给程序使…

    数据结构 2023年5月17日
    00
  • C语言 数据结构中栈的实现代码

    下面是关于C语言中栈的实现代码的详细攻略: 栈的概念 栈是一种只能在一端进行插入或删除操作的线性数据结构,它具有后进先出(Last In First Out, LIFO)的特点。通俗的说,就像大家在平时搭积木那样,搭积木的时候总是从最下面开始往上搭,拿积木的时候总是从最上面的积木开始拿起,栈就是这么一个先进后出的数据结构。 栈的实现方法 栈的实现方法比较多,…

    数据结构 2023年5月17日
    00
  • 【ACM算法竞赛日常训练】DAY4题解与分析【树】【子序列】| 组合数学 | 动态规划

    DAY4共2题: 树(组合数学) 子序列(dp,数学) ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)?? 原文链接(阅读原文获得更好阅读体验):https://www.eriktse.com/algorithm/109…

    算法与数据结构 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部