【问题标题】:C - How to move a number to a different place in a matrixC - 如何将数字移动到矩阵中的不同位置
【发布时间】:2018-12-21 15:26:30
【问题描述】:

这是我写的

int n=0,i=0,j=0,k=0,s=0,a=0,b=0;
int blk[n][n];

printf("how many blocks?\n");
scanf ("%d", &n);
printf("\n");

for(i=0;i<n;i++){
    blk[i][j]=k;
    printf("%d: %d\t  ",k, blk[i][j]);
    k++;
    printf("\n");
}

应该是这样的

0:0

1:1

2:2

...

8:8

9:9

然后,用户有一组命令,可以通过函数以不同方式移动数字 我的问题是我不知道如何让数字看起来像这样

0:0

1:1 9

2:2

...

8:8

9:

第一个命令将 "a" 放在 b" 之上(所以 9 在 1 之上)

第一个数字是位置(#:),前面的数字是矩阵开始的地方

【问题讨论】:

  • 这看起来不像 nxn 矩阵。
  • int blocks[n][n]; n 在这里为零。
  • 空格应该是空的,所以你可以添加数字,例如,你可以把下面的所有数字放在第一个前面,如果有意义的话,完成整行
  • blocks[1][1] = 9;。但是您在blocks[9][0] 中添加了什么来将其标记为空?
  • 变量名称应指明contentusage(或更好,两者兼有)像n,i,j,k,s,a,b 这样的名称是没有意义的,即使在当前上下文中也是如此。

标签: c arrays function matrix


【解决方案1】:

您应该在阅读 n 之后声明 blocks 变量。

你也忘记了第二个 for 循环。

int n=0,i=0,j=0,k=0,s=0,a=0,b=0;

printf("Enter the numember of blocks desired\n");
scanf ("%d", &n);
printf("\n");

int blocks[n][n];

for(i = 0; i < n; i++){
    for (j = 0; j < n; j++){
        blocks[i][j]=k;
        printf("%d: %d\t  ",k, blocks[i][j]);
        k++;
        printf("\n");
    }
}

【讨论】:

  • @gsamaras 我理解的问题是作者没有得到预期的输出。这是有助于正确输出的解决方案。
  • 重读后,我认为OP不需要嵌套循环。他们只想填写每一行的第一列。我可能是错的。问题不清楚。
  • @JohnnyMopp 同意,这个问题还不清楚。什么是 a 和 b 命令?在矩阵中“移动”事物的规范是什么?鉴于代码 sn-p,我相信这个解决方案在一定程度上有助于作者更好地理解他们想要什么
【解决方案2】:

您似乎在描述一个 NxN 矩阵。对于 N == 10,并初始化为零,它在概念上可能如下所示:

然后你描述你想移动一个数字。例如,将值放入特定位置,例如将 55 放入matrix[3][3]。记住从零开始的索引系统,矩阵现在看起来像:

为此可实施的步骤:

步骤:
0) 使用命令行值调用程序以获取矩阵顺序。
1) 使用在命令行输入的值创建 nxn 表。
2) 提示用户输入要放置的位置和值,或者退出。
3) 清除以前的内容。
4) 放置新值。
5) 转到第 2 步。

实现示例:

int main(int argc, char *argv[])
{
    int x = 0, y = 0;
    int value = 0;
    if(argc != 2) 
    {
        printf("Usage: %s <integer value for order>\n Exiting", argv[0]);
        getchar();
        return 0;
    }
    int order = atoi(argv[1]);

    int matrix[order][order];

    int exit = 'x';

    while(exit != 'q')
    {
        printf("Enter 3 space delimited digits with values from 0 to %d.\n\n", order-1);
        scanf(" %d %d %d", &x, &y, &value);
        memset(matrix, 0, x*y*sizeof(int));
        matrix[x][y] = value;
        for(int i=0;i<order;i++)
        {
            for(int j=0;j<order;j++)
            {
                if((i==x) && (j==y)) 
                {
                    printf("%3d", value);
                    if(j == order-1)printf("\n");
                }
                else
                {
                    printf("%3d", 0);
                    if(j == order-1)printf("\n");
                }
            }
        }
        printf("\nHit 'q' to quit, any other key to continue");
        exit = getchar();
    }


    return 0;
}

对于order == 10 矩阵,测试了以下xyvalue 命令行条目:

0 0 990 9 999 0 999 9 99

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2021-04-01
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多