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

  • 相关阅读:
    基本数据类型包装类
    LeetCode算法题-Robot Return to Origin(Java实现)
    LeetCode算法题-Two Sum IV
    LeetCode算法题-Set Mismatch(Java实现)
    LeetCode算法题-Maximum Average Subarray I(Java实现)
    LeetCode算法题-Average of Levels in Binary Tree(Java实现)
    LeetCode算法题-Sum of Square Numbers(Java实现)
    LeetCode算法题-Maximum Product of Three Numbers(Java实现)
    LeetCode算法题-Merge Two Binary Trees(Java实现)
    LeetCode算法题-Construct String from Binary Tree(Java实现)
  • 原文地址:https://www.cnblogs.com/zj1220/p/6151400.html
Copyright © 2020-2023  润新知