C04 模块化开发
目录
- 模块化开发概述
- 函数概述
- 如何使用函数
- 字符串处理函数
- 模块化开发特点
模块化开发概述
概述
C语言是面向过程的语言,意味着编写C语言程序的时候,我们要像计算机一样思考如何设计程序。
模块化开发可以实现C语言程序的分工协作、降低开发成本,能够使程序层次更加清晰,便于程序的开发、维护、阅读和调试。
模块化开发
模块的定义:可组成系统的、具有某种独立的确定功能的子系统。
模块化开发:把程序划分成一个一个功能相对独立的子结构。
本次课程将介绍模块化开发最重要的知识:函数。
函数概述
函数的概念
一个具有独立的、完整功能的程序模块。
函数的分类
从用户角度划分:系统函数(库函数)、用户函数(自定义函数)
系统函数:由系统建立的具有一定功能的函数。例如:库函数printf()、scanf()。
从函数形式划分:有参函数、无参函数。
如何使用函数
函数的定义
语法结构:
返回值类型 函数名(形式参数列表){ 函数体 (返回语句) }
语法结构说明:
- 返回值类型:函数执行完成后返回数据类型,可以没有返回值,即void类型。
- 函数名:函数名通常由动词构成,两个以上单词组成,第一个单词首字母小写,其后单词首字母大写。
- 形式参数表:为函数提供输入。函数可以没有形式参数列表。
- 返回语句:即return语句。返回的类型要和函数的返回值类型相同。可以没有return返回语句,此时函数为void类型。
函数定义示例:
定义sum函数,用于求两个数之和。
上机练习
需求:定义一个函数,用于求两个数的大数。
分析:
1、函数的输入是什么?
2、返回值是什么?
3、函数的功能?
定义函数常见问题
- 函数的类型要和返回值的类型一定要相匹配。
- return只能返回一个值
上机练习
需求:如何实现学生信息管理系统的菜单函数?
提示:没有输入参数;用户输入选项作为函数的返回值。
函数的声明
函数的调用:主调函数和被调函数
例如:main()是主调函数,menu()是被调函数
主调函数调用被调函数前,需要对被调函数声明。原因在于编译器需要知道被调函数的返回类型,以便编译器对该返回类型进行处理。
函数的声明
函数声明的一般形式
示例:
函数的调用
1.函数调用的一般形式
示例:
2.函数参与运算
函数作为变量处理,参与表达式运算
函数实参
3.函数调用注意点
- 无论函数是否带参,被调用时,函数名后都要有括号。
- 主调函数传递给被调函数的参数个数必须一致,类型必须兼容。
- 一个函数最多只有一个返回值。
上机练习
需求:如何实现学生信息管理系统的菜单函数的调用?
4.形参和实参的区别
- 形参指定义函数时候参数的声明
- 实参指函数调用时传递给函数的实际值
- 形参只有被调用时才分配确定的值,称为实参
- 形参和实参的类型必须相同,数量相同
问题:如何求三个数中的最大值?
函数的嵌套调用
- C语言不允许进行嵌套函数定义。
- 运行在一个函数的定义中出现另一个函数的调用。
- 示例:
- 实际编程规范:函数嵌套不要超过三层。
- 函数嵌套调用的例子:
上机练习
需求描述:
同一项目中不同文件中的函数调用
只要在声明函数的时候添加extern声明即可
系统字符串函数
专项课程。
模块化开发特点
使用函数时注意问题
- 使用参数一般不要超过5个
- 函数入口处需要对参数检查
- 尽量一个出口,返回类型确认
- 控制函数的规模,100行代码以内
- 函数嵌套深度不要太深,不要超过3层
- 返回错误信息应明确
模块化程序设计特点
- 模块相对独立,功能单一,可混合编写也可以独立编写调试
- 可以团队开发,缩短开发周期
- 开发出的模块,可在不同的应用程序中多次使用,减少重复劳动,提高开发效率
- 测试,更新以模块为单位进行而不会影响其他模块。
C04 模块化开发的更多相关文章
- 初学seaJs模块化开发,利用grunt打包,减少http请求
原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...
- JS模块化开发:使用SeaJs高效构建页面
一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...
- iOS关于模块化开发解决方案(纯干货)
关于iOS模块化开发解决方案网上也有一些介绍,但真正落实在在具体的实例却很少看到,计划编写系统文章来介绍关于我对模块化解决方案的理解,里面会有包含到一些关于解耦.路由.封装.私有Pod管理等内容:并编 ...
- Angular 结合RequireJs实现模块化开发
angular的指令是模块化很好的一个体现,下面我将只使用指令(不用控制器),结合requirejs,实现模块化开发. 模块化关系图:
- .NET/ASP.NET MVC(模块化开发AraeRegistration)
阅读目录: 1.开篇介绍 2.AreaRegistration注册路由(传递路由上下文进行模块化注册) 1]开篇介绍 ASP.NET Routing 路由功能非常强大,设计的也很巧妙:如果说ASP.N ...
- Mvc 模块化开发
在Mvc中,标准的模块化开发方式是使用Areas,每一个Area都可以注册自己的路由,使用自己的控件器与视图.但是在具体使用上它有如下两个限制 1.必须把视图文件放到主项目的Areas文件夹下才能生效 ...
- 模块化开发--sea.js
当你的网站开发越来越复杂的时候,会经常遇到一下问题吗?1.冲突2.性能3.依赖如果在多人开发或者是复杂的开发过程中会经常遇到这些问 题,就可以用模块化开发来解决.以上问题是如何产生的?1.冲突:如果你 ...
- 详解JavaScript模块化开发
什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等 ...
- Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。
随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...
随机推荐
- Golang : flag 包简介
在 Golang 程序中有很多种方法来处理命令行参数.简单的情况下可以不使用任何库,直接处理 os.Args:其实 Golang 的标准库提供了 flag 包来处理命令行参数:还有第三方提供的处理命令 ...
- 201621123016 《Java程序设计》第6周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...
- 201621123016《Java程序设计》第二周学习总结
1. 本周学习总结 1.本周学习重点: 字符串常量池:这是java中为减少字符串的建立而设计的,在没有使用new构建字符串时,jvm会从字符串常量池查找其值,如果没有则会创建这个字符串再把其放在字符串 ...
- oop的三大特点
1.封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法.于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程, ...
- DOM中元素节点、属性节点、文本节点的理解13.3
节点信息 每个节点都拥有包含着关于节点某些信息的属性.这些属性是:nodeName(节点名称) nodeValue(节点值) nodeType(节点类型) nodeType nodeType 属性可返 ...
- shader实例(二十二)TexGen-球面贴图SphereMap
http://blog.sina.com.cn/s/blog_89d90b7c0102vfqz.html 球面贴图一般用于环境反射,如下图(左边为球面贴图,右边为正常贴图),一个镜面水晶球在这只猫的前 ...
- 如何使Label有修改功能
如何使Label有修改功能 之前制作一个项目时需要这样一个功能: 双击Label, 随后Label变为TextBox,用户修改后回车,TextBox变回Label 之前使用WPF做了一个,代码如下: ...
- Codevs 3112 二叉树计数
3112 二叉树计数 题目描述 Description 一个有n个结点的二叉树总共有多少种形态 输入描述 Input Description 读入一个正整数n 输出描述 Output Descript ...
- Linux权限相关
权限分组 用户:文件所有者 用户组:多个用户的集合 其他:除了用户和用户组之外的任何用户 权限类别 r:表示读的权限 w:表示写的权限 x:表示执行的权限 s:表示setuid权限,允许用户以其拥有者 ...
- CentOS7-MySQL8安装-使用yum库安装
# Enable to use MySQL 5.5 [mysql55-community] name=MySQL 5.5 Community Server baseurl/$basearch/ ena ...