嵌入式C编程01函数与结构化编程ppt课件_第1页
嵌入式C编程01函数与结构化编程ppt课件_第2页
嵌入式C编程01函数与结构化编程ppt课件_第3页
嵌入式C编程01函数与结构化编程ppt课件_第4页
嵌入式C编程01函数与结构化编程ppt课件_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、函数与构造化编程课程安排n程序构造化概念n函数定义与运用n函数参数与前往值n程序模块化程序程序 = 数据组合数据组合 + 语句组合语句组合 数据组合:根本数据类型,组合数据类型数据组合:根本数据类型,组合数据类型 语句组合:表达式与语句,流程控制语句组合:表达式与语句,流程控制 在在main中开场语句控制流不断到中开场语句控制流不断到main终了前往就足够了么?终了前往就足够了么? main写了上百甚至几百上千行,做了很多很多事!以后要维护、晋级写了上百甚至几百上千行,做了很多很多事!以后要维护、晋级从从 哪里开场?哪里开场? 一个公司由采购、研发、消费、工程、支持等部门组成,便于职能管理。一

2、个公司由采购、研发、消费、工程、支持等部门组成,便于职能管理。 程序也需求这样,按职能分割再组合到一同程序也需求这样,按职能分割再组合到一同构造化编程构造化编程 从回想开场从回想开场1、自顶向下:、自顶向下: 程序设计时,应先思索总体,后思索细节程序设计时,应先思索总体,后思索细节 不要一开场就追求众多的细节,先从最上层总目的开场设计,逐渐使不要一开场就追求众多的细节,先从最上层总目的开场设计,逐渐使 问题详细化问题详细化2、逐渐求精:、逐渐求精: 对复杂的问题,应设计一些子目的作过渡,逐渐细化对复杂的问题,应设计一些子目的作过渡,逐渐细化3、模块化:、模块化: 一个复杂问题,一定是由假设干个

3、稍简单的问题构成一个复杂问题,一定是由假设干个稍简单的问题构成 模块化是把程序要处理的总目的分解为分目的,再进一步分解为详细模块化是把程序要处理的总目的分解为分目的,再进一步分解为详细 的小目的,把每个的小目的,把每个 小目的称为一个模块小目的称为一个模块程序构造化设计原那么程序构造化设计原那么构化程序设计方法引入了工程思想和构造化思想,使大型构化程序设计方法引入了工程思想和构造化思想,使大型软件的开发和编程都得到极大的改善软件的开发和编程都得到极大的改善遵照构造化的程序的设计原那么,按构造化程序设计方法遵照构造化的程序的设计原那么,按构造化程序设计方法设计出的程序具有明显的优点设计出的程序具

4、有明显的优点 其一,程序易于了解、运用和维护其一,程序易于了解、运用和维护 其二,提高了编程任务的效率,降低了软件开发的本钱其二,提高了编程任务的效率,降低了软件开发的本钱程序构造化设计优点程序构造化设计优点其实他曾经在进展程序构造化了或许是被迫!其实他曾经在进展程序构造化了或许是被迫!#include -#include -援用库函数援用库函数 int main (void)int main (void) /从控制台获得输入信息从控制台获得输入信息 / /将输入信息原样输出将输入信息原样输出return 0;return 0; 我们调用我们调用C C库函数实现库函数实现 函数是程序构造化函数

5、是程序构造化的根底的根底如何进展程序构造化如何进展程序构造化让构造化进展得更彻底点吧让构造化进展得更彻底点吧int main (void)int main (void) /所见即所得所见即所得int_out();int_out();return 0;return 0; int_out() int_out()从哪里来?从哪里来?-需求本人实现的需求本人实现的函数!函数!如何进展程序构造化如何进展程序构造化课程安排n程序构造化概念n函数定义与运用n函数参数与前往值n程序模块化lC入口函数:入口函数:main主函数主函数l进入进入main函数之后,适用程序往往函数之后,适用程序往往由由N多个函数库函

