【问题标题】:Create a basic matrix in C (input by user !)在 C 中创建一个基本矩阵(由用户输入!)
【发布时间】:2011-02-16 02:40:33
【问题描述】:

我试图让用户在矩阵中输入他们想要的列数和行数,然后在矩阵中输入值...我将让他们一次插入一行数字.

我怎样才能创建这样的功能?

#include<stdio.h>
main(){

int mat[10][10],i,j;

for(i=0;i<2;i++)
  for(j=0;j<2;j++){
  scanf("%d",&mat[i][j]);
  } 
for(i=0;i<2;i++)
  for(j=0;j<2;j++)
  printf("%d",mat[i][j]);

}

这适用于输入数字,但它会将它们全部显示在一行中...这里的问题是我不知道用户想要多少列或行,所以我无法打印出 %d %d % d 以矩阵形式...

有什么想法吗?

谢谢:)

【问题讨论】:

    标签: c matrix


    【解决方案1】:
    //R stands for ROW and C stands for COLUMN:
    
    //i stands for ROW and j stands for COLUMN:
    
    #include<stdio.h>
    
    int main(){
    
        int M[100][100];
    
        int R,C,i,j;
    
        printf("Please enter how many rows you want:\n");
    
        scanf("%d",& R);
    
        printf("Please enter how column you want:\n");
    
        scanf("%d",& C);
    
        printf("Please enter your matrix:\n");
    
        for(i = 0; i < R; i++){
    
            for(j = 0; j < C; j++){
    
                scanf("%d", &M[i][j]);
    
            }
    
            printf("\n");
    
        }
        for(i = 0; i < R; i++){
    
            for(j = 0; j < C; j++){
    
                printf("%d\t", M[i][j]);
    
            }
            printf("\n");
    
       }
    
       getch();
    
       return 0;
    }
    

    【讨论】:

      【解决方案2】:
      int rows, cols , i, j;
      printf("Enter number of rows and cols for the matrix: \n");
      scanf("%d %d",&rows, &cols);
      
      int mat[rows][cols];
      
      printf("enter the matrix:");
      
      for(i = 0; i < rows ; i++)
          for(j = 0; j < cols; j++)
              scanf("%d", &mat[i][j]);
      
      printf("\nThe Matrix is:\n");
      for(i = 0; i < rows ; i++)
      {
          for(j = 0; j < cols; j++)
          {
              printf("%d",mat[i][j]);
              printf("\t");
          }
          printf("\n");
      }
      

      }

      【讨论】:

        【解决方案3】:

        这是我的答案

        #include<stdio.h>
        int main()
        {int mat[100][100];
        int row,column,i,j;
        printf("enter how many row and colmn you want:\n \n");
        scanf("%d",&row);
        scanf("%d",&column);
        printf("enter the matrix:");
        
        for(i=0;i<row;i++){
            for(j=0;j<column;j++){
                scanf("%d",&mat[i][j]);
            }
        
        printf("\n");
        }
        
        for(i=0;i<row;i++){
            for(j=0;j<column;j++){
                printf("%d \t",mat[i][j]);}
        
        printf("\n");}
        }
        

        我只是为行和列选择一个近似值。我选择的行或列不会与值相交。然后我扫描矩阵元素,然后将其设为矩阵大小。

        【讨论】:

          【解决方案4】:
          #include<stdio.h>
          int main(void)
          {  
          int mat[10][10],i,j;
          
          printf("Enter your matrix\n");  
          for(i=0;i<2;i++)
            for(j=0;j<2;j++)
            {  
              scanf("%d",&mat[i][j]);  
            }  
          printf("\nHere is your matrix:\n");   
          for(i=0;i<2;i++)    
          {  
              for(j=0;j<2;j++)  
              {  
                printf("%d ",mat[i][j]);  
              }  
              printf("\n");  
            }  
          
          }
          

          【讨论】:

            【解决方案5】:

            需要一个

            for(i=0;i<2;i++)
            {
              for(j=0;j<2;j++)
              {
                 printf("%d",mat[i][j]);
              }
              printf("\n");
            }
            

            【讨论】:

            • @Keith Nicholas :感谢您的回复,是的,雅各布就是这样解释的,感谢您的回复! :)
            【解决方案6】:

            下面的呢?

            首先询问用户行数和列数,将其存储在nrowsncols(即scanf("%d", &amp;nrows);)然后allocate memory for a 2D array 大小nrows x ncols .因此,您可以拥有一个由用户指定大小的矩阵,而不是固定在您硬编码的某个维度!

            然后使用for(i = 0;i &lt; nrows; ++i) ... 存储元素并以相同的方式显示元素,除了在每一行之后添加换行符,即

            for(i = 0; i < nrows; ++i)
            {
               for(j = 0; j < ncols ; ++j) 
               {
                  printf("%d\t",mat[i][j]);
               }
            printf("\n");
            }
            

            【讨论】:

            • @Jacob 谢谢这正是我想要的!哇,太简单了,只需为新行添加另一个 printf 语句 .. 图例!谢谢 !!哦,顺便说一句,是的,我同意存储行和列的大小,我只是在创建矩阵本身时遇到了问题,所以我没有包含代码,但感谢分享额外的信息!更多总是有帮助的:) :)
            • @DM 啊,我明白了,很高兴能帮上忙!另外,不要忘记列的选项卡,即printf("%d\t",mat[i][j]); 此外,我包含的链接详细解释了使用malloc 处理二维数组,因此您应该考虑实现它......至少是为了好玩:)跨度>
            • 嗯,我不知道用于制表列的 \t,它有什么作用?例如,我不能使用浮点数并使用 5.2%f 吗?
            【解决方案7】:

            您需要动态分配矩阵。例如:

            int* mat;
            int dimx,dimy;
            scanf("%d", &dimx);
            scanf("%d", &dimy);
            mat = malloc(dimx * dimy * sizeof(int));
            

            这将创建一个可以容纳矩阵的线性数组。此时您可以决定是否要先访问它的列或行。我建议制作一个快速宏来计算矩阵中的正确偏移量。

            【讨论】:

            • @theatrus:感谢您的回复,您提供的代码在上下文中更简单但更高级,我还不知道这些代码(malloc 等)谢谢 :)
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-16
            • 2018-03-19
            • 2018-07-02
            • 1970-01-01
            • 1970-01-01
            • 2014-12-05
            相关资源
            最近更新 更多