Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何根据用户的输入将二维矩阵的元素打印成矩形_C_Multidimensional Array - Fatal编程技术网

C 如何根据用户的输入将二维矩阵的元素打印成矩形

C 如何根据用户的输入将二维矩阵的元素打印成矩形,c,multidimensional-array,C,Multidimensional Array,我在我们学院的一次评估中遇到了这个问题。我的朋友都帮不了我。我甚至检查了所有领先的在线平台,以获得我想要的输出标准。但是没有用,所以我想把我的问题发布在堆栈溢出中 我请求观看此标签的人帮助我。尽管我的评估已经完成,但我急切地想解决这个问题,但我做不到 #include <stdio.h> int main() { int a[4][4] = {{1, 2, 3, 4}, {5, 6, 7, 8},

我在我们学院的一次评估中遇到了这个问题。我的朋友都帮不了我。我甚至检查了所有领先的在线平台,以获得我想要的输出标准。但是没有用,所以我想把我的问题发布在堆栈溢出中

我请求观看此标签的人帮助我。尽管我的评估已经完成,但我急切地想解决这个问题,但我做不到

#include <stdio.h>

int main()
{

     int a[4][4] = {{1, 2, 3, 4},
                    {5, 6, 7, 8},
                    {9, 10, 11, 12},
                    {13, 14, 15, 16}};

     int k, l, m, n, o, r;

     int temp[4][4] = {0};
     printf("Enter index of row & column: ");

     int p, q;
     scanf("%d %d", &p, &q);

     for (int i = p; i < 4; i++)
     {
          for (int j = q; j < 4; j++)
          {
               temp[i][j] = a[i][j];
               // initial given index number to left_most number
          }
          k = i + 1, l = 4 - q;

          for (k; k <= l; k++)
          {
               temp[k][l] = a[k][l];
               //rightmost element to bottom
          }
          m = k - 1, n = l - 1;

          for (n; n >= q; n--)
          {
               temp[m][n] = a[m][n];
               //bottomright to left elements upto the column index provided by user
          }
          o = m, r = q;

          for (o; o >= i + 1; o--)
          {
               temp[o][r] = a[o][r];
               //bottomleft to initial index element
          }
          break;
     }

     for (int i = 0; i < 4; i++)
     {
          for (int j = 0; j < 4; j++)
          {

               //if the element is zero then priting a space else printing the number
               if (temp[i][j] == 0)
               {
                    printf(" ");
               }

               else
               {
                    printf("%d ", temp[i][j]);
               }
          }
          printf("\n");
     }
     return 0;
}
我的代码仅适用于示例输入和以下列


因此,我需要帮助,了解如何使我的代码能够处理用户提供的任何输入,它必须打印出零(0)形状。

对于初学者来说,如果任务只是输出原始数组的子数组,则无需声明辅助数组

C语言中的一种简单方法如下所示

#include <stdio.h>

void rectangle_pattern( size_t n, int a[][n], size_t row, size_t col )
{
    for ( size_t i = row; i < n; ++i )
    {
        if ( i == row || i == n - 1 )
        {
            for ( size_t j = col; j < n; j++ )
            {
                printf( "%2d ", a[i][j] );
            }
        }
        else
        {
            printf( "%2d", a[i][col] );
            if ( col != n - 1 ) printf( "%*d", ( int )( 3 * ( n - col - 1 ) ), a[i][n-1] );
        }
        putchar( '\n' );
    }
}

int main(void) 
{
    enum { N = 4 };
    int a[N][N]= 
    { 
        {  1,  2,  3,  4 },
        {  5,  6,  7,  8 }, 
        {  9, 10, 11, 12 }, 
        { 13, 14, 15, 16 } 
    };

    size_t row = 0, col = 0;
    
    rectangle_pattern( N, a, row, col );
    
    putchar( '\n' );
    
    row = 0, col = 1;
    
    rectangle_pattern( N, a, row, col );
    
    putchar( '\n' );

    row = 0, col = 2;
    
    rectangle_pattern( N, a, row, col );
    
    putchar( '\n' );

    row = 0, col = 3;
    
    rectangle_pattern( N, a, row, col );
    
    putchar( '\n' );

    return 0;
}

函数声明使用可变长度数组作为参数。您可以更改函数声明,将参数声明为具有固定大小的数组。

这个问题有一个非常简洁的解决方案

  for (int r = 0; r < numrows; r++) {
      for (int c = 0; c < numcols; c++) {
          if (r >= p && c >= q && 
             (c == q || c == numcols - 1 || r == p || r == numrows - 1)){
             printf("%2d ",a[r][c]);
          }
          else {
             printf("  ");
          }
       }
       printf("\n");
   }
for(int r=0;r=p&c>=q&&
(c==q | | c==numcols-1 | | r==p | | r==numrows-1)){
printf(“%2d”,a[r][c]);
}
否则{
printf(“”);
}
}
printf(“\n”);
}

<> > <代码> NUROSUS=4 < /COD>和 NoCOLSS=4 < /Calp>

。C++为C++语言,更适合C语言编程。我离开了C++标签,但您可能想删除它。Visual Studio代码和C++14与这个问题完全没有关系,所以我删除了它们的标记。谢谢你,先生。我是堆栈溢出社区的新手。很抱歉,其他输入的输出应该是什么样子?我们所要做的就是使用给定的代码,而您自己也承认它不起作用。这使得很难确定代码应该做什么。例如,10,3的输出应该是什么?非常感谢。你的回答很有用,非常感谢。你的回答很有用。
 1  2  3  4 
 5        8
 9       12
13 14 15 16 

 2  3  4 
 6     8
10    12
14 15 16 

 3  4 
 7  8
11 12
15 16 

 4 
 8
12
16 
  for (int r = 0; r < numrows; r++) {
      for (int c = 0; c < numcols; c++) {
          if (r >= p && c >= q && 
             (c == q || c == numcols - 1 || r == p || r == numrows - 1)){
             printf("%2d ",a[r][c]);
          }
          else {
             printf("  ");
          }
       }
       printf("\n");
   }