c语言二维数组例题(c语言调用数组函数)

admin 474 0

老铁们,大家好,相信还有很多朋友对于c语言二维数组例题和c语言调用数组函数的相关问题不太懂,没关系,今天就由我来为大家分享分享c语言二维数组例题以及c语言调用数组函数的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

一、C语言题目 对二维数组的正确说明是:

1、数据类型数组名[整常量表达式][整常量表达式]={初始化数据};

2、在{}中给出各数组元素的初值,各初值之间用逗号分开。把{}中的初值依次赋给各数组元素。

3、 int a[2][3]={{1,2,3},{4,5,6}};

4、在{}内部再用{}把各行分开,第一对{}中的初值1,2,3是0行的3个元素的初值。第二对{}中的初值4,5,6是1行的3个元素的初值。相当于执行如下语句:

5、 a[0][0]=1;a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;

6、注意,初始化的数据个数不能超过数组元素的个数,否则出错。

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

8、把{}中的数据依次赋给a数组各元素(按行赋值)。即a[0][0]=1; a[0][1]=2;a[0][2]=3;a[1][0]=4;a[1][1]=5;a[1][2]=6;

9、 static int a[2][3]={{1,2},{4}};

10、第一行只有2个初值,按顺序分别赋给a[0][0]和a[0][1];第二行的初值4赋给a[1][0]。由于存储类型是static,故其它数组元素的初值为0。注:某些C语言系统(如:Turbo C)中,存储类型不是static的变量或数组的初值也是0。

11、只有2个初值,即a[0][0]=1,a[0][1]=2,其余数组元素的初值均为0。

12、⑷可以省略第一维的定义,但不能省略第二维的定义。系统根据初始化的数据个数和第2维的长度可以确定第一维的长度。

13、 int a[ ][3]={ 1,2,3,4,5,6};

14、a数组的第一维的定义被省略,初始化数据共6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2。

15、一般,省略第一维的定义时,第一维的大小按如下规则确定:

16、初值个数能被第二维整除,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1。例如,int a[ ][3]={ 1,2,3,4};等价于:int a[2][3]={ 1,2,3,4};

17、若分行初始化,也可以省略第一维的定义。下列的数组定义中有两对{},已经表示a数组有两行。

18、 static int a[ ][3]={{1,2},{4}};

19、来自http://blog.csdn.net/chenshijun0101/article/details/6640377

二、在C语言中,写出二维数组元素a[2][3]在内存中的存放顺序

1、在 C语言中,二维数组是由一系列连续的内存位置组成的,其中每个元素占用一个特定的字节数。对于一个二维数组 a[2][3],其存放顺序如下图所示:

2、在这个示例中,我们定义了一个 2行 3列的二维数组 `a`。对于每个元素,它的值都存储在内存中的一个特定地址上。可以看到,第一行的元素 `a[0][0]`、`a[0][1]`和 `a[0][2]`存储在连续的内存位置中,接着是第二行的元素 `a[1][0]`、`a[1][1]`和 `a[1][2]`。

3、对于这个示例中的二维数组而言,如果使用指针访问它们,则需要将其视为一个一维数组来处理。具体来说,可以将二维数组转��为一个指向包含所有元素的一维数组的指针,并使用单个索引来访问每个元素。例如,要访问 `a[1][2]`的值,可以使用以下代码:

4、p=&a[0][0];//将二维数组转换为一维数组指针

5、*(p+ 1*3+ 2)= 42;//访问 a[1][2]并将其赋值为 42

6、在这个示例中,我们首先定义了一个 2行 3列的二维数组 `a`。然后,我们使用指针 `p`将二维数组转换为一维数组的指针。最后,我们使用 `(p+ 1*3+ 2)`计算出 `a[1][2]`在数组中的偏移量,并将其值设置为 42。注意,这里的“偏移量”是指此元素与数组起始位置之间的距离,以字节为单位计算。

三、C语言程序设计中"二维数组中元素指针的表示"的例题,求详解

1、要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。

2、一个二维数组在计算机中存储时,是按行存储的,即先存储第一行的元素,再存储第二行的元素。

3、当把每一行看作一个整体,即作为一个大的数组元素时,原来的二维数组也就变成一个一维数组了。而每个大数组元素对应原来二维数组中的一行,称为行数组元素,显然每个行数组元素都是一个一维数组。

