zoukankan      html  css  js  c++  java
  • 结构体应用统计学生成绩

     

        设计一个程序,统计一个班(最多有35)的学生成绩,要求能实现如四个功能:

     (1)由键盘输入每个学生的学号和四门课程的成绩。

     (2)计算每个学生的平均分和总分。

     (3)按总分从高到低排出名次,并按名次输出每个学生的情况,包括:学号、各科成绩、平均分和总分。

     (4)根据用户要求输出某门课程(由键盘输入课程号)成绩在90分以上(90)且总分在前五名的学生情况,包括:学号、各科成绩、平均分和总分。

     具体要求如下:

     (1)每个功能为一个独立的函数。

     (2)所有的输入之前都要有提示。

     方法说明:

     首先,在主函数中定义以下几个数组:

     num[35]   整型一维数组,依次(按输入的顺序)存放学生的学号。

     a[35][6]  实型二维数组,其中的每一行依次(按输入的顺序)存放一个学生的四门课程(课程号分别为1234)的成绩、平均分与总分。

     order[35] 整型一维数组,按名次存放学生情况的输入序号,即order[k]存放第k+1(C语言中数组下标是从0开始)学生情况的输入序号。

     然后依次调用四个功能函数。

    #include<stdio.h>
    #include
    <conio.h>
    #define M 35  /*调试时可将此数值该得小一些*/
    #define N 6
    int number=0;

    void input(int num[M],float a[M][N])
    {
     
    int k=0,n;
     
    float a0,a1,a2,a3;
     printf(
    "请输入学生信息:\n");
     printf(
    "学号\t课程[1]\t课程[2]\t课程[3]\t课程[4]\n");
     scanf(
    "%d%f%f%f%f",&n,&a0,&a1,&a2,&a3);
     
    while(n>=0 && k<35)
     
    {
         number
    ++;
         num[k]
    =n;
         a[k][
    0]=a0;
         a[k][
    1]=a1;
         a[k][
    2]=a2;
         a[k][
    3]=a3;
         k
    ++;
         scanf(
    "%d%f%f%f%f",&n,&a0,&a1,&a2,&a3);
     }

    }



    void count(float a[M][N])
    {
     
    int k;
     
    for(k=0;k<N;k++)
       
    {a[k][5]=a[k][0]+a[k][1]+a[k][2]+a[k][3];
        a[k][
    4]=a[k][5]/4;}

    }


    void sort(float a[M][N],int order[M])
    {
     
    int i,j,k,n,temp;
     
    float d;
     
    for(i=0;i<M;i++)
      order[i]
    =i;
     
    for(i=0;i<M;i++)
      
    {
       n
    =order[i];d=a[n][5];k=i;
       
    for(j=i+1;j<M;j++)
       
    {
             n
    =order[j];
             
    if(a[n][5]>d)
             
    {
                 d
    =a[n][5];k=j;
             }

      }

      
    if(k!=i)
       
    {temp=order[i];order[i]=order[k];order[k]=temp;}
      }

      printf(
    "学生信息排序后结果为:\n");
      printf(
    "名次\t学号\t课程[1]\t课程[2]\t课程[3]\t课程[4]\t平均分\t总分\n");
      
    for(i=0;i<number;i++)
      
    {
            k
    =order[i];
            printf(
    "第%d名\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",i+1,k+1,a[k][0],a[k][1],a[k][2],a[k][3],a[k][4],a[k][5]);
      }

    }


    void serch(int num[M],float a[M][N],int order[M])
    {
     
    int m=0,i,j,k,flag=0;
     
    while(m<1 || m>4)
     
    {
         printf(
    "请输入课程号(1或2或3或4):");
         scanf(
    "%d",&m);
     }

     printf(
    "学号\t课程[1]\t课程[2]\t课程[3]\t课程[4]\t平均分\t总分\n");
     
    for(i=0;i<5;i++)
     
    {
      k
    =order[i];
      
    if(a[k][m-1]>=90)
      
    {
       printf(
    "%d\t",num[k]);
       flag
    =1;
       
    for(j=0;j<N;j++)
             printf(
    "%.2f\t",a[k][j]);
       printf(
    "\n");
      }

     }

     
    if(flag==0)printf("无学生信息!\n");
    }



    void main()
    {
     
    int num[M]={0};
     
    float a[M][N]={0};
     
    int order[M];
     
    char flag;
     input(num,a);
     count(a);
     sort(a,order);
     printf(
    "是否需要查询?(y/n):");
     getchar();
     scanf(
    "%c",&flag);
     
    while(flag=='Y'||flag=='y')
     
    {
         serch(num,a,order);
       printf(
    "是否需要查询?(y/n):");
         getchar();
       scanf(
    "%c",&flag);
     }

    getch();
    }

  • 相关阅读:
    201671010456-张琼 实验三作业互评与改进
    阅读《构建之法》后的相关问题
    个人作业-软件工程实践总结
    团队作业第二次—项目选题报告
    结对第二次—文献摘要热词统计及进阶需求
    结对第一次—原型设计(文献摘要热词统计)
    第一次作业-准备篇
    个人作业——软件工程实践总结作业
    团队作业第二次—项目选题报告
    结对第二次—文献摘要热词统计及进阶需求
  • 原文地址:https://www.cnblogs.com/qixin622/p/629263.html
Copyright © 2011-2022 走看看