【问题标题】:Stopping an array after "__' rows and '___' columns in C?在C中的“__”行和“___”列之后停止数组?
【发布时间】:2016-03-07 12:58:26
【问题描述】:

我对这个可能非常容易理解的数组主题完全没有兴趣,但我的大脑并没有理解它。我找到的每个视频,我找到的每个网站,关于数组的一切都从未提及如何使用随机数而不是一组固定的数字来处理它的方法。

所以现在我把它作为一个项目的一部分,这只是第一部分,迫不及待想要更进一步-_-

我正在编写的代码假设在 10 列、5 行的网格中用 1-999 的随机数填充一个数组。我把这段代码放进去,它只会持续 999 个数字,直到它停止。在我的生活中,我无法在所述行和列之后找出阻止它的方法。

int main(){
	int arr[999];
	int i;
	
	for( i = 0; i < 999; i++){
		arr[i] = rand() % 999;
	}
	
	for( i = 0; i < 999; i++){
		printf("%d", arr[i]);
	}
	
	return 0;
}

我知道我现在对代码中的行和列一无所知,因为我不想因为我尝试过的东西而让自己难堪。我希望有人能告诉我该怎么做。我了解数组的基础知识,如何在数组中找到某个点,但这都是针对固定数字的。从我已经搜寻了几个小时的内容来看,我找不到任何该死的东西。

编辑@Kaylum:

我现在拥有的代码很可能不是您让我尝试的代码,而是:

int main(){
	int arr[5][10];
	int i;
	
	for( i = 0; i < 5/10; i++){
		arr[i] = rand() % 999;
	}
	
	for( i = 0; i < 5/10; i++){
		printf("%d\t", arr[i]);
	}
	
	return 0;
}

【问题讨论】:

  • 999改成rows * columns?
  • @kaylum 在哪一部分?
  • 全部。也就是说,无论999 出现在哪里,都替换为rows * columns。如果您想尝试另一种方法是使用双数组:int arr[rows][columns];,然后有两个索引从0 迭代到rows/columns。这可以说是比单个平面数组更自然的方法。
  • @kaylum 我试过了,但它出现一个错误,指出“数组类型'int [10]'不可分配”
  • 不,你没有尝试“那个”。您尝试了一些我看不到也无法评论的代码。如果您需要有关新事物的帮助,请更新您的问题。

标签: c arrays loops multidimensional-array row


【解决方案1】:

我认为您可能误解了有关数组的一两件事。让我试着解释一下:

如果您尝试用随机数(在 0 - 999 范围内)填充长度为 n 的一维数组,则必须遍历数组中的每个条目并为其分配一个随机数。这意味着你有太多这样的循环:

int your_array[n];

for(int i = 0; i < n; i++){
    your_array[i] = rand() % 1000;
}

注意:数组索引从 0 开始!所以如果你有一个长度为n的数组,最后一个条目将是your_array[n - 1],而不是your_array[n]


现在,您正在尝试填充一个二维数组。这基本上与一维数组没有太大区别。如果您尝试直观地描绘它,您将拥有一个 5 行和 10 列的网格。换句话说,这不过是 5 个大小为 10 的一维数组,彼此叠放。这意味着您必须对 5 行中的每一行执行与上述相同的操作。在代码中,这看起来像这样:

int rows = 5;
int cols = 10;
int your_array[rows][cols];

// Loop over all rows.
for(int current_row = 0; current_row < rows; current_row++){
    // On each row, loop over all columns.
    for(int current_col = 0; current_col < cols; current_col++){
        your_array[current_row][current_col] = rand() % 1000;
    }
}

这是否有点清楚? 如果您有任何问题,请告诉我。


附录:如果要生成0到包括999范围内的随机数,必须用n = rand() % 1000而不是n = rand() % 999来获取,因为模数为任意数字x除以数字y,只能在[0, y - 1]范围内。

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多