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:

相关推荐
2603_969694851 小时前
【JavaWeb学习记录】MyBatis核心知识点与实战笔记:从入门到动态SQL
笔记·sql·学习·mysql·mybatis·javaweb·学习方法
Pniubi1 小时前
关于算法用现成数据结构和手撕
数据结构
可乐ea1 小时前
智能体记忆该拆成几层:笔记、记忆表示与注入上下文
服务器·数据库·笔记·ai智能体·提示词工程·上下文工程·记忆系统
唐墨1232 小时前
linux kernel 比较数据大小的宏定义
linux·算法
爱笑的k113 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
拂拉氏3 小时前
【知识讲解-题目讲解】 统计满足K约束的子字符串数量2 (滑动窗口+前缀和+二分查找+分析)
算法·前缀和·二分查找·滑动窗口
X1A0RAN4 小时前
PPT 图片批量处理教程:导出全部幻灯片 · 提取全部素材
开发语言·javascript·powerpoint
Go Work5 小时前
两个等值条件摆着,MySQL 偏要全表扫
经验分享·笔记
熊猫钓鱼>_>5 小时前
普通用户视角的端侧智能体验手记【鸿蒙心迹】
开发语言·人工智能·华为·智能手机·性能优化·ai编程·harmonyos
瑞雪兆丰年兮5 小时前
JavaWeb-day13-SpringBootWeb事务管理&AOP
java·开发语言·springboot·javaweb·事务·web·aop