169-7-1计算机程序计-第7章 函数与指针及结构体.ppt_第1页
169-7-1计算机程序计-第7章 函数与指针及结构体.ppt_第2页
169-7-1计算机程序计-第7章 函数与指针及结构体.ppt_第3页
169-7-1计算机程序计-第7章 函数与指针及结构体.ppt_第4页
169-7-1计算机程序计-第7章 函数与指针及结构体.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机程序设计 第7章指针与函数及结构体教师 杨振平E mail zpyang 指针与函数带参数的main 函数结构体类型枚举类型 授课内容 7 1指针与函数 指针作为函数的参数如 voidsort int p intn 返回指针的函数如 char strchr char str charch 指向函数的指针如 double f double 一 指针作为函数的参数 指针作函数的形参 能接收实参的地址 被调函数通过该指针能够间接访问实参 能对实参值进行修改 例1 程序填空 函数功能 找x和y的大数 并用参数带回结果 intmain inta b c cin a b maxvalue a b cout c c endl return0 voidmaxvalue intx inty if x y x else y return int z z z c 二 返回指针的函数 声明格式 类型 函数名 形式参数表 intmain char str intn cin n str newchar n 1 cout mystrspace str n cout endl delete str return0 char mystrspce char str intn char ptr str 保存首地址while n 0 ptr ptr n ptr 0 结束标志returnstr 返回首地址 例2 编写一个函数 用于生成具有n个空格的字符串 例3将月份数值 1 12 转换为相应的英文名称 char month name intn staticchar month Illegalmonth 月份值错 January 一月 February 二月 March 三月 April 四月 May 五月 June 六月 July 七月 August 八月 September 九月 October 十月 November 十一月 December 十二月 return n 1 静态指针数组 intmain intn cin n cout n month name n endl return0 函数原型 char strchr char str charc 算法 从str的第一个字符查起 查到字符后就返回该字符的地址 查不到则返回空值NULL while str 0 if str c returnstr str returnNULL 完整程序如下 例4编写返回指针的函数 用于在字符串中查找某个字符 char strchr char str charc while str c intmain char str abcdefghij char p p strchr str j if p NULL cout 字符串中无该字符 endl elsecout 该字符在串中的位置是 p str endl cin get return0 三 指向函数的指针 指向函数的指针 能够存放某个函数的入口地址 定义如下 函数返回值类型 指针变量名 参数说明表 例如 double pf double float qf float int 使用梯形法计算定积分 等份区间n 1000 编写通用的计算定积分值的函数 分别计算以下定积分 1 f x sin x a 0 b 12 g x ex sin x a 0 b 23 h x 3x3 2x2 1 a 0 b 3 例5编写通用的数值积分函数 分别定义为函数 如 doublef doublex returnsin x doubleg doublex return exp x sin x doubleh doublex doubley y 3 x x x 2 x x 1 returny doubleintegral doublea doubleb double fun double intn doubleh b a n doublesum fun a fun b 2 for inti 1 i n i sum fun a i h sum h returnsum 主函数中调用格式 y1 integral 0 0 1 0 f 1000 y2 integral 0 0 2 0 g 1000 y3 integral 0 0 3 0 h 1000 用梯形法求解定积分的通用函数代码 运行结果 7 2带参数的main 函数 main 函数头格式如下 intmain intargc char argv 第一个参数为int型接收由命令行提供的参数个数 包括程序名本身 第二个参数为字符型指针数组 用来接收命令行中提供的各个参数字符串 例6使用带参的main 编程 实现如下功能 若从命令行输入 cal123 456计算2个数的和若从命令行输入 cal56 34计算2个数的差若从命令行输入 cal56 34计算2个数的乘积若从命令行输入 cal456 34计算2个数的商 命令格式 命令名整数1运算符整数2 使用方法 结构体类型的引入 7 3结构体类型 例如 1 学生成绩单数据 学号 姓名 数学 物理 英语2 职工工资单数据 编号 姓名 部门 基本工资数据特点 每个数据是由相互联系的多个数据项组成各数据项的数据类型可能不同 将相互关联的 不同类型的多个数据组织成一个数据 一 结构体类型的定义 结构体类型定义的一般格式 struct结构体类型名 成员变量说明 例 使用结构体类型描述 学生成绩单数据 structgrade list charnumber 10 charname 20 floatmath floatenglish floatphysics 或structgrade list charnumber 10 charname 20 floatscore 3 二 结构体变量的定义与使用 1 结构体变量的定义与初始化例如 定义成绩单类型变量和数组 grade lists1 stu 30 初始化 grade lists2 10001 Li 98 95 89 2 结构体变量的使用 分别引用结构变量的各个成员引用形式 例 s1 number表示s1的学号 s1 name表示s1的姓名 3 结构变量的整体引用赋值操作 如 s1 s2 作函数参数 值传递 函数返回结构类型 例7结构体的应用 统计学生平均分的程序 输入 个学生数据 每个学生数据包括 学号 字符串 高数 英语和体育成绩 均为整型 求其平均成绩 实型 输入输出格式如下 学生结构定义 structStudentType charid 10 学号intscore COURSE 课程成绩floatGPA 平均分 constintPERSON 2 学生人数constintCOURSE 3 课程门数 StudentTypeSt PERSON 学生数组 inti j for i 0 i St i id St i GPA 0 for j 0 j St i score j St i GPA St i score j St i GPA COURSE 输入及计算过程 输出部分 cout 学号 t高数 t英语 t体育 t平均分 endl cout endl for i 0 i PERSON i cout St i id t for j 0 j COURSE j j 1 cout St i score j t cout int St i GPA 10 10 0 endl 三 结构体与指针 structStudentType charid 10 学号intscore 3 课程成绩floatGPA 平均分 StudentTypeSt 100001 98 95 89 StudentType ptr 例 id成员 score成员 GPA成员 结构变量St ptr 使用ptr访问St的成员 ptr 成员名或 ptr 成员名 cout 学号 ptr id 数学 ptr score 0 structStudentType charid 10 学号intscore COURSE 课程成绩floatGPA 平均分 constintPERSON 2 学生人数constintCOURSE 3 课程门数 StudentTypeSt PERSON 学生数组StudentType ptr 结构体指针 例8利用结构体指针 统计学生平均分的程序 for ptr St ptr ptr id ptr GPA 0 for intj 0 j ptr score j ptr GPA ptr score j ptr GPA COURSE 输入及计算过程 输出部分 coutidscore j GPA 10 10 0 endl 运行结果 例9定义一个结构体Rectangle 矩形 根据给定的矩形左上角顶点坐标和右下角顶点坐标 计算该矩形的面积 structRectangle inttopleft x inttopleft y intbottomright x intbottomright y Rectangle结构类型定义 输入函数Input 返回结构类型值 RectangleInput intx1 inty1 intx2 inty2 Rectangletmp tmp topleft x x1 tmp topleft y y1 tmp bottomright x x2 tmp bottomright y y2 returntmp 计算面积的函数GetArea doubleGetArea Rectanglerect returnfabs rect bottomright x rect topleft x rect bottomright y rect topleft y intmain Rectanglerec inttlx tly brx bry cout tlx tly brx bry rec Input tlx tly brx bry cout Area GetArea rec endl return0 主函数 例10词频统计 输入一系列英文单词 单词之间用空格隔开 用 xyz 表示输入结束 统计输入过哪些单词以及各单词出现的次数 统计时区分大小写字母 最后按单词的字典顺序输出单词和出现次数的对照表 structWordList charword 50 单词intfreq 频数 结构体类型定义 WordListlist 5000 单词表 程序结构 main 输入单词并进行词频统计Sort 排序Print 输出 关键程序段 输入并统计单词 WordListlist 5000 单词表inti num 0 num统计单词数chartemp 50 cin temp 输入一个单词while strcmp temp xyz 0 for i 0 i num strcpy list i word temp list i freq 1 num cin temp 按字典次序排序 voidSort WordListlist intcount for inti 0 ii j j 1 if strcmp list j 1 word list j word 0 WordListtmp tmp list j 1 交换结构体变量list j 1 list j list j tmp voidPrint WordListlist intnum for inti 0 i num i cout list i word t list i freq endl 输出函数Print 7 4枚举类型 枚举类型描述一组顺序值的集合 如一个星期7天的数据 一年12个月份数据 枚举表中的数据使用符号名称列出 增强了程序的可读性 枚举类型定义格式 enum 例 一周的7天数据定义如下 enumWeekdayType SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY WeekdayTypeworkday 说明 每个枚举元素是一个整数常量 默认情况 取0 1 2 3 4 5 6定义枚举类型时 可以对枚举符号初始化例 enumWeekdayType SUNDAY 7 MONDAY 1 TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY 3 枚举类型数据不能直接输入输出 includeusingnamespacestd enumWeekdayType SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY intmain WeekdayTypeworkday for workday SUNDAY workday SATURDAY workday WeekdayType workday 1 cout workday t cout endl return0 intmain WeekdayTypeworkday stringstr for workday SUNDAY workday SATURDAY workday WeekdayType workday 1 cout workday t cout endl for workday SUNDAY workday SATURDAY workday WeekdayType workday 1 switch workday caseSUNDAY str SUNDAY break caseMONDAY str MONDAY break caseTUESDAY str TUESDAY break caseWEDNESDAY str WEDNESDAY break ca

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论