C语言----数组

数组是一组有序数据的集合。其中每一个元素都属于同一个数据类型。

1.一维数组

(1)定义一维数组

定义一维数组的形式为:

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

①数组名的命名规则和变量名相同,遵循标识符命名规则。

②在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定 a 10,表示 a 数组有10个元素。注意,下标是从0开始的,这10个元素是 a 0 a 1, a 2, a 3, a 4, a 5, a 6, a 7, a 8, a 9。请特别注意,按上面的定义,不存在数组元素 a 10

③常量表达式中可以包括常量和符号常量,如" int a3+5;"是合法的。不能包含变量,如" int an;"是不合法的。

(2)引用一维数组

引用数组的表示形式为:
数组名下标

下标可以是整型常量或整形表达式。

(3)一维数组初始化

为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为数组的初始化。

①**在定义数组时对全部数组元素赋予初值。**如:

int a5={0,1,2,3,4};

②**可以只给数组中的一部分元素赋值。**例如:

int a10={1,2,3,4};

如果想使一个数组中全部元素值为0.可以写成

int a10={0,0,0,0,0,0,0,0,0,0};

也可以为:

int a10={0};

④**在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。**例如:

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

如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被"初始列表"指定初始化的数组元素,系统会自动把它们初始化为0(如果是字符型数组,则初竹为'\0',如果是指针型数组,则初始化为NULL,即空指针)。

2.二维数组

二维数组常称为矩阵。

(1)定义二维数组

二维数组定义一般形式为

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

前一个表达式代表行,后一个表达式代表列。

(2)引用二维数组

二维数组元素的表示形式为

数组名下标下标

例如**:**

int a23代表a数组中序号为2的行中的序号为3的列的元素。下标应为整型表达式。可以为:

a2-12\*2-1,不可以为a2,3,a2-1,2\*2-1的形式。

(3)二维数组的初始化

分行给二维数组赋初值 。例如:

int a34={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:

int a34={1,2,3,4,5,6,7,8,9,10,11,12};

可以对部分元素赋初值 。例如:

int a34={{1},{5},{9}};

④**如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。**例如:

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

3.字符数组

(1)定义字符数组

用来存放字符数据的数组就是字符数组

由于字符数据是以整数形式(ASCII代码)存放的,可以用整数来存放字符数据。

(2)字符数据的初始化

对字符数组初始化,最容易理解的方式是用"初始化列表",把各个字符依次赋给数组中各元素。例如:

char c10={'I',' ','a','m',' ','h','a','p','p','y'};

如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小干数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。

(3)字符串和字符串结束标志

在C语言中,是将字符串作为字符数组来处理的。同时C语言规定了一个字符串结束标志,以字符'\0'作为结束标志。

C 系统在用字符数组存储字符串常常量时会自动加一个'\0'作为结束符。

**字符数组还有一个用字符串的初始化方式。**如:

char c10={"I am happy"};

也可以为:

char c10="I am happy";

此时数组c的长度为11,不为10。因为字符串常量的最后由系统加上一个'\0'。

(4)字符数组的输入输出

①**逐个字符输入输出。**用格式符"%c"输入或输出一个字符。

②**将整个字符串一次输入或输出。**用"%s"格式符。

**用"%s"格式输出字符串时,printf函数中的输出项为字符数组名,而不是数组元素名。**如:

printf("%s",c0); //此方式错误

printf("%s",c);

如果数组长度大于字符串的实际长度,也只输出到'\0'结束。

输出时不输出'\0'。

如果一个字符数组包含多个'\0',则只输出到第一个'\0'为止。

注意:scanf函数中的输入项如果是字符数组名,则不再加&符

(5)使用字符串处理函数

①puts函数------输出字符串的函数

一般形式为

puts(字符数组)

用puts函数输出时可以包含转义字符。

②gets函数------输入字符串的函数(遇回车键结束)

一般形式为:

gets(字符数组)

③strcat函数------字符串连接函数

一般形式为:
strcat(字符数组1,字符数组2) {把字符数组2接到字符数组1后面}

④strcpy和strncpy函数------字符产复制函数

一般形式为:

strcpy(字符数组1,字符数组2) {将字符串2复制到字符数组1后}

注意:

(a)"字符数组1"必须写成数组名形式,"字符串2"可以为字符数组名,也可以为字符串常量。

(b)如果在复制前未对str1数组初始化或赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的'\0'一起复制到字符数组1中,取代字符数组1前面6个字符,最后4个字符并不一定是'\0',而是 strl 中原有的最后4个字节的内容。

(c)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

(d)可以用 strncpy 函数将字符串2中前面 n 个字符复制到字符数组1中去。例如:

strncpy(str1,str2,2);

作用是将str2中最前面2个字符复制到str1中,取代str1中原有的最前面2个字符。但复制的字符个数n不应多于strl中原有的字符(不包括'\0')。

⑤strcmp函数------字符串比较函数

一般形式为

strcpy(字符串1,字符串2)

作用是比较字符串1和字符串2长度。

(a)如全部字符相同,则认为两个字符串相等。

(b)若出现不相同的字符,则以第1对不相同的字符的比较结果为准。

注意:小写字母比大写字母大

如果结果为正整数,则字符串1>字符串2,反之字符串1<字符串2,如果为0,则相等。

⑥strlen函数------测字符串长度的函数

一般形式为
strlen(字符数组)

⑦strlwr函数------转换为小写的函数

一般形式为

strlwr(字符串)

⑧strupr函数------转换为大写的函数

一般形式为

strupr(字符串)

注意:在使用字符串处理函数时,应当在文件的开头用#include<string.h>

(6)各类输入输出的不同

对于scanf输入字符串,遇到空格和回车键结束,而gets输入遇到回车键结束。

相关推荐
小小测试开发3 小时前
安装 Python 3.10+
开发语言·人工智能·python
KaMeidebaby3 小时前
卡梅德生物技术快报|PD1 单克隆抗体定制配套 N 糖全谱质控开发
前端·人工智能·算法·数据挖掘·数据分析
8Qi84 小时前
LeetCode 235. 二叉搜索树的最近公共祖先(LCA)
算法·leetcode·二叉树·递归·二叉搜索树·lca·迭代
AAA大运重卡何师傅(专跑国道)4 小时前
【无标题】
开发语言·c#
bIo7lyA8v4 小时前
算法稳定性分析中的随机扰动建模的技术8
算法
是阿建吖!5 小时前
【Linux】信号
android·linux·c语言·c++
XBodhi.5 小时前
Visual Studio C++ 语法错误: 缺少“;”(在“return”的前面)
开发语言·c++·visual studio
科研online5 小时前
基于多源数据和XGBoost-SHAP分析中国大陆绿地碳汇空间变异影响因素的非线性相关性与尺度差异
算法·学习方法
Cthy_hy5 小时前
拓扑排序超详解:原理 + Kahn 贪心算法
python·算法·贪心算法
LSssT.5 小时前
【01】Python 机器学习
开发语言·python