| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1124 人关注过本帖, 1 人收藏
标题:这程序问题太多,晕死了.
只看楼主 加入收藏
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏(1)
 问题点数:0 回复次数:5 
这程序问题太多,晕死了.

/*本题为模拟选班长,在1-4中选一个数投票,直到0结束为止, 要求1.如果直接按0,投票结束直接退出程序,2.显示出胜利者*/ #include <stdio.h> int xuanpiao(int num[]); void main() { static int num[4]; static int i,n,win; printf("注意!按'0'结束投票哦!\n请在(1~4)位候选人中投上您的一票:\n"); while(1) { scanf("%d",&n); if(n==1) num[0]++; else if(n==2) num[1]++; else if(n==3) num[2]++; else if(n==4) num[3]++; else if(n==0) { printf("投票结束!\n");break; } else printf("投票无效,请继续投票!"); } win=xuanpiao(num); printf("胜利者是:%d\n",win); }

int xuanpiao(int num[]) { static int max,i,xb; max=num[0]; for(i=1;i<4;i++) { if(max<num[i]) { max=num[i]; xb=i+1; } } return (xb); }

大家请运行一次,就知道问题所在了,1.输入0不投票,2.输入有并列多的票数.请指点此程序应该怎么改一下.

搜索更多相关主题的帖子: num int else 
2004-06-28 23:46
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 

int xuanpiao(int num[]) { static int max,i,xb; max=num[0]; for(i=1;i<4;i++) { if(max<num[i]) { max=num[i]; xb=i; } } return (xb+1); }

至于输出相同的票数,只要判断另外三个是否和最大相同就行了


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-29 00:49
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 
zff_ff ,我希望这个程序有这样的功能,比如直接输入0,显示投票结束,然后退出程序,但我直接输入0后,显示为投票结束,胜利者是1.这是怎么回事啊.

学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-06-29 11:16
zff_ff
Rank: 1
等 级:新手上路
帖 子:147
专家分:0
注 册:2004-5-12
收藏
得分:0 
以下是引用当当在2004-06-29 11:16:56的发言: zff_ff ,我希望这个程序有这样的功能,比如直接输入0,显示投票结束,然后退出程序,但我直接输入0后,显示为投票结束,胜利者是1.这是怎么回事啊.

我不太明白你的意思,你是指没人投票的情况下吗?

如果是的话那么你可以在xuanpiao()将xb初始化为5,

这样只要在主函数判断xuanpiao返回值是否小于5就行了


偶是一只想要飞却忘了咋飞的菜鸟
2004-06-29 12:48
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

如果你仅仅只是想得到结果,而不是具体到那一个同学的票数,下面即可。

这题最好是用结构体做,用数组也行,xuanpiao()中定义个两维数组,将一维作编号,另一维作得票数,排序时同时交换。这样最后就能得什么编号有多少票数。

/*本题为模拟选班长,在1-4中选一个数投票,直到0结束为止, 要求1.如果直接按0,投票结束直接退出程序,2.显示出胜利者*/ #include<stdio.h> int xuanpiao(int num[]); void main() { static int num[4]; static int i,n,win ; printf("注意!按'0'结束投票哦!\n请在(1~4)位候选人中投上您的一票:\n"); while(1) { scanf("%d",&n); if(n==1) num[0]++; else if(n==2) num[1]++; else if(n==3) num[2]++; else if(n==4) num[3]++; else if(n==0) { printf("投票结束!\n"); break ; } else printf("投票无效,请继续投票!"); } xuanpiao(num); }

int xuanpiao(int sum[]) { int tem,i,j,flag=0 ; for(i=0;i<4;i++) for(j=0;j<3-i;j++) if(sum[j]<sum[j+1]) tem=sum[j+1],sum[j+1]=sum[j],sum[j]=tem ; //排序 if(sum[0]) { for(i=1;i<3;i++)if(sum[0]==sum[i])flag++; if(flag) { printf("共有 %d 同学并列票数第一!\n",flag+1); printf("票数是: %d \n",sum[0]); } else printf("最多票数是: %d \n",sum[0]); } else printf("还没有投票啊?!还能有结果^_^"); }


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-06-29 14:17
当当
Rank: 1
等 级:新手上路
帖 子:235
专家分:0
注 册:2004-4-30
收藏
得分:0 

#include <stdio.h> void main() { static int num[4]; int i,n,max; printf("注意!按'0'结束投票哦!\n请在(1~4)位候选人中投上您的一票:\n"); while(1) { scanf("%d",&n); if(n==1) num[0]++; else if(n==2) num[1]++; else if(n==3) num[2]++; else if(n==4) num[3]++; else if(n==0) { printf("投票结束!\n");break; } else printf("投票无效,请继续投票!"); } max=num[0]; for(i=1;i<4;i++) if(max<num[i]) max=num[i]; if(max==0) printf("还没有投票啊?!还能有结果^_^\n"); else { for(i=0;i<4;i++) if(max==num[i]) printf("班长为:%d\t票数为:%d\n",i+1,max); }

}

我用上面这种方法试了一下,也行,不过没有用函数方法做,呵呵,我想再引深一下,如果有并列的同学的话,我想在这几个并列的同学里面在进行投票,直到选出班长为止,请大家想想啊.

[此贴子已经被作者于2004-07-02 08:25:59编辑过]


学好编程就能编出自己的未来! 加油!自信!努力!奋斗!
2004-07-02 08:25
快速回复:这程序问题太多,晕死了.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021855 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved