第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;
}