| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4898 人关注过本帖, 1 人收藏
标题:一维数组的赋值函数调用
只看楼主 加入收藏
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
求解啊。。。。。

任重而道远
2013-12-06 22:33
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
把你这堆代码想要实现的功能大概描述一下,输入,输出有什么要求

思考赐予新生,时间在于定义
2013-12-07 01:19
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
上限三十人,输入选择人数
1.录入每个学生的学号与成绩
2.计算课程的总分和平均分
3.按成绩由高到低输出名次表
4.按学号由小到大输出成绩表
5.按学号查询学生排名及其成绩
6.安优秀良好中等及格不及格五个类别统计每个类别的人数及其所占的百分比
7.输出每个学生的学号成绩  课程总分和平均分
输入方式:
6<huiche>
6<kongge>54<huiche>
5<kongge>95<huiche>
1<kongge>87<huiche>
3<kongge>87<huiche>
2<kongge>96<huiche>
4<kongge>53<huiche>
Y<huiche>
Y<huiche>

任重而道远
2013-12-07 09:50
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
你贴出的代码中,在ReadScore()这个函数中就已经有错了,你的题目初衷是输出每个学生的学号成绩  课程总分和平均分。
而ReadScore这个函数里面输入的仅仅是一个学生的ID,一科成绩,如果是这样,那一科成绩就是课程总分么?平均分呢?

学过结构体了没?用结构体就很容易解决了

思考赐予新生,时间在于定义
2013-12-07 12:43
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
你这段代码最致命的地方就是使用数组score[]表示成绩和数组num[]表示学号,
知道为什么?在你按照成绩、学号大小排序的时候,这两个数组之间是没有任何联系的,假如你按成绩大小排序后,你怎么知道成绩对应的学号是多少?
按照成绩排序后输出,只能输出一堆分数,不知道该分数是属于哪个学生的

这一点你没有注意到的,学号和成绩没有关联。

而且你输入的时候,每次也只能输入一个学号以及一个分数,这个分数是属于哪一科呢?难道你只是想要计算一个学生的一个科目的数据吗?但楼主你的功能描述是要实现
一个学生的课程总分,平均分,那么在录入分数的时候就不应该是只有一门课程的分数了。

就这两个思路你没有理清,基本上写的代码都是混乱了,建议你使用结构体重写。

顺便给你一点提示
程序代码:
struct student
{
    int uid;//学生学号
    int chinese;//语文成绩
    int math;//数学成绩
    int English;//英语成绩
};

有些地方可以使用switch语句,比如说在计算各个分数段的人数和百分比的时候,可以用到switch

思考赐予新生,时间在于定义
2013-12-07 13:01
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
我的目的是这样的...

任重而道远
2013-12-07 13:23
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
就是一个学科的总分平均分..只是按照成绩输出后不对.....感觉成绩和学号对应了啊,每换一个成绩,跟着换学号...
temp1 = num[k];num[k] = num[i];num[i] = temp1;
temp2 = score[k];score[k] = score[i];score[i] = temp2;

任重而道远
2013-12-07 13:26
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
另外为什么会运行出错呢....那应该输出错误的结果啊......
并且是复杂的运算会错,如上输入就没错了.....

任重而道远
2013-12-07 13:28
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:15 
只能说,我大概帮你修改了代码,然后按照你的目的输入和输出,
看看截图是不是你想要的目的?是的话,我在整理一下代码给你参考
图片附件: 游客没有浏览图片的权限,请 登录注册

