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:

相关推荐
不爱吃炸鸡柳1 分钟前
Python入门第一课:零基础认识Python + 环境搭建 + 基础语法精讲
开发语言·python
minji...36 分钟前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
Dxy123931021642 分钟前
Python基于BERT的上下文纠错详解
开发语言·python·bert
语戚2 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
skywalker_112 小时前
力扣hot100-7(接雨水),8(无重复字符的最长子串)
算法·leetcode·职场和发展
wjs20242 小时前
JavaScript 语句
开发语言
bIo7lyA8v3 小时前
算法稳定性分析中的输入扰动建模的技术9
算法
CoderCodingNo3 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法