C61-结构体数组

一 结构体数组

结构体数组是指数组的每个元素都是同一个结构体类型

定义与初始化、访问与操作
  • Example:

    c 复制代码
    #include <stdio.h>
    #include <string.h>
    
    struct Student
    {
        char name[32];
        int  StudentNumber;
        char sex[4];
        int age;
        float score;
        char address[32];
    };  
    
    int main()
    {
        //声明与初始化结构体数组
        struct Student students[3]=
        {
           {"Tony",20251911,"男",19,94.7,"云南"},
           {"Michle",20251931,"男",19,95.8,"湖南"},
           {"Jane",20251945,"女",18,94.9,"北京"}
        }; 
    
        //遍历结构体数组
        int len;
        len=sizeof(students)/sizeof(students[0]);
    
        for(int i=0;i<len;i++)
        {
            printf("姓名:%s, 学号:%d, 性别:%s, 年龄:%d, 分数:%f,  籍贯: %s\n\n",
            students[i].name,students[i].StudentNumber,students[i].sex,students[i].age,students[i].score,students[i].address);
        }
    
        //修改某项信息
        students[2].score=100;
        //修改测试
        printf("姓名:%s, 学号:%d, 性别:%s, 年龄:%d, 分数:%f,  籍贯: %s\n\n",
            students[2].name,students[2].StudentNumber,students[2].sex,students[2].age,students[2].score,students[2].address);
        
        return 0;
    }
  • Show:

二 mini项目-选票系统

  • Example:

    c 复制代码
    //三个候选者,五个选民每人一张票
    #include <stdio.h>
    #include <string.h>
    
    struct Candidate
    {
        char name[32];
        int votes;
    };  
    
    int main()
    {
        //声明结构体数组
        struct Candidate candidates[3];     //candidates:候选者们
        struct Candidate electee;   //electee:当选者
    
        //相关数据定义
        int AbandonedTickets=0;     //计数弃票
        char TempName[32];  //用于临时存放选民的意向人名字
        
    
        //初始化选民信息
        int i;
        int j;
        int mark;
        int len=sizeof(candidates)/sizeof(candidates[0]);
        for(i=0;i<len;i++)
        {
            candidates[i].votes=0;
            printf("请输入第%d个候选者的名字:\n",i+1);
            scanf("%s",candidates[i].name);
        }
    
        //唱票环节
        for(i=0;i<5;i++)
        {    
            mark=0;  
            memset(TempName,'\0',sizeof(TempName));  //清空临时存放,避免后期比对错误
            printf("请问你把票投给谁:\n");
            scanf("%s",TempName);
            for (j= 0; j<len;j++)
            {
                if (strcmp(TempName,candidates[j].name)==0)
                {
                    candidates[j].votes++;
                    mark=1;
                    // 找到匹配后可提前退出内层循环,优化效率
                    break;
                }
            }
            // 修复:将弃票判断移至内层循环外,确保检查所有候选人后再判断
            if (mark==0)
            {
                printf("不存在此候选人,意味着你弃票!\n");
                AbandonedTickets++;
            }   
        }
    
        //结果公示
        for(i=0;i<len;i++)
        {
            printf("名字:%s,票数:%d\n",candidates[i].name,candidates[i].votes);
        }
        printf("\n");
    
        electee=candidates[0];
        for (i=0; i<len;i++)
        {
            if (electee.votes < candidates[i].votes)
            {
                electee = candidates[i];
            }
        }
    
        printf("%s以%d票当选,弃票为%d",electee.name,electee.votes,AbandonedTickets);
    
        return 0;
    }
  • Show:

  • Error reporting&Summary:

相关推荐
GIS阵地1 小时前
QgsRasterDataProvider 完整详解(QGIS 3.40.13 C++)
开发语言·c++·qt·开源软件·qgis
yaoxin5211232 小时前
462. Java 反射 - 获取声明类与封闭类
java·开发语言·python
阿里嘎多学长2 小时前
2026-07-14 GitHub 热点项目精选
开发语言·程序员·github·代码托管
charlie1145141913 小时前
Cinux: 为大内核铺路
开发语言·c++·操作系统·现代c++
2501_914245933 小时前
C语言设计模式详解:从理论到实践的完整指南
c语言·开发语言·设计模式
Hazenix3 小时前
Go 指南:一篇文章速通 Golang
开发语言·后端·golang
灯澜忆梦3 小时前
GO_复合类型---指针
开发语言·后端·golang
Ulyanov4 小时前
雷达导引头Python仿真框架:GPU加速、6-DOF模型与半实物仿真接口
开发语言·python·雷达信号处理·雷达导引头
Jerry4 小时前
LeetCode 101. 对称二叉树
算法
名字还没想好☜5 小时前
Go slice 的 append 陷阱:共享底层数组导致的数据串改
开发语言·后端·golang·go·slice