初识结构数组

本文详细介绍了C语言中结构数组的概念、定义方式、初始化方法以及如何在实际编程中运用结构数组解决具体问题,包括选举后得票数统计等案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C语言中,具有相同数据类型的数据可以组成数组,指向相同类型的指针可以组成指针数组。根据这个原则,具有相同结构变量的结构也可以组成数组,这个数组称为结构数组。结构数组中的每一个元素都是结构变量

结构数组的说明形式如下:

<存储类型> struct 结构名 结构数组名[元素个数] = {初值表};

Example:

struct Example strarr[3];

说明了结构数组 strarr[],有三个元素 strarr[0],strarr[1],strarr[2],它们都是具有Example 结构的结构变量。

与普通数组一样,在定义结构数组的同时可以初始化元素值。
1)在对结构数组初始化时,方括号[]中的元素个数可以缺省。
2)结构数组也具有数组的属性,结构数组名是结构数组的首地址。



结构数组的使用范例

#include <stdio.h>
struct Data
{
    char name[20];
    short age;
    char adr[30];
    long tel;
};

int main(void)
{
   struct Data strarr[3] = {
        {"王伟",20,"东八舍416室",7788565},
        {"李明",19,"东八舍415室",8856548},
        {"张军",20,"东八舍417室",4458778}
    };

    int i = 0;
    printf("姓名\t年龄\t住址\t\t电话\n");

    for(i = 0;i<3;i++)
    {
        printf("%s\t%d\t%s\t%ld\n",strarr[i].name,strarr[i].age,strarr[i].adr,strarr[i].tel);
    }

    return 0;
}


结构数组应用范例

选举后对候选人的得票数进行统计。设有4个候选人,n个人参加选举,每次输入一个得票的候选人的名字,要求最后输出个人的得票结果。

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

struct person    //定义候选人结构体
{
    char name[20]; //候选人名字
    int count;     //统计票数
};

int main(void)
{
    struct person leader[4] = { //定义候选人结构体数组,并初始化成员
        {"wj",0},
        {"lz",0},
        {"lc",0},
        {"zy",0}
        };

    int loop_var = 0;     //循环变量
    int loop_leader = 0;  //循环变量
    int xj_loop;          //参予投票的人数变量
    char name[20];        //取输入候选人名字
    
    printf("请输入投票人数:"); //输入信息提示
    scanf("%d",&xj_loop);    //取得投票人数
    printf("\n请输入侯选人名字:\n");   //输入信息提示

    for( loop_var = 0;loop_var <= xj_loop; loop_var++)   //循环次数由投票人数xj_loop决定
    {
        gets(name); //取得候选人名
        for(loop_leader = 0;loop_leader< 4;loop_leader++)  //在结构数组中循环检测输入的候选人名
        {
            if(strcmp(name,leader[loop_leader].name) == 0)  //进行名字匹配
            {
                leader[loop_leader].count ++;          //匹配,则进行票数累计,并break,进行下次输入
                break;
            }
        }
    }
    printf("\n");
    for (loop_var = 0;loop_var<4;loop_var++)    //循环输出各候选人所得票数
    {
        printf("候选人%s:得票:%d\n",leader[loop_var].name,leader[loop_var].count);
    }

    return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值