第九次上机报告

来源:互联网 发布:windows.old还原win10 编辑:程序博客网 时间:2024/06/04 23:51

任务1:
某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理:
(1)录入每个学生的学号和考试成绩;
(2)计算课程的总分和平均分;
(3)按成绩由高到低排出名次表;
(4)按学号由小到大排出成绩表;
(5)按学号查询学生排名及其考试成绩;
(6)按优秀(90~100)、良好(70~89)、及格(60~69)、不及格(0~59)5个类别,统计每个类别的人数及其所占的百分比;
(7)输出每个学生的学号、考试成绩,课程总分和平均分。
我的程序:

#include<stdio.h>   #define N 30    int main()   {       int n;      long number[N];       float score[N];      void input(long number[],float score[],int n);       void ave(float score[],int n);      void list(long number[],float score[],int n);       void search(long number[],float score[],int n);       void rate(float score[],int n);       printf("输入学生人数:\n");       scanf("%d",&n);       input(number,score,n);       ave(score,n);      list(number,score,n);        search(number,score,n);       rate(score,n);       return 0;  }  void input(long number[],float score[],int n)   {       int i;       printf("请输入学号和成绩:\n");      for(i=0;i<n;i++)       {            scanf("%ld,%f",&number[i],&score[i]);       }   }  void ave(float score[],int n)   {       int i;       float sum=0;       for(i=0;i<n;i++)       {          sum=sum+score[i];       }  printf("总分:%f\n",sum);    printf("平均分:%.1f\n",sum/n);   }  void list(long number[],float score[],int n)   {       int i,j;       float temp;       long m;       printf("成绩表:\n");      for(i=1;i<n;i++)           for(j=0;j<n-i;j++)               if(number[j]>number[j+1])               {                   m=number[j];                   temp=score[j];                  number[j]=number[j+1];                  score[j]=score[j+1];                   number[j+1]=m;                   score[j+1]=temp;               }       for(i=0;i<n;i++)           printf("%ld,  %.0f\n",number[i],score[i]);         printf("名次表:\n");      for(i=1;i<n;i++)           for(j=0;j<n-i;j++)               if(score[j]>score[j+1])               {                   m=score[j];                   temp=number[j];                  score[j]=score[j+1];                  number[j]=number[j+1];                   score[j+1]=m;                   number[j+1]=temp;               }       for(i=n-1;i>=0;i--)           printf("%ld,  %.0f\n",number[i],score[i]);   }  void search(long number[],float score[],int n)   {       int i,j,ln=0;      float temp;       long m,sn;      for(i=1;i<n;i++)           for(j=0;j<n-i;j++)              if(score[j]<score[j+1])               {                  temp=score[j];                   m=number[j];                  score[j]=score[j+1];                   number[j]=number[j+1];                   score[j+1]=temp;                   number[j+1]=m;               }       printf("请输入您想查询学生学号:\n");      scanf("%ld",&sn);       for(i=0;i<n;i++)      {   ++ln;          if(number[i]==sn)              printf("学号 %ld 名次 %d,其考试成绩 %.0f\n",sn,ln,score[i]);        }  }  void rate(float score[],int n)   {       int a=0,b=0,c=0,d=0,i;       float r1,r2,r3,r4;      for(i=0;i<n;i++)       {           switch((int)score[i]/10)           {               case 10: case 9:              a=a+1;              break;               case 8:case 7:              b=b+1              ;break;                           case 6:              c=c+1;              break;               default:              d=d+1;               break;           }       }       r1=(100*a*1.0)/n;         r2=(100*b*1.0)/n;      r3=(100*c*1.0)/n;        r4=(100*d*1.0)/n;          printf("优秀\t良好\t及格\t不及格\n");      printf("%d\t%d\t%d\t%d\n",a,b,c,d);       printf("%.2f%%\t%.2f%%\t%.2f%%\t%.2f%%\n",r1,r2,r3,r4);  }  
截图:


----------------------分割线----------------------

任务2:
从键盘输入5个整数存入一维数组中,输出最大的数,再按反序输出(要求用指针访问数组元素)

我的程序:

#include<stdio.h>      void main()    {        int a[5],max,i;        for(i=0;i<=4;i++)        scanf("%d",a+i);            max=*(a+0);          for(i=1;i<=4;i++)        if(*(a+i)>max)        max=*(a+i);        printf("max=%d\n",max);        for(i=4;i>=0;i--)        {            printf("%d ",*(a+i));        }     }    
截图: