| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 351 人关注过本帖
标题:之前的一个程序,改了一半出来了,但是怎么也弄不出来“输出分数最高三位同 ...
只看楼主 加入收藏
woailuo2010
Rank: 2
等 级:论坛游民
帖 子:27
专家分:19
注 册:2013-3-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
之前的一个程序,改了一半出来了,但是怎么也弄不出来“输出分数最高三位同学的序号”
#define M 100
#include<stdio.h>
void main()
{
    void Fox(int *p,int k);
    int x,y,z,m,n,w,i,j,a[M][M];
    float max1=0.0,max2=0.0,max3=0.0,b[M],sum=0.0;
    printf("请输入评委数:");
    scanf("%d",&x);
    printf("请输入参赛人数:");
    scanf("%d",&y);
    printf("请输入打分方式1or2:");
    scanf("%d",&z);
    printf("请选择5分制、10分制或者100分制:");
    scanf("%d",&m);
    if(z==1)      /* 方式一*/
    {   
        for(i=0;i<x;i++)
        {
            printf("请您按顺序给所有选手打分:");
            for(j=0;j<y;j++)
            {
                scanf("%d",&a[i][j]);
                Fox(&a[i][j],m);
               
            }
        }
        for(j=0;j<y;j++)
        {
          for(i=0;i<x;i++)
            {
                    sum+=a[i][j];
                    b[j]=sum/(float)x;
                   // sum=a[0][i+1];
            }
          printf("学生平均成绩b[%d]=%f\n",j,b[j]);

                 sum=0.0;
        }
        /*for(j=0;j<y;j++)//////////////////////输出前三的位置
        {
          if (b[j]<b[j+1])
          {
              max1=b[j+1];max2=b[j];m=j;n=j-1;
          }
          else if(b[j+2]>b[j]&&b[j+2]<b[j+1])
          { max1=max1;max2=b[j+2];max3=b[j];
            m=j;n=j+1;w=j-1;}
          else if(b[j+2]>b[j+1])
          {  max1=b[j+2];max2=b[j+1];max3=b[j];
             m=j+1;n=j;w=j-1;}
          else if(b[j+2]<b[j])
          {       max1=max1;max2=max2;max3=b[j+2];
               m=j;n=j-1;w=j+1;}
   
        }
        printf("最高分序号:%4d%4d%4d\n",m,n,w);*/
        }  

    else                           /* 方式二*/
    {
        for(i=0;i<y;i++)
        {
            printf("请几位评委录入您的分数:");
            for(j=0;j<x;j++)
            {
              scanf("%d",&a[j][i]);
               Fox(&a[j][i],m);
            }
        }
      /*  for(j=0;j<y;j++)
        {
         b[j]=(a[0][j]+a[1][j]+a[2][j])/3.0;
         printf("学生平均成绩b[j]=%f\n",b[j]);
        }*/
        for(i=0;i<y;i++)              
        {
          for(j=0;j<x;j++)
            {
                    sum+=a[j][i];
                    b[i]=sum/(float)x;
            }
          printf("学生平均成绩b[%d]=%f\n",i,b[i]);
                 sum=0.0;
        }
    }
}
void Fox(int *p,int k)
{

  if(k==5)
  {
   if(*p<1||*p>5)
    {
       printf("输入格式错误,请检查后再次输入:");
       scanf("%d",p);
    }
  }
  else if(k==10)
  {
   if(*p<1||*p>10)
    {
      printf("输入错误,请再次输入:");
      scanf("%d",p);
    }
  }
  else if(k==100)
  {   
   if(*p<1||*p>100)
    {
     printf("输入格式错误,请检查后再次输入:");
     scanf("%d",p);
    }
  }
}
本来想帮别人改出来的 ,结果他本人调出来了,我还没有弄出来,好难受!求大侠帮助
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: void include 
2013-03-05 18:20
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
收藏
得分:4 
呵呵,顶
2013-03-05 18:45
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:4 
把数组从大到小排序  头3位自然就是1 2 3 名次

DO IT YOURSELF !
2013-03-05 19:50
woailuo2010
Rank: 2
等 级:论坛游民
帖 子:27
专家分:19
注 册:2013-3-1
收藏
得分:0 
回复 3楼 wp231957
但是我的问题是要把前三位的位置,不是他的分数。

错过的青春,我用行动补回来!
2013-03-05 22:58
woailuo2010
Rank: 2
等 级:论坛游民
帖 子:27
专家分:19
注 册:2013-3-1
收藏
得分:0 
for(j=0;j<y;j++)//////////////////////////////////输出前三位位置
            {d[j]=b[j];c[j]=j;}
         for(j=0;j<y-2;j++)
         {
            for(i=0;i<y-j-1;i++)
            {
                if(d[i]>d[i+1])
                {m=d[i];d[i]=d[i+1];d[i+1]=m; n=c[i];c[i]=c[i+1];c[i+1]=n;}
            }
         }
         printf("由高分到低分得主");
         for(i=y-1;i>=y-3;i--)
             printf("%d\n",c[i]);

最后我用这样的方法可以输出前几位的位置,用两个数组,一个存数据一个存角标,冒泡交换!

错过的青春,我用行动补回来!
2013-03-06 18:17
快速回复:之前的一个程序,改了一半出来了,但是怎么也弄不出来“输出分数最高三 ...
数据加载中...
 
   



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

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