69,336
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define N 3
int ScoreSort(int *score,int *pid) //按成绩由低到高排序
{
int i,j,t,s;
for (i=0;i<N-1;i++)
{
for(j=0;j<N-i-1;j++)
{
if(*(score+j)>*(score+j+1))
{
t=*(score+j);
*(score+j)=*(score+1+j);
*(score+1+j)=t;
s=*(pid+j);
*(pid+j)=*(pid+1+j);
*(pid+1+j)=s;
}
}
}
}
int ScoreCalculate(int *score,int *max,int *min,int *aver) //计算最高成绩、最低成绩及平均成绩
{
int total=0;
int i;
for(i=0;i<N;i++)
if(*(score+i)>*max)
*max=*(score+i);
for(i=0;i<N;i++)
if(*(score+i)<*min)
*min=*(score+i);
for(i=0;i<N;i++)
total=*(score+i)+total;
*aver=total/N;
}
int StudentSort(int *score,int *num) //计算分数在60~90分学生的人数
{
int i;
for(i=0;i<N;i++)
{
if(60<*(score+i)<90)
(*num)++;
}
}
int BinarySearch(int *score,int *pid,int id0) //通过折半查找,输出对应学号的成绩
{
int find=0,high=N,low=0,mid;
while(find==0&&(low<=high))
{
mid=(low+high)/2;
if(id0==*(pid+mid))
find=mid;
else
if(id0<*(pid+mid))
high=mid-1;
else
low=mid+1;
}
if(find==0)
printf("Not found.");
else
printf("Id:%d , Score:%d",*(pid+mid),*(score+mid));
}
int Graph(int *score,int *pid) //用图表方式输出成绩
{
int i,j;
for(i=0;i<35;i++)
printf("-");
printf("\n");
printf("|\tid\t|\tscore\t|\n");
for(i=0;i<35;i++)
printf("-");
printf("\n");
for(i=0;i<N;i++)
printf("|\t%d\t|\t%d\t|\n ",*pid++,*score++);
for(i=0;i<35;i++)
printf("-");
}
int main()
{
int *id,aid[N],*score,ascore[N];
int max=0, min=0, aver=0,num=0;
int i,id0;
for(i=0;i<N;i++)
{
printf("Enter the %dth student's id and score:\n",i+1);
scanf("%d%d",&aid[i],&ascore[i]);
}
id=aid ;
score=ascore ;
ScoreSort(score, id);
printf(" ID SCORE\n");
for(i=0;i<N;i++)
printf(" %d %d\n",*id++,*score++);
ScoreCalculate(score, &max, &min, &aver);
printf("\n The highest score: %d\n The lowest score: %d\n The average score: %d\n",max, min, aver);
StudentSort(score, &num);
printf(" The number of the students who scored 60~90: %d",num);
printf("\nEnter the ID you want to search:\n");
scanf("%d",&id0);
BinarySearch(score, id, id0);
printf("\n");
Graph(score, id);
}