一道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);
}

本回答被网友采纳

C语言试题啊,求大神帮忙答案啊!
C语言规定,函数返回值的类型是由( )所决定。选项:a、return语句中的表达式类型 b、调用该函数时的主调函数类型 c、调用该函数是系统临时指定 d、在定义该函数时所指定的函数类型 这个可以参考第二题,函数的定义规则,当然是由定义的时候确定的了。本题答案为d。题号:6 凡是函数中未指定存储类别的...

一道C语言题目,看图~大神帮忙解答下吧!急急急急急!!在线等
答案是D 在C语言中数组赋值可以如A,那样,【】里面定义了长度5{}中有最大不超过5个值,则赋值成功 B在5个数值之内所以也是正确的 答案C,就是另外中赋值方法,在【】中不定义长度,因此数组a[]的实际长度取决于{}中的值的数量,也就是说在C答案中有5个0作为数值,因此C答案中的a[]的实际...

C语言的一道题不会做了,求大神帮一下
第一题: a=4,b=8, 所以 (b==a) 为假,假就是 0,c= (b==a); c 得 0。语句中 a,b 数值 未发生过变化,保持初始值 a=4,b=8。所以输出 a,b,c 印出: 4,8,0 第二题:输入58,a=58;a>50 的条件成立,输出a值,印58 a>40 的条件成立,输出a值,印58 a>...

C语言高手,帮帮忙
这个题,因为x=0,所以执行case 0 中的语句,然后在case 0中 有switch(y==2) 所以执行case 2 中的语句 显示% 然后由break返回执行下一个语句 case 1:switch(z) ,因为z=3 ,而case 语句中没有case 3,所以执行default:printf(“#”);所以显示结果是 (14) 585858 运行过的,答案是...

一道c语言问题,请各位高手们帮帮忙,谢谢
char p[][20]={“get”,”put”,”out”};p是一个有3个元素的数组,数组中的每个元素都是一个char[20]类型的数组。也就是说,p是一个二维数组。strlen(p[0])+strlen(p[1])+ strlen(p[2])即计算p中的三个字符串的长度总和,为3+3+3=9。

发现了一个有趣的c语言问题,请各位大神帮忙解释一下。
1.之所以再次编译值不改变,乃是因为系统在加载可执行镜像时所选取的栈的初始地址是相对固定的,a就在这个栈上,而且程序开始到main函数执行,这是一段按部就班的例程,没有什么变数,所以a的地址不变是可以理解的。2.scanf("%d",20000)这句合法并没有什么难以理解的地方,因为指针归根到底也只是一...

C语言问题 大神看到了请帮忙说明一下运算过程,感激不尽!
答案为-20 (a+b)-(a+b)*5=-20.不懂可以追问

C语言问题~~~各位大哥大姐帮帮忙把~
if(a[i].sc==puts(b))字符串比较有相应函数的。不能直接用==。puts是输出语句,你可以试试这个:strcmp(a[i].xingming,b)如果还是错的话你就再定义一个指针变量指向b,进行比较。

C语言的题,都不难,帮忙解答,追加悬赏喔。麻烦把各个选项都解释解释最好...
第二题:这个union是表示,一块储存空间用short,long,char,三种类型来描述,所以c[0] 与i[0]一样的。这个程序是要打印s->c[0],printf("%x\\n", s ->c[0])这句里的%x表示打印的数字是十六进制的。由于c[0]里面放的是0x39,所以这里打印的正好是39.第三题:与第二题类似,注意这里求...

C语言二级考试,急,大哥们帮帮忙吧!
最后一行...按照C的规定...输出是遵循右运算...也就是说..先算右边的一个表达式..然后再算左边的...现在p是指向s〔1〕的..那么(p++)->a..因为p++是运算完才加1..那么p此刻还是指向1..则为3..那么打印为3...然后..p++..则指向..s〔2〕...这边注意..(++p)..先...

相似回答