C语言中数组的定义怎么理解?

今天一起来分析C语言的数组。

以下内容,只代表个人观点,不一定对,仅供参考,随便看看。

C语言的构造类型的数据,有数组类型、结构体类型、共用体类型。

构造类型数据是由基本类型数据按一定规则组成的。

下面介绍一维数组、二维数组、多维数组以及字符数组的定义、初始化、引用及应用。

数组是一种构造类型的数据,通常用来处理具有相同属性的一批数据。

数组是一组相同类型的数的组合。

一维数组的定义格式为:

类型说明符 数组名[常量表达式];

它表示数组名为a,此数组有5个元素。

1、数组名的命名规则和变量名相同,遵循标识符命名规则;

2、数组名后是用方括弧括起来的常量表达式,不能用圆括弧;

3、常量表达式表示元素个数,即数组长度。在上面例子a[5]中,5表示a数组有5个元素,下标从0开始,这5个元素是,a[0],a[1],a[2],a[3],a[4]。注意不能使用数组元素a[5];

4、常量表达式中可包括常量和符号常量,不能包含变量。即在C语言中,不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。

下面这样定义数组是不行的:

5、数组必须先定义,后使用。只能逐个引用数组元素而不能一次引用整个数组。

数组类型 数组名 数组的长度,数组元素

数组定义时必须规定固定的长度,即数组长度必须是一个固定的常量,不能改变。

数组的赋值有两种方式:

方式一:在定义的同时,给各元素赋值;

方式二:定义以后对逐个数组元素进行赋值

1、在定义数组时对数组元素赋以初值,可以全部元素赋值,也可以部分元素赋值。

定义a数组有10个元素,但花括弧内只提供5个初值,表示只给前面5个元素赋初值后,5个元素值默认为0。

2、如果想使一个数组中全部元素值为0,

3、在对全部数组元素赋初值时,可以不指定数组长度。

1、二维数组定义的一般形式为

类型说明符 数组名[常量表达式][常量表达式]

2、二维数组元素的形式为:

数组名[行下标表达式][列下标表达式]

1)“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。

2)“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x[3][4],则可用的行下标范围为0~2,列下标范围为0~3。

3)对基本数据类型变量所能进行的操作,也都适合于相同数据类型的二维数组元素。

1)按行赋初值:数据类型 数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},……,{最后1行初值表}};

赋值规则:将“第0行初值表”中的数据,依次赋给第0行中各元素;将“第1行初值表”中的数据,依次赋给第1行各元素;以此类推。

2)按二维数组在内存中的排列顺序给各元素赋初值

数据类型 数组名[行常量表达式][列常量表达式]={初值表};

赋值规则:按二维数组在内存中的排列顺序,将初值表中的数据,依次赋给各元素。

如对全部元素都赋初值,则“行数”可省略。

注意,只能省略“行数”。

用来存放字符的数组称为字符数组。字符数组类型的形式与前面介绍的数值数组相同。

char c[5][10]; //即为二维字符数组。字符数组也允许在类型说明时作初始化赋值。

当对全体元素赋初值时也可省去长度说明

字符串在C语言中没有专门的字符串变量, 通常用一个字符数组来存放一个字符串。

字符串总是以‘\0’作为串的结束符。因此当把一个字符串存入一个数组时, 也把结束符‘\0’存入数组,并以此作为该字符串是否结束的标志。

有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。

C语言允许用字符串的方式对数组作初始化赋值。

用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志'\0'。

除了上述用字符串赋初值的办法外,还可用printf函数和scanf函数一次性输出输入一个字符数组中的字符串, 而不必使用循环语句逐个地输入输出每个字符。

注意在本例的printf函数中,使用的格式字符串为“%s”, 表示输出的是一个字符串。

d=超出数组范围,值不确定。

1、数组元素下标是从0开始,上面程序案例uhcar niu[3]={3,6};定义数组niu的长度为3,也就是该数组有三个元素,依次为niu[0]、niu[1]和niu[2];

2、数组元素如果定义时没有赋值默认为0;

