c语言练习题2

来源:互联网 发布:c语言实现银行家算法 编辑:程序博客网 时间:2024/04/28 18:43

1、将学生成绩存储在数组中,并用函数调用的形式实现学生成绩的输入与输出、求最高分、最低分、平均分、排序

#include<stdio.h>
#define NUM 10

//输入学生成绩
void arrayinput(int * array,int count)
{
   int i;

   printf("输出成绩:\n")
   for (i=0;i<count;i++)
   {
      printf("请输入第%d个学生的成绩:",i+1);
      scanf("%d",array++);
   }
}
 
//求最高分
 int arrayMax(int * array,int count )
{
   int i;
   int max=*array;

   for(i=1;i<count;i++)
     {
       if(max<*(++array))
       max=*array;
     }

   return max;
 
}

 

//求最低分
int arrayMin(int * array,int count)
{
   int i;
   int min=*array;

   for(i=1;i<count;i++)
     {
        if(min>*(++array))
          min=*array;
     }

   return min;
}

 

//求平均分
float averscore(int array[],int count)
{
   int i;
   int sum=0;

   for(i=0;i<count;i++)
     sum+=array[i];

   return sum/count;

}

 

//排序
void arraySort(int array[],int count,int order) //order为0是降序排列,为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;
                    }
                }
            }

        }

}


//输出成绩
void arrayprint(int * array,int count)
{
   int i;
   for(i=0;i<count;i++)
   printf("%d\n",array[i]);
}

 

int main(int argc,const char * argv[])
{
   int score[NUM];
   arrayinput(score,NUM);

   arrayprint(score,NUM);

   printf("10个成绩中最高分是%d\n",arrayMax(score,NUM));

   printf("10个成绩中最低分是%d\n",arrayMin(score,NUM));

   printf("平均成绩是%f\n",averscore(score,NUM));

   arraySort(score,NUM,1);

   printf("\n从大到小排序为:\n");

   arrayprint(score,NUM);

   return 0;


}

 

2、实现学生信息的结构体定义
     姓名
     学号
     年龄
     成绩

     定义10名学生的信息,
      通过控制台录入这10名学生信息,求
      这10名学生中的最高分的姓名和分数, 最低分的姓名和分数,平均分。(提示:结构指针)

 #include<stdio.h>
#include<string.h>
#define NUM 10
typedef struct _Student{
 char name[20];
 int number;
 int age;
 int score;
}student;

void maxscore(student st[],int count ) //求最高分
{
   int i;
   student *pstu=st;
   int max=pstu->score;
   student *head;
   for(i=0;i<count;i++)
   {
     if(max<=(pstu->score))
     {
        max=pstu->score;
        head=pstu;
     }
     
    pstu++;
   }

   printf("最高分学生的姓名是:%s,分数为:%d\n",head->name,head->score);
}


void minscore(student st[],int count )//求最低分
{
   int i;
   student *pstu=st;
   int min=pstu->score;
   student *head;
   for(i=0;i<count;i++)
   {
     if(min>=(pstu->score))
     {
       min=pstu->score;
       head=pstu;
     }
    
    pstu++;
   }
   printf("最低分学生的姓名是:%s,分数为:%d\n",head->name,head->score);
}

int averscore(student st[],int count)//求平均分
{
   int i;
   int sum=0;
   for(i=0;i<count;i++)
   sum+=st[i].score;
   return sum/count;

}

int main(int argc,const char *argv[])
{
    student stu[NUM];

    student *pstu;

    int i;

    printf("请输入学生信息:\n");

    for(i=0;i<NUM;i++)
   {
       printf ("请输入第%d个学生姓名 学号 年龄 成绩:\n",i+1);

       scanf ("%s %d %d %d",stu[i].name,&stu[i].number,&stu[i].age,&stu[i].score);
    }

    pstu=stu;

    for(i=0;i<NUM;i++)

    {
       printf("学生姓名:%-10s 学号:%-4d 年龄:%-4d 成绩:%-4d\n",stu[i].name,stu[i].number,stu[i].age,stu[i].score);
 }

 
  maxscore(stu,NUM);

  minscore(stu,NUM);

  printf("平均成绩是:%d\n",averscore(stu,NUM));

  return 0;
 }
 

 

 

 



      

原创粉丝点击