| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1275 人关注过本帖
标题:帮我看看错在哪?第三个调用函数有问题?
只看楼主 加入收藏
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
 问题点数:0 回复次数:15 
帮我看看错在哪?第三个调用函数有问题?
#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
way3
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-12-8
收藏
得分:0 
b=10;这个赋值错误.应试赋值为Score[i]才对.
还有一个错误,自己检查.
2008-01-12 16:06
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
我上面的两个函数都可正确运行啊,就是第三个sort不能正确运行!b=10有问题,每二个函数应该不能正确运行才对啊!
2008-01-12 18:15
忘记喧嚣
Rank: 1
等 级:新手上路
帖 子:146
专家分:0
注 册:2007-10-7
收藏
得分:0 
那个10是对的哈.

 strcpy(c[0],name[i]);
                strcpy(name[i],name[i+1]);
                strcpy(name[i+1],c[0]);
            }
没看明白  请教下楼主

[[italic] 本帖最后由 忘记喧嚣 于 2008-1-12 18:32 编辑 [/italic]]
2008-01-12 18:29
优游子
Rank: 1
来 自:广东信宜
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-11-17
收藏
得分:0 
名字随最后成绩的排列而排列啊。
2008-01-12 18:36
way3
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-12-8
收藏
得分:0 
#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]);
 float end_score[3] ;
void main()
{
    char name[3][20];
    float score[3][5];
    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];
    for(i=0;i<3;i++)
    {   a=0;

        c=0;
        for(j=0;j<5;j++)
        {
            b=Score[i][0];
            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号选手的最后得分(除去最高,最低的平均数).

    }
    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<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]);
            }
        }
    }
    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;
}


看来你还没有想出来呀,你自己好好想一下,你哪里错了?
提醒,函数与函数之间的关系你要好好研究一下.
 在c-free3.5中运行成功.

[[italic] 本帖最后由 way3 于 2008-1-12 20:00 编辑 [/italic]]

char.jpg (45.59 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-01-12 19:52
优游子
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
way3
Rank: 1
来 自:湖南
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-12-8
收藏
得分:0 
你原来哪个算法错误呀, 根本就行不通,排不来了.
我都是按你原来样式修改了一下,没想到你大多数看出来了.
 还有二个细节了,不然的话,也会排不出来的.
参数之间的传递会想你想象的哪些得出结果吗?
  我定义了一个全局变量才会达到这样的效果.
你基础差,不要急,慢慢来.
2008-01-12 21:10
快速回复:帮我看看错在哪?第三个调用函数有问题?
数据加载中...
 
   



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

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