3、数组长度如果是n,那么数组元素个数只能是0到n-1,没有niu[n]这个元素。例如上面案例定义数组uhcar niu[3]={3,6};没有数组元素niu[3];因为该元素超出范围了,值不确定,有的编译器会直接报错。

2.2、数组的典型应用:

g=7;//字符串赋值的时候多了一个结束符'\0'

特例1:数组定义时同时赋值了,数组长度可以不写,默认为赋值的长度。详见例子第二行代码;

特例2:数组赋值为’3’表示为字符(ASCII码的字符’3’),而不是数字3;详见例子第三行代码;

特例3:数组在定义时赋值为字符串的话,如果定义时没有指定长度,那么真实的数组长度为字符串中字符数量+1,后面多了一个字符串结束符'\0',详见例子第五行代码。

3.1数组的定义和使用:

数组类型 数组名 数组长度 数组赋初值

niu[3]的值因为超出数组范围,值不确定。

期待您的未来,能够创造出更美好的世界。

本文章来自公众号老牛经济学原创

首先,我们需要了解气泡排序的原理。原理是比较第一个数和第二个数。第二,比较第三个数据,然后依次比较。

在比较过程中。比较前后两个数字,把大的移到右边。如果这本大书在左边,就好像把它移到右边一样。如果大数字在右边,它就不会移动。所以你的问题是比较两个数字,比较后把大的数字移到右边。只是双方价值观的交换。

C语言中数组arr和 &arr对应的地址为什么一样?

这对我来说太难了!然而,我们发现指针可能不容易理解。例如,long a=1和int a=1的值是相同的。amparr的函数有点像long to int。ARR address是整个数组的地址&ARR是第一个数字的地址。两者虽然价值相同,但意义不同。操作arr和&arr的结果也不同。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任。如有侵权/违法内容,本站将立刻删除。

2. C 语言对数组下标的引用一般从 0 开始。

3. C 语言中,一个函数一般由两个部分组成,它们是 函数首部 和 函数体 。

4. C标准库函数中,字符串的处理函数包含在 string.h 头文件中,数学函数包含在 math.h头文件中。

5. C程序的运行需要经过 编译 和 链接 两步进行。

6. C程序中用 /**/ 括起来的内容是程序的注释语句。

7. C语言函数是由函数首部和函数体两部分组成。其中,函数首部包括 函数类型 、 函数名 和 函数参数 。

8. C语言提供的三种逻辑运算符是 &,//,! 。

9. C语言源程序经过编译后,生成文件的后缀名是 .c 。

10. C语言源程序经过连接后,生成文件的后缀名是 .exe 。

11. C语言中,关系表达式和逻辑表达式的值是 1//0 。

12. C语言中的标识符只能由三种字符组成,他们是 字母,数字,下划线 。

13. C语言中的每条基本语句以 ; 作为结束符,每条复合语句以}作为结束符。

14. C语言中函数返回值的类型是由 函数类型 决定的。

15. C源程序的基本单位是 函数 。

19. 定义一个指针p,它指向一个有6个整型元素的一维数组,定义语句为 int *p=a[6] ; 。

20. 定义一个指针数组p,它有4个元素,每个指针指向一个整型数据,定义语句为 int *p[4]; 。

21. 赋值语句是由 = 加上一个分号构成。

22. 构成数组的各个元素必须具有相同的 类型 。

25. 函数的形参在未被调用前不分配空间,函数形参的数据类型要和实参相同。

26. 函数体用{开始,用}结束。

27. 结构化设计中的三种基本结构是 顺序,选择,循环 。

28. 如果一个函数无返回值,定义它时函数类型应是 void 。

30. 若用数组名作为函数调用时的实参,则实际上传递给形参的是 数组的首地址。

34. 设y为int型变量,请写出描述“y是奇数”的表达式 y%2!=0; 。

35. 设有数组a[10],数组元素a[3]的地址可以写成 。

36. 数组由数组名和下标构成,其数组元素的数据类型是 。

