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

第十次作业

一、实验内容      

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

#include<stdio.h>
#define N 5
#define M 5
int main()
{
     int sum=0,i,j;
    double average1[5]={0},average2[5]={0},score[N][M]={{87,78,97},{86,72,79},{68,96,85},{74,83,95},{86,75,69}};
     printf("\t语文\t数学\t英语\t总分\t平均分\n"); 
    for(i=0;i<5;i++)
        {
            sum=0;
            for(j=0;j<5;j++)
            {
                sum=sum+score[i][j];
            }
        score[i][3]=sum;
        }
    for(i=0;i<3;i++)
        {
            sum=0;
            for(j=0;j<5;j++)
            {
                sum=sum+score[i][j];
            }
            average1[i]=(double)sum/5;
            sum=score[i][3];
        }
        printf("\n");
        for(i=0;i<5;i++)
        {
            sum=0;
            for(j=0;j<3;j++)
            {
                sum=sum+score[i][j];
            }
            average2[i]=(double)sum/3;
              sum=score[i][3];
        }
     for(i=0;i<5;i++)
    {
        printf("\n");
        for(j=0;j<4;j++)
        {
            printf("\t%.2f",score[i][j]);
        }
    
        printf("%d",score[i][3]);
        printf("\t%.2f",average2[i]);
     }
     printf("\n");
     for(i=0;i<3;i++)
     {
         printf("\t%.2f",average2[i]);
     }
         
    return 0;
}

技术分享

 

                          

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

#include<stdio.h>
#define N 4
#define M 4
void readNum(int num[N][M]);
void sumHorizontal(int num[N][M]);
void sumStand(int num[N][M]);
void sumXie1(int num[N][M]);
void sumXie2(int num[N][M]);
int main()
{
    int i,j,num[N][M];
    printf("请输入数组数据:");
    for(i=0;i<N;i++)
    {
        for(j=0;j<M;j++)
        {
            scanf("%d",&num[i][j]);
        }
    }
    for(i=0;i<N;i++)
    {
        for(j=0;j<M;j++)
        {
            printf("%d",num[i][j]);
            printf("\n");
        }
    }
    readNum(num);
    sumHorizontal(num);
    sumStand(num);
    sumXie1(num);
    printf("\t");
    sumXie2(num);
    return 0;
}
void readNum(int num[N][M])
{
    int i,j;
    for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                printf("%2d",num[i][j]);
            }
            printf("\n");
        }
}
void sumHorizontal(int num[N][M])
{
    int i,j,sum;
    for(i=0;i<N;i++)
    {
        sum=0;
        for(j=0;j<M;j++)
        {
            sum+=num[i][j];
        }
        printf("第%d行元素之和为%d\n",i+1,sum);
    }
    
}
void sumStand(int num[N][M])
{
    int i,j,sum;
    for(j=0;j<M;j++)
    {
        sum=0;
        for(i=0;i<N;i++)
        {
            sum+=num[i][j];
        }
    printf("第%d列元素之和为%d\n",j+1,sum);
    }    
}
void sumXie1(int num[N][M])
{
    int i,j,sum;
    sum=0;
        for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                if(i==j)
                {
                    sum+=num[i][j];
                }
            }    
        }
        printf("左上到右下的对角线的和为%d",sum);
}
void sumXie2(int num[N][M])
{
    int i,j,sum;
    sum=0;
        for(i=0;i<N;i++)
        {
            for(j=0;j<M;j++)
            {
                if(i==M-1)
                {
                    sum+=num[i][j];
                }
            }    
        }
        printf("右上到左下的对角线的和为%d",sum);
}

技术分享

二、实验总结

1、为了程序的通用性,可以使用#define预处理宏定义命令;

2、第一个程序本来使用的五行三列的二维数组,但是就要写两个并列的小循环,为了程序的简洁改用五行五列;

3、注意数组不要越界;

4、变量赋初值问题;

5、for循环时各个表达式之间用分号隔开。

 

第十次作业