问题描述:在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生、亚军和季军。要求编写算法模拟实现上述系统的功能。
1.基本要求
(1)首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来分配存放选手信息的顺序表;
(2)将选手的编号和姓名依次存入顺序表中;
(3)观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志;
(4)投票结束后进行排序,在此采用各种排序算法,然后为每个选手计算名次,得票相同的名次也相同;
2.重点、难点
重点:
(1)参赛选手数据结构的设计;
(2)排序算法的设计;
难点:各种排序算法的性能分析与比较
3.作业及课外学习要求:
按照题意要求独立进行设计,设计结束后要按要求写出课程设计报告。
源码分享:
includeincludeincludeincludeinclude“xy_setting.h”usingnamespacestd;intnumber=0,n=0,flag=0;voidmsgbox(){printf(“===============================\n”);printf(“= 参赛人数:%d =\n”,number);printf(“= 有效投票数:%d =\n”,n);printf(“= 基本操作: =\n”);if(flag==0)printf(“= 开始投票:—-S =\n”);elseprintf(“= 已投票,是否补投—-Y =\n”);printf(“= 投票情况(编号排序)—-A =\n”);printf(“= Ranking —-R =\n”);printf(“= 退出系统 —-E =\n”);printf(“===============================\n”); }classplayer{public:intnum;charname[30];intscore;intranking; };classope{public:voidinit(player *a,intnumber);voidoutput_info(player *a,intnumber);voidoutcome(player *a,intnumber);voidvoting(player *a,intnumber);voidshell_insert(player *a,intn,intdk);voidshell_sort(player *a,intn,intt);voidsort_outcome(player *a,intnumber); };voidope::shell_insert(player *a,intn,intdk) {for(inti=dk+1;i<=n;i++) {intj;if(a[i].score>a[i-dk].score) {strcpy(a[0].name,a[i].name); a[0].score=a[i].score; a[0].num=a[i].num;for(j=i-dk;j&&a[j].score0].score;j-=dk) {strcpy(a[j+dk].name,a[j].name); a[j+dk].score=a[j].score; a[j+dk].num=a[j].num; }strcpy(a[j+dk].name,a[0].name); a[j+dk].score=a[0].score; a[j+dk].num=a[0].num; } } }voidope::shell_sort(player *a,intn,intt) {inti;for(;t>=1;t/=2) { ope::shell_insert(a,n,t);for(i=1;i<=n;i++) a[i].ranking=i;for(i=1;i写在后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取好了!