任务和代码:
/*
*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;
}
知识点总结:
数组在循环中的使用;根据所需新建数组;数组元素的输入与逐个输出
心得:
自建了存放取得最高/低成绩的学生学号,在计数的同时将所需学号放入新建数组,并按条件逐个输出数组元素