C语言学习|二维数组在函数中的传递(10.16)

例题

学生成绩表

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define STU_N 40
#define COURSE_N 3

void ReadScore (int score[][COURSE_N],long num[],int n);
void AverforStud (int score[][COURSE_N],int sumS[],float averS[],int n);
void AverforCourse (int score[][COURSE_N],int sumC[],float averC[],int n);
void Print (int score[][COURSE_N],int sumC[],float averC[],int sumS[],float averS[],long num[],int n);

int main()
{
    int score[STU_N][COURSE_N],sumS[STU_N],sumC[COURSE_N],n;
    float averS[STU_N],averC[COURSE_N];
    long num[STU_N];

    printf("Please input the total number of student:");
    scanf("%d",&n);
    ReadScore (score,num,n);
    AverforStud (score,sumS,averS,n);
    AverforCourse (score,sumC,averC,n);
    Print (score,sumC,averC,sumS,averS,num,n);

    return 0;
}
/*读入学号及各科成绩*/
void ReadScore (int score[][COURSE_N],long num[],int n)
{
    int i,j;
    for (i = 0; i < n; i++)
    {
        printf("Please input ID:\n");
        scanf("%ld",&num[i]);
        printf("please input the score:\n");

        for (j = 0; j < COURSE_N; j++)
            scanf("%d",&score[i][j]);
    }
    return;
}
/*求出每位学生成绩总和及平均成绩*/
void AverforStud (int score[][COURSE_N],int sumS[],float averS[],int n)
{
    int i,j,sum;
    for (i = 0; i < n; i++)
    {
        sum = 0;
        for (j = 0; j < COURSE_N; j++)
            sum += score[i][j];
        sumS[i] = sum;
        averS[i] = (float)sumS[i]/COURSE_N;
    }
    return;
}
/*求出各科成绩总和及平均成绩*/
void AverforCourse (int score[][COURSE_N],int sumC[],float averC[],int n)
{
    int i,j,sum;
    for (i = 0; i < COURSE_N; i++)
    {
        sum = 0;
        for (j = 0; j < n; j++)
            sum += score[j][i];
        sumC[i] = sum;
        averC[i] = (float)sumC[i]/n;
    }
    return;
}
/*输出成绩表*/
void Print (int score[][COURSE_N],int sumC[],float averC[],int sumS[],float averS[],long num[],int n)
{
    int i,j;
    printf("Counting results:\n");
    printf("Student's ID\tMT\tEN\tPH\tSUM\tAVER\n");
    for (i = 0; i < n; i++)
    {
        printf("%12ld\t",num[i]);
        for (j = 0; j < COURSE_N; j++)
            printf("%4d\t",score[i][j]);
        printf("%4d\t%5.1f",sumS[i],averS[i]);
        printf("\n");
    }
    printf("SumofCourse\t");
    for (j = 0; j < COURSE_N; j++)
        printf("%4d\t",sumC[j]);
    printf("\n");
    printf("AverofCourse\t");
    for (j = 0; j < COURSE_N; j++)
        printf("%4.1f\t",averC[j]);
    printf("\n");

    return;
}

求众数

int Mode (int score[],int n)
{
    int count[N] = {0},max = 0,i,grade,mode;
    for (i = 0; i < n; i++)
        count[score[i]]++; //count[]内元素序号表示分数,元素表示分数重复次数
    for (grade = 1; grade <= n-1; grade++)
    {
        if (max < count[grade]) //若某分数重复次数大于之前记录的重复次数max
        {
            max = count[grade];
            mode = grade; //用mode记录重复次数最大的分数
        }
    }
    return mode;
}

猜你喜欢

转载自blog.csdn.net/qq_42272723/article/details/83090892
今日推荐