如题所述
首先需求分析:
投票人票数多少,一对一投或一对多。
由于你问题需求不明确,我按照投票人每人1票,只给1个候选人投票或弃权。
函数功能分三个,分别:
一、初始化(这个函数改成输入就是信息登记模块)。
二、投票函数(我用随机数实现投票过程)。
三、统计投票结果。
下面是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MCDE 5//候选人数量
#define MVR 100//投票人数量
typedef struct candidate
{
char name[20];//候选人名称
int vote;//得票数
}CDE;
typedef struct voter
{
char name[20];//投票人名称
int vote;//票数
}VTR;
void init(CDE **cdep,VTR **vtrp);//初始化候选人及投票人信息
void tp(CDE *cdes,VTR *vtrs);//开始投票(随机)
void tj(CDE *cdes,VTR *vtrs);//统计投票结果
int main()
{
CDE *cdes=NULL;
VTR *vtrs=NULL;
init(&cdes,&vtrs);
tp(cdes,vtrs);
tj(cdes,vtrs);
return 0;
}
void tj(CDE *cdes,VTR *vtrs)
{
int i=100,index,waiver=0,max=0,inxSave;
while(i>0)
{
index=MVR-i;
if(vtrs[index].vote==-1)
waiver++;
i--;
}
printf("\n\n共%d人参与投票,%d人弃权\n",MVR-waiver,waiver);
i=MCDE;
while(i>0)
{
index=MCDE-i;
printf("候选人%s得票%d张\n",cdes[index].name,cdes[index].vote);
if(max<cdes[index].vote)
max=cdes[index].vote,inxSave=index;
i--;
}
printf("得票最多的候选人为:%s,%d票\n",cdes[inxSave].name,cdes[inxSave].vote);
}
void tp(CDE *cdes,VTR *vtrs)
{
int i=MVR,index,n,n2;
srand(time(NULL));
while(i>0)
{
index=MVR-i;
if(vtrs[index].vote>0)
{
n=rand()%MCDE;//随机0~MCDE-1,给对应候选人投票
n2=rand()%2;//随机0~1,1投票,0弃权
if(n2)
{
printf("%s给候选人:%s投了%d票\n",vtrs[index].name,cdes[n].name,vtrs[index].vote);
cdes[n].vote+=vtrs[index].vote;
vtrs[index].vote=0;
}
else
{
printf("%s选择弃权\n",vtrs[index].name);
vtrs[index].vote=-1;
}
}
i--;
}
}
void init(CDE **cdep,VTR **vtrp)
{
static CDE cdes[MCDE]={{"小王",0},{"小陈",0},{"小李",0},{"小丽",0},{"小艾",0}};
static VTR vtrs[MVR];
int i=MVR,index;
char strN[20];
while(i>0)
{
index=MVR-i;
strcpy(vtrs[index].name,"投票人");
itoa(index+1,strN,10);
strcat(vtrs[index].name,strN);
vtrs[index].vote=1;
i--;
}
*cdep=cdes,*vtrp=vtrs;
}
追问您这编的我看不懂啊,还没学到这呢,我学的还没多久呢
这是题目某次选举有张、王二位候选人,编写统计选票的程序
追答那你把我代码里的常量和候选人数组初值改一下就好了啊。
#define MCDE 5//候选人数量---------改成 -------- #define MCDE 2//候选人数量
static CDE cdes[MCDE]={{"小王",0},{"小陈",0},{"小李",0},{"小丽",0},{"小艾",0}};
改成static CDE cdes[MCDE]={{"张",0},{"王",0}};
//------你提问题开始要说明一下,否则既没有需求,也没有知识范围,我写肯定按照正常编程思路来-------
//------下面再写一个最简化版的,就是循环手动输入投票,投票结束输出最高票得主---
#include
int main()
{
int n=3,cv[2]={0};
char cn[2][10]={"张","王"};
while(1)
{
printf("请选择给谁投票(1:%s,2:%s,输入0结束投票):\n",cn[0],cn[1]);
while(n!=1&& n!=2 && n!=0)scanf("%d",&n);
if(n==0) break;
cv[n-1]++;
printf("本次投票结束!%s获得1票,共得票%d\n\n",cn[n-1],cv[n-1]);
n=3;
}
if(cv[0]>cv[1])printf("%s得票最多,共%d票\n",cn[0],cv[0]);
if(cv[0]<cv[1])printf("%s得票最多,共%d票\n",cn[1],cv[1]);
if(cv[0]==cv[1])printf("两个人票数相同,共%d票\n",cv[1]);
return 0;
}
//提问需求要说清楚,否则别人不好答。
上面代码:#define MCDE 5//候选人数量----改成----#define MCDE 2//候选人数量
static CDE cdes[MCDE]={{"小王",0},{"小陈",0},{"小李",0},{"小丽",0},{"小艾",0}};
改成:static CDE cdes[MCDE]={{"张",0},{"王",0}};
//这样就好了啊。
//-----------下面再写一个最简化版的,就是循环输入投票,结束后打印结果-------
//----------用的都是最基本知识,数组和while循环。
#include
int main()
{
int n=3,cv[2]={0};
char cn[2][10]={"张","王"};
while(1)
{
printf("请选择给谁投票(1:%s,2:%s,输入0结束投票):\n",cn[0],cn[1]);
while(n!=1&& n!=2 && n!=0)scanf("%d",&n);
if(n==0) break;
cv[n-1]++;
printf("本次投票结束!%s获得1票,共得票%d\n\n",cn[n-1],cv[n-1]);
n=3;
}
if(cv[0]>cv[1])printf("%s得票最多,共%d票\n",cn[0],cv[0]);
if(cv[0]<cv[1])printf("%s得票最多,共%d票\n",cn[1],cv[1]);
if(cv[0]==cv[1])printf("两个人票数相同,共%d票\n",cv[1]);
return 0;
}