C语言字符串ppt课件

上传人:钟*** 文档编号:4973444 上传时间:2020-01-16 格式:PPT 页数:40 大小:428.50KB
返回 下载 相关 举报
C语言字符串ppt课件_第1页
第1页 / 共40页
C语言字符串ppt课件_第2页
第2页 / 共40页
C语言字符串ppt课件_第3页
第3页 / 共40页
点击查看更多>>
资源描述
第十章字符串 知识点1 字符串1 字符串常量 1 C语言中字符串常量的形式 用一对双引号将一串字符括起来称为字符串常量 例如 abcd 2 字符串的长度 一对双引号中字符的个数就是字符串的长度 可调用strlen函数求字符串长度 例如 strlen abcd 字符串的长度为4 3 字符串的结束标志 在字符串最后一个字符的后面 系统自动添加一个转义字符 0 作为字符串的结束标志 当人为地在字符串中间插入转义字符 0 时 例 a 0bcd 系统就认为字符串到a为止 长度为1 不再顾及 0后的字符 1 4 字符串常量的存储结构 1个字符串所占字节数为 字符串长度 1 例如字符串 abcd 在内存上5个字节 其字符占4个字节 字符串结束标志 0 占一个字节 可调用sizeof函数求字符串所占字节数 如 sizeof abcd 5 字符串常量的面值和地址值 abcd 是字符串的面值 而当把它赋给某个变量时 给出的是此字符串在内存所占连续存储区的首地址 2 2 一维字符数组和字符串变量 1 一维字符数组的每个元素可以存放一个字符 2 当一维字符数组中存放最后一个字符是 0 时 可称此一维字符数组内存放了一个字符串 同时可称此一维数组为字符串变量 3 通过赋初值给一维字符数组赋字符串赋字符串初值形式 1 chars 5 a b c d 0 显示赋字符串结束标志 2 chars 5 a b c d 系统会自动赋字符串结束标志 3 3 chars 5 abcd 直接赋字符串常量 4 chars 5 abcd 把字符串常量放在一对花括号中 5 chars abcd 根据所赋字符串初值来确定数组长度 注意 若有定义 chars 5 aa sizeof s 的值为5 strlen s 的值为2 前者是s在内存中所中字节数 后者是s中的字符个数 4 10 1有以下程序main chara a b c d e f g h 0 inti j i sizeof a j strlen a printf d d n i j 程序运行后结果是A 9 9B 8 9C 8 8D 9 8 5 10 2有以下程序 includemain char p abcde 0fghjik 0 printf d n strlen p 程序运行后结果是A 12B 15C 6D 5 6 10 3以下不能正确进行字符串赋初值的语句是A charstr 5 good B charstr good C char str good D charstr 5 g o o d 7 10 4有以下程序main charp 20 q p scanf s s p q printf s s n p q 若从键盘输入 abcdef 则输出结果是A defdefB abcdefC abcdD dd 8 10 5有以下程序main chars ABCD p for p s 1 p s 4 p printf s n p 程序运行结果是A ABCDB AC BD BCDBCDBCCDCDCDDDD 9 4 程序中给一维字符数组赋字符串有定义chars 5 1 不可以用赋值语句给s数组赋字符串 例如 s abcd 是错误的 数组名s是一个常量 不可重新赋值 2 可给数组元素一个一个赋字符 s 0 a s 1 b 3 可调用strcpy函数把字符串复制到数组中 例如 strcpy s abcd 4 若有定义 chars1 10 s2 20 可用 s格式 调用scanf函数给字符数组输入字符串 例如 scanf s s s1 s2 5 用gets函数给字符数组输入一行字符串 例如 gets s1 gets s2 输入的一串字符用回车结束 10 5 使指针指向字符串 1 给基类型为char的指针赋字符串的地址 可通过以下赋初值方式使指针指向字符串常量 char sp abcd 把字符串 abcd 的首地址赋给基类型为char的指针变量 指针sp指向一个具有5个字节的连续存储区的开头 即指向字符a所在存储单元 char sp abcd 同上 11 2 通过赋值语句给基类型为char的指针赋字符串 若有定义语句 char sp 则可通过赋值语句 sp abcd 把字符串 abcd 的首地址赋给指针变量sp 3 若有以上定义和赋值语句 sp 将移动指针sp 使其指向字符串中的字符b 这时sp指向字符串 bcd 12 10 6下列选项中正确的语句组是A chars 8 s Beijing B chars 8 s Beijing C char s s Beijing D char s s Beijing 13 6 通过指针引用字符串中的字符 1 若有定义 char sp abcd sp代表字母a sp 1 代表字母b 2 若有以上定义 sp 0 代表字母a sp 1 代表字母b 7 字符串的输出 1 可以调用printf函数 用 s格式输出字符数组中的字符串和字符指针所指的字符串 2 可以调用puts函数 输出字符数组中的字符串和字符指针所指的字符串 14 知识点2 字符串数组1 字符串数组赋值在二维字符数组的每一行存放一个字符串 此二维数组构成字符串数组 1 例如 以下定义语句通过赋初值给每行赋字符串chars1 3 80 aa bbbb 543211 s2 3 80 2 可调用strcpy函数给每行赋字符串 for i 0 i 3 i strcpy s2 i s1 i 15 3 可通过输入语句给每行赋字符串 for i 0 i 3 i scanf s s2 i 4 不可用赋值语句给每行赋字符串 for i 0 i 3 i s2 i s1 i 是错误的 注意 s2 i 是地址常量 不能赋值 16 2 通过一个一维指针数组构成一个字符串数组 1 例如 以下定义语句通过赋初值建立一个字符串数组char sp 3 aa bbbb 543211 以上定义在内存构成如图所示的存储结构 17 2 特点由此方式构成的存储结构每行的长度可以不一 可以给sp i 重新赋值 指针数组中每个元素的地址值可以改变 因为sp i 是变量 当sp i 没有指向确定的存储空间时 不可以通过scanf函数或gets函数给它赋字符串 3 引用每个字符元素 按以上定义 若i和j有正确定义和赋值 可通过 sp i j 或sp i j 的形式引用每个字符 18 10 7以下程序的输出结果是 include includemain charb1 8 abcdefg b2 8 pb b1 3 while pb b1 strcpy b2 pb printf d n strlen b2 A 8B 3C 1D 7 19 10 8有以下程序charcchar charch if ch A A abc ABC DEFdefB abc abc defdefC abcABCDEFdefD abcabcdefdef 20 10 9有以下程序voidss char s chart while s if s t s t a A s main charstr1 100 abcddfefdbd c d ss str1 c printf s n str1 A ABCDDEFEDBDB abcDDfefDbDC abcAAfefAbAD Abcddfefdbd 21 10 10以下程序的输出结果是main chars abcdef s 3 0 printf s n s 22 10 11以下程序运行后的输出结果是main chara Language b Programe char p1 p2 intk p1 a p2 b for k 0 k 7 k if p1 k p2 k printf c p1 k 23 第十一章对函数的进一步讨论 知识点1 main函数的参数1 执行程序时的命令行 1 C程序经过编译连接之后 将自动生成后缀为 exe的可执行文件 例如名为myp c的C源程序 生成的可执行文件名为myp exe 2 在操作系统的提示符下 打入myp 就可执行myp程序 myp就被称为执行命令 所在行称为命令行 3 在命令行中不仅有命令 其后还可跟随若干参数 通常各参数由空格隔开 每个参数由一串字符组成 例如 myphelloworld其中hello和world就是参数 24 4 系统将自动开辟存储区存放这些字符串 并如图所示通过无名指针数组指向字符串 25 2 main函数后一对括号中的形参 1 在运行C程序时 可以通过命令行把参数传给main函数的形参 从而把命令行中的参数传给main函数 2 main函数通常可用两个参数 例如 main intarge char argv 或main intarge char argv 其中arge和argv是用户标识符 用作形参 可取任何合法的名字 3 arge中将存放命令行中字符串的个数 4 形参argv被定义为指向指针的指针 它指向指针数组始元素 因此 通过argv可以引用命令行中的任一字符串 例如 对于上面的命令行 argv 0 指向字符串myp argv 1 指向字符串hello argv 2 指向字符串world 26 例 若以下程序放在myp c文件中 在编译连接后 已生成一个myc exe文件 输出argc和argv中的数据main intargc char argv inti printf argc d n argc for i 1 i程序将输出 argc 4ACOMMANDLINE 27 11 1不合法的main函数命令行参数表示形式是A main inta char c B main intarc char arv C main intargc char argv D main intargv char argc 28 11 2有以下程序 includemain intargc char argv inti len 0 for i 1 iA 22B 17C 12D 9 29 知识点2 函数的递归调用 1 C语言中函数可以递归调用 即可以自己调用自己 也可以间接地调用自己 2 分析递归调用的程序时需要建立以下概念 每一层调用时 系统将为本次调用所用到的形参和函数中定义的变量开辟独立的存储单元 所以分析时必需清楚是在哪一层调用 以及该层中各变量的值 递归算法必定有结束递归的条件 不可能无限递归下去 因此注意递归结束条件 然后有序地一层一层返回 有函数值的 同时返回函数值 元函数值的一定要注意本层中各变量的值 30 11 3在函数调用过程中 如果函数funA调用了函数funB 函数funB又调用了函数funA 是A 称为函数的直接递归调用B 称为函数的间接递归调用C 称为函数的循环调用D C语言中不允许这样的递归调用 31 11 4有以下程序voidfun int a inti intj intt if i j t a i a i a j a j t i j fun a i j main intx 2 6 1 8 i fun x 0 3 for i 0 i 4 i printf 2d x i printf n A 1268B 8621C 8162D 8612 32 11 5有以下程序intf intn if n 1 return1 elsereturnf n 1 1 main inti j 0 for i 1 i 3 i j f i printf d n j 程序运行结果A 4B 3C 2D 1 33 11 6有以下程序voidf inta inti intj intt if i j t a i a i a j a j t f a i 1 j 1 main inti aa 5 1 2 3 4 5 f aa 0 4 for i 0 i 5 i printf d aa i printf n 程序执行结果A 5 4 3 2 1B 5 2 3 4 1C 1 2 3 4 5D 1 5 4 3 2 34 知识点3 指向函数的指针1 C语言中 函数名代表一个地址值 从这个地址开始存放函数的执行代码 称为函数的入口 所以不能把函数名作为变量 重新给它赋值 2 指向函数的指针 函数指针的定义有以下两种形式 1 第1种形式 类型名 指针变量名 例如 int fp 说明了fp是一个指向函数的指针变量 它可以指向任何函数值为int类型的函数 35 2 第2种形式 类型名 指针变量名 类型名 类型名 例如 int fp int int int 说明了fp是一个指向函数的指针变量 它可以指向任何函数值为int类型且具有3个int类型形参的函数 3 注意 fp外的一对圆括号不可省略 不能写成 int fp int int int 此处 不再说明fp是一个指针变量 而是说明fp是一个函数名 此函数返回一个基类型为int的地址 这是一条函数说明语句 4 注意 若函数没有形参 说明符后面的一对括号也不能省略 36 5 对于不同类型的指针变量 其定义格式不同 下图为有关指针的数据类型小结 37 3 函数名作为实参 C语言中 函数名可以作为实参 这时对应的形参必须是一个类型相同的函数指针 4 通过函数指针调用函数 若有以下定义的说明intfindbig int int int int f int int int x y z big 则可通过以下方式调用findbig函数 f findbig big f x y z 38 11 7有以下程序intfa intx returnx x intfb intx returnx x x intf int f1 int int f2 int intx return f2 x f1 x main inti i f fa fb 2 printf d n i 程序运行后结果A 4B 1C 4D 8 39 11 8在说明语句 int f 中 标识符f代表的是A 一个用于指向整型数据的指针变量B 一个用于指向一维数组的行指针C 一个用于指向函数的指针变量D 一个返回值为指针型的函数名 40
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!