C语言设计报告

说明: xiaomin

课程名称     C语言程序设计    

题目名称根据条件进行学生成绩排名

学生学院                       

专业班级                         

学    号                       

学生姓名                       

指导教师                       

20##年4月18日

实训——根据条件进行学生成绩排名

一、实训的目的和要求

通过实践,了解学生成绩排名在C语言中的设计,并能成功设计出学生成绩的排序和统计不同成绩段中学生人数的代码。

二、实训的要求

1、  在项目报告中画出程序流程图,说明程序设计的算法,附上程序代码。

2、  在项目中说明知识点。

3、  在项目中报告中说明程序设计过程中的难点、解决办法及编程小结和体会。

三、实训的内容

1、 在函数中进行10个学生成绩从高到低排名sort(int a[10])。

2、  改进第一步的函数为sort(int a[],int n),进行n个学生成绩从高到低排名。

3、  改进第二步的函数为sort(int a[],int n,char style),将n个学生成绩从高到低排名,排名方式根据sort()函数的style参数进行,如style为’a’按升序排列,style为’d’按降序排列。

4、  分别统计不同成绩段中学生人数,A类90-100,B类80-89,C类70-79,D类60-69,E类为60分以下。

四、实训的过程

1、在函数中进行10个学生成绩从高到低排名sort(int a[10])。

(1)程序设计算法描述如下:

S1:输入10个学生的成绩

S2:i0

S3:把其中一个成绩分别与其他9-i个成绩比较大小,确定在这10个成绩中的位置

S4:i+1i

S5:当i<9时,转S3继续执行,否则输出排名后的10个成绩,算法停止。

(2)程序流程图如下:

C语言设计报告

(3)程序代码如下:

#include

void main()

{

     int a[10],i;

     int sort(int a[10]);

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

     {

         printf("请输入第%d个学生成绩是:",i+1);  /*输入成绩*/

         scanf("%d",&a[i]);

     }

     printf("==============================\n");

     printf("这些学生的分数成绩排名是:\n");

     sort(a);

}

int sort (int a[10])

{

  int i=0,j=0,t;                                  /*冒泡法排序*/

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

  {

     for(j=0;j<9;j++)                             /*进行9次循环,实现9趟比较*/

     {

      if(a[i]>a[j])                               /*相邻两个数比较*/

      {

       t=a[j];

       a[j]=a[i];

       a[i]=t;

      }

     }

  }

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

      {

       printf("第%d名的分数是: %d\n",i+1,a[i]);  /*输出成绩*/

      

      }

     return 0;

}

2、改进第一步的函数为sort(int a[],int n),进行n个学生成绩从高到低排名。

(1)程序设计算法描述如下:

S1:输入n个学生的成绩

S2:i0

S3:把其中一个成绩分别与其他n-1-i个成绩比较大小,确定在这n个成绩中的位置

S4:i+1i

S5:当i<n-1时,转S3继续执行,否则输出排名后的n个成绩,算法停止。

(2)程序流程图如下:

C语言设计报告

(3)程序代码如下:

#include

void main()

