【问题标题】:Filling a two-dimensional array correctly正确填充二维数组
【发布时间】:2019-01-05 12:01:14
【问题描述】:

我被困在原地。我无法提出算法,并将填充方阵如下:

"从用户n处获取一个不超过20的自然数n。如下图填写方表。主对角线以下的数字(a21;a31;a32等)由用户给定。"

#include <stdio.h>

int main() {
	
	int tab[20][20] = { {0},{0} };
	int size = 0;
	printf("Enter the natural number n not more than 20: ");
	while (scanf_s("%d", &size) != 1 || size < 0 || size >20 || getchar() != '\n')
	{
		while (getchar() != '\n');
		printf("Error. Correct!");
	}

	for (int x = 0; x < size; x++)
	{
		for (int y = 0; y < size; y++)
		{
			if (y==x)
			{
				tab[x][y]=1; // what's next?
			}
		}
	}

	for (int x = 0; x < size; x++)
	{
		for (int y = 0; y < size; y++)
		{
			printf("%d ",tab[x][y]);
		}
		printf("\n");
	}

	return 0;
}

【问题讨论】:

  • int tab[20][20] = { {0},{0} }; - {0}{{0}} 就足够了。
  • @AnttiHaapala 是正确的 int tab[20][20] = { 0 } 工作完美
  • 所以问题是:你想问对角线under的数字吗?那么,对角线下元素的坐标是什么 - 仅当 x,y 在对角线下时才要求用户输入,使用上面给出的相同循环,提示 printf 的给定坐标?你有什么问题?
  • 我在对角线上方放置数字时遇到问题

标签: c arrays


【解决方案1】:

这就是你想要的。 不需要使用 if 语句。

#include <stdio.h>

int main()
{

    int tab[20][20]={ {0},{0} };
    int size = 6,n=0;



    for (int x = 0; x < size; x++)
    {
        n=0;
        for (int y = x; y < size; y++)
        {
            n++;
            tab[x][y]=n; //fill the upper part of the matrix including diagonal
        }
    }
    for (int x = 1; x < size; x++)
    {

        for (int y = 0; y < x; y++)
        {

            tab[x][y]=8; //fill the lower part of the matrix
            //or ask for user input
        }
    }

    for (int x = 0; x < size; x++)
    {
        for (int y = 0; y < size; y++)
        {
            printf("%d ",tab[x][y]);
        }
        printf("\n");
    }

    return 0;
}

【讨论】:

    【解决方案2】:

    我认为这适用于主对角线上方..

       #include <stdio.h>
    
        int main() {
    
            int tab[20][20] = { {0},{0} };
            int size = 0;
            printf("Enter the natural number n not more than 20: ");
            while (scanf("%d", &size) != 1 || size < 0 || size >20 || getchar() != '\n')
            {
                while (getchar() != '\n');
                printf("Error. Correct!");
            }
    
            for (int x = 0; x < size; x++)
            {
                printf("%d. diagonal value:", x+1);
                scanf("%d", & tab[0][x]);
    
            }
            for (int x = 0; x < size; x++)
            {
    
                for (int y = x; y < size; y++)
                {
                    if (y==x)
                    {
                        tab[x][y]=1; // what's next?
                    }
                    else if(x>0){
                        tab[x][y]=tab[x-1][y-1];
    
                    }
    
                }
            }
    
            for (int x = 0; x < size; x++)
            {
                for (int y = 0; y < size; y++)
                {
                    printf("%d ",tab[x][y]);
                }
                printf("\n");
            }
    
            return 0;
        }
    

    output:

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 2016-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多