思考赐予新生,时间在于定义
2013-12-07 18:57
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
程序代码:
#include<stdio.h>
#define N 30   //人数 
int ReadScore(int score[],long num[],int n);     //输入数 
void StudScore(int score[],char Grade[],int n);  //学生成绩及等级
void AverforCourse(int score[],int sum[],float aver[],int n);   //课程总分及平均成绩 
void Print(int score[],long num[],char Grade[],int sum[],float aver[],int n);    //按学号输出成绩及等级
int BinSearch(int score[],long num[],long x,int n);   //查找序号分数 
void SortScore(int score[],long num[],int n);      //按成绩减小排序 
void SortNum(int score[],long num[],int n);    //按学号增大排序 
void PrintScore(int score[],long num[],int n);      //输出按成绩排序的数组 
int main()
{
    int score[N],sum[N],n,i;
    char Grade[5],op,oq;
    long num[N],x;
    float aver[N];    
    printf("Input the total number of the students(n<=30):");
    scanf("%d",&n);
    ReadScore(score,num,n);    //输入数
    AverforCourse(score,sum,aver,n);       //计算课程总分及平均成绩 
    for(i = 1;;i++)
    {
        printf("选择用序号增大的形式还是用成绩减小的形式输出成绩(N or S):");
        scanf(" %c",&oq);
        if(oq != 'S')
        {
            SortNum(score,num,n);    //按学号大小排序 
            Print(score,num,Grade,sum,aver,n);       //按学号输出成绩等级
        }
        printf("是否还要按照成绩减小的形式输出(Y or N)?\n");
        scanf(" %c",&oq);
        if(oq != 'N')
        {
            SortScore(score,num,n);    //按成绩大小排序 
            PrintScore(score,num,n);    //按成绩输出成绩等级
            break;
        }
        else break;
    }
    for(i = 1;;i++)
    {
        printf("Do you want to search for someone?(Anykey or N)");
        scanf(" %c",&op);
        if(op != 'N'){
            printf("Student's number:");
            scanf("%ld",&x);
            BinSearch(score,num,x,n);}
        else break;
    }
    return 0;
}
int ReadScore(int score[],long num[],int n)     //输入数 
{
    int i;
    printf("Input student's ID and scores:\n");
    for(i = 0;i<n;i++)
    {
        scanf("%ld%d",&num[i],&score[i]);
    }
    return 0;
}
void AverforCourse(int score[],int sum[],float aver[],int n)   //计算学科总分和平均分 
{
    int i,p;
    p = 0;
    for(i = 0;i<n;i++)
    {
        p = p+score[i];
    }
    sum[i] = p;
    aver[i] = (float)sum[i]/n;
}
void Print(int score[],long num[],char Grade[],int sum[],float aver[],int n)   //按学号排序 
{
    int i,a = 0,b = 0,c  =0,d = 0,e = 0;
    printf("Sort in numbers:\n");
    printf("Student's ID\t   Scores\tGrade\n");
    for(i = 0;i<n;i++)
    {
        if(score[i]>=90&&score[i]<=100) Grade[i] = 'A',a++;
        if(score[i]>=80&&score[i]<=89) Grade[i] = 'B',b++;
        if(score[i]>=70&&score[i]<=79) Grade[i] = 'C',c++;
        if(score[i]>=60&&score[i]<=69) Grade[i] = 'D',d++;
        if(score[i]>=0&&score[i]<=59) Grade[i] = 'E',e++;
        printf("%12ld\t%8d\t %c\n",num[i],score[i],Grade[i]);
    }
    printf("SumofCourse\t%4d\t",sum[i]);
    printf("\nAverofcourse\t%4.1f\t",aver[n]);
    printf("\nThe number of A:%d,The percent of A:%3.2f%%",a,(float)a/n*100);
    printf("\nThe number of B:%d,The percent of B:%3.2f%%",b,(float)b/n*100);
    printf("\nThe number of C:%d,The percent of C:%3.2f%%",c,(float)c/n*100);
    printf("\nThe number of D:%d,The percent of D:%3.2f%%",d,(float)d/n*100);
    printf("\nThe number of E:%d,The percent of E:%3.2f%%",e,(float)e/n*100);
    printf("\n");
}
int BinSearch(int score[],long num[],long x,int n)            //查找函数 
{
    int i,p,k = 1;
    for(i = 0;i<n;i++)
    {
        if(x == num[i])
        {
            printf("%d\t",score[i]);
            p = score[i];
        }
    }
    for(i = 0;i<n;i++)
    {
        if(score[i]>p)
        k++;
    }
    printf("名次是:%d\n",k);
    return 0;
}
void SortNum(int score[],long num[],int n)    //按学号大小排序 
{
    int i,j,k,temp2;
    long temp1;
    for(i = 0;i<n-1;i++)
    {
        k = i;
        for(j = i+1;j<n;j++)
        {
            if(num[j]<num[k])
            {
                k = j;
            }
        }
        if(k!=i)
        {
            temp1 = num[k];num[k] = num[i];num[i] = temp1;
            temp2 = score[k];score[k] = score[i];score[i] = temp2;
        }
    }
}
void SortScore(int score[],long num[],int n)    //按成绩大小排序 
{
    int i,j,k,temp1;
    long temp2;
    for(i = 0;i<n-1;i++)
    {
        k = i;
        for(j = i+1;j<n;j++)
        {
            if(score[j]>score[k])
            {
                k = j;
            }
        }
        if(k!=i)
        {
            temp1 = score[k];score[k] = score[i];score[i] = temp1;
            temp2 = num[k];num[k] = num[i];num[i] = temp2;
        }
    }
}
void PrintScore(int score[],long num[],int n)      //按成绩排序 
{
    int i;
    printf("Student's Scores\tID\tGrade\n");
    for(i = 0;i<n;i++)
    {
        printf("%12ld\t%12d\n",score[i],num[i]);
    }
}

思考赐予新生,时间在于定义
2013-12-07 21:48
快速回复:一维数组的赋值函数调用
数据加载中...
 
   



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

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