c语言选票程序怎么编写,用while写法?

如题所述

首先需求分析:

投票人票数多少,一对一投或一对多。

由于你问题需求不明确,我按照投票人每人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;
}

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网