资源预览内容
第1页 / 共40页
第2页 / 共40页
第3页 / 共40页
第4页 / 共40页
第5页 / 共40页
第6页 / 共40页
第7页 / 共40页
第8页 / 共40页
第9页 / 共40页
第10页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1 第十章字符串 知识点1 字符串1 字符串常量 1 C语言中字符串常量的形式 用一对双引号将一串字符括起来称为字符串常量 例如 abcd 2 字符串的长度 一对双引号中字符的个数就是字符串的长度 可调用strlen函数求字符串长度 例如 strlen abcd 字符串的长度为4 3 字符串的结束标志 在字符串最后一个字符的后面 系统自动添加一个转义字符 0 作为字符串的结束标志 当人为地在字符串中间插入转义字符 0 时 例 a 0bcd 系统就认为字符串到a为止 长度为1 不再顾及 0后的字符 2 4 字符串常量的存储结构 1个字符串所占字节数为 字符串长度 1 例如字符串 abcd 在内存上5个字节 其字符占4个字节 字符串结束标志 0 占一个字节 可调用sizeof函数求字符串所占字节数 如 sizeof abcd 5 字符串常量的面值和地址值 abcd 是字符串的面值 而当把它赋给某个变量时 给出的是此字符串在内存所占连续存储区的首地址 3 2 一维字符数组和字符串变量 1 一维字符数组的每个元素可以存放一个字符 2 当一维字符数组中存放最后一个字符是 0 时 可称此一维字符数组内存放了一个字符串 同时可称此一维数组为字符串变量 3 通过赋初值给一维字符数组赋字符串赋字符串初值形式 1 chars 5 a b c d 0 显示赋字符串结束标志 2 chars 5 a b c d 系统会自动赋字符串结束标志 4 3 chars 5 abcd 直接赋字符串常量 4 chars 5 abcd 把字符串常量放在一对花括号中 5 chars abcd 根据所赋字符串初值来确定数组长度 注意 若有定义 chars 5 aa sizeof s 的值为5 strlen s 的值为2 前者是s在内存中所中字节数 后者是s中的字符个数 5 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 6 10 2有以下程序 includemain char p abcde 0fghjik 0 printf d n strlen p 程序运行后结果是A 12B 15C 6D 5 7 10 3以下不能正确进行字符串赋初值的语句是A charstr 5 good B charstr good C char str good D charstr 5 g o o d 8 10 4有以下程序main charp 20 q p scanf s s p q printf s s n p q 若从键盘输入 abcdef 则输出结果是A defdefB abcdefC abcdD dd 9 10 5有以下程序main chars ABCD p for p s 1 p s 4 p printf s n p 程序运行结果是A ABCDB AC BD BCDBCDBCCDCDCDDDD 10 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 输入的一串字符用回车结束 11 5 使指针指向字符串 1 给基类型为char的指针赋字符串的地址 可通过以下赋初值方式使指针指向字符串常量 char sp abcd 把字符串 abcd 的首地址赋给基类型为char的指针变量 指针sp指向一个具有5个字节的连续存储区的开头 即指向字符a所在存储单元 char sp abcd 同上 12 2 通过赋值语句给基类型为char的指针赋字符串 若有定义语句 char sp 则可通过赋值语句 sp abcd 把字符串 abcd 的首地址赋给指针变量sp 3 若有以上定义和赋值语句 sp 将移动指针sp 使其指向字符串中的字符b 这时sp指向字符串 bcd 13 10 6下列选项中正确的语句组是A chars 8 s Beijing B chars 8 s Beijing C char s s Beijing D char s s Beijing 14 6 通过指针引用字符串中的字符 1 若有定义 char sp abcd sp代表字母a sp 1 代表字母b 2 若有以上定义 sp 0 代表字母a sp 1 代表字母b 7 字符串的输出 1 可以调用printf函数 用 s格式输出字符数组中的字符串和字符指针所指的字符串 2 可以调用puts函数 输出字符数组中的字符串和字符指针所指的字符串 15 知识点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 16 3 可通过输入语句给每行赋字符串 for i 0 i 3 i scanf s s2 i 4 不可用赋值语句给每行赋字符串 for i 0 i 3 i s2 i s1 i 是错误的 注意 s2 i 是地址常量 不能赋值 17 2 通过一个一维指针数组构成一个字符串数组 1 例如 以下定义语句通过赋初值建立一个字符串数组char sp 3 aa bbbb 543211 以上定义在内存构成如图所示的存储结构 18 2 特点由此方式构成的存储结构每行的长度可以不一 可以给sp i 重新赋值 指针数组中每个元素的地址值可以改变 因为sp i 是变量 当sp i 没有指向确定的存储空间时 不可以通过scanf函数或gets函数给它赋字符串 3 引用每个字符元素 按以上定义 若i和j有正确定义和赋值 可通过 sp i j 或sp i j 的形式引用每个字符 19 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 20 10 8有以下程序charcchar charch if ch A A abc ABC DEFdefB abc abc defdefC abcABCDEFdefD abcabcdefdef 21 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 22 10 10以下程序的输出结果是main chars abcdef s 3 0 printf s n s 23 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 24 第十一章对函数的进一步讨论 知识点1 main函数的参数1 执行程序时的命令行 1 C程序经过编译连接之后 将自动生成后缀为 exe的可执行文件 例如名为myp c的C源程序 生成的可执行文件名为myp exe 2 在操作系统的提示符下 打入myp 就可执行myp程序 myp就被称为执行命令 所在行称为命令行 3 在命令行中不仅有命令 其后还可跟随若干参数 通常各参数由空格隔开 每个参数由一串字符组成 例如 myphelloworld其中hello和world就是参数 25 4 系统将自动开辟存储区存放这些字符串 并如图所示通过无名指针数组指向字符串 26 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 27 例 若以下程序放在myp c文件中 在编译连接后 已生成一个myc exe文件 输出argc和argv中的数据main intargc char argv inti printf argc d n argc for i 1 i程序将输出 argc 4ACOMMANDLINE 28 11 1不合法的main函数命令行参数表示形式是A main inta char c B main intarc char arv C main intargc char argv D main intargv char argc 29 11 2有以下程序 includemain intargc char argv inti len 0 for i 1 iA 22B 17C 12D 9 30 知识点2 函数的递归调用 1 C语言中函数可以递归调用 即可以自己调用自己 也可以间接地调用自己 2 分析递归调用的程序时需要建立以下概念 每一层调用时 系统将为本次调用所用到的形参和函数中定义的变量开辟独立的存储单元 所以分析时必需清楚是在哪一层调用 以及该层中各变量的值 递归算法必定有结束递归的条件 不可能无限递归下去 因此注意递归结束条件 然后有序地一层一层返回 有函数值的 同时返回函数值 元函数值的一定要注意本层中各变量的值 31 11 3在函数调用过程中 如果函数funA调用了函数funB 函数funB又调用了函数funA 是A 称为函数的直接递归调用B 称为函数的间接递归调用C 称为函数的循环调用D C语言中不允许这样的递归调用 32 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 33 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 34 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 35 知识点3 指向函数的指针1 C语
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号