| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1274 人关注过本帖
标题:帮我看看错在哪?第三个调用函数有问题?
取消只看楼主 加入收藏
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
 问题点数:0 回复次数:9 
帮我看看错在哪?第三个调用函数有问题?
#include<iostream.h>
#include<stdio.h>
#include<string.h>
#include<iomanip.h>
void input_data(char name[3][20],float score[3][5]);
void max_min(float Score[3][5]);
void sort(float end_score[3],char name[3][20]);
void main()
{
    char name[3][20];
    float score[3][5],end_score[3];
    input_data(name,score);
    max_min(score);
    sort(end_score,name);
}

void input_data(char name[3][20],float score[3][5])//输入5位评委给3位选手的评分.
{
    int i,j;
    for(i=0;i<3;i++)
    {
        cout<<"请输入第"<<i+1<<"位选手的姓名:"<<endl;
        gets(name[i]);
        cout<<"请输入第"<<i+1<<"位选手的各个评委给分:"<<endl;    
        for(j=0;j<5;j++)
        {
            cin>>score[i][j];
        }
    }
}

void max_min(float Score[3][5])//找出每位选手的最高分,最低分,最后得分.
{
    int i,j;
    float a=0,b=10,c=0;
    float max[3],min[3],sum[3],end_score[3];
    for(i=0;i<3;i++)
    {
        for(j=0;j<5;j++)
        {
            if(a<Score[i][j])
                a=Score[i][j];
            if(b>Score[i][j])
                b=Score[i][j];
            c+=Score[i][j];
        }
        max[i]=a;
        min[i]=b;
        sum[i]=c;//第i+1号选手的总分.
        end_score[i]=((sum[i]-max[i]-min[i])/3);//第i+1号选手的最后得分(除去最高,最低的平均数).
        a=0;
        b=10;
        c=0;
    }
    cout<<"各选手比赛的基本情况如下:"<<endl;
    cout<<" ______________________________________________________________________"<<endl;//打印表格
    for(i=0;i<3;i++)
    {
        cout<<"|  "<<i+1<<"号选手:  |  最高得分: "<<setiosflags(ios::fixed)<<setprecision(2)<<max[i]<<"  |  最低得分: "<<setiosflags(ios::fixed)<<setprecision(2)<<min[i]<<"  |  最后得分: "<<setiosflags(ios::fixed)<<setprecision(2)<<end_score[i]<<"   |"<<endl;
        cout<<"|______________________________________________________________________|"<<endl;
    }    
    cout<<endl;
}
void sort(float end_score[3],char name[3][20])//由高到低显示最后得分排序(显示名次,姓名,最后得分)
{
    int i,j;
    float t;
    char c[1][20]={0};
    for(j=0;j<2;j++)//起泡
    {
        for(i=0;i<=3-j;i++)
        {
            if(end_score[i]<end_score[i+1])
            {
                t=end_score[i];
                end_score[i]=end_score[i+1];
                end_score[i+1]=t;
                strcpy(c[0],name[i]);
                strcpy(name[i],name[i+1]);
                strcpy(name[i+1],c[0]);
            }
        }
    }
    cout<<"最后排名情况如下:"<<endl;
    cout<<"________________________________________________"<<endl;
    for(i=0;i<3;i++)
    {
        cout<<"|  第"<<i+1<<"名  |  姓名: "<<setiosflags(ios::left)<<setw(8)<<name[i]<<"  |  最后得分:"<<setiosflags(ios::fixed)<<setprecision(2)<<end_score[i]<<"  |"<<endl;
        cout<<"|_______________________________________________|"<<endl;
    }
    cout<<endl;
}
搜索更多相关主题的帖子: 函数 
2008-01-12 14:50
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
我是初学C++的,看了几天了,都不知改哪,所以才请教各位。我用的编译器是Microsoft Visual C++ 6.0
2008-01-12 14:56
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
我上面的两个函数都可正确运行啊,就是第三个sort不能正确运行!b=10有问题,每二个函数应该不能正确运行才对啊!
2008-01-12 18:15
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
名字随最后成绩的排列而排列啊。
2008-01-12 18:36
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
在void main()前加了
ifloat end_score[3] ;

f(end_score[i]<end_score[i-1])
也要改
if(end_score[i]>end_score[i-1])
的确可以了!
我还是想不明,第三个调用函数怎么用不了main()里定义的end_score[3]呢?
要在main()再定义呢?
2008-01-12 20:12
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
这个
for(j=0;j<3;j++)
    {
        for(i=2;i>j;i--)
        {
            if(end_score[i]>end_score[i-1])
            {
                t=end_score[i];
                end_score[i]=end_score[i-1];
                end_score[i-1]=t;
                strcpy(c[0],name[i]);
                strcpy(name[i],name[i-1]);
                strcpy(name[i-1],c[0]);
            }
        }
    }
为何要倒过来排序呢?我原来的哪错了呢?我再将我原来的改下,看是否不可以。
2008-01-12 20:34
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
嗯,
多谢了,我的确基础很差,平时学这方面用的时间很少。
看来要改变下才行,呵呵!
2008-01-12 21:55
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
结构体和类那些还没有学啊
2008-01-13 00:00
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
不知可不可以不用全局变量呢?那又该如何?
2008-01-13 00:17
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
10楼的:
你原来哪个算法错误呀, 根本就行不通,排不来了.
我都是按你原来样式修改了一下,没想到你大多数看出来了.
还有二个细节了,不然的话,也会排不出来的.
参数之间的传递会想你想象的哪些得出结果吗?
  我定义了一个全局变量才会达到这样的效果.

我将char name[3][20]也定义全局变量,结果这个
char c[1][20];
    for(j=0;j<2;j++)
    {
        for(i=0;i<3-j;i++)
        {
            if(end_score[i]<end_score[i+1])
            {
                t=end_score[i];
                end_score[i]=end_score[i+1];
                end_score[i+1]=t;
                strcpy(c[0],name[i]);
                strcpy(name[i],name[i+1]);
                strcpy(name[i+1],c[0]);
            }
        }
    }
也没有问题啊,也就是说我原来(上面)的排序算法没有错啊?
2008-01-13 09:54
快速回复:帮我看看错在哪?第三个调用函数有问题?
数据加载中...
 
   



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

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