4、下面讨论二维数组元素和指针之间的对应关系,清楚了二者之间的关系,就能用指针处理二维数组了。

5、设p是指向二维数组a[M][N]的指针变量,若有:p=a[0];则p+j将指向a[0]数组中的元素a[0][j]。

6、由于a[0]、a[1]┅a[M-1]等各个行数组依次连续存储,则对于a数组中的任一元素a[i][j],指针的一般形式如下:p+i*N+j用"*"运算符表示为:*( p+i*N+j)同样,a[i][j]也可使用指针下标法表示,如下:p[i*N+j]

四、怎样学好C语言

1)程序结构是三种:顺序结构,循环结构(三个循环结构),选择结构(if和 switch)

2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。

3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.

4)bit是位是指为0或者1。 byte是指字节,一个字节=八个位.

5)一定要记住二进制如何划成十进制。

1、编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。

2、每个C语言程序中main函数是有且只有一个。

4、算法的是一定要有输出的,他可以没有输入。

5、break可用于循环结构和switch语句。

合法的要求是由字母,数字,下划线组成。有其它元素就错了。

并且第一个必须为字母或则是下划线。第一个为数字就错了。

关键字不可以作为用户标识符号。main define scanf printf都不是关键字。迷惑你的地方If是可以做为用户标识符。因为If中的第一个字母大写了,所以不是关键字。

2.333e-1就是合法的,且数据是2.333×10-1。

考试口诀:e前e后必有数,e后必为整数。.

'1'是字符占一个字节,"1"是字符串占两个字节(含有一个结束符号)。

'0'的ASCII数值表示为48,'a'的ASCII数值是97,'A'的ASCII数值是65。

4)整型一般是两个字节,字符型是一个字节,双精度一般是4个字节:

考试时候一般会说,在16位编译系统,或者是32位系统。碰到这种情况,不要去管,一样做题。掌握整型一般是两个字节,字符型是一个字节,双精度一般是4个字节就可以了。

在程序中 int a= 0x6d,是把一个十六进制的数给变量a注意这里的0x必须存在。

在程序中 int a= 06d,是一个八进制的形式。

在转义字符中,’\x6d’才是合法的,0不能写,并且x是小写。

‘\141’是合法的, 0是不能写的。

‘\108’是非法的,因为不可以出现8。

同级别的有的是从左到右,有的是从右到左。

一定是(int)a不是 int(a),注意类型上一定有括号的。

注意(int)(a+b)和(int)a+b的区别。前是把a+b转型,后是把a转型再加b。

赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。

自加、自减表达式:假设a=5,++a(是为6), a++(为5);

运行的机理:++a是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这

个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,

再放到变量a中。进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。

考试口诀:++在前先加后用,++在后先用后加。

逗号表达式:优先级别最低;表达式的数值逗号最右边的那个表达式的数值。

(2,3,4)的表达式的数值就是4。

总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。

b= a<<2;这种题目的计算是先要把a的十进制6化成二进制,再做位运算。

例3:在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。

10)018的数值是非法的,八进制是没有8的,逢8进1。

11)%符号两边要求是整数。不是整数就错了。

%d对应整型;%c对应字符;%f对应单精度等等。宽度的,左对齐等修饰。

%ld对应 long int;%lf对应double。

注意该函数的第二个部分是&a这样的地址,不是a;

Scanf(“%d%d%*d%d”,&a,&b,&c);跳过输入的第三个数据。

3)putchar,getchar函数的考查:

char a= getchar()是没有参数的,从键盘得到你输入的一个字符给变量a。

putchar(‘y’)把字符y输出到屏幕中。

4)如何实现两个变量x,y中数值的互换(要求背下来)

不可以把 x=y,y=x;要用中间变量 t=x;x=y;y=t。

5)如何实现保留三位小数,第四位四舍五入的程序,(要求背下来)

这个有推广的意义,注意 x=(int)x这样是把小数部分去掉。

特别要注意:c语言中是用非0表示逻辑真的,用0表示逻辑假的。

表达式的数值只能为1(表示为真),或0(表示假)

当关系的表达是为真的时候得到1。如 9>8这个是真的,所以表达式的数值就是1;

只能为1(表示为真),或0(表示假)

a)共有&&||!三种逻辑运算符号。

c)注意短路现象。考试比较喜欢考到。

