当前位置:文档之家› C语言教案-第十周

C语言教案-第十周

C语言教案-第十周
C语言教案-第十周

第十节数组

——字符数组

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

4 本节总结[10分钟]

学生问题汇总:

问题1:将字符数组定义为一个字符

问题2:混淆‘c’和“c”的意义

问题3:字符数组整体输入时用取地址符号是不对的

作业:

习题1:有一行电文,已按下面的规律译成密码

A→Z a→z

B→Y b→y

C→X c→x

即第一个字母变成第二十六个字母,第i个字母变成第(26-i+1)个字母。非

字母字符不变,要求编程将密码译回原文,打印密码和原文。

习题2:有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文的写字母、小写字母、数字、空格以及其他字符的个数。

习题3:输入两个字符串,并将其中较小的字符串连接到大的字符串后面。

59

相关主题
文本预览
相关文档 最新文档