C语言设计学生成绩处理系统

学生成绩处理

功能描述:假设将学生的成绩存入数组。
(1)能从键盘输入学生的成绩存入数组
(2)能求出学生所有成绩的最高分
(3)能输出所有低于平均分的成绩
(4)将同学的分数按从小到大的排序,并输出
(5)能在所有分数中查找有无指定的分数值
(6)退出

程序要求:
1、要求每个功能编写一个函数,所有结果在函数返回后在主函数输出
2、(1-5)个功能中,至少有一项功能使用指针处理
3、程序中的5个功能可以反复使用,直到选择(6)退出,结束整个程序的运行。

#include<stdio.h>
#include<stdlib.h>

char menu[]="1、输入成绩\n2、显示最高分\n3、显示所有低于平均分的成绩\n4、按升序排序成绩并输出\n5、查找某一成绩\n6、退出\n请选择一个菜单:";
int n=0;
float *score=NULL;

void input()
{
int i;

if(score)
{
free(score);
score=NULL;
}
printf("请输入成绩个数:");
scanf("%d",&n);
score=(float*)calloc(n,sizeof(float));
printf("请输入%d个成绩:",n);
for(i=0;i<n;i++)
scanf("%f",(score+i));
printf("\n");
}

void showhighest()
{
float high;
int i;

if(!score)
{
printf("还没有输入成绩,不能进行此项操作\n\n");
return ;
}
high=*score;
for(i=1;i<n;i++)
{
if(*(score+i)>high)
high=*(score+i);
}
printf("最高分是:%.1f\n\n",high);
}

void showlessthanaver()
{
float aver=0;
int i;

if(!score)
{
printf("还没有输入成绩,不能进行此项操作\n\n");
return ;
}
for(i=0;i<n;i++)
aver+=*(score+i);
aver/=n;
printf("这%d个成绩的平均分是%.1f,小于平均分的成绩有:",n,aver);
for(i=0;i<n;i++)
{
if(*(score+i)<aver)
printf("%.1f ",*(score+i));
}
printf("\n\n");
}

void sortandoutput()
{
int i,j;
float t;

if(!score)
{
printf("还没有输入成绩,不能进行此项操作\n\n");
return ;
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(*(score+j)>*(score+j+1))
{
t=*(score+j);
*(score+j)=*(score+j+1);
*(score+j+1)=t;
}
}
}
printf("按从小到大排序后的成绩是:");
for(i=0;i<n-1;i++)
printf("%.1f ",*(score+i));
printf("%.1f\n\n",*(score+n-1));
}

void searchscore()
{
int i,c=0;
float s;

if(!score)
{
printf("还没有输入成绩,不能进行此项操作\n\n");
return ;
}
printf("请输入要查找的成绩:");
scanf("%f",&s);
printf("分数%.1f在成绩数组中共出现了",s);
for(i=0;i<n;i++)
{
if(s==*(score+i))
c++;
}
printf("%d次\n\n",c);
}

void processmenu(int m)
{
switch(m)
{
case 1:
input();
break;
case 2:
showhighest();
break;
case 3:
showlessthanaver();
break;
case 4:
sortandoutput();
break;
case 5:
searchscore();
break;
case 6:
if(score)
{
free(score);
score=NULL;
}
exit(0);
break;
default:
printf("无法处理的菜单命令\n\n");
break;
}
}

int main()
{
int m;

while(1)
{
printf("%s",menu);
scanf("%d",&m);
processmenu(m);
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-06-25
#include<stdio.h>
#include<stdlib.h>
char menu[]="1、输入成绩\n2、显示最高分\n3、显示所有低于平均分的成绩\n4、按升序排序成绩并输出\n5、查找某一成绩\n6、退出\n请选择一个菜单:";
int n=0;
float *score=NULL;
void input()
{
    int i;
    if(score)
    {
        free(score);
        score=NULL;
    }
    printf("请输入成绩个数:");
    scanf("%d",&n);
    score=(float*)calloc(n,sizeof(float));
    printf("请输入%d个成绩:",n);
    for(i=0; i<n; i++)
        scanf("%f",(score+i));
    printf("\n");
}
void showhighest()
{
    float high;
    int i;
    if(!score)
    {
        printf("还没有输入成绩,不能进行此项操作\n\n");
        return ;
    }
    high=*score;
    for(i=1; i<n; i++)
    {
        if(*(score+i)>high)
            high=*(score+i);
    }
    printf("最高分是:%.1f\n\n",high);
}
void showlessthanaver()
{
    float aver=0;
    int i;
    if(!score)
    {
        printf("还没有输入成绩,不能进行此项操作\n\n");
        return ;
    }
    for(i=0; i<n; i++)
        aver+=*(score+i);
    aver/=n;
    printf("这%d个成绩的平均分是%.1f,小于平均分的成绩有:",n,aver);
    for(i=0; i<n; i++)
    {
        if(*(score+i)<aver)
            printf("%.1f ",*(score+i));
    }
    printf("\n\n");
}
void sortandoutput()
{
    int i,j;
    float t;
    if(!score)
    {
        printf("还没有输入成绩,不能进行此项操作\n\n");
        return ;
    }
    for(i=0; i<n-1; i++)
    {
        for(j=0; j<n-1-i; j++)
        {
            if(*(score+j)>*(score+j+1))
            {
                t=*(score+j);
                *(score+j)=*(score+j+1);
                *(score+j+1)=t;
            }
        }
    }
    printf("按从小到大排序后的成绩是:");
    for(i=0; i<n-1; i++)
        printf("%.1f ",*(score+i));
    printf("%.1f\n\n",*(score+n-1));
}
void searchscore()
{
    int i,c=0;
    float s;
    if(!score)
    {
        printf("还没有输入成绩,不能进行此项操作\n\n");
        return ;
    }
    printf("请输入要查找的成绩:");
    scanf("%f",&s);
    printf("分数%.1f在成绩数组中共出现了",s);
    for(i=0; i<n; i++)
    {
        if(s==*(score+i))
            c++;
    }
    printf("%d次\n\n",c);
}
void processmenu(int m)
{
    switch(m)
    {
    case 1:
        input();
        break;
    case 2:
        showhighest();
        break;
    case 3:
        showlessthanaver();
        break;
    case 4:
        sortandoutput();
        break;
    case 5:
        searchscore();
        break;
    case 6:
        if(score)
        {
            free(score);
            score=NULL;
        }
        exit(0);
        break;
    default:
        printf("无法处理的菜单命令\n\n");
        break;
    }
}
int main()
{
    int m;
    while(1)
    {
        printf("%s",menu);
        scanf("%d",&m);
        processmenu(m);
    }
    return 0;
}