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

c语言找二维数

发布时间: 2022-05-16 00:49:36

A. c语言二维数组

这个就是指针数组和数组指针的区别了,我当年也在这里转了很久,希望我下面所说得可以帮到你。
首先,明确编译器是怎么识别*s[]和(*s)[]两种形式的代码的。对于*s[],编译器会以默认的右结合的方式进行识别,所以首先识别s[],这是一个数组,然后再识别*,说明这个数组的元素都是指针。所以最后的结果就是:这是一个“以指针为元素的数组”,简称指针数组。而对于(*s)[],由于()的优先级高于*,所以编译器会先识别()里面的,也就是先识别*s,所以它是一个指针,然后()说明这个指针指向的是一个数组,所以最后的结果是:这是一个“指向数组的指针”,简称数组指针。
好吧,我承认一点,就是这两个东西看起来复杂,但是其实用起来区别不大,最本质的东西就是,指针数组用到多个指针,数组指针就完全是一个指针跑天下。
看下面一段代码(我偷懒用C++写的,反正这个不是重点):
#include
using
namespace
std;
int
main()
{
//指针数组
*a[2]
int
t1[3]
=
{0,1,2};
int
t2[3]
=
{3,4,5};
int
t3[3]
=
{6,7,8};
int
*a[3];
a[0]
=
t1;
//一个指针赋值
a[1]
=
t2;
//第二个指针赋值
a[2]
=
t3;
//第三个指针赋值
//数组指针
(*b)[3]
int
(*b)[3]
=
new
int[3][3];
for(int
i=0;i<3;i++)
for(int
j=0;j<3;j++)
*(*(b+i)+j)
=
i*3+j;
//一个指针跑天下
cout
<<
*((*b)+1)
<<
"
"
<<
*(*(b+1))
<<
endl;
system("pause");
return
0;
}
最后我想说,其实这个做题的时候有用,自己写的时候还是尽量直接用int[n][m]的方式比较方便,稍微浪费点空间问题不大,重要的是看起来好看,不容易出错。

B. 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]);

C. c语言编程:找出二维数组中的最大值最小值及其所在行号列号

示例:有一个3*4的矩阵,要求编程序求出其中最大的那个元素的值,以及其所在的行号和列号。

代码:

#include&lt;stdio.h&gt;

int main()

{

int i,j,row=0,colum=0,max;

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

max=a[0][0];

printf("array a: ");

for(i=0;i&lt;=2;i++)

{

for(j=0;j&lt;=3;j++)

{

printf("%5d",a<i>[j]);

}

printf(" ");

}

for(i=0;i&lt;=2;i++)

{

for(j=0;j&lt;=3;j++)

{

if(a<i>[j]&gt;max)

{

max=a<i>[j];

row=i;

colum=j;

}

}

}

printf("max=%d row=%d colum=%d ",max,row,colum);

return 0;

}

运行结果:

(3)c语言找二维数扩展阅读:

printf用法:

1、printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。

