下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:85 65.5 69 95.5 87 55 62.5 75则高于平均分的学生人数为4(平均分为74.312500)。请改正程序中的错误,使它能得到正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include <stdio.h>include <conio.h>define N 20int fun(f

题目

下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如输入8名学生的成绩:

85 65.5 69 95.5 87 55 62.5 75

则高于平均分的学生人数为4(平均分为74.312500)。

请改正程序中的错误,使它能得到正确结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include <stdio.h>

include <conio.h>

define N 20

int fun(float *S,int n,float *aver)

{

/*************found*************/

int ave,t=0;

int count=0,k,i;

for(k=0;k<n;k++)

t+=s[k];

ave=t/n;

for(i=0;i<n;i++)

/*************found***************/

if(s[i]<ave)

count++;

/*************found*************/

aver=ave;

return count;

}

main()

{

float S[30],aver;

int m,i;

clrscr();

printf("\nPlease enter m:");

scanf("%d",&m);

printf("\nPlease enter%d mark:\n",m);

for(i=0;i<m;i++)

scanf("%f",s+i);

printf("\nThe number of students:%d\n",

fun(S,m,&aver));

printf(“AVe=%f\n”,aver);

}


相似考题
更多“下列给定程序中,函数fun()的功能是:从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值 ”相关问题
  • 第1题:

    学生记录由学号和成绩组成,N名学生的数据已放入主函数中的结构体数组中,请编写函数fun,其功能是:把分数最低的学生数据放入b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数:

    注意:部分源程序在文件PROGl.C中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数flm的花括号中填入你编写的若干语句。


    正确答案:
    【考点分析】本题考查:查找结构体数组中的最小数据,需要通过for循环语句和if条件语句来完成。【解题思路】本题中第一个循环语句的作用是遍历数组求出最低分数,第二个循环语句的作用是将数组中的元素与最低分比较,查找是否存在与最低分相等的成绩。

  • 第2题:

    某学生的记录由学号、8门课成绩和平均分组成,学号和 8门课的成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。

    例如,若学生的成绩是85.5,76,69.5,85,91,72,64.5, 87.5,则他的平均分应当是78.875。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include<stdio.h>

    define N 8

    typedef struct

    { char num [10];

    double s[N];

    double ave;

    } STREC;

    void fun()

    {

    }

    main()

    {

    STREC s={"GA005",85.5,76,69.5,85,91, 72,64.5,87.5);

    int i;

    fun (&s);

    printf("The %s' s student data:\n",s.num)/ /*输出学号*/

    for(i=0;i<N; i++)

    printf("%4.1f\n", s.s[i]);

    /*输出各科成绩*/

    printf("\nave=%7.3f\n",s.ave);

    /*输出平均分*/

    }


    正确答案:void fun(STREC *p) { int i; p->ave=0.0; for(i=0;iN;i++) p->ave=p->ave+p->s[i]; /*求各门成绩的总和*/ p->ave=p->ave/N; /*求平均分*/ }
    void fun(STREC *p) { int i; p->ave=0.0; for(i=0;iN;i++) p->ave=p->ave+p->s[i]; /*求各门成绩的总和*/ p->ave=p->ave/N; /*求平均分*/ } 解析:本题考查自己定义形参的相关知识点,程序流程是这样的,在fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参STREC *p,此时,引用成员的方式可以是用指向运算符即p->ave和 p->s[i],当然,也可用(*p).ave和(*p).s[i]。

  • 第3题:

    给定程序MODll.C中函数fun的功能是:对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。

    请改正函数fun中指定部位的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)t=(STU*)calloc(sizeof(sTu)m); (2)t[k]=b[j];
    (1)t=(STU*)calloc(sizeof(sTu),m); (2)t[k]=b[j]; 解析:本题中函数的功能是按学习成绩从高到低的顺序找出前m(m≤10)名学生。利用循环结构实现对定义的结构体中的成绩域进行排序。

  • 第4题:

    给定程序MODll.C中,函数fun的功能是:在有n名学生,2门课成绩的结构体数组std中,计算出第l门课程的平均分,作为函数值返回。例如,主函数中给出了4名学生的数据,则程序运行的结果为:第l门课程的平均分是:76.125000

    请改正函数fun中指定部位的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:


    正确答案:
    (1)doublesum改为doublesunl=0.0;(2)for(i=0;i<2;i*)改为细(i=0;i<n;i++);(3)sum+=ad[i].scom[1]改为sum+=羽[i].score[0];【考点分析】主要考察桩时变量初始化,c语言里临时变量不初始化,它的默认值是不确定的一个值。再者,考察C语言约定数组的下标是从0开始的。【解题思路】(1)doubleⅫ改为double8am=0.0;累加求和需要初始化累加结果的临时变量。(2)for(i_0;i<2;i++)改为for(i_0;i<n;i++);共有11个学生的成绩,需要累加所有学生第一门课的成绩。(3)sum+.std[i].BCOl.e[1]改为8am+=8td[i].score[0];第1门课程的平均分,c语言的下标是从0开始的。

  • 第5题:

    m个人的成绩存放在score数组中,请编写函数fun(),它的功能是将高于平均分的人数作为函数值返回,将高于平均分的分数放在叩所指的数组中。

    例如,当score数组中的数据为24,35,88,76,90,54, 59,66,96时,函数返回的人数应该是5,up中的数据应为88, 76, 90, 66, 96。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

    试题程序:

    include <conio.h>

    include <stdio.h>

    include <string.h>

    int fun(int score[],int m,int up[])

    {

    }

    main()

    {

    int i,n,up[9];

    int score[9]={24,35,88,76,90,54,

    59,66,96};

    clrscr();

    n=fun(score,9,up);

    printf("\nup to the average score are:");

    for(i=0;i<n;i++)

    printf("%d",up[i]);

    }


    正确答案:int fun(int score[]int m int up[]) { int ij=0; float av=0.0 for(i=0;im;i++) av=av+score[i]/m; /*求平均值*/ for(i=0;im;i++) if(score[i]>av) /*如果分数高于平均分则将此分数放入up数组中*/ up[j++]=score[i]; return j; /*返回高于平均分的人数*/ }
    int fun(int score[],int m, int up[]) { int i,j=0; float av=0.0 for(i=0;im;i++) av=av+score[i]/m; /*求平均值*/ for(i=0;im;i++) if(score[i]>av) /*如果分数高于平均分,则将此分数放入up数组中*/ up[j++]=score[i]; return j; /*返回高于平均分的人数*/ } 解析:该题第1个循环的作用是求出平均分av,第2个循环的作用是找出高于平均分的成绩并存入up数组中。