eg 5-11 matrix

/*
    已知一个4*4矩阵,(1)对角线元素之和与积。(2)求所有靠边的元素
    之和与积,(3)求所有不靠边的元素之和与积
    分析: 对于一个行列相同的二维数组,他有两条对角线,一条称为
    主对角线,另一条称为副对角线。主对角线上的元素下标特点是行列
    下标的值相等;
    副对角线上的元素下标特点是行列下标之和等于(行数-1);
    所有靠边元素下标特点是行下标等于零或者等于行数-1
    列下标等于零或者等于列数-1
    所有不靠边元素的特点是行下标不等于零也不等于行数-1,列下标不
    等于零也不等于列数-1
*/

#include 

int main()
{
    int n[4][4];
    int i,j;                                 //定义二维数组及其循环变量
    long int a=0,b=1,c=0,d=1,e=0,f=1;        ///依次对应:对角线元素之和与积
                                             ///所有靠边元素之和与积
                                             ///所有不靠边元素之和与积
    for(i=0;i<4;i++)                         //循环输入所有元素
    {
        printf("请输入第%d行\n",i+1);
        for(j=0;j<4;j++)
        scanf("%d",&n[i][j]);
    }
        printf("\n");

    for(i=0;i<4;i++)                          //循环输出所有元素
        for(j=0;j<4;j++)
        printf("%d ",n[i][j]);
        printf("\n");

    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
        {
            if(i==j||i+j==3)                  //判断对角线元素和 积
            {
                a+=n[i][j];
                b*=n[i][j];
            }

            if(i==0||i==3||j==0||j==3)        //所有靠边元素和 积
            {
                c+=n[i][j];
                d*=n[i][j];
            }

            if(i!=0&&i!=3&&j!=0&&j!=3)        //所有不靠边元素和 积
            {
                e+=n[i][j];
                f*=n[i][j];
            }
        }
    }
    printf("对角线元素的和%ld 积%ld\n",a,b);
    printf("所有靠边元素的和%ld 积%ld\n",c,d);
    printf("所有不靠边元素的和%ld 积%ld\n",e,f);

    return 0;
}
//1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16   数据可以一次直接输入

/*总结:这题出现的问题比较多:
        在思路上:1.根据所要求值定义变量  变量的数据类型:数组及其循环变量都为整型
                  2.所求得和积,由于其乘积后数字较大,所以要将其定义为长整型变量
                  3.最重要的是赋初值,计算和赋初值0,计算乘赋初值1    重要重要重要
                  4.语句问题:同属一个if语句里要判断的值,一定要加大括号,是符合语句
                  5.printf("");中的格式符一定要与所定义的数据类型相符,否则数据不对
*/

你可能感兴趣的:(C语言,c语言)