C语言提高-第18讲: 一维数组应用二三例(成绩处理)

任务和代码:

/*
*All rights reserved
*文件名称:main.c
*作者: Osseyda
完成日期:2017.10.16
*版本号:v2.
*问题描述:在数组score中将要存储某小组C程序设计的成绩,请完成下面的处理:
(1)输入小组人数及成绩,要保证成绩在0-100之间;
(2)输出该小组的最高成绩、最低成绩、平均成绩;
(3)输出考得最高成绩和最低成绩的同学的人数;
(4)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩);
(5)求出所有同学成绩的标准偏差。
*/
#include<stdio.h>
    int main(){
        int score[50]; //保存成绩的数组,不会超过50名
        int num,i;
        printf("小组共有多少名同学?");
        scanf("%d", &num);
        printf("请输入学生成绩:\n");

        //输入num名同学的成绩
        i=0;
        do{
            printf("请输入第 %d 位同学的成绩:",i);
            scanf("%d",&score[i]);
            if(score[i]<0||score[i]>100)
                continue;
            i++;
        }while(i<num);
        printf("\n");

        //求出并输出最高成绩、最低成绩和平均成绩(取出数组中符合条件的元素重新分配)
        int max,min,aver,sum;
        max=min=score[0];
        sum=0;
        for(i=0;i<num;i++){
            if(max<score[i])
                max=score[i];
            if(min>score[i])
                min=score[i];
            sum+=score[i];
        }
        aver=sum/num;
        printf("最高成绩为:%d,最低成绩为:%d,平均成绩为:%d\n",max,min,aver);

        //求出并输出考得最高成绩和最低成绩人数以及学号
        int m=0,n=0,countMax=0,countMin=0,indexMax[10],indexMin[10];
        for(i=0;i<num;i++){
            if(score[i]==max){
                countMax++;
                indexMax[m++]=i;
            }
            if(score[i]==min){
                countMin++;
                indexMin[n++]=i;
            }
        }
        printf("取得最高成绩%d分的共%d人,他们的学号是:",max,countMax);
        for(i=0;i<m;i++)
            printf("%d ",indexMax[i]);
        printf("\n");
        printf("取得最低成绩%d分的共%d人,他们的学号是:",min,countMin);
        for(i=0;i<n;i++)
            printf("%d ",indexMin[i]);
        printf("\n");

        //求出并输出标准偏差
        int sumSquare=0;
        double s;
        for(i=0;i<num;i++)
            sumSquare+=(score[i]-aver)*(score[i]-aver);
        s=sqrt((double)sumSquare/(num-1));
        printf("标准偏差为:%.4f",s);
        return 0;
    }


运行结果:


知识点总结:

        数组在循环中的使用;根据所需新建数组;数组元素的输入与逐个输出


心得:

        自建了存放取得最高/低成绩的学生学号,在计数的同时将所需学号放入新建数组,并按条件逐个输出数组元素

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值