第十次实验

一、实验内容

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

代码:

# include <stdio.h>
# define M 5
# define N 3
int main()
{
    int score[M][N],i,j,sum,sum1[M],sum2;
    double ave1[M],ave2[N];
    printf("请输入每位学生的语文,数学,英语成绩
");
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++)
        {
            scanf("%d
",&score[i][j]);
        }
    }
    for(i=0;i<M;i++)
    {
        sum=0;
        for(j=0;j<N;j++)
        {
            sum=sum+score[i][j];
        }
        sum1[i]=sum;
        ave1[i]=(double)sum/N;
    }
    for(i=0;i<N;i++)
    {
        sum2=0;
        for(j=0;j<M;j++)
        {
            sum2=sum2+score[j][i];
        }
        ave2[i]=(double)sum2/M;
    }
    printf("	语文	数学	英语	总分	平均分
");
    for(i=0;i<M;i++)
    {
        printf("学生%d	",i+1);
        for(j=0;j<N;j++)
        {
            printf(" %d	",score[i][j]);
         } 
         printf("%d	%.2f",sum1[i],ave1[i]);
         printf("
");
    }
    for(i=0;i<N;i++)
    {
          printf("	%.2f",ave2[i]);
    }
    return 0;
}

程序运行结果:

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

代码:

# include <stdio.h>
# define M 100
int main()
{
    int i,j,sum1,sum2,sum3,sum4,m,num[M][M];
    printf("请输入方阵的行数(列数)
");
    scanf("%d",&m);
    printf("请输入方阵中的数字
");
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            scanf("%d",&num[i][j]);
        }
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            printf("%d ",num[i][j]);
        }
        printf("
");
    }
    for(i=0;i<m;i++)
    {
        sum1=0;
        for(j=0;j<m;j++)
        {
            sum1=sum1+num[i][j];
        }
        printf("第%d行的数之和为%d
",i+1,sum1);
    }
    for(j=0;j<m;j++)
    {    
        sum2=0;
        for(i=0;i<m;i++)
        {
            sum2=sum2+num[i][j];
        }
        printf("第%d列的数之和为%d
",j+1,sum2);
    }
    sum3=0;
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            if(i==j)
            {
                sum3=sum3+num[i][j];
            }
        }
    }
    printf("对角线上的数之和为%d
",sum3);
    sum4=0;
    for(i=0;i<m;i++)
    {
        for(j=0;j<m;j++)
        {
            if(i+j==m-1)
            {
                sum4=sum4+num[i][j];
            }
        }
    }
    printf("副对角线上的数之和为%d
",sum4);
    return 0;
 } 

程序运行结果:

二、实验总结

  1. 在二维数组中的行数可以省略,列不可以省略。
  2. 在计算二维数组的行数、列数、对角线是要注意对sum赋初值的位置,不同位置会出现不同的结果。
  3. 数组一般与循环密不可分,在一维数组的输入与输出时,用一层循环来实现,在二维数组的输入与输出时,用两层循环来实现,即用外层循环来控制行数,用内层循环来控制列数。
  4. 二维数组的存储是以一维数组的形式进行存储与输出。
原文地址:https://www.cnblogs.com/1997zjx/p/6151751.html