c语言求助 输入n个学生的考试成绩,求出其中最高分、最低分以及超过平均分的人数(使用动态分配)

求c语言 大神求助

你想输入多少输入多少,我就输入4个分数测试。

#include<stdio.h>
#include<malloc.h>
typedef struct stud
{
    int score;
    struct stud *next;
}STD;
STD *insertScore(STD *stdHead,STD *stdTail);//录入成绩
void printfSTD(STD *stdHead);//打印链表数据
int *tjSTD(STD *stdHead);//统计 返回[3]数组,分别表示最高分 最低分  超过平均分人数

int main()
{
    int *redata=NULL;
    STD *stdHead=(STD *)malloc(sizeof(STD));
    stdHead->next=NULL;
    STD *stdTail=NULL;

    do{
        stdTail=insertScore(stdHead,stdTail);
    }while(stdTail);

    printfSTD(stdHead);

    redata=tjSTD(stdHead);
    printf("最高分:%d,最低分:%d,超过平均分的人数:%d\n",redata[0],redata[1],redata[2]);
    return 0;
}

void printfSTD(STD *stdHead)//打印数据
{
    while(stdHead->next!=NULL)
    {
        printf("%d\n",stdHead->next->score);
        stdHead=stdHead->next;
    }

}
int *tjSTD(STD *stdHead)//统计 返回[3]数组,分别表示最高分 最低分  超过平均分人数
{
    int max=-1,min=-1,sum=0,count=0,*reData;
    float ave;
    STD *stdHeadSave=stdHead;
    reData=(int *)malloc(sizeof(int)*3);
    while(stdHead->next!=NULL)
    {
        if(max==-1 || max<stdHead->next->score)
            max=stdHead->next->score;
        if(min==-1 || min>stdHead->next->score)
            min=stdHead->next->score;
        sum=sum+stdHead->next->score;
        count++;
        stdHead=stdHead->next;
    }
    ave=(float)sum/count;
    printf("总人数:%d,平均分:%f\n",count,ave);
    count=0;
    stdHead=stdHeadSave;
    while(stdHead->next!=NULL)
    {
        if(stdHead->next->score>ave)
            count++;//大于平均分的人数
        stdHead=stdHead->next;
    }
    reData[0]=max;reData[1]=min;reData[2]=count;
    return reData;
}
STD *insertScore(STD *stdHead,STD *stdTail)//录入成绩
{
    int score;
    printf("输入成绩(输入-1结束录入):");
    scanf("%d",&score);
    if(score==-1)
        return NULL;
    STD *stdNew=(STD *)malloc(sizeof(STD));
    stdNew->score=score;
    stdNew->next=NULL;
    if(stdHead->next==NULL)
        stdHead->next=stdNew;
    else
        stdTail->next=stdNew;
    stdTail=stdNew;
    return stdTail;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-10
#include<stdio.h>
int main()
{
    int n,a[100],count=0,i;
    double avg;
    printf("请输入学生个数:");
    scanf("%d",&n);
    printf("请输入学生考试成绩:\n");
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    int max=a[0],min=a[0];
    int sum = 0;
    for(i=0;i<n;i++)
    {
        if(max<a[i])
            max = a[i];
        if(min>a[i])
            min = a[i];
        sum += a[i];
    }
    avg = sum / n;
    for(i=0;i<n;i++)
    {
        if(a[i]>avg)
            count++;
    }
    printf("最高分:%d\n",max);
    printf("最低分:%d\n",min);
    printf("超过平均分的人数:%d\n",count);
    return 0;
}

随便写的,没有经过测试。自己测试一下,然后修改一下!

本回答被提问者采纳
第2个回答  2018-02-25
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char * argv[]){

int n = 0,  x = 0;
int *p;
//n用于取输入的数值,x用于空间的数量创建


printf("输入数值,输入非数值即停止:\n");
while( scanf("%d",&n) == 1 ){

getchar(); //获取缓冲区回车 或者 空格,即清空缓存

x++;

if( x == 1 )
p = (int *)malloc( sizeof(int) * x ); //x是建立空间的数量,如果是1,就分配空间,如果大于1,就重新扩充分配
else
p = (int *)realloc(p, sizeof(int) * x);
//realloc自行百度解释

p[x-1] = n; //赋值

}

int i;
int temp_1 = p[0] , temp_2 = p[0] ,temp_3 = 0;
double average;

for( i=0;i<x;i++ ){

temp_1 = temp_1 > p[i] ? temp_1:p[i]; //temp_1永远是最大的
temp_2 = temp_2 < p[i] ? temp_2:p[i]; //temp_2永远是最小的

temp_3 = temp_3 + p[i]; //temp_3累加所有分数


}

n = i; //将数组数量赋值给其他变量,用于记录数组长度

average = (double)temp_3 / n; //计算平均分


printf("最高分:%d   最低分:%d   平均分:%lf\n",temp_1,temp_2,average);
printf("超过或等于平均分的分数为:\n");



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

if( p[i] >= average ) //大于或等于平均分就输出
printf("%d ",p[i]);

}
printf("\n");

