数组和指针

来源:互联网 发布:重庆医疗程序员招聘 编辑:程序博客网 时间:2024/05/18 23:25

//使用数组实现10名学生的成绩录入,并输出这10名学生中成绩的
//最高分
//最低分
//平均分
//按照分数从大到小排序
//思考:
//如何实现从小到大排序?
//如果学院有5个班,每个班30人,如何处理?
//求所有成绩中的最高分是哪个班的,第几个学生,如何处理?
#include<stdio.h>
#define NUM 3
#define M 2
#define N 3
//录入函数
void input(int *array,int count);
//输出函数
void put(int *array,int count);
//最高分
int arrayMax(int *array,int count);
//最低分
int arrayMin(int *array,int count);
//排序
void arraySort(int *array,int count,int order);
int Maxscore(int *cp[N],int count);
void main()
{
 int score[NUM];
 int classscore[M][N];
 for(int i = 0; i < M;i ++)
  for(int j = 0; j < N;j ++)
  {
   scanf("%d",classscore[i][j]);
  }
 for(int i = 0; i < M;i ++)
  for(int j = 0; j < N;j ++)
  {
   printf("第%d个班的第%d个学生的成绩是%d",i,j,classscore[i][j]);
  }
    Maxscore(classscore,M);
 //录入函数
 printf("请输入成绩\n");
 input(score,NUM);
 //输出函数
 put(score,NUM);
 //最高分
 printf("最高成绩是:%d\n",arrayMax(score,NUM));
 //最低分
 printf("最低成绩是:%d\n",arrayMin(score,NUM));
 //排序
 arraySort(score,NUM,1);
 //平均成绩
 int sum = 0;
 for(int i = 0;i < NUM;i ++)
 {
  sum += score[i];
 }
 printf("学生的平均成绩是%d",sum/NUM);
}
void input(int *array,int count)
{
 for(int i = 0; i < count; i ++)
 {
  printf("第%d个学生的成绩是:",i+1);
  scanf("%d",array);
  array ++;
 }
}
void put(int *array,int count)
{
 for(int i = 0; i < count; i ++)
 {
  printf("第%d个学生的成绩是%d\n",i+1,*array);
  array ++;
 }
}
int arrayMax(int *array,int count)
{
 int max = *array;
 array ++;
 for(int i = 0; i < count ; i ++)
 {
  if(max < *array)
  {
   max = *array;
   array ++;
  }
 }
 return max;
}
int arrayMin(int *array,int count)
{
 int min = *array;
 array ++;
 for(int i = 0; i < count ; i ++)
 {
  if(min > *array)
  {
   min = *array;
   array ++;
  }
 }
 return min;
}
//排序
void arraySort(int *array,int count,int order)
{
 //order是1,降序排列
 if(order)
 {
  for(int i = 0; i < count-1 ; i ++)
  
   for(int j = i + 1; j < count; j ++)
     {
    if(*(array+i) < *(array+j))
    {
     int t = *(array+i);
     *(array+i) = *(array+j);
     *(array+j) = t;
    }
   
   }
 }
 //升序排序
 else
  {
  for(int i = 0; i < count-1 ; i ++)
  
   for(int j = i + 1; j < count; j ++)
     {
    if(*(array+i) > *(array+j))
    {
     int t = *(array+i);
     *(array+i) = *(array+j);
     *(array+j) = t;
    }
   
   }
 }

}
//如果学院有5个班,每个班30人,如何处理?
//求所有成绩中的最高分是哪个班的,第几个学生,如何处理?
int Maxscore(int cp[][N],int count)
{
 int max = cp[0][0];
 int c,n;
 for(int i = 0; i < count;i ++)
 {
  for(int j = 0; j < N ;j ++)
  {
   if(max < *(cp[i]+j)
   {
    max = *(cp[i]+j)
    c = i;
    n = j;
   }
  }
 }
 printf("第%d班的第%d个学生的成绩最高,是%d",c,n,*cp[c][n]);
}