首页 > 代码库 > 第十次作业

第十次作业

一、实验内容      

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

#include<stdio.h>
#define N 5
#define M 5
void readScore(int score[N][M]);
void printScore(int score[N][M]);
void sumScore(int score[N][M],int sum[M]);
void aveScore1(int score[N][M],double ave[N]);
void aveScore2(int score[N][M],double ave[M]);
int main()
{
    int score[N][M]={0},j;
    double ave[M];
    readScore(score);
    printf("       语文\t数学\t英语\t总分\t平均分\n"); 
    printScore(score);
    printf("平均分  ");
    aveScore2(score,ave);
    for(j=0;j<3;j++)
    {
        printf("%.2f\t",ave[j]);    
     } 
    return 0;        
}
void readScore(int score[N][M])
{
    int i,j;
    for(i=0;i<N;i++)
    {
        printf("请输入第%d个人成绩\n",i+1);  
        for(j=0;j<3;j++)
        {
            scanf("%d",&score[i][j]);
        }
    }
}
void printScore(int score[N][M])
{
     int i,j,sum[N]={0};
     double ave[N]={0};
     sumScore(score,sum);
     aveScore1(score,ave);
     for(i=0;i<N;i++)
     {
         for(j=0;j<3;j++)
        {
            printf("\t%d",score[i][j]);
        }
        printf("\t%d",sum[i]);
        printf("\t%.2f",ave[i]);
        printf("\n");
      } 
}
void sumScore(int score[N][M], int sum[M])
{
    int i,j,h;
     for(i=0;i<N;i++)
     {
        h=0;
        for(j=0;j<3;j++)
        {
            h+=score[i][j];
        }
        sum[i]=h;
     }
}
void aveScore1(int score[N][M],double ave[N])
{
    int i,j,h;
     for(i=0;i<N;i++)
     {
        h=0;
        for(j=0;j<3;j++)
        {
            h+=score[i][j];
        }
        ave[i]=(double)h/3;
     }    
}
void aveScore2(int score[N][M],double ave[M])
{
    int i,j,h;
     for(j=0;j<3;j++)
     {
        h=0;
        for(i=0;i<N;i++)
        {
            h+=score[i][j];
        }
        ave[j]=(double)h/N;
     }    
}

技术分享

 

                        

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

# include <stdio.h>
# define M 50
int main()
{
    int i,j,sum1,sum2,sum3,sum4,m,num[M][M];
    printf("请输入方阵的宽度\n");
    scanf("%d",&m);
    printf("请输入方阵中的数字\n");
    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("\n");
    }
    for(i=0;i<m;i++)
    {
        sum1=0;
        for(j=0;j<m;j++)
        {
            sum1=sum1+num[i][j];
        }
        printf("第%d行的数之和为%d\n",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\n",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\n",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\n",sum4);
    return 0;
 } 

技术分享

实验总结:

1.二维数组中元素个数=行数*列数。

2.在声明函数的二维数组形参时,可以省略第一维的长度,但不能省略数组第二维的长度。

3.二维数组的存储是以一维数组的形式进行存储与输出。

4.注意数组越界问题

5.定义变量时要分清是int型还是double型,如果需要赋初值的一定记得赋初值。

第十次作业