d)要表示 x是比0大,比10小的方法。0<X<10是不可以的(一定记住)。< span>是先计算0要用(0<X)&&(X<10)表示比0大比10小。< span>

else是与最接近的if且没有else的相组合的。

注意是当非0时候是表达式2的数值,当为0是就是表达式2的数值。

a)一定要注意有break和没有break的差别,书上(34页)的两个例子,没有break时候,只要有一个case匹配了,剩下的都要执行,有break则是直接跳出了swiche语句。

b)switch只可以和break一起用,不可以和continue用。

a)for(); while(); do- while()三种。

b)for循环当中必须是两个分号,千万不要忘记。

c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。

d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错)

break:是打破的意思,(破了整个循环)所以看见break就退出真个一层循环。

continue:是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。

就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。

4) while((c=getchar())!=’\n’)和 while(c=getchar()!=’\n’)的差别

先看a= 3!= 2和(a=3)!=2的区别:

(!=号的级别高于=号所以第一个先计算 3!=2)第一个a的数值是得到的1;第二个a的数值是3。

考试注意点:括号在这里的重要性。

函数:是具有一定功能的一个程序块;

1)函数的参数,返回数值(示意图):

z就是这个add函数计算后得到的结果,就是函数返回给主程序的返回数值。

程序是在从上往下顺序执行,当碰到了函数add后,把a,b的数值穿给调用函数,程序暂时中断等待返回数值。当得到了返回数值后,再顺序的往下执行

实参和形参之间传数值,和传地址的差别。(考试的重点)

传数值的话,形参的变化不会改变实参的变化。

传地址的话,形参的变化就会有可能改变实参的变化。

一定要有:函数名,函数的返回类型,函数的参数类型。

指针变量的本质是用来放地址,而一般的变量是放数值的。

*p可以当做变量来用;*的作用是取后面地址p里面的数值

*p++和(*p)++的之间的差别:改错题目中很重要

数组名:表示第一个元素的地址。数组名不可以自加,他是地址常量名。(考了很多次)

函数名:表示该函数的入口地址。

字符串常量名:表示第一个字符的地址。

1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。

3、a是一维数组名,所以它是列指针,也就是说a+1是跳一列。

1、a表示数组名,是第一个元素的地址,也就是元素a[10]的地址。

2、a是地址常量,所以只要出现a++,或者是a=a+2赋值的都是错误的。

3、a是二维数组名,所以它是行指针,也就是说a+1是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1都是跳一列。

5、注意a和a[0]、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。

如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。

步骤一:把他们写成:第一列第二列第三列

*(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。

*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。

一定记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。

数组的初始化,一维和二维的,一维可以不写,二维第二个一定要写

int a[]={1,2}合法。 int a[][4]={2,3,4}合法。但int a[4][]={2,3,4}非法。

其中a现在就是一个行指针,a+1跳一行数组元素。搭配(*)p[2]指针

a[0],a[1]现在就是一个列指针。a[0]+1跳一个数组元素。搭配*p[2]指针数组使用

a[2]变成*(a+2) a[2][3]变成*(a+2)[3]再可以变成*(*(a+2)+3)

五、c语言二维数组问题

1、a[i]=*(&a[i]),为数组的一个元素。

2、a[i]=*(&a[i]),为数组的一个列指针。

3、a+i=&a[i],为数组的一个行指针,也是列指针a[i]的地址。

4、*a[i],表示第(i+1)行第1列的元素。

5、(a+i)、a[i]在一维数组和二维数组中的含义不同。

6、(a+i)表示地址,元素地址,数组名。

7、(a+i)表示行指针,列指针地址,元素地址的地址,以一行列指针为元素的数组的数组名(过渡数组名)

六、急急!!!如何用c语言输入和输出一个二维数组

1、c语言的输入输出可用标准库里面的输入输出函数,即scanf和printf。

2、int array[M][N];//定义一个5x5的int数组

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

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

七、C语言中如何直接输出一个二维数组

1、c语言中直接输出一个二维数组是用数组来访问输出的,例子:

2、 printf("%d\t",a[i][j]);//直接用数组来访问

3、}

除了可以直接访问,也可以用指针来访问,用指针指向该数组,便可进行对数组的读写操作。

4、除了可以直接访问,也可以用指针来访问,用指针指向该数组,便可进行对数组的读写操作。

c语言二维数组例题和c语言调用数组函数的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!