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:

相关推荐
gfdhy10 小时前
【c++】哈希算法深度解析:实现、核心作用与工业级应用
c语言·开发语言·c++·算法·密码学·哈希算法·哈希
百***060110 小时前
SpringMVC 请求参数接收
前端·javascript·算法
weixin_4577600010 小时前
Python 数据结构
数据结构·windows·python
我先去打把游戏先10 小时前
ESP32学习笔记(基于IDF):基于OneNet的ESP32的OTA功能
笔记·物联网·学习·云计算·iphone·aws
初願致夕霞10 小时前
学习笔记——基础hash思想及其简单C++实现
笔记·学习·哈希算法
Eiceblue10 小时前
通过 C# 将 HTML 转换为 RTF 富文本格式
开发语言·c#·html
故渊ZY10 小时前
Java 代理模式:从原理到实战的全方位解析
java·开发语言·架构
我不会插花弄玉10 小时前
vs2022调试基础篇【由浅入深-C语言】
c语言
leon_zeng010 小时前
Qt Modern OpenGL 入门:从零开始绘制彩色图形
开发语言·qt·opengl
会飞的胖达喵10 小时前
Qt CMake 项目构建配置详解
开发语言·qt