题目描述
某班进行班长选取,每人可投一票,候选人有三人:zhouziyou,niujinhang,pangbo。
对此次选举结果进行统计并按照从大到小排列
#include<stdio.h>
#include<string.h>
#define N 3//设三个人投票(根据需求改票数)
int main()
{
struct student
{
char name[20];//人名最多19个字符,留一个给'\0',否则数据溢出
int count;//票数
};
struct student s[3]={"zhouziyou",0,"niujinhang",0,"pangbo",0},t;//t是下面要做中间变量要用的
int i,j;
char str[10];
for(i=0;i<N;i++)
{
scanf("%s",str);//投票
for(j=0;j<=2;j++)
{
if(strcmp(str,s[j].name)==0)//检票
s[j].count++;
}
}
//冒泡排序
for(i=1;i<N;i++)//控制排列N-1次最后一个自动排好
{
for(j=0;j<N-i;j++)//控制将小的数据向后移动,移动后的数据不用再进行操作,故只需排列前N-j个元素
if(s[j].count<s[j+1].count)
{
t=s[j];//s[]包含多个结构体成员,故中间变量也要是结构体类型
s[j]=s[j+1];
s[j+1]=t;
}
}
for(i=0;i<=2;i++)
printf("%s %d\n",s[i].name,s[i].count);//控制依次输出结构体变量
return 0;
}