📄 c05_15.c
字号:
/* 选举总统的例程*/
#include <stdio.h>
#include <string.h>
#define N 3 /*设定候选人的个数*/
#define M 12 /*设定参加选举人的个数*/
int main()
{
char candidate[N][12]; /*用来记录候选人的姓名*/
char temp[12]; /*用来记录投票时所选举的候选人名*/
int point[N]; /*用来记录每个候选人的得票情况*/
int i,j; /*程序循环所用变量*/
int flag=0; /*是否有两人得票超过半数标志,初始值0为未超过*/
int k; /*判断是否有两人得票超过半数的循环计数*/
/*初始化候选人名以及候选人得票记录*/
printf("请输入候选人姓名(共3人):\n");
for (i = 0; i < N; i++)
{
gets(candidate[i]);
point[i] = 0;
}
/*进行投票过程*/
printf("请输入所投候选人姓名(共12票):\n");
i=0;
while(i < M) /*M个人进行投票,并完成统计计票工作*/
{
gets(temp); /*参加选举人投temp的票*/
for (j = 0; j < N; j++) /*统计是哪个候选人的票*/
if (strcmp(candidate[j],temp) == 0)
{
point[j]++;
break;
}
if( j==N ) /* 选票无效 */
{
printf("此选票无效\n");
continue;
}
i++;
}
putchar('\n');
printf("选举结果:\n");
/*进行分析,看是否有人当选总统,并输出每个候选人的选票数*/
for (i = 0; i < N; i++)
{
if (point[i] >= M/2)
{
for (k=i+1; k<N; k++)
if (point[k]>=M/2)
{
flag=1; /*有两个人得票均为半数*/
printf("请在%s,%s之间重选!!!\n", candidate[i], candidate[k]);
/*提示在两个人之间重选*/
break;
}
if (flag==1)
break; /*有两人得票均为半数*/
else
printf("%s 当选新总统!\n",candidate[i]);
}
else
printf("%s 落选! ",candidate[i]);
printf("其得票数为:%d\n",point[i]);
}
/* candidate[i],candidate[k]是各得半票的候选人,下面从此二人中选择 */
/*在两个得票均为半数的候选人之间重选进行选举*/
if (flag==1)
{
/*进行投票过程*/
flag=0; /*改变标志*/
printf("请重新输入所投候选人姓名:\n");
j=0;
while( j < M ) /*M个人进行投票,并完成统计计票工作*/
{
gets(temp); /*参加选举人投temp的票*/
if (strcmp(candidate[i],temp) == 0)
{
point[i]++; /*candidate[i]得票*/
j++;
}
else
if (strcmp(candidate[k],temp) == 0)
{
point[k]++; /*candidate[k]得票*/
j++;
}
else
printf("本选票无效!!!,请在%s, %s,两候选人之间投票。\n",
candidate[i], candidate[k]);
} /* end of while*/
/*显示投票结果*/
if (point[i]>point[k])
printf("%s 当选新总统!\n",candidate[i]);
else
printf("%s 当选新总统!\n",candidate[k]);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -