第8章实验 数组

第8章实验 数组

 

  • 题目1:

学生成绩管理系统V1.0

某班有最多不超过30人(具体人数有键盘输入)参加某门课程的考试,参考例8.5、例8.9、例8.10,用一维数组做函数参数编程实现如下学生成绩管理:

  1. 录入每个学生的学号和考试成绩;

 

1、解题思路:

     先定义班里最多人数30。主函数中,定义类型。以n值输出人数,然后打印学号和成绩。在读入成绩,i初始化-1,do while进行循环输入,当输入负值时结束循环,返回人数。打印学号和成绩,for循环从0到n。

 

2、源代码:

#include <stdio.h>

#define N 30

扫描二维码关注公众号,回复: 12337573 查看本文章

 

int ReadScore(int score[],long num[]);

void PrintScore(int score[],long num[],int n);

int main()

{

    int score[N],n;

    long num[N];

    n = ReadScore(score,num);

    printf("Total students are %d\n:",n);

    PrintScore(score,num,n);

    return 0;

}

 

int ReadScore(int score[],long num[])

{

    int i=-1;

    do

    {

        i++;

        printf("Input student's ID and score:");

        scanf("%ld%d",&num[i],&score[i]);

    }while(num[i]>0&&score[i]>=0);

    return i;

}

 

void PrintScore(int score[],long num[],int n)

{

    int i;

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

    {

        printf("%10ld%4d\n",num[i],score[i]);

    }

}

3、程序运行效果截图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 题目2:

(2)、计算课程的总分和平均分;

 

1、解题思路:

  在1的基础上,Average进行原型声明。主函数中总分等于Aver*n,输出。在外层用for循环对一位数组score【i】累加求和,返回平均值。

 

2、源代码:

#include <stdio.h>

#define N 30

 

int Average(int score[],int n);

int ReadScore(int score[],long num[]);

void PrintScore(int score[],long num[],int n);

int main()

{

    int score[N],aver,sum,n;

    long num[N];

    n = ReadScore(score,num);

    aver=Average(score,n);

    sum=aver*n;

    printf("Total students are %d\n:",n);

    PrintScore(score,num,n);

    printf("Average score is %d\n",aver);

    printf("Sum score is %d\n",sum);

    return 0;

}

 

int Average(int score[],int n)

{

   int i,sum=0;

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

   {

       sum +=score[i];

   }

   return sum/n;

}

 

int ReadScore(int score[],long num[])

{

    int i=-1;

    do

    {

        i++;

        printf("Input student's ID and score:");

        scanf("%ld%d",&num[i],&score[i]);

    }while(num[i]>0&&score[i]>=0);

    return i;

}

 

void PrintScore(int score[],long num[],int n)

{

    int i;

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

    {

        printf("%10ld%4d\n",num[i],score[i]);

    }

}

3、程序运行效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 题目3:

(3)、按成绩由高到低排出名次表;

 

1、解题思路:

在1 的基础上,对数据排序进行原型声明。在外层,两次循环,第一个循环得到第一个成绩,第二次循环,对第一个成绩和后面的所有成绩进行比较,若之后成绩大于第一个,则进行交换(temp)学号和成绩,得到第一个对大数,依次循环,得出第二个的最大数,打印。

 

2、源代码:

#include <stdio.h>

#define N 30

 

int ReadScore(int score[],long num[]);

void DataSort(int score[],long num[],int n);

void PrintScore(int score[],long num[],int n);

int main()

{

    int score[N],n;

    long num[N];

    n = ReadScore(score,num);

    printf("Total students are %d:\n",n);

    DataSort(score,num,n);

    printf("Sorted score:\n");

    PrintScore(score,num,n);

    return 0;

}

 

int ReadScore(int score[],long num[])

{

    int i=-1;

    do

    {

        i++;

        printf("Input student's ID and score:");

        scanf("%ld%d",&num[i],&score[i]);

    }while(num[i]>0&&score[i]>=0);

    return i;

}

 

 

void DataSort(int score[],long num[],int n)

{

    int i,j,temp1,temp2;

    for(i=0;i<n-1;i++)

    {

        for(j=i+1;j<n;j++)

        {

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

            {

                temp1=score[j];

                temp2=num[j];

                score[j]=score[i];

                num[j]=num[i];

                score[i]=temp1;

                num[i]=temp2;

            }

        }

    }

}

 

void PrintScore(int score[],long num[],int n)

{

    int i;

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

    {

        printf("%10ld%4d\n",num[i],score[i]);

    }

    printf("\n");

}

3、程序运行效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

四、题目4:

(4)、按学号有小到大排出成绩表;

 

1、解题思路:

类似第三问,在条件if中,将score【i】的比较改为num【i】的比较,打印。

 

2、源代码:

#include <stdio.h>

#define N 30

 

int ReadScore(int score[],long num[]);

void DataSort(int score[],long num[],int n);

void PrintScore(int score[],long num[],int n);

int main()

