//使用指针实现:
/*
使用数组实现10名学生的成绩录入,并输出这10名学生中成绩的
最高分
最低分
平均分
按照分数从大到小排序
思考:
如何实现从小到大排序?
如果学院有5个班,每个班30人,如何处理?
求所有成绩中的最高分是哪个班的,第几个学生,如何处理?
*/
#include <stdio.h>
#define NUM 10
int main(int argc, const char * argv[])
{
//使用指针实现10名学生的成绩录入,并输出这10名学生的成绩
int score[NUM];
int *p;
p= score;
for (int i = 0; i < NUM; i ++)
{
printf("请输入第%d名学生的成绩;",i + 1);
scanf("%d",p++);
}
p= score;
for (int i = 0; i < NUM; i ++)
{
printf("\n第%d名学生的成成绩为:%d",i + 1,*(p++));
}
//最高分
p= score;
int idh = 1;
int MAX = score[0];
for (int i = 0; i < NUM; i++)
{
if (*p > MAX)
{
MAX = *p;
idh =i + 1;
}
p++;
}
printf("\n\n第%d名学生为最高分为%d\n",idh,MAX);
//最低分
p= score;
int idl = 1;
int MIN = score[0];
for (int i = 0; i < NUM; i++)
{
if (*p < MIN)
{
MIN = *p;
idl =i + 1;
}
p++;
}
printf("\n第%d名学生为最低分为%d\n",idl,MIN);
//平均分
float sum = 0;
p= score;
for (int i = 0; i < NUM; i++) {
sum = sum + *(p++);
}
printf("\n学生平均成绩为:%f",sum/NUM);
//按照分数从大到小排序
p= score;
for (int i = 0; i < NUM - 1; i ++)
{
for (int j = i + 1; j < NUM; j ++)
{
int *q = &score[j];
if (*p <= *q)
{
int t =*p;
*p = *q;
*q = t;
}
}
p++;
}
p= score;
for (int i = 0; i < NUM; i ++)
{
printf("\n第%d名学生的成绩为:%d",i+1,*(p++));
}
return 0;
}