C语言——利用数组处理批量数据

1 什么是数组?

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

特点:
1.数组是一组有序数据的集合;
2.用一个数组名和下标来唯一确定数组中的元素;
3.数组中的每一个元素都属于同一个数据类型。

2 怎样定义和引用一维数组

2.1 怎样定义一维数组

定义一维数组的一般形式为:
类型说明符 数组名[常量表达式];
例如:下面是对数组的定义
int a[10];
它表示定义了一个整型数组,数组名为a,此数组包含10个整型元素(下标是从0开始的个数)。
注:
1 数组名的命名规则和变量名相同,遵循标识符号命名规则
2 在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。(如a[10],从a[0]开始到a[9]结束一共10个元素,按照a[10]的定义,不存在数组元素a[10]。)
3 常量表达式中可以包括常量和符号常量(C语言不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值)

2.2 怎样引用一维数组元素

在定义数组并对其中各元素赋值后,就可以引用数组中的元素(注:只能引用数组元素而不能一次整体调用整个数组全部元素的值,每一个数组元素都代表一个整数值)
引用数组元素的表示形式为:
数组名[下标] 注:定义数组时用到的“数组名[常量表达式]”和引用数组元素使用的“数组名[下标]”形式相同,但含义不同,例如:
int a[10]; //前面有int,这是定义数组,指定数组包含10个元素
t=a[6]; //这里的a[6]表示引用a数组中序号为6的元素

3 一维数组的初始化

为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为数组的初始化。可以用“初始化列表”方法实现数组的初始化
注:
1 在定义数组对全部数组元素赋予初值。例如:int a[10]={0,1,2,3,4,5,6,7,8,9};
2 可以只给数组中的一部分元素赋值。例如:int a[10]={0,1,2,3,4};(定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自动给后5个元素赋初值为0)
3 如果想使一个数组中的一部分元素赋值。例如:int a[10]={0,0,0,0,0,0,0,0,0,0};
4 在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:int a[5]={1,2,3,4,5};可以写成 int a[]={1,2,3,4,5};
5 如果在定义数值型数组时,指定了数组的长度并对之初始化,凡未被“初始化列表”指定初始化的数组元素,系统会自动把它们初始化为0(如果时字符型数组,则初始化为’\0’,如果是指针型数组,则初始化为NULL,即空指针)

4 怎样定义和引用二维数组

4.1 怎样定义二维数组

二维数组常称为矩阵。把二维数组写成行和列的排列形式,可以有助于形象化地理解二维数组的逻辑结构
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式][常量表达式];
例如:float a[3][4],b[5][6];(意思为定义a为3行4列的数组,b为5行6列的数组)

4.2 怎样引用二维数组的元素

二维数组元素的表示形式为:
数组名[下标][下标]
注:
1 数组元素可以出现在表达式中,也可以被赋值,例如:b[1][2]=a[2][3]/2
2 在引用数组元素时,下标值应在已定义的数组的大小的范围内。例如:
int a[3][4]; //定义a为3行4列的二维数组
a[3][4]=3; //不存在a[3][4]元素
3 严格区分定义数组使用的a[3][4]和引用元素使用的a[3][4]的区别
前者用a[3][4]来定义数组的维数和各维的大小
后者a[3][4]中的3和4是数组元素的下标值

5 二维数组的初始化

可以用“初始化列表”对二维数组初始化
注:
1 分行给二维数组赋初值。例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2 可以将所有数据写在2一个花括号内,按数组元素在内存中的排列顺序对个元素赋初值。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
3 可以对部分元素赋初值。例如:int a[3][4]={{1},{5},{9}};(它的作用是只对各行第一列(即序号为0的列)的元素赋初值,其余元素值自动为0)
4 如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};与这个定义等价int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

6 字符数组

6.1怎样定义字符数组

用来存放字符数据的数组是字符数组。在字符数组中的一个元素内存放一个字符
例如:char c[10];
C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:
1 char 字符串名称[长度] = “字符串值”;
2 char 字符串名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’};

6.2 字符数组的初始化

对字符数组初始化,最容易理解的方式是用“初始化列表”,把各个字符依次赋给数组中各元素
注:
1 如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的
2 如果花括号中提供的初值个数(字符个数)大于数组长度,则出现语法错误
3 如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即’\0’)
4 如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度

6.3 怎样引用字符数组中的元素

引用字符数组中的一个元素,得到一个字符

#include <stdio.h>
int main(){
char c[10]={‘i’,‘’,‘a’,‘m’,‘’,‘h’,‘a’,‘p’,‘p’,‘y’};//字符的初始化
int i;
for(i=0;i<10;i++)
printf(“%c”,c[i]);
printf(“\n”);
return 0;
}

