提高篇 第16-19课后---项目2 - 成绩处理

【项目2- 成绩处理】
在数组score中将要存储某小组C程序设计的成绩,请完成下面的处理:

(1)输入小组人数及成绩,要保证成绩在0-100之间;

代码:

/*成绩处理*/
#include <stdio.h>
void Score_1(float s[],int a);
int main()
{
    int Team_Number;
    float Score[100];
    printf("请输入小组人数:");
    scanf("%d",&Team_Number);
    Score_1(Score,Team_Number);
    return 0;
}
void Score_1(float s[],int a)
{
    int i=0,fb;
    float m;
    printf("请输入每位组员的成绩(0-100)\n");
    do
    {
        printf("请输入第%d位组员成绩:",i+1);
        fflush(stdin);
        fb=scanf("%f",&m);
        if(fb!=0&&m>=0&&m<=100)
        {
            s[i]=m;
        }
        else
        {
            printf("输入错误,请重新输入\n");
            continue;
        }
        i++;
    }while(i<=(a-1));
}
(2)输出该小组的最高成绩、最低成绩、平均成绩;

代码:

/*成绩处理*/
#include <stdio.h>
#include <windows.h>
void Score_1(float s[],int a);
void Score_2(float s[],int a);
int main()
{
    int Team_Number;
    float Score[100];
    printf("请输入小组人数:");
    scanf("%d",&Team_Number);
    Score_1(Score,Team_Number);
    Score_2(Score,Team_Number);
    return 0;
}
void Score_1(float s[],int a)
{
    int i=0,fb;
    float m;
    printf("请输入每位组员的成绩(0-100)\n");
    do
    {
        printf("请输入第%d位组员成绩:",i+1);
        fflush(stdin);
        fb=scanf("%f",&m);
        if(fb!=0&&m>=0&&m<=100)
        {
            s[i]=m;
        }
        else
        {
            printf("输入错误,请重新输入\n");
            continue;
        }
        i++;
    }while(i<=(a-1));
}
void Score_2(float s[],int a)
{
    int i;
    float m1=-1,m2=101,sum=0;
    for(i=0;i<a;i++)
    {
        if(s[i]>m1)
            m1=s[i];
        if(s[i]<m2)
            m2=s[i];
        sum+=s[i];
    }
    printf("正在计算该组分数,请稍后------------------\n");
    Sleep(1000);
    printf("该组最高分为%.2f\n",m1);
    printf("该组最低分为%.2f\n",m2);
    printf("该组平均分为%.2f\n",sum/a);
}
(3)输出考得最高成绩和最低成绩的同学的人数;

代码:

