【问题标题】:Creating patterns with multidimensional arrays in c在 c 中使用多维数组创建模式
【发布时间】:2016-05-19 04:51:10
【问题描述】:

所以我进退两难了。我的代码应该使用 for 循环和 5 x 5 二维数组输出数字的对角线模式。我要用零填充数组,并让 for 循环用我想要的数字填充它。到目前为止,我已经成功地做到了这一点。但是,它们的顺序错误。我希望 80 在右上角,5 在左下角。

输出应该是这样的:

0  0  0  0  80
0  0  0  40 0
0  0  20 0  0
0  10 0  0  0
5  0  0  0  0

当前源代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int the_array[5][5] =
    {
        { 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0 },
        { 0, 0, 0, 0, 0 },
    };

    int dia = 5;
    int x = 0;
    int y = 0;
    for (x = 4; x >= 0; --x)
    {
        for (y = 0; y < 5; ++y)
        {
            if (x == y)
            {
                the_array[x][y] = dia;
                dia *= 2;
            }

            printf(" %d ", the_array[x][y]);
        }
        printf("\n");
    }
    return 0;
}

【问题讨论】:

  • 将循环分成两遍。在第一遍中设置数组,然后在第二遍中打印它。这样您就可以更改迭代的顺序。第一个循环不需要嵌套,因为您只在 x == y 时设置它。

标签: c arrays multidimensional-array


【解决方案1】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
int the_array[5][5] =
{
 { 0, 0, 0, 0, 0 },
 { 0, 0, 0, 0, 0 },
 { 0, 0, 0, 0, 0 },
 { 0, 0, 0, 0, 0 },
 { 0, 0, 0, 0, 0 },
};

int dia = 5;
int x = 0;
int y = 0;
for (x = 4; x >= 0; --x)
{
         the_array[x][x] = dia;
         dia *= 2;
 }

    for(int i = 0; i < 5; i++)
    {
        for(int j = 4; j >= 0; j--)
        {
            printf("%d ", the_array[i][j]);
        }
        printf("\n");
    }
return 0;
}

您可以使用一个循环将the_array更改为:

80 0 0 0 0 
0 40 0 0 0 
0 0 20 0 0 
0 0 0 10 0 
0 0 0 0  5

然后用两个循环输出吧:

0 0 0 0 80 
0 0 0 40 0 
0 0 20 0 0 
0 10 0 0 0 
5 0 0 0 0  

【讨论】:

    【解决方案2】:

    删除内循环。你不需要它。在您的情况下,x 也可以用于 y(减法)! 也将 dia 设置为 80 的起始值,然后除以它。

    int main()
    {
        int the_array[5][5] =
        {
            { 0, 0, 0, 0, 0 },
            { 0, 0, 0, 0, 0 },
            { 0, 0, 0, 0, 0 },
            { 0, 0, 0, 0, 0 },
            { 0, 0, 0, 0, 0 },
        };
    
        int dia = 80;
    
        for (int x = 4; x >= 0; --x)
        {
            the_array[x][x] = dia;
            dia /= 2;
    
            for (int y = 0; y < 5; ++y)
            {
                printf(" %02d ", the_array[x][y]);
            }
            printf("\n");
        }
        return 0;
    }
    

    【讨论】:

      【解决方案3】:
      #include <stdio.h>
      
      int main(void){
          int the_array[5][5] = {{0}};
          int x, y, dia = 80;//start from 80
      
          for (x = 0; x < 5; ++x){//start from 0
              for (y = 0; y < 5; ++y){
                  if (x == 5 - y - 1) {
                      the_array[x][y] = dia;
                      dia /= 2;
                  }
                  printf(" %2d ", the_array[x][y]);
              }
              printf("\n");
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2016-02-17
        • 2018-05-19
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 2021-02-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多