我正在尝试制作一个数组,打印数字从1到40,如下所示:
1 5 9 13 17 21 25 29 33 37
2 6 10 14 18 22 26 30 34 38
3 7 11 15 19 23 27 31 35 39
4 8 12 16 20 24 28 32 36 40
我试过了,但是我不能这样做。这是我的代码:
for(i=0;i<4;i++)
{
for(j=0;j<10;j++)
{
if(i=0)
{
array[i][j]=
}
}
}
for(i=0;i<4;i++)
{
for(j=0;j<10;j++)
{
printf("%d\t", array[i][j]);
}
}
感谢您的帮助
答案 0 :(得分:2)
有很多问题,人们都注意到了。我已经注意到在评论中(当我写完这篇文章的时候),你已经说过&#34;它的作用是&#34;一旦你添加了正确的分配。上帝知道怎么做,但可能你问题中的代码并不代表你的实际代码...
对于后代,下面列出的问题。
您需要在函数/ Main / Program
的开头声明array [] []int array[10][4];
你还需要定义i和j并将它们设置为0.大概你在发布的代码之外做了所有这些。
请注意,我已经在&#34; i&#34;周围进行了交换。和&#34; j&#34;您一直在使用的价值观。这是因为[4] [10]将为您提供4个10个元素的数组,而不是10个4个元素的数组,这是您显然想要的。
你希望这些数字在它们发生之前就会消失。为了获得这种模式,你需要骑自行车穿越&#34; i&#34;价值快于&#34; j&#34;:
for(j=0;i<10;i++)
{
for(i=0;i<4;j++)
{
...
}
}
我不知道这个if语句应该做什么:
if(i=0)
{
...
}
此始终不仅会返回 false ,而且每次都会将我设置为0,因此您只需要覆盖第一个元素和for循环永远不会结束我会考虑把它拿出来,因为它什么都不做。
正如@JohnBode指出的那样,i = 0返回0(赋值操作总是返回被赋值的值),所以这个if语句等同于if(0),它总是为false。
分配相对简单:
array[i][j] = (i + 1) + (4*j)
注意+ 1&#39; s,因为数组索引将比所需值小1。我认为计算是正确的,说实话,这对您的代码最不用担心,可能会有点错误!
打印功能很好。据我所知,一切都好!
答案 1 :(得分:1)
您应该阅读更多内容,并练习更多基本的编码问题。
当您存储数字row-wize时,您需要以这种方式编码
int arr[4][10], i, j, count = 1;
for(i=0;i<10;i++) //this is for columns
{
for(j=0;j<4;j++) //this is for the rows
{
array[j][i] = count++;
//array is accessed with [j][i] because you want to move row-wize down
//count is keeping track of the number to be stored
}
}
答案 2 :(得分:0)
我不确定我的问题是否正确,但我建议你尝试这样的事情:
int i, j,array[4][10], number=0;
for (j =0; j < 10; j++) {
for (i=0; i < 4; i++) {
array[i%4][j] = ++number;
}
}
for(i=0;i<4;i++) {
for(j=0;j<10;j++) {
printf("%d\t", array[i][j]);
}
}
我希望这会有所帮助。
答案 3 :(得分:0)
非常简单的代码,以获得概念 - 它可能做得更好,但目标只是简单地向您展示这个概念:
//Initialize your counter variable.
int count = 1;
//Declare rows, columns.
int row, col;
//Declare your array. 4 Rows, 10 Columns.
int array[4][10];
//Iterate columns.
for(col = 0; col < 10; col = col + 1)
{
//Iterate rows.
for(row = 0; row < 4; row = row + 1)
{
array[row][col] = count;
count = count + 1;
}
}
然后您可以简单地迭代并打印您的数组:
for(row = 0; row < 4; row = row + 1)
{
for(col = 0; col < 10; col = col + 1)
{
printf("%d ", array[row][col]);
}
//Print newline at the end of the row.
printf("\n");
}
答案 4 :(得分:0)
查看第一行中的模式:
1 5 9 13 17 21 25 29 33 37
从1开始,添加4以获得5,添加4以获得9等等。因此,要获取每列的值,请将行数添加到起始值:
for ( column_number = 0; column_number < max_cols; column_number++ )
column_value = start_value + max_rows * column_number
您的start_value
与行号相同:1,2,3,4等。
for ( row_number = 1; row_number <= max_rows; row_number++ )
{
for ( column_number = 0; column_number < max_columns; column_number++ )
{
column_value = row_number + max_rows * column_number;
}
}
因此,每个a[i][j]
的值为(i+1) + j * max_rows
(假设您要以1
开头;请记住C中的数组始终从0索引到N-1);
请注意,您不需要数组来执行此操作:
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv )
{
/**
* Specify default values
*/
int rows = 4;
int cols = 10;
int initialValue = 1;
/**
* Override defaults with command-line parameters, if any
*/
if ( argc > 3 )
initialValue = (int) strtol( argv[3], NULL, 10 );
if ( argc > 2 )
cols = (int) strtol( argv[2], NULL, 10 );
if ( argc > 1 )
rows = (int) strtol( argv[1], NULL, 10 );
/**
* Print the table
*/
for ( int i = 0; i < rows; i++ )
{
for ( int j = 0; j < cols; j++ )
{
printf("%2d ", (initialValue + i) + j * rows );
}
putchar( '\n' );
}
return 0;
}
此代码在不使用数组的情况下打印出表格。它还允许您在命令行上指定行,列和起始值,默认值分别为4,10和1:
$ ./rows
1 5 9 13 17 21 25 29 33 37
2 6 10 14 18 22 26 30 34 38
3 7 11 15 19 23 27 31 35 39
4 8 12 16 20 24 28 32 36 40
$ ./rows 10 4
1 11 21 31
2 12 22 32
3 13 23 33
4 14 24 34
5 15 25 35
6 16 26 36
7 17 27 37
8 18 28 38
9 19 29 39
10 20 30 40
$ ./rows 5 5 0
0 5 10 15 20
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24