我写了个程序,找了一下午也找不出问题,就是调不出来!相当郁闷!
这是题目:设有ABC三个足球先生候选人,根据投票者在选票上对他们编号的填写顺序分别记分为5,3,2。请编程从键盘上输入投票人数及投票结果,统计他们的得分,并输出哪位当选足球先生。注意:若同一张票上写有两个相同的代号,则显示“此票无效”,若最终前两名得分相同应显示“重新投票”,否则显示三个候选人得分并输出“祝贺X当选为冠军!”
例如:投票人数为 5
输入投票内容:
abc
cab
caa 该票无效!
cba
bca
三位候选人得分:a:12
b:13
c:15
祝贺C当选为冠军!
我思路是:先调用read()将每个投票者的投票信息存放在一个二维数组(vote[N][3])里面,再调用statistics()统计每个候选人的票数,最后调用sort()函数求出最大得票者。其中,statistics()函数又调用了select()函数。result[3]依次存放选手a,b,c的票数。
代码如下:
/* Note:Your choice is C IDE */
#include “stdio.h”
#define N 5
void select(int step,char vote,int * result)
{
switch(vote)
{ case ‘a’:result[0]+=step;break;
case ‘b’:result[1]+=step;break;
case ‘c’:result[2]+=step;break;
}
}/*票数统计*/
int read(char vote[][3])
{
int i,j;
for(i=0;i<N;)
{
for(j=0;j<3;j++)scanf(“%c”,&vote[i][j]);
i++;
if(vote[i-1][0]==vote[i-1][1]||vote[i-1][1]==vote[i-1][2]||vote[i-1][2]==vote[i-1][0])
{
i–;
printf(“This vote is ineffective!\n”);
}
}
return i-1;
}
int * statistics(int n ,char vote[][3])
{
int i,j,result[3]={0,0,0};
for(i=0;i<n;i++)
for(j=0;j<3;j++)
switch(j)
{
case 0:select(5,vote[i][j],result);break;
case 1:select(3,vote[i][j],result);break;
case 2:select(2,vote[i][j],result);break;
}
printf(“\na %d\nb %d\nc %d\n”,result[0],result[1],result[2]);/*result数组依次存放ABC的票数*/
return result;
}/*统计票数,返回每个候选人票数并输出*/
char sort(int result[3])
{
char flag=’a';
if(result[1]>result[0])
{ flag=’b';result[0]=result[1];}
if(result[2]>result[0])
{ flag=’c';result[0]=result[2];}
printf(“Congratulate %c to win the contest”,flag);
return flag;
}
main()
{
int n,*result;
char outcome, vote[N][3]={0} ;
n=read(vote);
result=statistics(n,vote);
outcome=sort(result);
}
请众高手指点迷津。
>> 本文固定链接: http://www.vcgood.com/archives/1725
你这个程序啊,错误太多了.还是多看看书修改下程序再说吧.
语法上很多错误吗 [:$]
唉,我看不出啊。。。。。。