求编写一个C语言的程序

选优秀学生干部程序。设有10个候选人,每人每次输入三个的候选人的号,且不得重复计票。投票人数随机,可以弃权,也可以只投一票或二票。要求最后输出每个人得票的结果和前三名的姓名。因为本人是新手,所以希望程序用的方法能比较基础,谢谢
急用!!!!求大神!!!!

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define N  10
void main()
{
srand((int)time(NULL));//随机数种子
struct Student
{
char name[20];//
int num;
};

int i=0,num,a,b,c,j;
Student stu[10],st;
printf("请输入10名竞选者的名字\n");
for(i=0;i<10;i++)
{
scanf("%s",stu[i].name);
stu[i].num=0;
}
num=rand()%N+1;//产生随机数1-10,可以修改N获得你想要的 结果
printf("请%d人进行投票,用0到9表示你支持的对应候选人,弃权或者不选就输入-1,\n",num);
printf("先输入候选人,没有自己中意的候选人就输入-1\n");
for(i=0;i<num;i++)
{
scanf("%d %d %d",&a,&b,&c);
if(a>0||b>0||c>0)//有有效票数
{
if(a>0&&b*c>0)//a有效 b和c要么同时有效要么同事无效
{
if(b>0)//b  有效
{
stu[a].num++;
if(b!=a)
stu[b].num ++;
if(c!=a&&c!=b)
stu[c].num++;
}
else
stu[a].num++;
}
else  //a和b有效
{
stu[a].num++;
if(a!=b)
stu[b].num++;
}

}

}

for(i=0;i<10;i++)
for(j=0;j<9-i;j++)
{
if(stu[j].num<stu[j+1].num)
{
st=stu[j];
stu[j]=stu[j+1];
stu[j+1]=st;
}
}
printf("结果为:\n");
for(i=0;i<3;i++)
printf("%s %9d \n",stu[i].name,stu[i].num);


}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-02
#include <stdio.h>

int main()
{
int i;
int choice;
int a, b, c; //接收选票及排序使用
int na, nb, nc; //保存得票最高的三位的号数
int vote[10];
char *name[10] = {"李一","李二","李三","李四","李五","李六","李七","李八","李九","李十"};

for (i = 0; i < 10; i++) {
vote[i] = 0;
}

do
{
do
{
choice = 5;
printf("请选择投票方式:\n");
printf("\t1.投选三人。格式:1,2,3\n");
printf("\t2.投选二人。格式:1,2\n");
printf("\t3.投选一人。格式:1\n");
printf("\t4.弃权。\n");
printf("\t0.结束投票。\n");
scanf("%d", &choice);
}while (choice != 1 && choice != 2 && choice != 3 && choice != 4 && choice != 0);

switch(choice) {
case 1:
printf("请输入投票:\n");
scanf("%d,%d,%d", &a, &b, &c);
vote[a-1]++;
if (b != a) {
vote[b-1]++;
}
if (c != a && c != b) {
vote[c-1]++;
}
break;
case 2:
printf("请输入投票:\n");
scanf("%d,%d", &a, &b);
vote[a-1]++;
if (b != a) {
vote[b-1]++;
}
break;
case 3:
printf("请输入投票:\n");
scanf("%d", &a);
vote[a-1]++;
break;
case 4:
break;
case 0:
choice = -1;
break;
}
}while (choice != -1);

a = b = c = vote[0];    //初始化票数
na = nb = nc = 0;       //初始化号牌
printf("最终得票:\n");
for (i = 0; i < 10; i++) {
printf("%s : %d\n", name[i], vote[i]);
if (vote[i] > a) {    //大于最多票数a
c = b;        //第三名票数等于第二名票数
nc = nb;      //号牌顺延
b = a;        //第二名票数等于第三名票数
nb = na;      //号牌顺延
a = vote[i];  //最高票数赋值
na = i;
} else {
if (vote[i] > b) {
c = b;
nc = nb;
b = vote[i];
nb = i;
} else {
if (vote[i] > c) {
c = vote[i];
nc = i;
}
}
}

}

printf("第一名:%s, 第二名:%s, 第三名:%s\n", name[na], name[nb], name[nc]);

return 0;
}

本回答被提问者采纳
第2个回答  2014-01-02
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

int main(){
int n = 0;
int i,j;
int a,b,c;
int temp;
time_t t;
int s1,s2,s3;
int a1,a2,a3;   /*学生编号数组下标*/
int stu[10] = {0};/*10个学生,编号是1-10*/
srand((unsigned) time(&t)); 
n = rand()%10;
printf("一共%d个投票人\n",n);
for(i = 0;i < n;i++)
{
    printf("第%d个投票人:",i);
    scanf("%d %d %d",&a,&b,&c);
    if( a > 0 && a <= 10) stu[a-1]++;
    if( b > 0 && b <= 10 && b != a) stu[b-1]++;
    if( c > 0 && c <= 10 && c != b && c != a) stu[c-1]++;
}
for(i = 0;i< 10;i++)
printf("%d ",stu[i]);
s1 = s2 = s3 = 0;
for(i = 0;i < 10;i++)
{
   if( s1 < stu[i] )
   {
        s1 = stu[i];
        a1 = i;
   }
}
for(i = 0;i < 10;i++)
{
   if( s2 < stu[i] && i != a1)
   {
        s2 = stu[i];
        a2 = i;
   }
}
for(i = 0;i < 10;i++)
{
   if( s3 < stu[i] && i != a1 && i != a2)
   {
        s3 = stu[i];
        a3 = i;
   }
}

printf("\n 第一名 = %d 第二名 %d 第三名 = %d\n",a1+1,a2+1,a3+1);
getch();

return 0;
}

相似回答