正如标题所暗示的那样,在此计划中获取列总计和百分比时遇到了一些麻烦。我花了几个小时提取代码并尝试逐步实现,但却失败了。 C
不是我的强项。
该计划应该能够做到以下几点:
一个。显示包含行和列的适当标签的表。
湾计算并显示每位候选人收到的总票数和投票总票数的百分比。
℃。如果任何一位候选人获得超过50%的选票,该计划应显示一条消息,宣布该候选人为获胜者。
d。如果没有候选人获得50%的选票,该计划应显示一条消息,宣布获得最高票数的两名候选人之间的决选;两位候选人应以姓名识别。
即使用显示的数据运行程序一次,使用候选C在Precinct 4中仅接收108票,运行一次。
我的程序添加行总计并打印“总计”列。我想弄清楚如何添加列总计并将其传递给每个候选人的“总计”列。
#include <stdio.h>
int main()
{
int votes[5][4]={
192,48,206,37,
147,90,312,21,
186,12,121,38,
114,21,408,39,
267,13,382,29};
char cand[4]={'A','B','C','D'};
int row_totals[5];
int col_totals[4];
int total_votes;
float percent[5];
int row,col;
int total=0;
for(row=0;row<=4;row++)
{
row_totals[row]=0;
for(col=0;col<=3;col++)
{
row_totals[row] += votes[row][col];
total+=votes[row][col];
}
}
printf(" Candidate Candidate Candidate Candidate Total Percent\n");
printf(" Precinct A B C D\n");
for(row=0;row<=4;row++)
{
printf("%6d",row+1);
for(col=0;col<=3;col++)
{
printf("%12d",votes[row][col]);
}
printf("%11d",row_totals[row]);
percent[row]=(double)(row_totals[row]*100)/total;
printf("\t%.2f\n",percent[row]);
}
int i;
double first=percent[0];
double sec=percent[0];
int maxVal,second_big;
for(i=0;i<4;i++)
{
if(first>percent[i])
{
first=percent[i];
maxVal=i;
}
}
int j;
for(j=0;j<4;j++)
{
if(percent[j]>sec && percent[j]!=sec)
{
sec=percent[j];
second_big=j;
}
}
if(first>50)
{
printf("%c is the winner.\n",cand[maxVal]);
}
else if(sec<=50)
{
printf("%c and %c are in a runoff.\n",cand[maxVal],cand[second_big]);
}
return 0;
}
答案 0 :(得分:1)
for (row = 0; row <= 4; row++)
{
printf("%6d", row + 1);
for (col = 0; col <= 3; col++)
{
printf("%12d", votes[row][col]);
}
printf("%11d", row_totals[row]);
percent[row] = (row_totals[row] * 100) / total;
printf("\t%.2f\n", percent[row]);
}
此处,您正在处理5个元素0...4
,但percent
仅定义为包含4个元素0...3
。
double percent[4];
将循环条件更改为<=3
或增加percent
数组的大小。