c精品课件昆明理工大学6第四章2章节

上传人:E**** 文档编号:91242522 上传时间:2019-06-26 格式:PPT 页数:24 大小:195.50KB
返回 下载 相关 举报
c精品课件昆明理工大学6第四章2章节_第1页
第1页 / 共24页
c精品课件昆明理工大学6第四章2章节_第2页
第2页 / 共24页
c精品课件昆明理工大学6第四章2章节_第3页
第3页 / 共24页
c精品课件昆明理工大学6第四章2章节_第4页
第4页 / 共24页
c精品课件昆明理工大学6第四章2章节_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《c精品课件昆明理工大学6第四章2章节》由会员分享,可在线阅读,更多相关《c精品课件昆明理工大学6第四章2章节(24页珍藏版)》请在金锄头文库上搜索。

1、研究式学习C程序设计(第四章),1,第四章,数组(二),研究式学习C程序设计(第四章),2,上讲主要内容,一维数组 概念的引入 一维数组的定义、引用及初始化 程序举例 二维数组,研究式学习C程序设计(第四章),3,本章(二)主要内容,字符数组 概念的引入 字符数组的定义、引用及初始化 程序举例 用于字符串处理的函数,研究式学习C程序设计(第四章),4,字符数组问题的提出,一个简单的字符型变量只能存放一个字符。对于字符串数据,c语言中是用字符数组来存放的。,字符串是C语言的一种数据类型。它由若干个字符组成,以字符串结束标记0,(ASCII码值为0的字符)作为其最后一个字符。,在程序中,一个字符串

2、在字面上是以一对双引号括起来的若干个字符,也称字符串常量。如“HELLO!“。,问题:从键盘上输入一字符串,统计该字符串的长度。,研究式学习C程序设计(第四章),5,字符数组-问题分析,要完成从键盘上输入一字符串,并统计该字符串的长度。需要解决:,一个字符串可视为一组类型相同(字符型)的有顺序的数据。因此,可以定义字符型数组来存放字符串。字符数组的每个元素都可以作为一个字符型变量存放字符串中对应字符。,字符串长度是指字符串中除字符串结束标记0外的所有字符的个数。例如字符串“ABCde”长度为5,其中空格也是有效字符。,研究式学习C程序设计(第四章),6,字符数组程序,#define “stri

3、ng.h“ main() char a80; int n=0,i=0; /*为长度计数器n和数组下标i赋初值0*/ printf(“nInput a string:“); gets(a); /*从键盘接收一字符串并存入字符数组a中*/ while(ai+!=0) n+; printf(“Length of “%s“=%dn“,a,n); ,char a80; 定义了一个名为a类型为字符型,大小(长度)为80的数组,因此字符数组a能存放长度不超过79的字符串。因为必须留一个元素存放字符串结束标志0。,从键盘上输入字符串是通过函数调用语句gets(a)来完成的。功能是从键盘上输入一个字符串到指定的

4、字符数组中。,循环语句来完成求字符串长度 while(ai+!=0) n+; 从字符数组的第1个元素(下标为0)起,逐个判断,若当前字符不为结束标记0,则长度计数器n加1,直到当前字符为0结束。上述语句可改写为: while(ai! =0) i+;n+;,程序运行结果为: Input a string: Welcome to China! Length of“ Welcome to China!”=17,程序,研究式学习C程序设计(第四章),7,字符数组概念及定义,用来存放字符数据的数组是字符数组。字符数组中的每个元素都可以看为一字符型变量,可存放一个字符。以其ASCII码的形式存放。 字符串

5、是C语言中的字符型数据。它由若干个字符组成,其最后一个字符是字符串结束标志0。在C语言中,字符串是借助于一维数组来存放的。,字符数组的定义 字符数组的定义与一、二维数组的相同。例如: char s80; char s540;,研究式学习C程序设计(第四章),8,字符数组初始化,1逐个字符赋给数组中各个元素,即把所赋初值依次放在一对花括号中。例如: char srt16=H, e, l, l, o, !; char str27=H, e, l, l, o, !, 0;,2直接引用字符串常量给字符数组赋初值。例如: char str27=“Hello!”; char str27= “Hello!;

6、,3赋初值的字符个数少于数组元素。此时,系统将会自动在其后的元素假如0。例如: char str110=H, e, l, l, o, !; char str210=“Hello!”;,系统会自动在最后加入0,所以不必人为加入。由于定义了str2数组占有7个连续内存单元,因此有足够空间存放字符串。若是定义成: char str26=“Hello!”; 6个存储单元不够用,结束符0将占用下一个不属于str2的存储单元。,研究式学习C程序设计(第四章),9,字符数组引用,1逐个引用字符数组中一个元素,得到一个字符。 2当字符数组存放字符串时,可以一次引用整个字符数组。,不论字符数组中存放的是单个字符

7、序列,还是字符串,都可以通过使用数组名及其下标来实现逐个引用字符数组单个字符。输入输出一个字符可利用格式输入函数中格式说明“%c”来完成。 例 6 逐个输出字符数组中单个字符。 main() char c6=H,e,l,l,o,!,0; int i; for (i=0; i6; i+) printf(“%c”,ci)/*逐个引用字符数组c中的一个元素ci*/ printf(“n”); ,研究式学习C程序设计(第四章),10,字符数组引用,2当字符数组存放字符串时,可以一次引用整个字符数组。,字符数组的名字是一个地址常量,它代表字符数组的首地址。当字符数组中存放的是字符串时,可把字符数组当为字符

