内容正文:
项目五 数组
1
C语言程序设计基础
知识目标
了解数组
掌握一维数组的使用方法
掌握二维数组的使用方法
掌握字符数组与字符串的使用方法
掌握数组的应用
技能目标
学会一维数组的使用方法
学会二维数组的使用方法
学会字符数组的使用方法
学会字符串的使用方法
思政目标
提高德、智、体、美、劳全面发展的意识
重视思想政治素质的培养
2
任务4
——字符数组与字符串
3
一维字符数组定义的语法格式:
char 数组名[常量表达式];
二维字符数组定义的语法格式:
char 数组名[常量表达式1][常量表达式2];
数组——基础篇
4.1字符数组的定义
4
(1)对一维字符数组a部分元素赋初值时,未赋值的元素自动赋值char类型默认值,即空字符null(即’\0’)。
(2)对一维字符数组a中所有元素赋初值时,可以不指定数组长度。
char a[ ]={‘a’,’b’,’c’,’d’,’e’};
(3)对二维字符数组a赋初值。
char a[2][3]={{‘1’,’*’},{‘\0’,’a’};
数组——基础篇
4.2字符数组的初始化
5
字符数组元素的引用与数值数组元素引用方式相同。
一维字符数组的数组元素引用形式:
数组名[下标1]
二维字符数组的数组元素引用形式:
数组名[下标1][下标2]
数组——基础篇
4.3字符数组的引用
6
【例5-4】使用字符数组输出字符串“I love you China!”。
【解题思路1】
1. 需要定义一个字符数组存储字符串,定义一个一维字符数组即可。
2. 给一维字符数组元素赋初值时,注意不要遗漏了字符串中的空格字符,字符个数一共17个
char a[17]={‘I’,’ ’,’l’,’o’,’v’,’e’,’ ’,’y’,’o’,
’u’,’ ’,’C’,’h’,’i’,’n’,’a’,’!’}; 。
3. 定义循环变量i。
4. 使用循环for(i=0;i<17;i++) 输出数组内字符。
数组——基础篇
7
【程序代码】
数组——基础篇
8
【解题思路2】
1.由于字符串中字符个数较多,算字符个数容易出错,初时化时可以使用不指定数组长度的方式进行赋值初。
2. 此时,在使用循环输出数组内字符时,由于不知道循环次数,可采用循环while(a[i]!=’\0’) 输出数组内字符。
数组——基础篇
9
【程序代码】
数组——基础篇
10
【运行结果】
数组——基础篇
11
字符串常量是用双引号括起来的一串字符,并用’\0’(ASCII码值为0)作为字符串的结束标志,结束标志占一个字节的内存空间,但不计入串的长度。
初始化字符数组时,可使用字符串常量对字符数组赋初值。
数组——基础篇
4.4字符串
12
字符数组的输入输出有两种方式:
1.逐个字符输入和输出
用格式化符号“%c”逐个输入或输出一个字符。
若已定义字符数组a,
输入一般格式:
在循环中使用scanf(“%c”,&a[i]);
输出一般格式:
在循环中使用printf(“%c”,a[i]);
数组——基础篇
4.5字符数组的输入输出
13
2.整个字符串输入和输出
用格式化符号“%s”输入或输出整个字符串。
若已定义字符数组a,
输入一般格式:
scanf(“%s”,a);
输出一般格式:
printf(“%s”,a);
注意:a为数组名,也即是数组a的首地址。
数组——基础篇
14
【例5-5】通过键盘输入字符串“我爱我的祖国,我爱我的家乡,我爱我的学校!”并将字符串输出显示。
【解题思路】
1. 定义一个能足够存下字符串的字符数组。估算一下50字节空间足够。当然有同学想具体算一下准确的字符串长度也是可以的,但要注意1个汉字占2个字节,使用字符串赋值时,不要漏算字符串最后的‘\0’。
2. 在使用输入语句时,一般需要在之前使用printf()对输入的内容进行提示,否则编译运行时,不知该输入什么内容。请大家养成良好的习惯。
数组——基础篇
15
【程序代码】
数组——基础篇
16
【运行结果】
数组——基础篇
17
说明:
使用scanf(“%s”,a); 输入字符串时,不允许输入空格,当输入空格时,虽仍然能继续输入字符,但后续输入的字符无法存入字符数组。
如例5-5运行时,输入的字符串为“I love you China!”,输出的字符串为“I”。
也就是说,如果要输入的字符串中含有空格,使用scanf()输入时,必须使用循环进行逐个字符输入,代码如下。
数组——基础篇
18
数组——基础篇
19
C语言的函数库中提供了专门用来处理字符串的函数,使用这些函数可以大大减轻编程的负担。
用于输入输出字符串的函数,在使用前,应包含头文件”stdio.h”,其它的字符串处理函数,在使用前,应包含头文件”string.h”。
数组——基础篇
4.6常用字符串处理函数
20
1. 字符串输入函数 gets()
格式:
gets(字符数组名);
功能:
从终端上(如键盘)输入一个字符串到字符数组,该函数得到一个函数值,即为该字符数组的首地址。gets()函数允许输入空格,当输入的字符串含有空格时不会被截断,以enter确定字符串输入结束。
数组——基础篇
21
2.字符串输出函数 puts()
格式:
puts(字符数组名);
功能:
把字符数组中的字符串输出到显示器上。
数组——基础篇
22
说明:
(1)使用scanf(“%s”,a); 输入字符串时,不能接收空格,gets()函数允许输入空格,因此输入整个字符串对字符数组赋值时,一般使用gets()函数。
(2)gets()函数从标准输入设备上读字符,可以无限读取,不会判断定义的字符数组上限,仅以回车结束读取,因此编写程序时,要确保buffer(缓冲)空间足够大,以便在读操作时不发生溢出。
数组——基础篇
23
【例5-6】使用gets()函数获取任意字符串到字符数组,并输出字符串。
【程序代码】
数组——基础篇
24
【运行结果】
数组——基础篇
25
3.测试字符串长度函数 strlen()
格式:
strlen(字符数组名)
功能:
测试字符串的实际长度(不含字符串结束标志字符‘\0’),并作为函数返回值。
数组——基础篇
26
【例5-7】测试字符串1“I love you China .”和字符串2“我爱你中国。”(注意标点符号)
【程序代码】
数组——基础篇
27
【运行结果】
数组——基础篇
28
4.字符串连接函数 strcat()
格式:
strcat(目标字符数组名,源字符数组名)
功能:删去目标字符数组后的字符串结束标志字符‘\0’,把源字符数组中的字符串连接到目标字符数组的后面。该函数返回值是目标字符数组的首地址。
数组——基础篇
29
【例5-8】 字符串1“我的家乡是:”,字符串2,输入您的家乡名,作为字符串2的内容。使用连接字符串,将字符串2连接到字符串1之后。
【程序代码】
数组——基础篇
30
【运行结果】
数组——基础篇
31
5.字符串复制函数 strcpy()
格式:
strcpy(目标字符数组名,源字符数组名)
功能:
把源字符数组中的字符串,复制到目标字符数组中,结束字符‘\0’也一同复制。源字符数组也可以是一个字符串常量,这时,相当于把一个字符串赋予一个字符数组。
数组——基础篇
32
例如:
(1)char a[60];
char b[ ]=”富强,民主,文明,和谐,自由,平等,公正,法治,爱国,敬业,诚信,友善”;
strcpy(a,b);
表示将字符数组b中字符串复制到a数组中。
(2)char a[60];
strcpy(a,”富强,民主,文明,和谐,自由,平等,公正,法治,爱国,敬业,诚信,友善”);
表示将字符串复制到a数组中。
数组——基础篇
33
6.字符串比较函数 strcmp()
格式:
strcmp(字符数组1名或字符串1,字符数组2名或字符串2)
功能:按照ASCII码值大小将两个字符串中字符从左至右逐个比较,直到出现不同的字符或遇到’\0’为止。如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一次不相同字符的比较结果为准返回函数值。
①字符串1 等于 字符串2,函数值=0;
②字符串1 大于 字符串2,函数值>0;
③字符串1 小于 字符串2,函数值<0。
ANSI标准规定,返回值有正数,负数,0。而确切数值是依赖不同的C实现的。比如,有些会把两个字符的ASCII码之差作为比较结果由函数值返回。但一般来说,返回值会是:0,1,-1。
数组——基础篇
34
7.大写转小写函数strlwr()与小写转大写函数strupr()
格式:
strlwr(字符数组名或字符串)
功能:
将字符串中大写字母转为小写字母。
格式:
strupr(字符数组名或字符串)
功能:
将字符串中小写字母转为大写字母。
数组——基础篇
35
$$