| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4898 人关注过本帖, 1 人收藏
标题:一维数组的赋值函数调用
只看楼主 加入收藏
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
结帖率:85.71%
收藏(1)
已结贴  问题点数:20 回复次数:46 
一维数组的赋值函数调用
#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')
        BinSearch(score,num,x,n);
        else break;
    }
}
int ReadScore(int score[],long num[],int n)     //输入数
{
    int i,j;
    printf("Input student's ID and scores:\n");
    for(i = 0;i<n;i++)
    {
        scanf("%ld%d",&num[i],&score[i]);
    }
}
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;
    char op;
    printf("Student's number:");
    scanf("%ld",&x);
    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);
}
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]);
    }
}

这个问题就是..会输出好多0,最后程序崩溃.....
求解答..有点长请各位大神理解.....
搜索更多相关主题的帖子: include 课程 
2013-12-06 20:39
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
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-06 20:48
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
感觉是调用 SortScore(score,num,n)出错了...但是不知道为什么错,错在哪里,怎么改。。。。。

任重而道远
2013-12-06 20:50
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:5 
我调试了一下  没有啥大错误啊,只是你没有注意清空缓冲区导致不经用户选择程序自动执行

加几个getchar();就好了(或者fflush(stdin);)   见下面红色部分

  for(i = 1;;i++)
    {
        printf("选择用序号增大的形式还是用成绩减小的形式输出成绩(N or S):");
        scanf(" %c",&oq);
        getchar();
        if(oq != 'S')
        {
            SortNum(score,num,n);    //按学号大小排序
            Print(score,num,Grade,sum,aver,n);       //按学号输出成绩等级
        }
        printf("是否还要按照成绩减小的形式输出(Y or N)?\n");
        scanf(" %c",&oq);
        getchar();
        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);
        getchar();
        if(op != 'N')
        BinSearch(score,num,x,n);
        else break;
    }
}

三十年河东,三十年河西,莫欺少年穷!
2013-12-06 21:04
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
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-06 21:13
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
上述方法不能输出按成绩排列的结果啊......

任重而道远
2013-12-06 21:16
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 6楼 未来ken
这应该就是你的算法问题了

printf("选择用序号增大的形式还是用成绩减小的形式输出成绩(N or S):");

这里是提示输入 N或者S 的,可你怎么输入一个Y?

三十年河东,三十年河西,莫欺少年穷!
2013-12-06 21:22
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
回复 7楼 韶志
我debug了一下,发现到SortScore(score,num,n)之后sum和score两个数组变了,并且变化很大,感觉是这个问题。。。。。但是if条件句不是判断的吗?感觉和这个关系不大的样子啊

任重而道远
2013-12-06 21:26
韶志
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:斗气大陆
等 级:贵宾
威 望:44
帖 子:2223
专家分:13592
注 册:2013-3-22
收藏
得分:0 
回复 8楼 未来ken
没变化...
你干嘛不把编译结果贴上来

三十年河东,三十年河西,莫欺少年穷!
2013-12-06 21:36
未来ken
Rank: 2
等 级:论坛游民
帖 子:102
专家分:96
注 册:2013-11-16
收藏
得分:0 
关键是。。。。结果是直接关闭对话框......页面上两竖排0....

任重而道远
2013-12-06 21:37
快速回复:一维数组的赋值函数调用
数据加载中...
 
   



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

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