38. 一个C程序有且仅有一个 main 函数。

39. 已知函数定义为:int stat(int a,float *p),则此函数的两个参数类型分别是 整形 、 浮点型 。

41. 预处理命令以 # 开头。

42. 在C语言的表达式中,x=x+5 用复合运算符可以写成 x+=5 。

43. 在C语言中,表示静态存储类别的关键字static。

44. 在C语言中,二维数组元素的内存中的存放顺序是 行顺序存放 。

45. 在C语言中,以 ‘\0’ 作为字符串结束标志。

46. 在C语言中的实型变量分为两种类型,它们是 整形 和 浮点型 。

47. 在scanf函数中,用符号 & 表示变量的地址。

48. 在传值调用中,实际是把实参的 地址传给形参 。

50. 指针是存放 地址 的变量。

1、C语言源程序的基本单位是 A

2、在每个C程序中都必须包含有这样一个函数,该函数的函数名为 A

3、C语言规定,在一个源程序中,main函数的位置 C

A. 必须在最开始 B. 必须在系统调用的库函数的后面

C. 可以任意 D. 必须在最后

4、在以下关于C语言的注释的叙述中,不正确的是 C

A.注释可用"/*"、"*/"形式表示,也可用"//"形式表示

B. 编译器在编译一个程序时,将跳过注释,不对其进行处理

C. 编译器在编译一个程序时,可发现注释中的单词拼写错误

D.程序中注释的多少不会影响所生成的可执行文件的长度

5、以下叙述不正确的是 C

A.在C程序中,严格区分大小写字母

B.一个C源程序有且仅有一个main函数

C.在C程序中,注释只能位于一条语句的后面

D. 一个C程序总是从main函数开始执行

6、C语言中,表示一条语句结束的标号是 B

7、在C语言中,以下叙述不正确的是 A

A) 在C程序中,无论是整数还是实数,都能被准确无误的表示

B) 在C程序中,变量名代表存储器中的一个位置

C) 静态变量的生存期与整个程序的生存期相同

D) C语言中变量必须先定义后引用

8、C语言程序编译过程中产生的文件有 B

A. 索引文件和文本文件两种 B. 目标文件和可执行文件

C. 二进制文件一种 D. ASCII码文件和二进制文件两种

9、C语言中的变量名只能由字母,数字和下划线三种字符组成,且第一个字符 C

A) 必须为字母 B) 必须为下划线

C) 必须为字母或下划线 D) 可以是字母,数字或下划线中的任意一种

10、C语言中非空的基本数据类型包括 B

A) 整型,实型,逻辑型 B) 整型,实型,字符型

C) 整型,字符型,逻辑型 D) 整型,实型,逻辑型,字符型

11、下列哪一个表达式的值是整数类型 A

12、设变量a是整形,f是实型,i是双精度型,则表达式10+′a′+i*f值的数据类型 C

14、在C语言中,char型数据在内存中的存储形式是 D

15、下列字符列中,可以作为“字符串常量”的是 B

16、以下运算符中,优先级最高的运算符是 D

17、设有定义int k=0;则以下四个表达式中与其它三个的值不同的是C D

24、在C语言中逻辑值“真”是用 B 表示的。

A. 预定义为真值的宏 B. 非零值 C. 正数 D. 非零整数

25. C语言对于嵌套if语句规定else总是与 C 匹配。

A)与最外层的if B.)与之前最近的if

26、为了避免嵌套的if-else语句的二义性,C语言规定else总是与 C 组成配对关系.

A) 缩排位置相同的if B) 在其之前未配对的if

C) 在其之前尚未配对的最近的if D) 同一行上的if

27、设x和y均为逻辑型变量,则x && y为真的条件是 A

A. 它们均为真 B. 其中一个为真

C. 它们均为假 D. 其中一个为假

28、能正确表示逻辑关系:"a≥ 10或a≤ 0" 的C 语言表达式是 D

29、判断char型变量c 1是否为小写字母的正确表达式为 D

