第10次作业

 1.有5名学生,每名学生有语文、数学和外语3门课的考试成绩。编程统计各学生的总分和平均分以及所有学生各科的平均分。要求成绩在程序中初始化,结果以表格的形式输出。    

#include<stdio.h>
#define M 5
#define N 5
void rscore(int score[M][N]);//成绩输入
void pscore(int score[M][N]);//成绩输出
void gekesum(int score[M][N],int sum[N]);//各科成绩总和 
void gekeave(int score[M][N],double ave[M]);//各科平均成绩
void mhave(int score[M][N],double ave[]);//每行平均成绩 
int main()
{
    int score[M][N]={0},j;
    double ave[N]={0};
    rscore(score);
    printf("       语文    数学    英语    总分    平均
");
    pscore(score);
    printf("平均    "); 
    mhave(score,ave);
    for(j=0;j<3;j++)
    {
      printf("%.2f	",ave[j]);    
    }
    return 0;
}
void rscore(int score[M][N])
{
    int i,j;
    for(i=0;i<M;i++)
    {
        printf("请输入第%d个人成绩:
",i+1);
        for(j=0;j<3;j++)
        {
            scanf("%d",&score[i][j]);
        }
    }
}
void pscore(int score[M][N])
{
    int i,j,m,sum[M]={0};
    double ave[M]={0};
    gekesum(score,sum);
    gekeave(score,ave);
    for(i=0;i<M;i++)
    {
        for(j=0;j<3;j++)
        {
            printf("	%d",score[i][j]);
        }
        printf("	%d",sum[i]);
        printf("	%.2f",ave[i]); 
        printf("
");
    }
}
void gekesum(int score[M][N],int sum[N])
{
    int j,i,s;
    for(i=0;i<M;i++)
    {
        s=0;
        for(j=0;j<3;j++)
        {
            s+=score[i][j];
        }
        sum[i]=s;
    }
}
void gekeave(int score[M][N],double ave[M])
{
    int j,i,sum;
    for(i=0;i<M;i++)
    {
        sum=0;
        for(j=0;j<3;j++)
        {
            sum+=score[i][j];
        }
        ave[i]=(double)sum/3;
    }
}
void mhave(int score[M][N],double ave[])
{
    int i,j,sum;
    for(j=0;j<3;j++)
    {
        sum=0;
        for(i=0;i<M;i++)
        {
            sum+=score[i][j];
        }
        ave[j]=(double)sum/N;
    }
}

2.求任意方阵每行、每列、两对角线上元素之和。

#include<stdio.h>
void printa(int num[3][3]); //输出方阵 
void hang(int num[3][3]); //求行
void lie(int num[3][3]); //求列
void dj1(int num[3][3]); //对角1
void dj2(int num[3][3]); //对角2
int main()
{
    int num[3][3]={{8,1,6},{3,5,7},{4,9,2}};
    int i,j;
    printa(num);
    hang(num);
    printf("
");
    lie(num);
    printf("
");
    dj1(num);
    dj2(num);
    return 0;
}
void printa(int num[3][3])
{
    int m,n;
    for(m=0;m<3;m++)
    {
        for(n=0;n<3;n++)
        {
            printf("%2d",num[m][n]);
        }
        printf("
");
    }
}
void hang(int num[3][3])
{
    int m,n,s;
    for(m=0;m<3;m++)
    {
        s=0;
        for(n=0;n<3;n++)
        {
            s+=num[m][n];
        }
        printf("第%d行的和为%d	",m+1,s);
    }
}
void lie(int num[3][3])
{
    int m,n,s;
    for(n=0;n<3;n++)
    {
        s=0;
        for(m=0;m<3;m++)
        {
            s+=num[m][n];
        }
        printf("第%d列的和为%d	",n+1,s);
    }
}
void dj1(int num[3][3])
{
    int m,n,s=0;;
    for(m=0;m<3;m++)
    {
        
        for(n=0;n<3;n++)
        {
            if(m==n)
            {
                s+=num[m][n];
            }
        }
    }
    printf("左上右下对角线的和为%d
",s);
}
void dj2(int num[3][3])
{
    int m,n,s=0;
    for(m=0;m<3;m++)
    {
        for(n=0;n<3;n++)
        {
            if(m+n==2)
            {
                s+=num[m][n];
            }
        }
    }
    printf("右上左下对角线的和为%d
",s);
}

二、实验总结

1.学习了二维数组,在定义时要有两个括号分别代表行列,行里的数组长度可以省去 但是建议还是写上的好;

2.每定义一个函数都要在后边注释上是干啥的,以方便检查;

3.写程序是要一个函数一个函数的写,每写完一个都要运行一下对不对,这样要比全部写完再检查错误方便;

4.这次作业第二题有一个难的地方就是左下到右上的对角线怎么来求,其实就是 行+列 的和相等,另一条就是行=列,还要弄清各科的平均分和每个人的平均分怎么求。

原文地址:https://www.cnblogs.com/zj1220/p/6151400.html