6、数多个函数库函数/自定义函数自定义函数组成,经过逐级函数调用,实现程组成,经过逐级函数调用,实现程序功能序功能l一个函数不宜过长不要超越一个函数不宜过长不要超越50行,函数运用原那么:一个函数行,函数运用原那么:一个函数只做一件事只做一件事(实现一个功能实现一个功能)C是函数式言语是函数式言语源程序文件1预编译命令说明部分执行部分函数1函数n源程序文件i源程序文件nC程序C程序构造函数的定义函数的定义合法标识符函数前往值类型函数前往值类型缺省为缺省为int型型无前往值为无前往值为void函数类型函数类型 函数名形参类型阐明表函数名形参类型阐明表语句部分语句部分语句部分语句部分函数体1、函数的命

7、名、函数的命名 GNU命名规范:小写字母,与命名规范:小写字母,与_分隔单词分隔单词2、前往值类型、前往值类型 可以是根本类型、也可以是构造可以是根本类型、也可以是构造但不能直接前往数组!但不能直接前往数组!3、函数原型声明、函数原型声明 先定义,再运用的原那么先定义,再运用的原那么也可以先声明,再运用,后定义也可以先声明,再运用,后定义4、实参和形参、实参和形参参数可以是任何类型!参数可以是任何类型!声明、定义时指定形参,运用时传入的为实参声明、定义时指定形参,运用时传入的为实参 函数根本概念函数根本概念l调用的方法是用实参替代形参:调用的方法是用实参替代形参:l函数语句方式调用:函数语句方

