• 结构体数组经典运用---选票系统


    结构体的引入

    1、概念:结构体和其他类型基础数据类型一样,例如int类型,char类型,float类型等。整型数,浮点型数,字符串是分散的数据表示,有时候我们需要用很多类型的数据来表示一个整体,比如学生信息。类比与数组: 数组是元素类型一样的数据集合,如果是元素类型不同的数据集合,就要用到结构体了。结构体可以让不同数据类型同时存在,将不同类型的数据存放在一起,作为一个整体进行处理。

    2、声明方式:在主函数外以,首先使用一个关键字struct,使其接下来表示一个结构体;其次后面跟着一个名称(名称可随意定义),为此来创建数据对象。(结尾记得加分号,不然会报错)

    3、使用方式:在主函数内,用标准结构struct+主函数外定义的名称+任意名称(这里的名称是分类出数值不同的角色),给结构体赋值任意名称.数据对象(这里的点运算符来访问结构体中的成员变量(域));也可以直接在标准结构struct+主函数外定义的名称+任意名称后加上花括号并对应数据对象进行赋值。

    我们以列举学生信息为例展示代码:

    1. #include
    2. #include
    3. struct Student
    4. {
    5. int num;
    6. char name[64];
    7. int age;
    8. double sorce;
    9. char add[64];
    10. };
    11. int main()
    12. {
    13. struct Student stu1;
    14. struct Student stu2={2,"张三",22,100,"北京"};
    15. stu1.num=1;//点运算符来访问结构体中的成员变量(域)
    16. strcpy(stu1.name,"李四");
    17. stu1.age=20;
    18. stu1.sorce=99;
    19. strcpy(stu1.add,"深圳");
    20. printf("序号是%d,名字是%s,年龄是%d,分数是%lf,住址是%s\n",stu1.num,stu1.name,stu1.age,stu1.sorce,stu1.add);
    21. printf("序号是%d,名字是%s,年龄是%d,分数是%lf,住址是%s\n",stu2.num,stu2.name,stu2.age,stu2.sorce,stu2.add);
    22. if(stu1.sorce>stu2.sorce)
    23. {
    24. printf("成绩较高的是%d号%s\n",stu1.num,stu1.name);
    25. }
    26. else
    27. {
    28. printf("成绩较高的是%d号%s\n",stu2.num,stu2.name);
    29. }
    30. return 0;
    31. }

    结构体与数组结合经典运用---选票系统

    代码展示

    1. #include
    2. #include
    3. struct XuanMin
    4. {
    5. char name[64];
    6. int tickets;
    7. };
    8. int main()
    9. {
    10. struct XuanMin a[3];//三位选手
    11. struct XuanMin max;//比较三位选手得票最大值
    12. int number = 5;//5个人参与投票
    13. char tempname[64];//投票的名字
    14. int feipiao = 0;//没选中的票
    15. int i;
    16. int j;
    17. int c = 0;//一个判断逻辑
    18. int len = sizeof(a)/sizeof(a[0]);
    19. for(i = 0;i < len;i++)
    20. {
    21. a[i].tickets = 0;
    22. printf("请输入第%d个选民的名字:\n",i+1);
    23. scanf("%s",a[i].name);
    24. }
    25. for(i = 0;i < 5;i++)
    26. {
    27. c = 0;//每次循环让其等于0
    28. printf("请输入你要投给谁\n");
    29. memset(tempname,'\0',sizeof(tempname));//每次清空一下
    30. scanf("%s",tempname);//输入选中的选民
    31. for(j = 0;j < len;j++)
    32. {
    33. if(strcmp(tempname,a[j].name)==0)//选民与选手匹配,票数递增
    34. {
    35. a[j].tickets++;
    36. c = 1;//如果匹配后票数增加并等于1
    37. }
    38. }
    39. if(c == 0)//还是为0说明没有匹配选手,则为没选中的票
    40. {
    41. printf("没有此选手,投票失败\n");
    42. feipiao++;
    43. }
    44. }
    45. for(i = 0;i < len;i++)
    46. {
    47. printf("名字:%s,票数:%d\n",a[i].name,a[i].tickets);
    48. }
    49. max=a[0];//让最大值先等于第一个人
    50. for(i = 1;i < len ;i++)//i=1是因为max已经等于数组中第一个人,只需要与后面两个进行比较
    51. {
    52. if(max.tickets < a[i].tickets)
    53. {
    54. max = a[i];//将三个人票数最多的赋给最大值
    55. }
    56. }
    57. printf("%s以%d票当选!!!废票是%d\n",max.name,max.tickets,feipiao);
    58. return 0;
    59. }

  • 相关阅读:
    JSON&redis
    学redis看这里就行了
    【Opencv实战】高手勿入,Python使用Opencv+Canny实现边缘检测以及轮廓检测(详细步骤+源码分享)
    Collections和CollectionUtils集合操作
    JVM虚拟机(整体架构、类文件结构)我来了~~~
    【Ty CLI】一个开箱即用的前端脚手架
    Python中prettytable库
    NR 5G RRC Setup Request
    Insertion or Heap Sort
    【Web前端二级导航栏】
  • 原文地址:https://blog.csdn.net/2301_78772787/article/details/134084165