提高项目13-成绩处理 函数版

来源:互联网 发布:什么是大数据概念股 编辑:程序博客网 时间:2024/04/29 06:26
任务和代码:在数组score中将要存储某小组C程序设计的成绩,请完成下面的处理:
(1)输入小组人数及成绩,要保证成绩在0-100之间;
(2)输出该小组的最高成绩、最低成绩、平均成绩;
(3)输出考得最高成绩和最低成绩的同学的人数;
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。
(5)(选做)求出所有同学成绩的标准偏差,标准偏差公式为,其中为样本(即某同学成绩)为均值(前面已经求出),N为样本数目
提示1:可以采用“渐进式”策略,实现一个功能后调试通过,再实现下一个功能。
提示2:界面参考见图


/*文件名:main.c作者:小风景完成日期:2016.6.28问题描述:在数组score中将要存储某小组C程序设计的成绩,请完成下面的处理:(1)输入小组人数及成绩,要保证成绩在0-100之间;(2)输出该小组的最高成绩、最低成绩、平均成绩;(3)输出考得最高成绩和最低成绩的同学的人数;(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。程序输出:*/#include <stdio.h>#include <math.h>int Invalid(int score);void ComputeScore(int score[50],int num);void MaxAndMinStudentNum(int score[50],int num);void StanderValue(int score[50],int num);int iMax = 0;int iMin = 100;float aveg;int main(){    int score[50]; //保存成绩的数组,不会超过50名    int num,i;        //小组人数    printf("小组共有多少名同学?");    scanf("%d", &num);    printf("请输入学生成绩:\n");    //输入num名同学的成绩    for(i = 0; i < num;i++)    {        printf("输入第%d为同学的成绩:",i);        scanf("%d",&score[i]);        if(Invalid(score[i]))        {            printf("输入成绩超出范围,请重新输入!\n");            i--;            continue;        }    }    //求出并输出最高成绩、最低成绩和平均成绩    ComputeScore(score,num);    //求出并输出考得最高成绩和最低成绩人数以及学号    MaxAndMinStudentNum(score,num);    //求出并输出标准偏差    StanderValue(score,num);    return 0;}/*函数功能:验证输入的成绩是否有效返回值:返回1表示无效,返回0表示有效*/int Invalid(int score){    int result = 0;    if((0 >score) || (100 < score))    {        result = 1;    }    return result;}/*函数功能:找到最高分,最低分,计算平均分返回值:无*/void ComputeScore(int score[50],int num){    int sum = 0;    int i = 0;    for(i = 0;i < num;i++)    {        if(iMax < score[i])        {            iMax = score[i];        }        if(iMin > score[i])        {            iMin = score[i];        }        sum += score[i];    }    aveg = sum / num;    printf("最高成绩为:%d,最低成绩为:%d,平均成绩为:%.2f\n",iMax,iMin,aveg);}/*函数功能:输出最高分人数和学号,最低分人数和学号返回值:无*/void MaxAndMinStudentNum(int score[50],int num){    int i = 0;    int Max_num = 0;      //最高分的人数    int Min_num = 0;      //最低分的人数    //找出最高分人数,最低分人数、学号    for(i = 0;i < num;i++)    {        if(iMax == score[i])        {            Max_num++;        }        if(iMin == score[i])        {            Min_num++;        }    }    //输出最高分人数,学号    printf("取得最高成绩%d分共%d人,他们的学号是:",iMax,Max_num);    for(i = 0;i < num;i++)    {        if(iMax == score[i])        {            printf("%d  ",i);        }    }    printf("\n");    //输出最低分人数,学号    printf("取得最低成绩%d分共%d人,他们的学号是:",iMin,Min_num);    for(i = 0;i < num;i++)    {        if(iMin == score[i])        {            printf("%d  ",i);        }    }    printf("\n");}/*函数功能:输出标准偏差返回值:无*/void StanderValue(int score[50],int num){    int i = 0;    float temp = 0;    float S = 0;    float sum = 0;    for(i = 0;i < num;i++)    {        temp = score[i] - aveg;        sum += temp * temp;    }    S = sqrt(sum / (num - 1));    printf("标准差值为:%.4f",S);}


程序运行结果:



总结:通过j将题目中的每一个小条件划为一个模块,利用专用的算法完成其功能,然后在main函数中调用完成整体功能。

0 0
原创粉丝点击