C语言教案-第十周
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十节数组
——字符数组
1:通过对本节课的学习,能够了解、掌握字符数组定义、初始化、引用、字符串结束标志和在程序中使用。
1.1学习目的:
1.掌握字符数组定义、初始化、引用
2. 掌握字符串结束标志
3. 能够实现字符数组的应用
1.2学习内容:
1. 字符数组定义、初始化、引用
2. 字符串结束标志、字符数组的应用
1.3学习重点:
字符串结束标志、字符数组的应用
1.4教学方法:
讲授法、课件演示
1.5学习方法:
听课、做笔记、课后作业
1.6学习时间
第十六周
2:回顾上一节: [10分钟]
1.二维数组定义、初始化及引用
3:课程知识点讲解:
具体知识点1:字符数组的定义[10分钟]
引例:【案例6.15】输出字符串“I am happy”中的所有字符。
编程分析:
用字符数组存放字符串的每个字符,循环语句逐个输出字符。程序如下:
main ()
{ char c[10];
int i;
c[0]='I';c[1]=' ';c[2]='a';c[3]='m';c[4]=' ';c[5]='h';c[6]='a';
c[7]='p';c[8]='p';c[9]='y';
for(i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");
}
程序运行结果:
I am happy
程序说明:
(1)字符数组与前面学过的数组一样都必须先定义后使用,定义的方法也与前面介绍的类似,形式如下:
char 数组名[常量表达式]
如:char c[10];则定义c为字符数组,包含10个元素。
(2)字符数组赋值方法与一般的数组是一样的。c[0] c[1]c[2]c[3]c[4] c[5] c[6] c[7]c[8]
需要说明的是,由于字符型与整型是互相通用的,故字符数组的处理基本
上与整型数组相同,只不过每个元素的值都是小于整数255而已。
具体知识点2:字符数组的初始化[10分钟]
对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。
如:char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};
把10个字符分别赋给c[0]到c[9]10个元素。
如果花括弧中提供的初值个数(即字符个数)大于数组长度,则作语法错误处理。
如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的
元素自动定为空字符(即'\0').
如:char c[10]={'c',' ','p','r','o','g','r','a','m'};
赋值后数组状态如图6.11所示。
图6.11
如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统
会自动根据初值个数确定数组长度。
56
如:char c[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
数组c的长度自动定为10。用这种方式可以不必去数字符的个数,尤其在赋初
值的字符个数较多时,比较方便。
案例讲解
【案例6.16】输出字符串"welcome"。
程序如下:
main()
{ int i ;
char str[ ]={'w' , 'e' , 'l' , 'c' , 'o' , 'm' , 'e'} ;
for(i=0 ; i<7 ; i++)
printf("%c" , str[i]); }
程序运行结果:
welcome
【案例6.17】输出一个钻石图形。
main()
{ char diamond[][5]={' ',' ','*'},{' ','*',' ','*'}, {'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}};
int i,j;
for(i=0;i<5;i++)
{for(j=0;j<5;i++)
printf("%c",diamond[i][j]);
printf("\n");}
}
程序运行结果:
*
* *
* *
* *
*
具体知识点3:字符串和字符串结束标志[15分钟
]
在C语言中,将字符串作为字符数组来处理。这个字符串的实际长度与数组长度相等。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0'代表。如果有一个字符串,其第10个字符为'\0',则此字符串的有效字符为9个。也就是说,在遇到字符'\0'时,表示字符串结束,由它前面的字符组成字符串。
系统对字符串常量也自动加一个'\0'作为结束符。例如“C program”共有9个字符,但内存中占10个字节,最后一个字节放'\0',字符串作为一维数组来存放。
57
说明:'\0'代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0
的字符不是一个可以显示的字符,而是一个“空操作符”,即它什么也不干。用它
来作字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标
志。
具体知识点4:字符串的输入输出及字符串处理函数[15分钟]
1、逐个字符输入输出,用格式符"%c"输入或输出一个字符。
或将整个字符串一次输入或输出。用“%s”格式符,意思是输出字符串string
2、2.1 字符串输入输出函数(gets 和puts)
2.2 字符串连接函数(strcat)
2.3 字符串的复制函数(strcpy)
2.4 字符串比较函数(strcmp)
2.5 求字符串长度的函数(strlen)
2.6 strlwr(字符串)将字符串中大写字母转换成小写字母lwr1owercase(小写)的缩写。
2.7 strupr(字符串)将字符串中的小写字母转换成大写字母。
具体知识点5:字符数组应用举例[20分钟]
案例讲解
【案例6.24】用gets函数和strcmp函数编写密码检测程序。假设三次密码输入不正确,退出程序。
编程分析:最少提供3次键盘输入字符串,并与正确口令比较,若相等程序进入相应的程序段。若不相等给出提示,错误输入3次终止程序。
【案例6.25】有三个字符串,要求找出其中最大者。
编程分析:今设一个二维的字符数组str,大小为3×20,即有3行20列,每一行可以容纳20个字符。
【案例6.26】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
编程分析:单词的数目可以由空格出现的次数决定(连续的若干个空格作为出现一次空格;一行开头的空格不在内)。如果测出某一个字符为非空格,而它的
前面的字符是空格,则表示“新的单词开始了”此时使num(单词数)累
加1。如果当前字符为非空格而其前面的字符也是非空格,则意味着仍然
是原来那个单词的继续,num不应再累加1。前面一个字符是否空格可以
从word的值看出来,若word=0,则表示前一个字符是空格,如果word=1,
意味着前一个字符为非空格。
58