如何在 C 中通过增加或减少其元素的频率来调整值数组的大小
How to Resize an Array of Values by Increasing or Decreasing the Frequency of its Elements in C
又是新手,我为这个 post 的 homework-like 质量道歉。
我不确定我的标题是否完全合理,但我正在尝试通过可变整数扩大(或缩小,如有必要)一个数组,我正在寻求帮助以理解背后的数学和逻辑它。
(这应该类似于放大 object 或缩小 n 倍。)
例如,如果有一个 2x2 数组,如下所示:
0 1
2 3
我希望能够乘以它,比如 n = 2,最后得到:
0 0 1 1
0 0 1 1
2 2 3 3
2 2 3 3
我希望能够将 n 设置为任何值,并根据该值 "resize" 数组(行和列应该适当地增长和收缩。)
我的代码没有像我想象的那样工作,我希望有人可以为我分解它(或指导我在哪里可以找到正确执行此操作的信息)。
到目前为止,这是我能够做的,但随着我增加或减少调整大小值而失败。 (我正在尝试将数组写入单独的文件):
#define enn 2 //resize value.
//fill the infile with an array contents.
int inArray[SIZE][SIZE];
int count = 0, row, column;
//intialize the array.
for (row = 0; row < SIZE; row++)
{
for(column = 0; column < SIZE; column++)
{
inArray[row][column] = count;
count += 1;
}
}
//write to the infile.
for (row = 0; row < SIZE; row++)
{
for(column = 0; column < SIZE; column++)
{
fprintf(infileptr, "%i\t", inArray[row][column]);
}
fputs("\n", infileptr);
}
fclose(infileptr);
//write expanded array to outfile.
for (row = 0; row < SIZE; row++)
{
for(column = 0; column < SIZE; column++)
{
for(int m = 0; m < enn; m++)
{
fprintf(outfileptr, "%i\t", inArray[row][column]);
}
}
fputs("\n", outfileptr);
for(column = 0; column < SIZE; column++)
{
for(int m = 0; m < enn; m++)
{
fprintf(outfileptr, "%i\t", inArray[row][column]);
}
}
fputs("\n", outfileptr);
}
fclose(outfileptr);
感谢您的帮助!
要乘以数组的大小,您需要 4 个嵌套循环。仅打印列 enn
次是不够的,您还必须打印行 enn
次:
for ( row = 0; row < SIZE; row++ )
{
for ( int n = 0; n < enn; n++ )
{
for ( column = 0; column < SIZE; column++ )
{
for ( int m = 0; m < enn; m++ )
{
fprintf( outfileptr, "%i\t", inArray[row][column] );
}
}
fputs( "\n", outfileptr );
}
}
fclose( outfileptr );
但是你也可以用 2 个循环来完成。您的 table 有 SIZE*enn
行和 SIZE*enn
列:
for ( row = 0; row < SIZE*enn; row++ )
{
for ( column = 0; column < SIZE*enn; column++ )
{
fprintf( outfileptr, "%i\t", inArray[row/enn][column/enn] );
}
fputs( "\n", outfileptr );
}
fclose( outfileptr );
注意:外循环打印 table 的行。有 SIZE
行,每行必须打印 enn
次。每行都以 \n
结尾。内部循环打印列,因为每一行都由列组成。有 SIZE
列,每一列必须为每一行打印 enn
次。 table 有 SIZE * enn * SIZE * enn
个字段。
又是新手,我为这个 post 的 homework-like 质量道歉。
我不确定我的标题是否完全合理,但我正在尝试通过可变整数扩大(或缩小,如有必要)一个数组,我正在寻求帮助以理解背后的数学和逻辑它。 (这应该类似于放大 object 或缩小 n 倍。)
例如,如果有一个 2x2 数组,如下所示:
0 1
2 3
我希望能够乘以它,比如 n = 2,最后得到:
0 0 1 1
0 0 1 1
2 2 3 3
2 2 3 3
我希望能够将 n 设置为任何值,并根据该值 "resize" 数组(行和列应该适当地增长和收缩。) 我的代码没有像我想象的那样工作,我希望有人可以为我分解它(或指导我在哪里可以找到正确执行此操作的信息)。 到目前为止,这是我能够做的,但随着我增加或减少调整大小值而失败。 (我正在尝试将数组写入单独的文件):
#define enn 2 //resize value.
//fill the infile with an array contents.
int inArray[SIZE][SIZE];
int count = 0, row, column;
//intialize the array.
for (row = 0; row < SIZE; row++)
{
for(column = 0; column < SIZE; column++)
{
inArray[row][column] = count;
count += 1;
}
}
//write to the infile.
for (row = 0; row < SIZE; row++)
{
for(column = 0; column < SIZE; column++)
{
fprintf(infileptr, "%i\t", inArray[row][column]);
}
fputs("\n", infileptr);
}
fclose(infileptr);
//write expanded array to outfile.
for (row = 0; row < SIZE; row++)
{
for(column = 0; column < SIZE; column++)
{
for(int m = 0; m < enn; m++)
{
fprintf(outfileptr, "%i\t", inArray[row][column]);
}
}
fputs("\n", outfileptr);
for(column = 0; column < SIZE; column++)
{
for(int m = 0; m < enn; m++)
{
fprintf(outfileptr, "%i\t", inArray[row][column]);
}
}
fputs("\n", outfileptr);
}
fclose(outfileptr);
感谢您的帮助!
要乘以数组的大小,您需要 4 个嵌套循环。仅打印列 enn
次是不够的,您还必须打印行 enn
次:
for ( row = 0; row < SIZE; row++ )
{
for ( int n = 0; n < enn; n++ )
{
for ( column = 0; column < SIZE; column++ )
{
for ( int m = 0; m < enn; m++ )
{
fprintf( outfileptr, "%i\t", inArray[row][column] );
}
}
fputs( "\n", outfileptr );
}
}
fclose( outfileptr );
但是你也可以用 2 个循环来完成。您的 table 有 SIZE*enn
行和 SIZE*enn
列:
for ( row = 0; row < SIZE*enn; row++ )
{
for ( column = 0; column < SIZE*enn; column++ )
{
fprintf( outfileptr, "%i\t", inArray[row/enn][column/enn] );
}
fputs( "\n", outfileptr );
}
fclose( outfileptr );
注意:外循环打印 table 的行。有 SIZE
行,每行必须打印 enn
次。每行都以 \n
结尾。内部循环打印列,因为每一行都由列组成。有 SIZE
列,每一列必须为每一行打印 enn
次。 table 有 SIZE * enn * SIZE * enn
个字段。