当前位置:首页 » 编程语言 » c语言二维数组行列
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言二维数组行列

发布时间: 2022-02-05 03:39:27

1. c语言中如何获取一个二维数组的行列数

有两种方式:
1 二维数组的行列数在定义的时候就是确定好的,所以编程人员是知道二维数组的大小以及行列数的。 所以可以直接使用行列数的值。
为方便维护,可以将行列数定义为宏,直接调用对应的宏名作为行列值。

2 动态获取。
对于type array[A][B];形式的二维数组,可以通过计算sizeof获取行列数。
sizeof(array[0][0])为一个元素占用的空间,
sizeof(array[0])为一行元素占用的空间,
sizeof(array)为整个数组占用的空间,
于是:
行数 = sizeof(array)/sizeof(array[0]);
列数 = sizeof(array[0])/sizeof(array[0][0]);

2. C语言二维数组。行列转换

#include "stdio.h"
#include "malloc.h"

void main()
{
int **a;
int row,col;
int i,j;

printf("Please input row:\n");
scanf("%d",&row);
fflush(stdin);
printf("Please input col:\n");
scanf("%d",&col);
fflush(stdin);
printf("Please input data:\n");

a=(int**)malloc(row*sizeof(int));
for(i=0;i<row;i++)
a[i]=(int*)malloc(col*sizeof(int));
for(i=0;i<row;i++)
for(j=0;j<col;j++)
{
scanf("%d",&a[i][j]);
fflush(stdin);
}

printf("Result:\n");

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

3. C语言中如何取二维数组的一行(一列)

没有简单的函数或表示方法,只能使用循环输出或者使用数组中的值。

#include <stdio.h>

int main()

{

int a[3][3]={1,2,3,4,5,6,7,8,9};

int b[3],n=3;

printf("输出第三行: ");

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

{b[i]=a[n-1][i];printf("%d ",b[i]);}

}

数组b中存储的就是第n行的数据。

(3)c语言二维数组行列扩展阅读:

数组的使用规则:

1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。

2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。

3.如不给可初始化的数组赋初值,则全部元素均为0值。

4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。

网络-数组

4. c语言中二维数组哪个是行,哪个是列

1、二维数组的第一个参数是行,第二个参数是列。二维数组定义的一般形式是: 类型说明符 数组名[常量表达式1][常量表达式2],其中常量表达式1表示第一维下标的长度,常量表达式2 表示第二维下标的长度。

2、C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C是高级语言:它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。C语言一共只有40个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作。

3、在C语言中,二维数组是按行排列的。即,先存放a[0]行,再存放a[1]行,最后存放a[2]行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节。

4、二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列, 即放完一行之后顺次放入第二行。另一种是按列排列, 即放完一列之后再顺次放入第二列。

5、二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵,行列数相等的矩阵称变方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素。

6、二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按"行优先顺序"存储时则元素a[i][j]的地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t 。按"列优先顺序"存储时,地址计算为:LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t 。存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节。

5. c语言 二维数组 但不知道其中的行和列

可以动态分配内存。
tdary = (int**)malloc(rows*cols*sizeof(int))。
然后tdary[0]=(int*)tdary, tdary[1]=(int*)tdary+cols,依次类推。这样可以把上面分配的空间当成数组来用。

6. c语言 怎样用程序知道二维数组行数和列数

比如有这样一个二维数组:
int
a[3][5];
求数组元素的总数:
sizeof(a)
/
sizeof(int)
求数组列数:
sizeof(a[0])/sizeof(int)
而数组行数则为
:(
sizeof(a)
/
sizeof(int)
)/
(
sizeof(a[0])
/
sizeof(int)
)
不知道你明白了么?

7. c语言:二维数组行列互换

由于行、列不确定,所以要动态处理。举例代码如下:

//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
#include"stdlib.h"
intmain(void){
int**a,**b,m,n,i,j;
while(1){//保证输入的行、列数为正数
printf("Pleaseenterm&n(intm>0,n>0)... ");
if(scanf("%d%d",&m,&n),m>0&&n>0)
break;
printf("Error,redo:");
}
a=(int**)malloc((j=sizeof(int))*m);
b=(int**)malloc(j*n);
if(a==NULL||b==NULL){
printf("Applicationmemoryfailure... ");
exit(0);
}
for(i=0;i<m;i++)
if((a[i]=(int*)malloc(j*n))==NULL){
printf("Failedtocreatethearray... ");
exit(0);
}
for(i=0;i<n;i++)
if((b[i]=(int*)malloc(j*m))==NULL){
printf("Failedtocreatethearray... ");
exit(0);
}
for(i=0;i<m;i++)
for(j=0;j<n;scanf("%d",a[i]+j++));
printf(" ");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
printf("%d",b[i][j]=a[j][i]);//a的行、列互换后存入b
printf(" ");
}
for(i=0;i<m;free(a[i++]));
free(a);
for(i=0;i<n;free(b[i++]));
free(b);
return0;
}