/*成绩处理*/
#include <stdio.h>
#include <windows.h>
void Score_1(float s[],int a);
void Score_2(float s[],int a);
void Score_3(float g[],int a,float b,float c);
int main()
{
    int Team_Number;
    float Score[100];
    printf("请输入小组人数:");
    scanf("%d",&Team_Number);
    Score_1(Score,Team_Number);
    Score_2(Score,Team_Number);
    return 0;
}
void Score_1(float s[],int a)
{
    int i=0,fb;
    float m;
    printf("请输入每位组员的成绩(0-100)\n");
    do
    {
        printf("请输入第%d位组员成绩:",i+1);
        fflush(stdin);
        fb=scanf("%f",&m);
        if(fb!=0&&m>=0&&m<=100)
        {
            s[i]=m;
        }
        else
        {
            printf("输入错误,请重新输入\n");
            continue;
        }
        i++;
    }while(i<=(a-1));
}
void Score_2(float s[],int a)
{
    int i;
    float m1=-1,m2=101,sum=0;
    for(i=0;i<a;i++)
    {
        if(s[i]>m1)
            m1=s[i];
        if(s[i]<m2)
            m2=s[i];
        sum+=s[i];
    }
    printf("正在计算该组分数,请稍后------------------\n");
    Sleep(1000);
    Score_3(s,a,m1,m2);
    printf("该组平均分为%.2f\n",sum/a);
}
void Score_3(float g[],int a,float b,float c)
{
    int i,d=0,f=0;
    for(i=0;i<a;i++)
    {
        if(abs(g[i]-c)<1e-7)
        d++;
        if((abs(g[i]-c)<1e-7)
        f++;
    }
    printf("本次测验一共有%d个组员取得最高分%.2f\n",d,b);
    printf("本次测验一共有%d个组员取得最低分%.2f,这些同学希望再接再励\n",f,c);
}
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。

代码:

/*成绩处理*/
#include <stdio.h>
#include <windows.h>
void Score_1(float s[],int a);
void Score_2(float s[],int a);
void Score_3(float g[],int a,float b,float c);
int main()
{
    int Team_Number;
    float Score[100];
    printf("请输入小组人数:");
    scanf("%d",&Team_Number);
    Score_1(Score,Team_Number);
    Score_2(Score,Team_Number);
    return 0;
}
void Score_1(float s[],int a)
{
    int i=0,fb;
    float m;
    printf("请输入每位组员的成绩(0-100)\n");
    do
    {
        printf("请输入第%d位组员成绩:",i+1);
        fflush(stdin);
        fb=scanf("%f",&m);
        if(fb!=0&&m>=0&&m<=100)
        {
            s[i]=m;
        }
        else
        {
            printf("输入错误,请重新输入\n");
            continue;
        }
        i++;
    }while(i<=(a-1));
}
void Score_2(float s[],int a)
{
    int i;
    float m1=-1,m2=101,sum=0;
    for(i=0;i<a;i++)
    {
        if(s[i]>m1)
            m1=s[i];
        if(s[i]<m2)
            m2=s[i];
        sum+=s[i];
    }
    printf("正在计算该组分数,请稍后------------------\n");
    Sleep(1000);
    Score_3(s,a,m1,m2);
    printf("该组平均分为%.2f\n",sum/a);
}
void Score_3(float g[],int a,float b,float c)
{
    int i,d=0,f=0;
    for(i=0;i<a;i++)
    {
        if(abs(g[i]-b)<1e-7)
        {
            printf("恭喜学号为0000%d的同学取得最高分\n",i);
            d++;
        }
        if(abs(g[i]-c)<1e-7)
        {
            printf("学号为0000%d的同学取得最低分\n",i);
            f++;
        }
    }
    printf("本次测验一共有%d个组员取得最高分%.2f\n",d,b);
    printf("本次测验一共有%d个组员取得最低分%.2f,这些同学希望再接再励\n",f,c);
}
(5)(选做)求出所有同学成绩的标准偏差

这一题有参考图片   我们照着图输出

代码:

/*成绩处理*/
#include <stdio.h>
#include <math.h>
#include <windows.h>
void Score_1(float s[],int a);
void Score_2(float s[],int a);
void Score_3(float g[],int a,float b,float c);
void Score_4(int s[],int d);
void Score_5(float s[],int a);
int main()
{
    int Team_Number;
    float Score[100];
    printf("请输入小组人数:");
    scanf("%d",&Team_Number);
    Score_1(Score,Team_Number);
    Score_2(Score,Team_Number);
    return 0;
}
void Score_1(float s[],int a)//输入成绩,并保存到数组中
{
    int i=0,fb;
    float m;
    printf("请输入学生成绩\n");
    do
    {
        printf("输入第 %d 位同学的成绩:",i+1);
        fflush(stdin);
        fb=scanf("%f",&m);
        if(fb!=0&&m>=0&&m<=100)
        {
            s[i]=m;
        }
        else
        {
            printf("输入错误,请重新输入!\n");
            continue;
        }
        i++;
    }while(i<a);
}
float sum=0;
void Score_2(float s[],int a)//求最高最低平均成绩,并输出学号
{
    int i;
    float m1=-1,m2=101;
    for(i=0;i<a;i++)
    {
        if(s[i]>m1)
            m1=s[i];
        if(s[i]<m2)
            m2=s[i];
        sum+=s[i];
    }
    printf("最高成绩为%.2f\n",m1);
    printf("最低成绩为%.2f\n",m2);
    printf("平均分为%.2f\n",sum/a);
    Score_3(s,a,m1,m2);//输出最高分和学号
}

void Score_3(float g[],int a,float b,float c)//求最高分和学号
{
    int i,j,n;
    int p[20],r[20];
    for(i=0,j=0,n=0;i<a;i++)
    {
        if(abs(g[i]-b)<1e-7)
        {
            p[j]=i;
            j++;
        }
        if(abs(g[i]-c)<1e-7)
        {
            r[n]=i;
            n++;
        }
    }
    printf("取得最高成绩%.2f分的共有%d个,他们的学号是:",b,j);
    Score_4(p,j);
    printf("取得最低成绩%.2f分的共有%d个,他们的学号是:",c,n);
    Score_4(r,n);
    Score_5(g,a);//输出标准偏差

}
void Score_4(int s[],int d)//输出学号
{
    int i=0;
    do
    {
        printf("%d ",s[i]);
        i++;
    }while(i<d);
    printf("\n");
}
void Score_5(float s[],int a)//求标准偏差
{
    int i;
    float s1=0,s2;
    for(i=0;i<a;i++)
    {
        s1+=pow((s[i]-sum/a),2);
    }
    s2=sqrt(s1/(a-1));
    printf("标准偏差为%.2f",s2);
}
差点自己看不懂了 , 看了老师的代码   没用自定义函数   67行代码   我这里103行    略多,就当是复习复习再复习自定义函数了





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值