8、式调用:add(10, 20);add(10, 20);l函数表达式方式调用:函数表达式方式调用:sum = add(10, 20);sum = add(10, 20);l函数参数方式调用:函数参数方式调用:printf(“sum is %dnprintf(“sum is %dn, add(10, 20);, add(10, 20);ll llll 函数调用方式函数调用方式l函数调用之前必需先定义或者声明函数调用之前必需先定义或者声明l函数声明方式:函数类型函数声明方式:函数类型 函数名形参类型阐明表函数名形参类型阐明表; ;ll llll 先声明先声明/定义再调用定义再调用l最后调用的函数最

9、先前往最后调用的函数最先前往l右边程序执行结果是什么?右边程序执行结果是什么?lll lll 函数执行过程函数执行过程课程安排n程序构造化概念n函数定义与运用n函数参数与前往值n程序模块化方式参数:定义函数时方式参数:定义函数时, ,函数名后面函数名后面括号中的变量名括号中的变量名形参必需指定类型形参必需指定类型实践参数:调用函数时实践参数:调用函数时, ,函数名后面函数名后面括号中的表达式括号中的表达式实参必需有确定的值实参必需有确定的值形参与实参类型一致,个数一样形参与实参类型一致,个数一样假设形参与实参类型不一致,自假设形参与实参类型不一致,自动按形参类型转换隐式转换动按形参类型转换隐式

10、转换 形参与实参形参与实参l 实参是怎样传送给形参的?实参是怎样传送给形参的?l 将实参的值拷贝赋值给形参!将实参的值拷贝赋值给形参!l 调用终了,形参内存被释放,实参单元仍保管并维持原值调用终了,形参内存被释放,实参单元仍保管并维持原值lll 参数传送过程参数传送过程l无参函数无参函数lint main (void)int main (void)l 根本类型作为函数参数根本类型作为函数参数l add(int a, int b); add(int a, int b);l 数组作为函数参数数组作为函数参数: : 传送的是数组地址用指针表示地址!传送的是数组地址用指针表示地址!lchar des1

11、28 = 0;char des128 = 0;lchar src = “xnfchar src = “xnf; ; lstrcpy(des, src);strcpy(des, src);l 组合构造类型作为函数参数组合构造类型作为函数参数: : 实参整个构造值拷贝给形参实参整个构造值拷贝给形参l大构造拷贝呵斥函数调用效率低,通常做法是传送构造地址用指针表示地址!大构造拷贝呵斥函数调用效率低,通常做法是传送构造地址用指针表示地址!lshow_info(stu_info_t stu); show_info(stu_info_t stu); l指针作为函数参数:高效的传送方式,学习指针时再回来指针作

12、为函数参数:高效的传送方式,学习指针时再回来ll 函数参数类型函数参数类型l无前往类型函数无前往类型函数(void(void函数函数) )l执行执行return;return;语句前往或者函数终语句前往或者函数终了后自动前往了后自动前往l有前往类型函数有前往类型函数( (非非voidvoid函数函数) )l 执行执行return(return(表达式表达式););或者或者return return 表达式表达式; ;前往前往l前往类型不一致会发生什么事?前往类型不一致会发生什么事?函数前往值函数前往值l根本类型作为函数前往类型根本类型作为函数前往类型l int add(int a, int b

13、); int add(int a, int b);l 不能把数组作为函数前往类型不能把数组作为函数前往类型l 只能经过指针实现!只能经过指针实现!l 组合构造类型作为函数前往类型组合构造类型作为函数前往类型 通常经过指针实现!通常经过指针实现!l指针作为函数前往类型:指针作为函数前往类型:l 学习指针时再回来学习指针时再回来ll 函数前往类型函数前往类型课程安排n程序构造化概念n函数定义与运用n函数参数与前往值n程序模块化l实践的程序不单只需实践的程序不单只需main.cmain.c一个文件,而是能够由多个一个文件,而是能够由多个.c.c源文件源文件和和.h.h头文件组成头文件组成l 这些文件

14、是怎样得来的呢?这就涉及程序的模块化!这些文件是怎样得来的呢?这就涉及程序的模块化!l一个大型程序往往按功能或者层次构造划分为多个模块一个大型程序往往按功能或者层次构造划分为多个模块l例如一个手机软件程序:人机交互界面、通话功能、短信功能、例如一个手机软件程序:人机交互界面、通话功能、短信功能、日期时间、用户密码、通讯录日期时间、用户密码、通讯录/ /通话记录保管、网络通讯。通话记录保管、网络通讯。l那么多功能都塞在一个那么多功能都塞在一个main.cmain.c中完成么?怎样做才方便维护与管中完成么?怎样做才方便维护与管理?理?l这就要求模块化这就要求模块化每个子功能实现为一个模块一个每个子

15、功能实现为一个模块一个.c.c文件和一文件和一个对应个对应.h.h文件文件什么是程序模块化什么是程序模块化l把程序划分为主模块和多个辅助功能模块把程序划分为主模块和多个辅助功能模块l主模块实现为主模块实现为main.cmain.c:在主函数中调用辅助功能模块中的接口函:在主函数中调用辅助功能模块中的接口函数,将子功能串联起来实现程序功能数,将子功能串联起来实现程序功能ll辅助模块实现为辅助模块实现为* *.c.c和和* *.h.h:l* *.h.h:接口类型定义,接口函数声明:接口类型定义,接口函数声明l* *.c.c:实现模块接口函数模块子功能:实现模块接口函数模块子功能l 如何进展程序模块

16、化如何进展程序模块化l主模块主模块(main.c):(main.c):l援用援用stu_info.hstu_info.h头文件头文件: #include “stu_info.h: #include “stu_info.hl调用显示学生接口函数:调用显示学生接口函数:show_info(stu);show_info(stu);l学生信息辅助模块学生信息辅助模块(stu_info.c/stu_info.h):(stu_info.c/stu_info.h):lstu_info.hstu_info.h:l 自定义学生信息构造:自定义学生信息构造:stu_info_tstu_info_tl 声明显示学生

17、信息函数声明显示学生信息函数: void show_info(stu_info_t stu);: void show_info(stu_info_t stu);l stu_info.c: stu_info.c:l实现学生信息函数实现学生信息函数l 学生信息程序模块化学生信息程序模块化l编译程序时将一切源文件一同编译编译程序时将一切源文件一同编译l编译时需求指明自定义头文件途径编译时需求指明自定义头文件途径: : lgcc -I ./ gcc -I ./ * *.c o main.c o mainl为了使得模块构造更加明晰,通常工程目录组织为:为了使得模块构造更加明晰,通常工程目录组织为:l gcc -I ./inc main.c src/ gcc -I ./inc main.c src/* *.c o main.c o main学生信息程序模块化学生信息程序模块化l辅助模块辅助模块l 手机程序模块化手机程序模块化上机实验上机实验1、实现函数、实现函数void change_char(char ch), 将将char ch = a 传送给传送给 change_char, 在在change_char中将中

温馨提示

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

评论

0/150

提交评论