内容正文:
沈阳职业技术学院教案用纸
第 5 周 总第 13 次 学时:2
教学班级: 课程:C语言程序设计 授课教师:
课题:4.4 字符数组与字符串
教学方法:讲授、启发
教具:常规教具
教学目标:使同学们掌握字符数组的定义与初始化以及常用字符串处理函数
教学重点:字符数组的定义以及初始化
教学难点:常用字符串处理函数
主要教学内容:
4.4 字符数组与字符串
4.5.1 字符数组的定义、初始化和引用
4.4.2 字符串的输入和输出函数
4.4.3 字符串函数简介
课后回顾:
沈阳职业技术学院教案用纸
四个一:
提问:数组的定义、赋值以及数据的输入、输出。
导入:上节课我们学习的数组元素的成员都是数值型的,在实际应用中,经常需要处理字符及字符串,如果需要处理的对象是字型的数据,又应该怎样定义和使用呢?
正文:
4.4 字符数组与字符串
4.5.1 字符数组的定义、初始化和引用
字符数组是存放字符型数据的数组,字符数组的一个元素存放一个字符,字符数组包括一维字符数组和二维字符数组等。字符数组的定义方法与定义其他类型数组的方法完全相同,但其类型必须为char型。
C 语言规定用'\0'作为字符串的结束标志,当把一个字符串存入一个数组时,系统自动将结束符'\0'存入数组,以此作为字符串是否结束的标志。
1.字符数组的定义
一维字符数组的定义格式为:
(
char 数组名[常量表达式];
)
二维字符数组的定义格式为:
(
char 数组名[常量表达式1] [常量表达式2];
)
例如:
char s[10]; /*定义一个长度为10的一维字符数组s*/
char str[3][5]; /*定义一个3×5的二维字符数组str*/
2.字符数组的初始化
字符数组的初始化有以下几种方法。
char str[11]={'I',' ','a','m',' ','a',' ','b','o','y'}; /*完全初始化*/
char str[ ]={'I',' ','a','m',' ','a',' ','b','o','y'}; /*省略长度完全初始化*/
char str[10]={'b','o','y'}; /*不完全初始化,后面元素都默认为字符串结束符'\0'*/
char str[ ]={"I am a boy"}; /*字符串形式的初始化*/
char str[ ]="I am a boy"; /*数组省略花括号的字符串形式的初始化*/
char str[2 ][5]={ "boy", "girl"}; /*省略花括号的字符串形式的初始化*/
char str[ ][5]={ "boy", "girl"}; /*省略第一维数,省略花括号的字符串形式的初始化*/
注意:若初始化列表中初值个数大于数组的长度,则按语法错误处理;若小于数组的长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符,即'\0';若等于数组长度,定义字符数组时其长度可省略,系统会根据初值的个数确定字符数组的长度。
3.字符数组元素的引用
一、二维字符数组中各元素的引用方法与一、二维普通数组引用方法完全相同。例如:
char s[10]="boy"; /*定义一维字符数组s并将其初始化*/
char str[3][5]= { "boy", "girl","man"}; /*定义3×5二维字符数组str并将其初始化*/
则:
s[0]= 'B'; /*将一维数组s的第一个字符赋值为字符'B'*/
str[1][0] = 'G'; /*将二维数组str的第1行第1列的字符赋值为字符'G'*/
都是对字符数组中各元素的引用。
4.4.2 字符串的输入和输出函数
1.标准输入函数scanf
标准输入函数scanf可以输入字符数组中的某一个元素,或是输入一个字符串。scanf函数在输入单个字符时使用“%c”格式控制符,输入字符串时使用“%s”格式控制符。
例如,有一个字符数组:
char str[10];
scanf("%c",&str[0]); /*读入字符数组一个元素,方法与字符变量相同,数组元素前有地址符号&*/
scanf("%s",str); /*将一个字符串存入字符数组c中,注意数组名str前无地址符号&*/
使用scanf函数向数组输入字符串时必须注意输入的字符串中不能包含空格,因为C语言规定用scanf函数输入字符串时,以空格或回车符作为字符串间隔的符号。
例如:
char str1[10],str2[10],str3[10];
scanf("%s%s%s",str1,str2,str3);
运行时输入一行字符串:
We love china!<回车>
则str1中的字符串是“We”,str2中的字符串是“love”,str3中的字符串是“china!”。由上例可以看出无法利用scanf函数输入一个包含空格的字符串并将其赋值给一个字符数组。
2.字符串输入函数gets
gets函数能输入完整的句子,以回车键作为字符串结束符号,将从键盘输入的字符串存放到字符数组中,所以gets函数能输入带空格的字符串。函数的调用格式为:
(
gets(字符数组名);
)
例如:
char str[30];
gets(str);
运行输入一个字符串:
We love china! <回车>
则字符数组str中的字符串是“We love china!”。
提示:当使用字符数组存放字符串时
在接受字符串输入时,存放字符串的字符数组变量要足够大,否则容易引发数组越界操作,导致程序错误。
3.标准输出函数printf
printf函数在输出字符串时使用“%s”格式控制符,并且与“%s”对应的输出项必须是要输出字符串的第一个字符的地址。printf函数将依次输出字符串中的每个字符,直到遇到字符结束符'\0'。在字符串中可以有空格字符(这与用scanf函数不能输入带空格的字符串不同)。
例如:
char str[]="We love china!";
printf("%s",str);
输出结果是:We love china!输出该字符串后光标不会自动换行。
4.字符串输出函数puts
puts函数为字符串输出函数,能将一个字符串输出到终端,输出的字符串包含转义字符。函数的调用格式为:
(
puts(字符数组名)
;
)
例如:
char str[]="We love China!";
puts(str);
输出结果是:We love China!,使用puts函数输出字符串时,字符串结束标志'\0'转换为换行符'
',即输出字符串后换行。
小结:
C语言中没有字符串类型的变量,在处理字符串时通常采用字符数组的方法。本节主要介绍字符数组和字符串,字符数组逐个引用时其使用方法与数值数组相同,而其整体使用是字符数组特有的。
备 注
引入:通过实例引入字符串的使用,引发学生的学习兴趣。
强调:字符串是以‘\0’结束
难点:字符串的输入函数与输出函数的使用。
学科网(北京)股份有限公司
$$