free(p); //释放空间
p = NULL; //将指针指向空指针

return 0;
}

第3个回答  2018-02-24
#include <stdio.h>
#include <malloc.h>
#include <memory.h>

typedef struct sss 
{
float score;
struct sss  *next;
}SC;

int main()
{
int count=0,above=0,i=0;
float tmp,maxs=0,mins=0,total=0,avr=0;
SC *Head=NULL,*r=NULL,*p=NULL;
Head = (SC*)malloc(sizeof(SC));
r=p=Head;
printf("please input score(end with -1 ):\n");

while(1) 
{
scanf("%f",&tmp);
if(tmp==-1)
{
break;
}
p = (SC*)malloc(sizeof(SC));
p->score = tmp;
p->next = NULL;
r->next = p;
r=p;
total+=tmp;
if (count==0)
{
maxs =mins = tmp;
}
if (tmp>maxs)
{
maxs=tmp;
}
if (tmp<mins)
{
mins =tmp;
}
count++;

r = Head->next;
while (r)
{
if (r->score>avr)
{
above++;
}
r = r->next;
}

printf("Max Score [%.2f],Min Score [%.2f],above aver [%d]students\n",maxs,mins,above);
return 0;
}
please input score(end with -1 ):
60
56
76
78
89
76
89
67
-1
Max Score [89.00],Min Score [56.00],above aver [8]students
Press any key to continue

c语言求助 输入n个学生的考试成绩,求出其中最高分、最低分以及超过平均...
redata=tjSTD(stdHead); printf("最高分:%d,最低分:%d,超过平均分的人数:%d\\n",redata[0],redata[1],redata[2]); return 0;

编程C语言 输入n个学生成绩,计算他们的平均值并输出所有高于平均的学生...
average=sum\/n;\/\/计算学生平均分 printf("\\n%d个学生的平均成绩为:%.2f\\n",n,average);printf("\\n===大于平均成绩的学生成绩如下===\\n");\/\/输出大于平均分的学生成绩情况 for(i=0;i<n;i++){ if(score[i]>average)printf("%d个学生的成绩: %.2f\\n",i+1,score[i]);} return ...

用C语言编写一个程序,输入N个学生的学号和成绩,求平均成绩,并输出其 ...
} printf("%d %.2lf\\n",s[max].id,s[max].score); printf("%d %.2lf\\n",s[min].id,s[min].score);}int main()

c语言 输入n个学生,以及每个学生的数学,英语成绩,然后统计每门课程的...
printf("总成绩 平均分 最高分 最低分\\n");for (i = 0; i < 2; ++i){ printf("%-8.2f%-8.2f%-8.2f%-8.2f\\n", sum[i], avg[i], max[i], min[i]);} }

...的最高分、最低分、平均分以及超过平均分的人数
scanf("%d",&a[i]);max=a[0];for(i=0;i<n;i++)if(a[i]>max) max=a[i];printf("the max is %d\\n",max);min=a[0];for(i=0;i<n;i++)if(a[i]<min) min=a[i];printf("the min is %d\\n",min);for(i=0;i<n;i++)sum=sum+a[i];aver=(double)sum\/n;print...

先输入某个班学生人数n,再输入这n个学生的c语言期末成绩,输出最高分并...
FAIL 60 \/*及格分数下限*\/struct student { int no; \/*学号*\/ float score; \/*成绩*\/};void inputScore (struct student stu[], int n) { \/*录入学生成绩*\/ int i,error; for (i = 0; i < n; i ++) { do { printf ("请输入第%d名学生信息:\\n",i+1)...

c++编写程序录入学生成绩并且求各科平均分和每科最高分
回答:同学,你这是问题吗?

如何用c语言统计学生成绩
printf("最高分:%d\\n", max);printf("最低分:%d\\n", min);return 0;} 这个程序首先要求用户输入学生人数,然后根据学生人数创建一个动态大小的数组scores来存储学生成绩。接下来,程序使用for循环获取用户输入的学生成绩,并在过程中计算总分、最高分和最低分。最后,程序计算平均分,并输出统计...

C语言:输入10个学生的单科成绩,求出其中的最高分、最低分以及超过平_百...
float a[10],min,max,avg;\/\/max表示最高分,min表示最低分,avg表示平均分 printf("请输入10位学生的分数\\n"); printf("***\\n"); for(i=0;i<=9;i++) { printf("请输入一位学生的分数:"); scanf("%f",&a[i]); } max=min=avg=a[...

VB:求出n个学生一门课程中的最高成绩、最低成绩及高于平均成绩的...
先用一个循环把N个学生的成绩装入数组a(n)中,然后在用一个for循环把最高分和最低分找出,同时把这门课的平均分求出,最后用一个for循环把高于平均分的人数求出 部分代码:我这里就假如是在文件中读出了的(d:\\student.txt里面放的学生的成绩)依具体情况而定 open "d:\\student.txt" for input as...

相似回答