8、串来处理。此时,允许使用数组名一次引用整个数组。可以在调用字符串处理函数时,使用数组名字作实参,也可以使用字符数组名来进行输入输出。但是,不可使用赋值语句给字符数组整体赋一字符串。例如: char str10; str=“Hello C!”; 以上赋值语句是不允许的。因为数组s是一地址常量,不能被重新赋值。,研究式学习C程序设计(第四章),11,字符数组引用,2当字符数组存放字符串时,可以一次引用整个字符数组。,(1)可以在sanf()及printf()函数中使用格式说明%s来实现字符串的整体输入和输出。例如: char str10; scanf(“%s”,str); printf(“%s“,

9、str); 这里str是数组名,输入字符依次存入以数组首地址为起点的存储单元。并自动在末尾加0。用%s格式符输入字符串时,是以空格符,TAB符,及回车符来结束一个串的输入的。若输入字符串长度超过字符数组所能容纳的字符数时,系统不报错,相当于下标超界。 执行输出语句时,将从这一地址开始,依次输出存储单元中的字符,知道遇到一个0结束输出。0不在输出之列。输出结束后不自动换行。,研究式学习C程序设计(第四章),12,字符数组引用,(2)调用gets( )和puts( )函数实现字符串整体输入输出。例如: char str10; gets(str); 其中str接受从键盘读入字符串(包括空格符),直到

10、读入一个换行符为止,系统自动把换行符用0代替。例如执行上述语句时,若从第一列输入: Helloc! (此处代表空格,代表Enter键) 将读入9个字符(包括空格和换行符),系统自动用0代替最后换行符。 用puts( )函数实现字符串整体输出,例如: puts(str); 其中str为数组名,执行上述语句时,从数组str首地址开始,依次输出存储单元中字符,遇到第一个0结束输入,并自动输出一个换行。,例 7 引用数组名输入输出字符串。 main() char str80; printf(“请输入一字符串:”); gets(str); printf(“n输入的字符串是:”); puts(str);

11、,程序运行结果: 请输入一字符串:Happy 输入的字符串是:Happy,研究式学习C程序设计(第四章),13,字符数组程序举例,例 8 编写一程序,实现两个字符串s1和s2的比较,并根据比较的情况输出下列结果: 负数 s1s2,分析:字符串进行比较的方法是:从两字符串(数组)的初始位置(i=0)开始,将它们对应位置(相同下标)的字符的ASCII码值进行比较,只有当前字符相等(s1i=s2i)而且不是两字符串“同时”到尾(s1i!=0),才继续去比较下一个(i值增1)字符。 有两种情况会结束比较: 第一种是出现不相等字符,第二种是两字符相等,但遇到了串结束符0,因此,不管哪种情况,可由当前两个

12、字符相减而得到最后结果。当s1i和s2i不相等,若s1i大于s2i,相减结果大于0表示s1串大于s2串,若s1i小于s2i,相减结果小于0表示s1串小于s2串。若两串相等,同时遇到结果标志,相减的值必然等于0。,main() char s181,s281; int i=0,r; printf(“nInput No.1 string: “); gets(s1); /* 从键盘输入第一个字符串入s1 */ printf(“nInput No.2 string: “); gets(s2); /* 从键盘输入第二个字符串入s2 */ while(s1i=s2i,Input No.1 string:AB

13、CDMFG Input No.2 string:ABCDEFHJK The result is:7,程序,研究式学习C程序设计(第四章),14,字符数组程序举例,例 9 从键盘上输入一个字符串,并复制到另一个字符数组后显示出来。,main() char str120,str220; int j=0; printf(”Input a string:”); scanf(“%s”,str1); while(str1j!=0) str2j=str1j; j+; str2j=0; printf(“%s”,str2); ,程序,提示:复制字符串就是将str1串中的字符逐个放到数组str2的对应数组元素中(

14、包括0)。,研究式学习C程序设计(第四章),15,字符串处理函数,语言中没有提供对字符串进行整体操作的运算符,但提供了很多有关字符串操作的库函数。例如,不能由运算符实现的字符串赋值、合并和比较运算,都可以通过调用库函数来实现。下面介绍4种常用的字符串处理函数。在使用这些函数时,必须在程序前面用命令行指定包含标准头文件“string.h”。,研究式学习C程序设计(第四章),16,字符串处理函数,1、 求字符串长度函数strlen。函数的调用形式如下: strlen(s) 此函数计算出以S为其地址的字符串的长度,作为函数值返回。这一长度不包括串尾的结束标志0,编一程序,求字符串的长度。 main(

15、) int j=0; char str1=“string.”; while(str1j!=0) j+; printf(“the lenth of str1=%d”, j); ,#include “string.h”,printf(“the lenth of str1=%d”, strlen(str1);,研究式学习C程序设计(第四章),17,字符串处理函数,2、字符串复制(拷贝)函数strcpy。调用形式如下: strcpy(s1,s2) 此函数用来把s2所指字符串(源)的内容复制到s1所指存储空间(目的)中,函数返回s1的值,即目的串的首地址。注意:为保证复制的合法性,s1必须指向一个足够容纳s2串的存储空间。,Strcpy函数的应用: char str16,str2=“China”; strcpy(str1,str2); 或 strcpy(str1, “China”); 两个字符串拷贝不能使用: str1=str2,字符串拷贝时连同0一起拷贝。,研究式学习C程序设计(第四章),18,字符

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号