{

     int *a,i,n;

a=new int;

     printf("一共有学生n=");

     scanf("%d",&n);

     int sort(int a[],int n);

     for(i=0;i

     {

         printf("输入第%d个学生成绩是:",i+1);      /*输入成绩*/

         scanf("%d",&a[i]);

     }

     printf("============================\n");

     printf("这些学生的成绩排名是:\n");

     sort(a,n);

}

int sort (int a[],int n)

{

  int i=0,j=0,t;                                   /*冒泡法排序*/

    for(i=0;i

 {

  for(j=0;j

  {

   if(a[i]>a[j])

   {

    t=a[j];

    a[j]=a[i];

    a[i]=t;

   }

  }

 }

      for(i=0;i

  {

   printf("第%d名的分数是:%d\n ",i+1,a[i]);        /*输出成绩*/

  }

  return 0;

}

3、改进第二步的函数为sort(int a[],int n,char style),将n个学生成绩从高到低排名,排名方式根据sort()函数的style参数进行,如style为’a’按升序排列,style为’d’按降序排列。

(1)程序设计算法描述如下:

S1:输入n个学生成绩

S2:选择排列方式a or b,style为’a’按升序排列,style为’d’按降序排列

S3:把其中一个成绩分别与其他n-1-i个成绩比较大小,确定在这n个成绩中的位置

S4:i+1i

S5:当i<n-1时,转S3继续执行,否则输出排名后的n个成绩,算法停止。

(2)程序流程图如下:

C语言设计报告

(3)程序代码如下:

#include

#include

void main()

{

     int *a,i,n;

         a=new int;

     char style;

     int ascending(int a[],int n);

     int descending(int a[],int n);

     printf("一共有学生n=");

     scanf("%d",&n);

     int sort(int a[],int n,char style);

     for(i=0;i

     {

         printf("输入第%d个学生成绩是:",i+1);

         scanf("%d",&a[i]);

     }

     printf("============================\n");

     printf("请输入排序的方式,a为升序,b为降序:");

     style=getche();

     printf("这些学生的成绩排名是:\n ");

     sort(a,n,style);

     for(i=0;i

     {

      printf("%d\n",a[i]);

     }

   

}

int sort(int a[],int n,char style)

{int i=0,j=0,t;

   

     if(style=='a')

       

         for(i=0;i

         {

           for(j=0;j

          {

            if(a[i]

            {

           t=a[j];

           a[j]=a[i];

           a[i]=t;

            }

           }

         }

         if(style=='b')

      

       for(i=0;i

       {

         for(j=0;j

         {

          if(a[i]>a[j])

          {

           t=a[j];

           a[j]=a[i];

           a[i]=t;

          }

         }

       }

         return 0;

}

4、分别统计不同成绩段中学生人数,A类90-100,B类80-89,C类70-79,D类60-69,E类为60分以下。

(1)程序设计算法描述如下:

S1:i0,A0,B0,C0,D0,E0

S2:输入学生人数n

S3:输入学生成绩

S4:若大于等于90,小于等于100,则A+1A,然后转到S10

S5:若大于等于80,小于等于89,则B+1B,然后转到S10

S6:若大于等于70,小于等于79,则C+1C,然后转到S9

S7:若大于等于60,小于等于69,则D+1D,然后转到S9

S8:若小于60,则E+1E,然后转到S9

S9:i+1i

S10:当i≤n时,转S5继续执行,否则输出A、B、C、D、E。

(2)程序流程图如下:

(3)程序代码如下:

#include

void main()

{

     int *a,i,n;

     a=new int;

     int A=0;int B=0;int C=0;int D=0;int E=0;

     printf("一共有学生n=");

     scanf("%d",&n);

     int sort(int a[],int n);

     for(i=0;i

     {

         printf("输入第%d个学生成绩是:",i+1);

         scanf("%d",&a[i]);

     }

     for(i=0;i

     {

         if(a[i]<=100&&a[i]>=90)

             A=A+1;

         if(a[i]<90&&a[i]>=80)

             B=B+1;

         if(a[i]<80&&a[i]>=70)

             C=C+1;

         if(a[i]<70&&a[i]>=60)

             D=D+1;

         if(a[i]<60&&a[i]>0)

             E=E+1;

     }

     printf("得到A的同学人数为%d\n得到B的同学人数为%d\n得到C的同学人数为%d\n得到D的同学人数为%d\n得到E的同学人数为%d\n",A,B,C,D,E);

}

五、项目中的知识点

本实训的知识点主要有N-S流程图的制作,自定义函数,数组的应用,数组形式比较大少,for语句、if语句的运用,循环的嵌套,冒泡法排序等。

六、难点及解决办法

    在画N-S流程图过程中,边框线条不知道用哪种文字环绕形式,但经过多次尝试,终于找到了“浮于文字上方”比较好处理;在写代码过程中,有些代码不熟悉,需要不断地翻看书本,也有一些地方不知道如编写代码,只好向同学或到网上去请教。

七、学习总结

通过这次C语言的实训(也即考试),我加深了对C语言的理解,同时,能更加灵活地编写代码。在学习C语言的过程中,我遇到了不少不懂的问题,此时唯有上网寻求资料和求助。在这几周的C语言课程中,我学习到了不少C语言的知识,同时对C语言的兴趣也提升了不少。虽然我现在学的只是C语言的一小部分,但我会在以后的生活中,继续通过各种途径学习C语言。

相关推荐