gpt4 book ai didi

c - 我怎样才能在C中修复这个二维数组?

转载 作者:行者123 更新时间:2023-11-30 20:04:40 25 4
gpt4 key购买 nike

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

int main(void)
{
int n, m, i, j, status, maxr = 0, maxc = 9, temp;
int k, q, r , state = 0, t = 1;
int ar[n][m];
puts("Enter two numbers represents two dimensional array, N * M");
puts("This program will find the saddle points");
puts("The numbers in arrays is totally random");
srand((unsigned int) time(0)); //randomize seed
while (status = scanf("%d %d", &n, &m) != 2)
{
if (status == EOF)
break;
else
{
puts("You should have entered two integers");
puts("Try again");
while (getchar() != '\n')
continue;
puts("Enter two numbers represents two dimensional array, N * M");
continue;
}
}

for (j = 0; j < m; j++) //establish a random two dimensional array
{
for (i = 0; i < n; i++)
{
ar[i][j] = (rand() % 10);
printf("%d\n", ar[i][j]);
}
}

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

}

我想创建一个包含随机数的二维数组。因此,我使用 rand() 函数,并使用 srand 函数随机化种子。

现在我确信我得到了随机数,但似乎我无法将这些随机数保存到数组中。为了验证这一点,我创建了两个loop循环,结果发现结果是不同的。数组a[i][j]应该是相同的,但实际上是不同的。

那么我该如何解决这个问题呢?

最佳答案

首先,nm 未初始化为任何已知值。您需要在读取 nm 后声明该数组。

修复该错误后,对于定义为 int ar[n][m]; 的数组,您必须像这样迭代它:

for(int x=0; x<n; x++)
for(int(y=0; y<m; y++)
ar[x][y] = ....;

不仅可以防止明显的越界错误,还可以保证数据缓存的最佳利用。给定数组数据 ar[2][3] = {{1, 2, 3}, {4, 5, 6}},它在内存中存储为

1 2 3 4 5 6

这是缓存友好的,因为所有值都是相邻存储的。如果从左到右迭代此内存,数组可以存储在高速缓存中,CPU 不需要在循环的每一圈从 RAM 中获取值,这样速度会更慢。

关于c - 我怎样才能在C中修复这个二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com