某个班共有30名学生,选举班长一名,现提出候选人3人,要求收到的选票是合法的选票即每张选票上写的都是该班级其中一名学生的姓名
(选票中的姓名不一顶是已提出的三名后选人)如果不是合法选票则应给出错误提示,要求按得票数从高到低排序后输出有得票数的候选人的姓名和姓名票数
參考答案:#include <stdio.h>
#include <string.h>
struct leader
{
char name[20];
int count;
}leader[30]={{"a",0},{"b",0},{"c",0}};//三位候选人
main()
{
int i,j,m,n=3,flag,flag1;
struct leader temp;
char lea_name[20];
char stu[30][20]={{"a"},{"b"},{"c"},{"d"},...};//三十位学生的名单
for(i=0;i<10;i++)
{
printf("please input the name:\n");
scanf("%s",lea_name);
flag=1;
flag1=0;
for(m=0;m<10;m++)
{
if(strcmp(lea_name,stu[m])==0)//检测是不是这个班的学生
{
flag1=1;
break;
}
}
if(flag1) //如果是,就进行投票统计
{
for(j=0;j<n;j++)
{
if(strcmp(lea_name,leader[j].name)==0)//投的是已有候选人之一
{
leader[j].count++;
flag=0;
}
}
if(flag)
{
strcpy(leader[j].name,lea_name); //不是已有候选人之一
leader[j].count++;
n++;
}
}
else //不是这个班的学生,进行错误提示
{
printf("this student is not in our class!\n");
i--;
}
}
for(i=0;i<n-1;i++) //排序
{
for(j=i+1;j<n;i++)
{
if(leader[j].count>leader[i].count)
{
temp=leader[i];
leader[i]=leader[j];
leader[j]=temp;
}
}
}
for(i=0;i<n;i++) //打印选举情况
{
printf("%s:\t\t%d\n",leader[i].name,leader[i].count);
}
}
应该没有什么错误:)