| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 677 人关注过本帖
标题:我的程序为什么不能找出冠军和亚军,季军?
只看楼主 加入收藏
xinbuzai
Rank: 1
等 级:新手上路
帖 子:29
专家分:8
注 册:2010-7-2
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:3 
我的程序为什么不能找出冠军和亚军,季军?
图片附件: 游客没有浏览图片的权限,请 登录注册
#include<stdio.h>
#define M 10
#define N 10
/* 假设参赛选手共有10个,如果有30个则,N的值为30 */
main()
{
   int i,j;int scor[N][M]; int k,a,b,c;
    float avemax,avetwo,avethird;
   float t=0,max,min,sum[N],ave[N];
   system( "graftabl 936 ");    /*调用Ms-Dos中文支持 */
   clrscr();
    printf("         *************************************************\n\n");
    printf("                        卡拉OK大奖赛评分系统\n\n");
    printf("         *************************************************\n\n");
    printf("         本次大赛评分规则:\n");
    printf("         本次大赛的裁判委员会由十名国际顶级裁判组成,参赛\n 选手的最终成绩是去掉一个最低分和一个最高分,然后\n         求取平均值即为最终得分,按成绩由高到低取前三名.\n\n");
    printf("         *************************************************\n");
    printf("             第一届中华杯校园歌手卡拉OK大赛正式开始\n");
    printf("请输入选手的得分(1~100):)\n");
    for(i=0;i<N;i++)/* 选手的顺序 */
    {
      for(j=0;j<M;j++)/* 裁判的顺序 */
       {  printf("请输入第%d个选手的第%d个裁判得分:\t",i+1,j+1);
        scanf("%d",&scor[i][j]);
         while(scor[i][j]<1||scor[i][j]>100)
         {
         printf("你的输入的有错,请重新输入:\n");
         scanf("%d",&scor[i][j]);
         }

       }
    }/* 输入选分的得分到数级SCOR中 */

   printf("各位选手的平均得分是:");
   printf("去掉一个最高分:\t");
   printf("再去掉一个最低分:\t");
      for(i=0;i<N;i++)
   {
      sum[i]=0;
      max=min=scor[i][0];
      for(j=0;j<M;j++)
       {
          if(max<=scor[i][j])max=scor[i][j];
          if(min>=scor[i][j])min=scor[i][j];
          sum[i]+=scor[i][j];
       }/* 找出最高分和最低分 */
       ave[i]=(sum[i]-max-min)/8;
       printf("%.2f\t",ave[i]);
    }
    avemax=avetwo=avethird=ave[0];
    a=b=c=0;
    for(k=1;k<N;k++)
     {
        if(avemax<ave[k])
        {
           avemax=ave[k];
           a=k+1;
        }
     }
         for(k=1;k<N;k++)
        {
        if(avetwo<ave[k]&&avetwo<avemax&&avemax!=ave[k])
        {
           avetwo=ave[k];
           b=k+1;
        }
     }
     for(k=1;k<N;k++)
       { if(avethird<ave[k]&&avethird<avemax&&avethird<avetwo&&avemax!=ave[k]&&avetwo!=ave[k])
        {
           avethird=ave[k];
           c=k+1;
        }

     }/* 找出第一名第二名第三名 */

    printf("本届比赛冠军为%d号!恭喜!!\n",a);
    printf("本届比赛亚军为%d号!恭喜!!\n",b);
    printf("本届比赛季军为%d号!恭喜!!\n",c);
    getch();
}




搜索更多相关主题的帖子: 季军 亚军 冠军 
2010-07-12 16:15
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:6 
回复 楼主 xinbuzai
当ave[0]最大时后面的三个if语句根本执行不了~!楼主仔细看看!具体怎么改本人也还在想!敬等高手解答
2010-07-13 07:19
do8do8do8
Rank: 10Rank: 10Rank: 10
来 自:沙滩
等 级:贵宾
威 望:17
帖 子:366
专家分:1845
注 册:2010-7-2
收藏
得分:6 
2楼说的对,但是如果先对平均分数组进行一次从大到小的排序的话,我觉得更条理些
以下是我对楼主代码的修改,(运行通过了,可以输出并列名次)
1>在声明部分:
int i,j;float scor[N][M]; int k,a,b,c; float j1;/*把scor 改为float型, 定义一个float j1*/
float avemax,avetwo,avethird;
float t=0,max,min,sum[N],ave[N],dve[N];/*增加一个 dve[N],用来拷贝ave[N]*/

2>
 for(i=0;i<N;i++)/* 选手的顺序 */
    {
      ..................
        scanf("%f",&scor[i][j]);/*改成%f*/
         while(scor[i][j]<1.0||scor[i][j]>100.0)
         {
         printf("你的输入的有错,请重新输入:\n");
         scanf("%f",&scor[i][j]);/*改成%f*/

3> 把ave[N]拷贝到dve[N]
  for(i=0;i<N;i++)
      {
          dve[i]=ave[i];
      }/*上面就是拷贝代码*/
    avemax=avetwo=avethird=dve[0];
    a=b=c=0;
4> 把下面的代码注掉 改为
 for(k=0;k<N;k++)
     {
       for(j=k;j<N;j++)
          if(dve[k]<dve[j])
          {    j1=dve[k];
               dve[k]=dve[j];
               dve[j]=j1;

           }
     }
     for(k=0;k<N;k++)
     if(dve[0]==ave[k]) {
            a=k;
    printf("本届比赛冠军为%d号!恭喜!!\n",k+1);
    }

        for(k=0;k<N;k++)
        if(dve[a+1]==ave[k]) {
          b=k;
    printf("本届比赛亚军为%d号!恭喜!!\n",k+1);
     }
     for(k=0;k<N;k++)
       if(dve[b+1]==ave[k])
       {
    printf("本届比赛季军为%d号!恭喜!!\n",k+1);
      }
5>下面是原代码用的是cpp格式
原代码.rar (1.5 KB)

学C语言从底层开始,学编程从问题开始,一日学会C!!!
2010-07-13 10:14
mashrb
Rank: 2
等 级:论坛游民
帖 子:47
专家分:29
注 册:2010-6-30
收藏
得分:6 
怎么看来看去,好像i和j调换错位置了??
2010-07-13 18:02
快速回复:我的程序为什么不能找出冠军和亚军,季军?
数据加载中...
 
   



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

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