请问C语言中数字一维数组转换二维数组通项公式?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问C语言中数字一维数组转换二维数组通项公式?相关的知识,希望对你有一定的参考价值。

请问C语言中数字一维数组转换二维数组通项公式a[i][j]=b[i*行+j]您知道出处在哪里吗?或者您能帮忙解答一下也行。

公式错了:应是b[i*最大列数+j]。
一句话解释:二维数组内元素地址是连续的,在内存中就是一维数组。
所以反过来也是一样,公式a[i][j]=b[i*行+j]。就是按照二维数组的行列值在一维数组中取值。
比如定义二维数组a[2][3]在内存中等同于定义一维数组b[2*3];
而取a[1][2]值,对应一维数组下标5的元素,相当于取b[1*3+2](a[1][2]按连续地址数就是1行加3个元素)
参考技术A 只要你设想把已经排成一长条的、编好号的0到99号地砖,按照行优先的原则,即按顺序先铺满第一行,再铺第二行,再铺第三行等等,平铺到一个指定的矩形中,比如10×10的矩形,或者5×20矩形,或者20×5的矩形等等。你就很容易理解这个公式了。

C语言一维数组转二维数组

假设,一维数组有25个元素 分别是 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35把它转成二维数组 排成 5X5的矩阵且从小到大排列 如: 11 12 13 14 1516 17 18 19 2021 22 23 24 2526 27 28 29 3031 32 33 34 35 写出这段程序 用Tubor C写 把一维数组a[25] 转换成 b[5][5] 最好有有说明 详细点

1、我们先是定义一个二级指针和行列变量【int **array,row,column;】。

2、然后我们编写输入行列的语句。

3、为其开辟一个一个一维装着一维数组的数组。

4、接下来我们使用【array[i]=(int *)malloc(sizeof(int)*column);】为数组再次产生一个新的装着数组的数组。

5、然后我们就可以为其赋值并输出。

6、运行程序后我们就可以看到这样的效果了。

参考技术A

1、一维数组的声明包括如下结构:类型变量名[N],其中N是你要定义的一维数组长度。

下面我们就通过一个例子声明一个int类型的数组,并且进行数组的赋值以及输出。

2、在cpp文件main()函数中输入以下语句。

inta[10];//声明一维整形数组,数组长度为10。

for (int i =0;i<10;i++)

a[i]=i;

cout<<i<<endl;

return0;

然后ctrl+F5运行,我们可以看到如下结果:在i行输出的是a[i]。

3、二维数组的声明结构:类型变量名[M][N],其中M代表行数,N代表列数,下面我们也通过一个例子声明一个整形(int)的二维数组,并且进行相应的赋值与输出。

4、在main()函数中输入以下代码。

inta[4][5];//二维数组声明。

inti,j;

for ( i =0;i<4;i++)

for (j=0;j<5;j++)

a[i][j]=(i+1)+(j+1);

cout<<a[i][j]<<"  ";

cout<<endl;

return0;

然后ctrl+F5运行,结果输出的内容是二维数组的每个元素,二维数组就是矩阵,数组的每个元素是相应的行号和列号的和。

参考技术B int a[25]=11,12.....;//大括号里面是25个数,偷懒不抄了
int b[5][5];//二维数组
for(int i=0;i<5;i++)

for(int j=0;j<5;j++)

b[i][j]=a[i*5+j];//注意理解下a[i*5+j]

参考技术C #include <stdio.h>
// 实现从小到大的排序
void sort(int arr[], int n)

int i, j, temp;
for( i = 0; i < n; i++)

for(j = 0; j < i; j++)

if(arr[i] < arr[j])

temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;



// 将一维数组转化为二维数组
void convert(int array[], int result[][5])

int i, j, temp, point = 0;
for( i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
result[i][j] = array[ point++];

void print(int result[][5])

int i, j, temp;
for( i = 0; i < 5; i++)

for(j = 0; j < 5; j++)
printf("%d\t", result[i][j]);
printf("\n");


int main()

int array[25] = 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35;
int result[5][5];
sort(array, 25);
convert(array, result);
print(result);
return 0;

希望你看明白,不懂再问啊。
参考技术D

代码如下:

void fun(char *a)

int b[3][3]=0;

int i=0;

int j=0;

while(*a)

if(*a == '\\n')

i++;

j=0;

b[i][j++]=*a-'0';

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

以上是关于请问C语言中数字一维数组转换二维数组通项公式?的主要内容,如果未能解决你的问题,请参考以下文章

C语言指针指向一维数组与二维数组?

在excel中如何得到一维内存数组

c语言中一个一维数组怎样去重?

JS二维数组转换一维数组

js怎样将一维数组转换成二维数组

C语言中怎么把一维数组赋给另外一个一维数组