一道C语言题,求大神帮帮忙

二、 成绩处理
在数组score中将要存储某小组C程序设计的成绩,请设计实现下面的各功能函数, main函数如下,组合成一个完整的应用:
(1)输入小组人数及成绩,要保证成绩在0-100之间;
(2)输出该小组的最高成绩
(3)输出该小组的最低成绩
(4)输出该小组的平均成绩;
(5)输出考得某个成绩的同学的人数(如果实参为最高分,即为最高分学生人数);
(6)输出考得最高成绩和最低成绩的同学的学号(设数组下标即学号,可能有相同的成绩)。
  (7)求出所有同学成绩的标准偏差,标准偏差公式:
     
  其中Xi为样本(即某同学成绩),N为样本数目

int main(void)
{
int score[50];
int num;
int max_score,min_score;
printf("小组共有多少名同学?");
scanf("%d",&num);
printf("\n请输入学生成绩:\n");
input_score(score, num);
max_score=get_max_score(score, num);
printf("\n最高成绩为:%d, 共有 %d 人",max_score,count(max_score,score, num ));
min_score=get_min_score(score, num);
printf("\n最低成绩为:%d, 共有 %d 人",min_score,count(min_score,score, num ));
printf("\n平均成绩为:%5.2f",get_avg_score(score, num));
printf("\n标准偏差为:%5.2f",get_stdev_score(score, num));
printf("\n获最高成绩的学生(学号)有:");
output_index(max_score,score, num);
printf("\n获最低成绩的学生(学号)有:");
output_index(min_score,score, num);
printf("\n" );
return 0;
}

运行效果如下(由于未给出“标准偏差公式”),所以标准偏差函数直接返回的0.

代码如下:

#include "stdio.h"

void input_score(int *score, int num)
{
int i;

for(i=0; i<num; i++)
{
printf("请输入学生[%d]的成绩:", i);
scanf("%d",&score[i]);
if(score[i] < 0 || score[i] > 100)
{
i--;
continue;
}
}
}

int get_max_score(int *score, int num)
{
int max = 0;
int i;

for(i=0; i<num; i++)
{
max = max > score[i] ? max : score[i];
}
return max;
}

int count(int max, int *score, int num)
{
int i;
int total = 0;

for(i=0; i<num; i++)
{
if(max == score[i])
{
total++;
}
}
return total;
}

int get_min_score(int *score, int num)
{
int min = 100;
int i;

for(i=0; i<num; i++)
{
min = min < score[i] ? min : score[i];
}
return min;
}

float get_avg_score(int *score, int num)
{
int total;
float avg;
int i;

total = 0;
for(i=0; i<num; i++)
{
total += score[i];
}
avg = (float)total/(float)num;
return avg;
}

float get_stdev_score(int *score, int num)
{
return 0;
}

void output_index(int same, int *score, int num)
{
int i;

for(i=0; i<num; i++)
{
if(same == score[i])
{
printf("%d ", i);
}
}
return ;
}



int main(void)  
{  
int score[50];
int num;      
int max_score,min_score;  
printf("小组共有多少名同学?");  
scanf("%d",&num);  
printf("\n请输入学生成绩:\n");  
input_score(score, num);   
max_score=get_max_score(score, num);
printf("\n最高成绩为:%d, 共有 %d 人",max_score,count(max_score,score, num ));
min_score=get_min_score(score, num);  
printf("\n最低成绩为:%d, 共有 %d 人",min_score,count(min_score,score, num ));  
printf("\n平均成绩为:%5.2f",get_avg_score(score, num));  
printf("\n标准偏差为:%5.2f",get_stdev_score(score, num));  
printf("\n获最高成绩的学生(学号)有:");  
output_index(max_score,score, num);  
printf("\n获最低成绩的学生(学号)有:");  
output_index(min_score,score, num);  
printf("\n" );
return 0;  
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-09
#include <math.h>

void input_score(int score[], int num)
{
    for (int i = 0; i < num; ++i)
        scanf("%d ", &score[i]);
}

int get_max_score(int score[], int num)
{
    int max_score = score[0];
    for (int i = 1; i < num; ++i)
        if (score[i] > max_score)
            max_score = score[i];
    return max_score;
}

int get_min_score(int score[], int num)
{
    int min_score = score[0];
    for (int i = 1; i < num; ++i)
        if (score[i] < min_score)
            min_score = score[i];
    return min_score;
}

int count(int Score, int score[], int num)
{
    int cnt = 0;
    for (int i = 0; i < num; ++i)
        if (score[i] == Score)
            ++cnt;
    return cnt;
}

float get_avg_score(int score[], int num)
{
    float sum = 0;
    for (int i = 0; i < num; ++i)
        sum += score[i];
    return sum/num;
}

void output_index(int Score, int score[], int num)
{
    for (int i = 0; i < num; ++i)
        if (score[i] == Score)
            printf("%d ", i);
    printf("\n");

}

float get_stdev_score(int score[], int num)
{
    float u = get_avg_score(score, num);
    float Dx = 0;
    for (int i = 0; i < num; ++i)
        Dx += (score[i] - u)*(score[i] - u);
    return sqrt(Dx/num);
}

本回答被网友采纳
相似回答