二维数组练习

1.将一个二维数组的行和列的元素进行互换,存到另一个数组中。

a,b

思路:

首先看一下a和b用二维数组分别将每行每列的值表示出来
一维数组可以认为就只能表示一行的信息,而每一行元素则为每一列的信息。
那么二维数组就可以认为第一个下标表示有多少行,第二个下标表示每一行中有多少列。
a数组:共有2行每行中各有3个元素。
b数组:共有3行每行中各有2个元素。
例如:我们要分别在这两个数组总取值为4的这个元素,分别用连个数组表示:
a[1][0]==4;b[0][1] == 4;,刚好a的行与b的列对应,a的列与b的行对应。

代码:外层循环行,内层循环列。

int main()
{
    int arr1[2][3] = {{1,2,3},{4,5,6}};
    //int arr2[3][2] = {{1,4},{2,5},{3,6}};
    int arr2[3][2] = {};
    
    for(int i = 0;i <= 1;i++)
    {
        for(int j = 0;j<=2;j++)
        {
            arr2[j][i] = arr[i][j];
        }
    }
    printf("\n");
}

2.将一个一维数组的周围都赋上值

思路:

1.定义一个二维数组
2.给该数组四周赋值
第一行所有元素赋值
第一行第一列赋值
每一行的最后一列赋值
最后一行所有元素赋值

int main()
{
    int nMap[10][10] = {0};
    for(int i = 0;i<10;i++)
    {
        for(int j = 0;j<10;j++)
        {
            //第一行和最后一行赋值
            if(i == 0|| i== 9)
            {
                nMap[i][j] = 1;
            }
            //每一行的第一列和最后一列赋值
            else if(j == 0 || j== 9)
            {
                nMap[i][j] = 1;
            }
        }
    }
    return 0;
}

3.求一个3×3的整形矩阵对角线元素之和。

思路:

  1. 定义一个二维数组
  2. 当两个下标相同时候则为对角线
int main()
{
    int nMap[10][10] = {0};
    int nSum = 0;
    for(int i =0;i<10;i++)
    {
        for(int j = 0;j<10;j++)
        {
            if(i == j)
            {
                nSum += nMap[i][j];
            }
        }
    }
    return 0;
}

4.打印图形

*
***
*****
*******
*****
***
*

思路:

  1. 先及那个该图形分为上下两个部分,递增的为一部份,递减的为一部份。
  2. 递增部分:具体看每一行,第一行有3个空格,一个星。第二行有2个空格,3个星。第三行有1个空格,5个星。第四行有没有空格,7个星。
  3. 递减部分:也是具体看每一行,第一行有1个空格,3个星。第二行有2个空格,3个星。第三行有3个空格,1个星。
    空格的规律:每一行为i,那么空格数位i

星的规律:每一行为i,那么星的数量为(7-2*i),当i为1时保证有5个星。

int main()
{
    //递增部分四层
    for(int i = 1;i<=4;i++)
    {
        for(int j = 1;j<=4-i;j++)
        {
            printf(" ");
        }
        //*数
        for(int k = 1;k<=2*i-1;k++)
        {
            printf("*");
        }
    }
    printf("\n");

    //递减部分三层
    for(int i = 1;i<=3;i++)
    {
        for(int j= 1;j<=i;j++)
        {
            printf(" ");
        }
        //*
        for(int k = 1;k<=7-2*i;k++)
        {
            printf("*");
        }
        printf("\n");
    }
}

5.打印杨辉三角

思路:
说明:

杨辉三角的每个边都为1
中间的每一个是它对应的左上角的值和正上方的值之和。

  1. 定义一个10×10的二维数组,将斜面和每一行中第一个元素都赋值为1
  2. 其他元素根据1中定义的值做加法得到。
    例如:int arrTem[10][10];arrTem[2][1] = arrTem[1][0]+arrTem[1][1];
int main()
{
    int arrTem[10][10] = {};
    for(int i = 0;i<10;i++)
    {
        //和99乘法表类似
        for(int j = 0;j<=i;j++)
        {
            if((j == 0)||(j == i))
            {
                arrTem[i][j] = 1;
                printf("%4d",arrTem[i][j]);
            }
            else{
                //每一个值是它对应的左上角的值和正上方值的和
                arrTem[i][j] = arrTem[i-1][j-1] + arrTem[i-1][j];
                printf("%4d",arrTem[i][j]);
            }
        }
        printf("\n");
    }
    return 0;
}
最后修改:2020 年 08 月 26 日
如果觉得我的文章对你有用,请随意赞赏