6.4 字符串和字符串结束标志

在C语言中,是将字符串作为字符数组来处理的。C语言中规定了一个“字符串结束标志”,以字符’\0’作为结束标志(‘\0’代表ASCII码为0的字符)
注:
1 如果字符串中存在若干字符,前面9个字符都不是空字符,而第十个字符时’\0’,则认为数组中有一个字符串,其有效字符为9个。意思是在遇到字符串’\0’时,表示字符串结束,把它前面的字符组成一个字符串
2 C系统中在用字符数组存储字符串常量时会自动加一个’\0’作为结束符

6.5 字符数组的输入输出

字符串组的输入输出有两种方法:
逐个字符输入输出。用格式符"%c"输入或输出一个字符。例如:char c[]={“China”};
将整个字符串一次输入或输出。用"%s"格式符,意思是对字符串的输入输出。例如:printf(“%s\n”,c);
注:
1 输出的字符串不包括结束符’\0’;
2 用"%s"格式符输出字符串的时候,printf函数中的输出项是字符数组名,而不是数组元素名;
3 如果数组长度大于字符串的实际长度,也只输出到遇’\0’结束;
4 如果一个字符数组中包含一个以上的’\0’,则遇第一个‘\0’时输出就结束;
5 可以用scanf函数输入一个字符串(scanf函数中的输入项如果是字符串数组名,不要加地址符&)

6.6 使用字符串处理函数

在使用字符串处理函数时,在程序文件的开头用#include <string.h>

1 puts函数——输出字符串的函数
其一般的表现形式为:puts(字符数组);
作用:将一个字符串输出到终端。例如:假设str是一个字符数组名,则puts(str);

2 gets函数——输入字符串的函数
其一般的表现形式为:gets(字符数组);
作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。例如:gets(str);
注:用puts和gets函数只能输出或输入一个字符串,不能写成 puts(str1,str2);或 gets(str1,str2);

3 strcat函数——字符串连接函数
其一般的表现形式为:strcat(字符数组1,字符数组2);
作用:把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。例如:
注: 字符数组1必须足够大,以便容纳连接后的新字符串。例子中的str1的长度为30

在这里插入图片描述

4 strcpy函数和strncpy函数——字符串复制函数

4.1 strcap函数
其一般的表现形式为:strcap(字符数组1,字符串1);
作用:将字符串1复制到字符数组1中去。

4.2 strncpy函数
其一般的表现形式为:strcap(字符数组2,字符串2,数字);这里的数字是指你想复制几个字符
作用:将字符串2中的n个字符复制到字符数组2中去。

注:
1 在strcpy函数中,字符数组在被定义时必须足够大,以便容纳被复制的字符串。字符数组的长度不应小于字符串的长度
2 字符数组必须写成数组名形式(如str1),字符串可以是字符数组名,也可以是一个字符串常量
3 在复制之前若未对str1数组进行初始化或赋值,则str1的各字节中的内容是无法预知的
4 不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组,只能用strcpy函数讲话一个字符串复制到另一个字符数组中去
5 可以用strncpy函数将字符串2中前面n个字符复制到字符数组2中去。例如:strncpy(str1,str2,2);作用是将str2中最前面的2个字符复制到str1中,取代str1中最前面2个字符。但复制的字符个数不应多余str1中原有的字符(不包括’\0’)

5 strcmp 函数——字符串比较函数
其一般的表现形式为:strcmp(字符串1,字符串2);
作用:比较字符串1和字符串2的大小(比较规则:将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到’\0’为止)

注:
1 如全部字符相同,则认为两个字符串相等
2 如出现不同字符,则以第一对不相同的字符的比较结果为准
3 如果参加比较的两个字符串都由英文字母组成,在英文字典中位置在后面的大
4 如果字符串1和字符串2相同,则函数值为0
5 如果字符串1>字符串2,则函数值是一个正整数
6 如果字符串1<字符串2,则函数值是一个负整数
7 两个字符串比较,不能用以下形式:
if(str1>str2)
printf(“yes”);
因为str1和str2代表地址而不代表数组中的全部元素,只能用
if(strcmp(str1,str2)>0)
printf(“yes”);

6 strlen函数——测字符串长度的函数
其一般的表现形式为:strlen(字符数组);
作用:它是测字符串长度的函数。函数的值为字符串中的实际长度(不包括’\0’在内)

7 strlwr函数——转换为小写的函数
其一般的表现形式为:strlwr(字符串);
作用:将字符串中的大写字母换成小写字母

8 strupr函数——转换为大写的函数
其一般的表现形式为:strupr(字符串);
作用:将字符串中的小写字母换成大写字母

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值