资源目录
压缩包内文档预览:(预览前5页/共67页)
编号:74277575
类型:共享资源
大小:3.20MB
格式:ZIP
上传时间:2020-04-19
上传人:独**
认证信息
个人认证
王**(实名认证)
江苏
IP属地:江苏
20
积分
- 关 键 词:
-
乔林
计算机
程序设计
基础
- 资源描述:
-
乔林-计算机程序设计基础(第2版),乔林,计算机,程序设计,基础
- 内容简介:
-
计算机程序设计基础 第六章复合数据类型 提纲 6 1字符6 2字符串6 3数组6 4结构体6 5数据集本章小结 6 1字符 字符类型 字符文字与量定义格式 charch constcharcch C 字符文字使用单引号对实际存储时字符类型量存储字符的对应ASCII值可使用signed与unsigned修饰字符类型字符表示的等价性chara A chara 65 chara 0101 chara 0 x41 ASCII码表 字符量的数学运算 编写函数 判断某个字符是否为数字 BOOLIsDigit charc BOOLIsDigit charc if c 0 字符量的数学运算 编写函数 将字符转换为大写字符 charTransformIntoUpperCase charc if c a 标准字符特征库 C标准字符特征库 ctype h标准字符特征库常用函数BOOLisalnum charc BOOLisalpha charc BOOLisdigit charc BOOLislower charc BOOLisspace charc BOOLisupper charc chartolower charc chartoupper charc 6 2字符串 字符串的抽象表示字符串的复制 合并与比较字符串的长度与内容字符串类型与其他数据类型的转换字符串的查找 字符串的抽象表示 zylib库字符串的抽象表示STRING类型已使用过的字符串函数intGetIntegerFromKeyboard doubleGetRealFromKeyboard STRINGGetStringFromKeyboard BOOLIsStringEqual STRINGs1 STRINGs2 BOOLIsStringEqualWithoutCase STRINGs1 STRINGs2 字符串的复制 字符串的复制操作函数原型 STRINGDuplicateString STRINGs 意义 接受字符串参数s 返回该字符串的副本注意 字符串的复制不能通过简单赋值语句获得 字符串复制示例正确例 STRINGs1 s2 Hello s1 DuplicateString s2 错误例 STRINGs1 s2 Hello s1 s2 错误 字符串复制不能直接赋值 字符串的合并 字符串的合并操作原型 STRINGConcatenateString STRINGs1 STRINGs2 意义 接受字符串参数s1 s2 返回合并后的字符串合并结果 s1在前 s2在后字符串合并示例STRINGs s1 Hello s2 World s ConcatenateString s1 s2 合并后的字符串为 HelloWorld 字符串的比较 字符串的比较操作原型 intCompareString STRINGs1 STRINGs2 意义 接受字符串参数s1 s2 按照字典顺序比较两个字符串的大小返回值 若s1在前返回 1 相等返回0 否则返回1必须使用此函数比较两个字符串的大小关系 不能直接使用关系操作符字符串比较示例STRINGs1 Hello s2 World if CompareString s1 s2 0 字符串的长度 获取字符串的长度原型 intGetStringLength STRINGs 意义 接受字符串参数s 获取字符串长度返回值 字符串中字符个数字符串长度示例示例 HelloWorld 的长度为10 HelloWorld n 的长度为11STRINGs HelloWorld n intlength GetStringLength s 字符串的内容 获取字符串的特定字符原型 charGetIthChar STRINGs unsignedintpos 意义 获取字符串s中位置为pos处的字符注意 字符位置从0开始编号获取字符串的子字符串原型 STRINGGetSubString STRINGs unsignedintpos unsignedintn 意义 获取字符串s中从pos处开始的连续n个字符构成的子字符串注意 字符位置从0开始编号 若不存在连续n个字符 则一直拷贝到字符串结束 字符串的转换 字符串大小写转换原型 STRINGTransformStringIntoUpperCase STRINGs 意义 将字符串中的全部字符转换为大写原型 STRINGTransformStringIntoLowerCase STRINGs 意义 将字符串中的全部字符转换为小写将单个字符转换为字符串原型 STRINGTransformCharIntoString charc 意义 将单个字符c转换为字符串后返回示例 若字符为 a 则转换后的字符串为 a 字符串的转换 字符串与数字之间的转换原型 STRINGTransformIntegerIntoString intn 意义 将整数转换为字符串 如整数12转换为 12 原型 intTransformStringIntoInteger STRINGs 意义 将字符串转换为整数 如 12 转换为12原型 STRINGTransformRealIntoString doubled 意义 将实数转换为字符串 如 1 2转换为 1 2 原型 doubleTransformStringIntoReal STRINGs 意义 将字符串转换为实数 如 1 2 转换为 1 2 字符串的查找 查找单个字符原型 unsignedintFindCharFirst charkey STRINGs 意义 在字符串s中从前向后查找指定字符key返回值 key在字符串中的第一次出现位置 从0开始编号 注意 若指定字符不存在 返回inexistent index原型 unsignedintFindCharNext charkey STRINGs unsignedintpos 意义 在字符串s中从位置pos处 包含位置pos本身的字符 开始从前向后查找指定字符key返回值 key在字符串中的下一次出现位置注意 若指定字符不存在 返回inexistent index 字符查找示例 编写函数 在字符串中查找指定字符 记录其在字符串中的出现次数 unsignedintGetOccurrencesOfCharInString charc STRINGs unsignedintpos 0 count 0 pos FindCharFirst c s while pos inexistent index count pos FindCharNext c s pos 1 returncount 字符串的查找 查找子字符串原型 unsignedintFindSubStringFirst STRINGkey STRINGs 意义 在字符串s中从前向后查找指定子串key返回值 key在字符串中的第一次出现位置 从0开始编号 以子字符串首字符位置计算 注意 若指定子串不存在 返回inexistent index原型 unsignedintFindSubStringNext STRINGkey STRINGs unsignedintpos 意义 在字符串s中从位置pos处 包含位置pos本身的字符 开始从前向后查找指定子串key返回值 key在字符串中的下一次出现位置 以子字符串首字符位置计算注意 若指定子串不存在 返回inexistent index 6 3数组 数组的意义与性质数组的存储表示数组元素的访问数组与函数多维数组 数组的意义与性质 数组的定义定义格式 元素类型数组名称 常数表达式 示例一 inta 8 定义包含8个整数元素的数组 示例二 STRINGstrs 4 定义包含4个字符串元素的数组 特别说明常数表达式必须是常数 不允许为常量或变量错误示例一 constintcount 8 intb count 错误示例二 intcount 8 intc count 数组元素编号从0开始计数 元素访问格式为a 0 a 1 不允许对数组进行整体赋值操作 只能使用循环逐一复制元素错误示例三 inta 8 b 8 a b 意义与性质将相同性质的数据元素组织成整体 构成单一维度上的数据序列 数组基本操作示例 编写程序 使用数组存储用户输入的5个整数 并计算它们的和 include include zylib h intmain inti a 5 result 0 for i 0 i 5 i printf IntegerNo 2d i 1 a i GetIntegerFromKeyboard for i 0 i 5 i result a i printf Thesumofelementsofthearrayis d n result 数组的存储表示 数组元素依次连续存放 中间没有空闲空间数组的地址数组的基地址 数组开始存储的物理位置数组首元素的基地址 数组首个元素开始存储的物理地址 数值上总是与数组基地址相同 操作符 a获得数组的基地址 a 0 获得数组首元素的基地址设数组基地址为p 并设每个元素的存储空间为m 则第i个元素的基地址为p mi 数组元素的初始化 基本初始化格式定义格式 元素类型数组名称 元素个数表达式 值1 值2 值3 示例一 inta 8 1 2 3 4 5 6 7 8 初始化时省略元素个数表达式在全部元素均初始化时可以不列写元素个数 使用sizeof操作符可以获得元素个数示例二 inta 1 2 3 4 5 6 7 8 intnum of elements sizeof a sizeof a 0 sizeof a 获取数组存储空间大小 以字节为单位 sizeof a 0 获取数组首元素的存储空间大小 数组元素的访问 26个英文字母的Morse电码规定如下 A H O V B I P W C J Q X D K R Y E L S Z F M T G N U 编写程序 将字符串 WhathathGodwrought 翻译成Morse电码 使用字符 表示点 字符 表示划 每个Morse电码占用7个字符场宽 每输出一个单词换行 忽略大小写与非英文字母字符 数组元素的访问 main c include ifndef ZYLIB include zylib h endif ifndef EG0605MORSE include Morse h endifintmain STRINGs printf Inputastring theprogramprintsitwithMorsecode n printf Thestring s GetStringFromKeyboard printf TheMorsecodeasfollows n TranslateStringIntoMorseCode s return0 数组元素的访问 Morse h ifndef EG0605MORSE define EG0605MORSE defineMORSE LETTERS26voidTranslateStringIntoMorseCode STRINGs endif 数组元素的访问 Morse c include include ifndef ZYLIB include zylib h endif ifndef EG0605MORSE include Morse h endifstaticconstSTRINGMorse code MORSE LETTERS staticSTRINGCode charc 数组元素的访问 Morse c voidTranslateStringIntoMorseCode STRINGs unsignedinti n n GetStringLength s for i 0 i n i charc GetIthChar s I if isalpha c STRINGt t Code c printf 7s t elseif isspace c printf n printf n 数组元素的访问 Morse c staticSTRINGCode charc returnMorse code toupper c A 数组与函数 数组元素作为函数实际参数intAdd intx inty return x y inta 2 1 2 sum sum Add a 0 a 1 数组整体作为函数形式参数基本格式 返回值类型函数名称 元素类型数组名称 元素个数类型元素个数 示例 voidGenerateIntegers inta unsignedintn 特别说明 作为函数形式参数时 数组名称后的中括号内不需列写元素个数 必须使用单独的参数传递元素个数信息 数组作为函数参数 编写函数 随机生成n个整数并保存到数组中 voidGenerateIntegers inta unsignedintn unsignedinti Randomize for i 0 i n i a i GenerateRandomNumber lower bound upper bound 数组作为函数参数 直接书写常数 只能操作8个元素的数组 不写常数 voidGenerateIntegers inta 8 unsignedinti Randomize for i 0 i 8 i a i GenerateRandomNumber lower bound upper bound voidGenerateIntegers inta 不知道元素个数 易出错 数组作为函数参数 直接书写常量或变量 错误 调用格式使用单独数组名称作为函数实际参数 传递数组基地址而不是数组元素值形式参数与实际参数使用相同存储区 对数组形式参数值的改变会自动反应到实际参数中 voidGenerateIntegers inta n 元素元素个数不允许为量 defineNUMBER OF ELEMENTS8inta NUMBER OF ELEMENTS GenerateIntegers a NUMBER OF ELEMENTS 数组与函数示例 arrmanip h 编写程序 随机生成8个10 99之间的整数保存到数组中 然后将这些元素颠倒过来 ifndef EG0606ARRMANIP define EG0606ARRMANIP voidGenerateIntegers inta unsignedintn voidReverseIntegers inta unsignedintn voidSwapIntegers inta unsignedinti unsignedintj voidPrintIntegers inta unsignedintn endif 数组与函数示例 main c include ifndef EG0606ARRMANIP include arrmanip h endif defineNUMBER OF ELEMENTS8intmain inta NUMBER OF ELEMENTS GenerateIntegers a NUMBER OF ELEMENTS printf Arraygeneratedatrandomasfollows n PrintIntegers a NUMBER OF ELEMENTS ReverseIntegers a NUMBER OF ELEMENTS printf Afterallelementsofthearrayreversed n PrintIntegers a NUMBER OF ELEMENTS return0 数组与函数示例 arrmanip c include ifndef ZYRANDOM include zyrandom h endif ifndef EG0606ARRMANIP include arrmanip h endifstaticconstunsignedintlower bound 10 staticconstunsignedintupper bound 99 voidGenerateIntegers inta unsignedintn unsignedinti Randomize for i 0 i n i a i GenerateRandomNumber lower bound upper bound 数组与函数示例 arrmanip c voidReverseIntegers inta unsignedintn unsignedinti for i 0 i n 2 i SwapIntegers a i n i 1 voidSwapIntegers inta unsignedinti unsignedintj intt t a i a i a j a j t voidPrintIntegers inta unsignedintn unsignedinti for i 0 i n i printf 3d a i printf n 多维数组 多维数组的定义定义格式 元素类型数组名称 常数表达式1 常数表达式2 示例一 inta 2 2 2 2个整数元素的二维数组 示例二 intb 2 3 4 2 3 4个整数元素数组 特别说明 同单维数组多维数组的初始化与一维数组类似 inta 2 3 1 2 3 4 5 6 单独初始化每一维 inta 2 3 1 2 3 4 5 6 多维数组的存储布局 同单维数组 先行后列顺序存放 多维数组的存储布局 测量湖泊水深在湖面上等距离打上网格 分别测量每个网格的水深 就可以从整体上表示湖泊的情况 图中每个网格中的数字表示水深 值为0的表示湖岸 数字1 5表示水深 单位为米 每网格对应实际面积为5m 5m 编写程序 计算湖泊的面积和平均水深 测量湖泊水深程序代码 include include defineNUM OF X GRIDS9 defineNUM OF Y GRIDS4staticconstdoublelake region depths NUM OF Y GRIDS NUM OF X GRIDS 0 0 0 0 1 0 2 0 2 0 3 0 0 0 0 0 0 0 0 0 2 0 3 0 5 0 5 0 3 0 2 0 0 0 0 0 0 0 1 0 4 0 3 0 4 0 2 0 2 0 1 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 constdoublelake grid width 5 0 测量湖泊水深程序代码 intmain doublenum of lake grids 0 0 lake area 0 0 doubletotal lake depth 0 0 mean lake depth 0 0 unsignedinti j for i 0 iDBL EPSILON num of lake grids 1 0 total lake depth lake region depths i j lake area lake grid width lake grid width num of lake grids mean lake depth total lake depth num of lake grids printf Areaofthelakeis 2lf m2 n lake area printf Meandepthofthelakeis 2lf m n mean lake depth return0 6 4结构体 结构体的意义与性质结构体的存储表示结构体数据对象的访问结构体与函数 结构体的意义与性质 结构体的意义与数组的最大差别 不同类型数据对象构成的集合当然也可以为相同类型的但具体意义或解释不同的数据对象集合结构体类型的定义 注意类型定义后面的分号struct结构体名称 成员类型1成员名称1 成员类型2成员名称2 成员类型n成员名称n 结构体的意义与性质 结构体类型示例示例一 日期结构体示例二 复数结构体struct DATE struct COMPLEX intyear doublereal intmonth doubleimag intday 与枚举类型类似 上述定义必须使用struct DATE之类的方式使用结构体类型使用typedef定义新结构体类型 同样类型的结构体成员可在一行定义多个 typedefstruct COMPLEX doublereal imag COMPLEX 结构体的意义与性质 结构体类型定义特例不给出原始结构体类型名称typedefstruct doublereal doubleimag COMPLEX 结构体类型的声明仅仅引入结构体类型的名称 而没有给出具体定义 其具体定义在其他头文件中或本文件后续位置struct COMPLEX typedefstruct COMPLEXCOMPLEX 结构体的意义与性质 如何表示学生信息 成员 整数类型的学号id 字符串类型的姓名name 性别 单独定义枚举类型 gender 年龄age 字符串类型的地址addr typedefenum FEMALE MALE GENDER typedefstruct intid STRINGname GENDERgender intage STRINGaddr STUDENT 结构体的存储表示 按照成员定义顺序存放各成员的存储空间一般连续特殊情况因为不同硬件和编译器的原因 不同类型的成员可能会按照字 两个字节 或双字 四个字节 对齐后存放使用sizeof获得结构体类型量占用空间大小 以字节为单位 下述两种使用方式均可sizeofdate sizeof date 结构体数据对象的访问 结构体类型的变量与常量 按普通量格式定义示例一 DATEdate 示例二 STUDENTzhang san 示例三 STUDENTstudents 8 结构体量的初始化示例四 DATEdate 2008 8 8 结构体量的赋值与数组不同 结构体量可直接赋值 拷贝过程为逐成员一一复制示例五 DATEnew date date 特别注意 如果结构体类型量为字符串类型STRING 则该成员的直接拷贝可能会导致程序错误 必须使用zylib库的DuplicateString函数进行字符串类型成员的赋值 结构体数据对象的访问 结构体量成员的访问使用点号操作符 解析结构体量的某个特定成员示例一 DATEdate date year 2008 date month 8 date day 8 嵌套结构体成员的访问可以连续使用点号逐层解析示例二 typedefstruct intid STRINGname DATEbirthday FRIEND FRIENDfriend friend birthday year 1988 复杂结构体成员的访问严格按照语法规范进行示例三 FRIENDfriends 4 friends 0 birthday year 1988 结构体数据对象的访问 编写程序 接受用户输入的两个复数 按照a bi格式打印它们之和 精度精确到小数点后二位 include ifndef ZYLIB include zylib h endiftypedefstruct doublereal imag COMPLEX intmain COMPLEXa b result printf Theprogramgetstwocomplexesandprintstheirsum n 结构体数据对象的访问 printf Inputrealpartofthefirstcomplex a real GetRealFromKeyboard printf Inputimaginarypartofthefirstcomplex a imag GetRealFromKeyboard printf Inputrealpartofthesecondcomplex b real GetRealFromKeyboard printf Inputimaginarypartofthesecondcomplex b imag GetRealFromKeyboard result real a real b real result imag a imag b imag printf Thesumis 2lf 2lfi n result real result imag return0 结构体与函数 编写一函数 使用结构体类型存储日期 并返回该日在该年的第几天信息 具体天数从1开始计数 例如2007年1月20日返回20 2月1日返回32 unsignedintGetDateId DATEdate staticunsignedintday of month 13 0 31 28 31 30 31 30 31 31 30 31 30 31 unsignedinti date id 0 for i 0 i2 结构体与函数 计算机屏幕上的点使用二维坐标描述 编写函数 随机生成一个屏幕上的点 设计算机屏幕分辨率为1920 1200 屏幕坐标总是从0开始计数 typedefstruct intx y POINT constintorignal point x 0 constintorignal point y 0 constintnum of pixels x 1920 constintnum of pixels y 1200 POINTGeneratePoint POINTt t x GenerateRandomNumber orignal point x num of pixels x 1 t y GenerateRandomNumber orignal point y num of pixels y 1 returnt 结构体与函数 编写程序 接受用户输入的两个复数 输出它们之和 要求使用结构体数组存储复数数据 并尽可能按照模块化设计方法将程序中的操作都实现为函数 include ifndef ZYLIB include zylib h endif defineNUM OF ELEMENTS2typedefstruct doublereal imag COMPLEX voidPrintWelcomeInfo voidGetComplexes COMPLEXa unsignedintn staticdoubleGetDouble STRINGprompt COMPLEXAddComplexes COMPLEXa unsignedintn voidPrintResultInfo COMPLEXa staticvoidPrintComplex COMPLEXa 结构体与函数 intmain COMPLEXa NUM OF ELEMENTS result PrintWelcomeInfo GetComplexes a NUM OF ELEMENTS result AddComplexes a NUM OF ELEMENTS PrintResultInfo result return0 voidPrintWelcomeInfo printf Theprogramgetstwocomplexesandprintstheirsum n 结构体与函数 voidGetComplexes COMPLEXa unsignedintn unsignedinti for i 0 i n i a i real GetDouble Inputrealpartofcomplex a i imag GetDouble Inputimaginarypartofcomplex staticdoubleGetDouble STRINGprompt staticintnum of reals 0 printf s prompt printf No d num of reals 2 num of reals returnGetRealFromKeyboard 结构体与函数 COMPLEXAddComplexes COMPLEXa unsignedintn unsignedinti COMPLEXt 0 0 0 0 for i 0 i n i t real a i real t imag a i imag returnt voidPrintResultInfo COMPLEXa printf Thesumis PrintComplex a printf n staticvoid
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。