格式输出,它是c语言中产生格式化输出的函数(在stdio.h中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。

要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

简单点理解就是,在一段程序中你正确使用该函数,可以在该程序运行的时候输出你所需要的内容。

2、printf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中。但作为一个特例,不要求在使用printf函数之前必须包含stdio.h文件。

D. C语言 二维数组

/***用二维数组保存学生成绩****/
#include"stdio.h"
#define M 100
main()
{ int i,a[M][2],n,c=0,m=0,max,min;
printf("请输入学生记录数:");
scanf("%d",&n);
/*********输入每个学生的成绩保存在数组中*********/
for(i=0;i<n;i++)
{printf("请输入第%d学生的记录\n",i+1);
printf("请输入语文成绩:");
scanf("%d",&a[i][0]);
printf("请输入数学成绩:");
scanf("%d",&a[i][1]);
printf("\n"); }
/********各课总成绩********************/
for(i=0;i<n;i++)
{c+=a[i][0];
m+=a[i][1];
}
printf("语文总成绩:%d\n",c);
printf("数学总成绩:%d\n",m);
printf("语文平均成绩:%f\n",(float)(c)/n);
printf("数学平均成绩:%f\n\n",(float)(m)/n);
/**********输出成绩单*********/
for(i=0;i<n;i++)
{printf("第%d个学生:语文成绩%d 数学成绩%d\n",i+1,a[i][0],a[i][1]);
}
getch();
}

E. C语言程序设计:求二维数组中最大元素值及其行列号

#include <stdio.h>

void main()

{

int i,j,row = 0 ,colum = 0,max;

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

max = a[0][0];

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

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

if(a[i][j]>max)

{

max = a[i][j];

row = i;

colum = j;

}

printf("最大值=%d 行号= %d 列号= %d ",max,row,colum);

}

(5)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函数逐个对数组元素赋值。

网络-数组

F. C语言中二维数组找到每行的最大值

思路和想法完全正确,仔细看应该是给b[]赋值没有写对位置,在往后一步,放在大括号外面,应该循环比较是两层循环加一个if比较,所以要把赋值在往后移动,等比较全部完成后再赋值给数组保存。

#include<stdio.h>

//首先指定M和N的值

#define M 3

#define N 3

int main()

{

printf("There are %d rows %d columns. ", M, N); //输出到屏幕的提示信息

int a[M][N] = { 0 }; //声明一个M行N列的数组,并将全部元素赋初值为0

int i, j; //for循环中要用到

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

{

printf("input %d row's %d values: ", i + 1, N); //输出到屏幕的提示信息

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

scanf("%d", &a[i][j]); //对第i行第j列的元素赋值

}

int maxArr[M] = { 0 }; //声明一个含有M个元素的一维数组来存储M个行最大值

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

{

int max = a[i][0]; //先将每一行的第一个数作为最大值

for (j = 1; j < N; j++) //找出行最大值

if (max < a[i][j])

max = a[i][j];

maxArr[i] = max; //将行最大值存入行最大值数组中

}

for (i = 0; i < M; i++) //将每行最大的数输出

printf("%d ", maxArr[i]);

return 0;

}

(6)c语言找二维数扩展阅读:

二维数组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 个字节

G. c语言找二维数组的特定点,存在多个,记住第一个的位置

遍历二维数组,按照你说的特定点的要求,逐个检查,当第一个命中时,退出循环即可。
退出循环的下标值,就是要记住的值。

H. C语言二维数组

首先你要理解二维数组的真正含义,它的第一维就是一组数据的起始地址,第二维就是某组数据中的某个值.其次,你要知道a[][4]所表达的意思,是指二维数组a的每一维都是由4个元素组成的一维数组.而编译器可以根据你赋给a的初值个数计算它的第一维长度(元素总个数/4,如果不能整除,则长度加1,此时还应该有几个没有赋初值的数组元素).而a[3][]的意思从表面上看可以成立,但问题是编译器不能直接识别其第二维的确切长度(你可以考虑,如果总的初值个数为2时,可以认为a的第二维长度为1,也可以是2,.......),这样就会产生错误.所以,可以a[][4]={*,*,*……}这样定义,而不能定义a[3][]={*,*,*……}。
对于你补充的问题,其实我已经讲了.因为赋初值是5个元素,所以5/4=1,但除不尽,所以要加1,即实际数组a实质上定义为a[2][4],其内元素为:
1 2 3 4
5 0 0 0 (后面的三个0是系统默认值)
希望对你有所帮助.^-^

I. c语言中找出二维数组每行最大的数

int main(int argc, char** argv) {
int a,b;
printf("请输入数组行数,列数:\n");
scanf("%d,%d",&a,&b);
int num[a][b];
int max[a];
for(int i=0;i<a;i++)
max[i]=0;
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
printf("请输入数据:");
scanf("%d",&num[i][j]);
}
}
for(int i=0;i<a;i++)
{
for(int j=0;j<b;j++)
{
if(max[i]<num[i][j])
max[i]=num[i][j];
}
}
for(int i=0;i<a;i++)
printf("第%d行最大数为%d\n",i+1,max[i]);
}

J. C语言如何求一个二维数组有几行,还有为什么会提示gets()是一个未定义的标识符

C语言中求一个二维数组有几行的方法如下:
假设有定义int nums[10][20];
二维数组行数可以用sizeof计算:
rows = sizeof(nums)/sizeof(nums[0]);

第二个问题,为什么gets会提示未定义标识,有两种可能:

一、编译器支持gets库函数,但是你没有包含头文件#include<stdio.h>;

二、编译器本身不支持gets库函数,因为gets函数是一个不安全函数,容易导致数组越界,所以很多编译器都不再有这个库函数了。取而代之的是gets_s或者fgets这类相对安全的函数,可以试试。