8. C语言 如何对二维数组进行按列排序

在C语言中,二维数组按行存储,对每一行排序很方便,可以把每一行当成一个一维数组,使用排序函数直接进行排序。

然而对每一列进行排序,就不能直接当成一维数组进行排序。但是仍然可以把第j列a[0...M-1][j]在逻辑上当成一维数组进行排序,下面以使用冒泡排序为例对其排序。

对二维数组按列排序后,进一步展示了如何调用快速排序函数按行进行排序。

程序源码:

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


#defineM3
#defineN3

//输出二维数组的函数
voidprint(inta[][N])
{
inti,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%d",a[i][j]);
}
printf(" ");
}
}

//qsort的cmp函数
intcmp(constvoid*a,constvoid*b)
{
return*(int*)a-*(int*)b;
}

intmain(intargc,char*argv)
{

inta[M][N]={3,2,1,9,8,7,6,5,4};

printf("按列排序前的二维数组是: ");
print(a);
printf(" ");
intj;
for(j=0;j<N;j++)//对每一列进行升序排序
{
//对第j列进行排序
intm,n;
intt;
for(m=M-1;m>0;m--)
{
for(n=0;n<m;n++)
{
if(a[n][j]>a[n+1][j])
{
t=a[n][j];
a[n][j]=a[n+1][j];
a[n+1][j]=t;
}
}
}
}
printf("按列排序后二维数组变为: ");
print(a);
printf(" ");

//对按列排序后的二维数组按行升序排序(调用快速排序函数)

inti;
for(i=0;i<M;i++)
{
qsort(a[i],N,sizeof(a[i][0]),cmp);
}

printf("按列排序后再按行排序后二维数组变为: ");
print(a);
printf(" ");
system("pause");
return0;
}

编译运行后的结果如下:

9. c语言如何将二维数组行列循环移位

#include<stdio.h>
#defineN5
intmain(){
inti,j,m,n,a[N][N];
printf("inputmn:");
scanf("%d%d",&m,&n);
while(m>0)m-=N;
while(n>0)n-=N;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=i*N+j+1;
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%-3d",a[(N-m+i)%N][(N-n+j)%N]);
printf(" ");
}
return0;
}

input m n:1 1

25 21 22 23 24

5 1 2 3 4

10 6 7 8 9

15 11 12 13 14

20 16 17 18 19

10. 二维数组行列求平均c语言编程

假如有这样一个数组num[i][j]

for(i=0;i<行数;i++)
{
n=0;
for(j=0;j<列数;j++)
{
n=n+num[i][j];//各行之和
}
n=n/列数;//各行平均值

//内外for 调换求出的就是各列平均值。
for(j=0;j<列数;j++)
{
n=0;
for(i=0;i<行数;i++)
{
n=n+num[i][j];//各列之和
}
n=n/行数;//各列平均值