34、若有条件表达式 (exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是 B

35、若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式 D

36、设x 、y 、z 、t均为int型变量,则执行以下语句后,t的值为 C

39、下面程序段的运行结果是 D

40、设执行变量y值为3,执行下列循环语句后,变量y的值是 C

43、在定义一个一维数组时,不能用来表示数组长度的是 D

A) 常量 B)符号常量 C)常量表达式 D)已被赋值的变量

44、判断字符串是否相等,应当使用 D

47、运行下面程序段的输出结果是 A

48、以下程序段的输出结果是 B

51、若二维数组a有m列,则在a[i][j]前面的元素个数为 B

53、以下二维数组 a 的正确说明是 C

56、以下对二维数组a 的正确说明是 C

57、若有定义:int b[3];则数组元素的不合法引用是 D

C)将5个初值依次赋给a[6] 至a[10] D)因为数组长度与初值的个数不相同, 所以此语句不正确

62、以下正确的函数定义形式是 A

64、在C语言中,全局变量的存储类别是 A

65、在C语言中,以下说法中正确的是 A

A. 实参与其对应的形参各占用独立的存储单元

B. 实参与其对应的形参占用同一个存储单元

C. 只有当实参与形参同名时才占用同一个存储单元

D. 实参占用存储单元,但形参是虚拟的,不占用存储单元

66、C语言中,简单变量做实参时,它和对应的形参之间的数据传递方式是 B

(A)地址传递   (B)单向值传递

(C)由实参传给形参,再由形参传递给实参

(D)同用户指定传递方式

67、在一个源文件中定义的全局变量的作用域为 B

A. 本文件的全部范围 B. 从定义该变量开始至本文件结束

C. 本函数的全部范围 D. 本程序的全部范围

68、如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了一个变量,则该变量 C

A) 为全局变量,在本程序文件范围内有效

B) 为局部变量,只在该函数内有效

C) 为局部变量,只在该复合语句中有效

D) 定义无效,为非法变量

69、调用函数时,当实参和形参都是简单变量时,它们之间数据传递的过程是 D

A) 实参将其地址传递给形参,并释放原先占用的存储单元

B) 实参将其地址传递给形参,调用结束时形参再将其地址回传给实参

C) 实参将其值传递给形参,调用结束时形参再将其值回传给实参

D) 实参将其值传递给形参,调用结束时形参并不将其值回传给实参

70、以下叙述中,不正确的是 B

A) 在同一C程序文件中,不同函数中可以使用同名变量

B) 在main函数体内定义的变量是全局变量

C) 形参是局部变量,函数调用完成即失去意义

D) 若同一文件中全局变量和局部变量同名,则全局变量在局部变量作用范围内不起作用

71、对于C语言的函数,下列叙述中正确的是 A

A) 函数的定义不能嵌套,但函数调用可以嵌套

B) 函数的定义可以嵌套,但函数调用不能嵌套

C) 函数的定义和调用都不能嵌套

D) 函数的定义和调用都可以嵌套

(A)a数组第2行第4列元素的地址

(B)a数组第2行第4列元素的值

(C)a数组第4行的首地址

(D)a数组第1行第3个元素的地址

75、若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是 A。

A. 字符或文件 B. 整型或实型 C. 共用或结构 D. 实型或指针

78、设有以下说明语句:

则下面的叙述不正确的是 C

A.struct是结构体类型的关键字

C.stutype是用户定义的结构体类型名

D. a 和 b都是结构体成员名

79、下列关于结构的语法错误的是 D

A.结构是由用户自定义的一种数据类型

B.结构中可设定若干个不同数据类型的成员

C.结构中成员的数据类型可以是另一个已定义的结构

D.在定义结构时,可以为成员设置默认值

80、说明一个结构体变量时,系统分配给它的内存是 A

A.各成员所需内存量的总和

B.结构中第一个成员所需内存量

C.成员中占内存量最大者所需的容量

D.结构中最后一个成员所需内存量



更多专升本模拟试题请点击查看>>

我要回帖

更多关于 C语言定义double型数组 的文章

 

随机推荐