{

    int score[N],n;

    long num[N];

    n = ReadScore(score,num);

    printf("Total students are %d:\n",n);

    DataSort(score,num,n);

    printf("Sorted score:\n");

    PrintScore(score,num,n);

    return 0;

}

 

int ReadScore(int score[],long num[])

{

    int i=-1;

    do

    {

        i++;

        printf("Input student's ID and score:");

        scanf("%ld%d",&num[i],&score[i]);

    }while(num[i]>0&&score[i]>=0);

    return i;

}

 

 

void DataSort(int score[],long num[],int n)

{

    int i,j,temp1,temp2;

    for(i=0;i<n-1;i++)

    {

        for(j=i+1;j<n;j++)

        {

            if(num[j]<num[i])

            {

                temp1=num[j];

                temp2=score[j];

                num[j]=num[i];

                score[j]=score[i];

                num[i]=temp1;

                score[i]=temp2;

            }

        }

    }

}

 

 

void PrintScore(int score[],long num[],int n)

{

    int i;

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

    {

        printf("%10ld%4d\n",num[i],score[i]);

    }

printf("\n");

}

 

 

 

 

 

 

 

 

 

 

 

3、程序运行效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

五、题目5:

(5)、按学号查询学生排名及其考试成绩;

 

1、解题思路:

在成绩排名之后,主函数调用。函数原型声明查找,外层循环直到输入的学号找到,返回i,名次为pos+1,因为i从0开始。

 

2、源代码:

#include <stdio.h>

#define N 30

 

int ReadScore(int score[],long num[]);

void DataSort(int score[],long num[],int n);

int LinSearch(long num[],long x,int n);

int main()

{

    int score[N],n,pos;

    long num[N],x;

    n = ReadScore(score,num);

    printf("Total students are %d:\n",n);

    DataSort(score,num,n);

    printf("Input the searching ID:");

    scanf("%ld",&x);

    pos=LinSearch(num,x,n);

 

    if(pos!=-1)

    printf("The score is %d and list is %d",score[pos],pos+1);

    else

        printf("Not Found!\n");

    return 0;

}

 

int ReadScore(int score[],long num[])

{

    int i=-1;

    do

    {

        i++;

        printf("Input student's ID and score:");

        scanf("%ld%d",&num[i],&score[i]);

    }while(num[i]>0&&score[i]>=0);

    return i;

}

 

 

void DataSort(int score[],long num[],int n)

{

    int i,j,temp1,temp2;

    for(i=0;i<n-1;i++)

    {

        for(j=i+1;j<n;j++)

        {

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

            {

                temp1=score[j];

                temp2=num[j];

                score[j]=score[i];

                num[j]=num[i];

                score[i]=temp1;

                num[i]=temp2;

            }

        }

    }

}

 

int LinSearch(long num[],long x,int n)

{

    int i;

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

    {

        if(num[i]==x)

        {

            return i;

        }

 

    }

 

    return -1;

}

 

3、程序运行效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

六、题目6:

(6)、按优秀(90-100)、良好(80-89)、中等(70-79)、及格(60-69)、不及格(0-59)5个类别,统计每个类别的人数以及所占的百分比;

 

1、解题思路:

在外层打印学号和成绩,for循环打印时if条件进行判断,符合条件的成绩计数,求百分比,打印。

 

2、源代码:

#include <stdio.h>

#define N 30

 

int ReadScore(int score[],long num[]);

void PrintScore(int score[],long num[],int n);

int main()

{

    int score[N],n;

    long num[N];

    n = ReadScore(score,num);

    printf("Total students are %d:\n",n);

    PrintScore(score,num,n);

    return 0;

}

 

int ReadScore(int score[],long num[])

{

    int i=-1;

    do

    {

        i++;

        printf("Input student's ID and score:");

        scanf("%ld%d",&num[i],&score[i]);

    }while(num[i]>0&&score[i]>=0);

    return i;

}

 

void PrintScore(int score[],long num[],int n)

{

    int i,a=0,b=0,c=0,d=0,h=0;

    float m,p,x,y,z;

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

    {

        if(score[i]>=90)

        {

            a++;

            m=((float)a / n) * 100;

 

        }

        else if(score[i]>=80)

        {

            b++;

            p=((float)b / n) * 100;

        }

        else if(score[i]>=70)

        {

            c++;

            x=((float)c / n) * 100;

        }

        else if(score[i]>=60)

        {

            d++;

            y=((float)d / n) * 100;

        }

        else

        {

            h++;

            z=((float)h / n) * 100;

        }

    }

        printf("Excellent students %d and percent %f%%. Good students %d and percent %f%%. Mid students %d and percent %f%%.Pass students %d and percent %f%%. Fail students %d and percent %f%%\n",a,m,b,p,c,x,d,y,h,z);

}

 

3、程序运行效果截图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

七、MOOC网

课程测试结果:

 

猜你喜欢

转载自blog.csdn.net/weixin_48450741/article/details/112464857
今日推荐