菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序【结构性】更好,更容易维护。而函数就是C语言结构化的一种手段。

函数可以将大的计算任务划分为多个较小的任务(解耦合),一个设计得当的函数可以将不必要的细节给隐藏起来使程序的整个结构更加清晰,也降低了维护代码的难度
我们其实已经多次使用(调用)函数:printf、scanf都是C标准库的函数,从之前的使用经历,也能体会到上一句话的意义。

我们以下再看一个具体例子的修改过程。

1.实现判断数字的奇偶性

#include <stdio.h>int main(int argc, char* argv[])
{int nValue = 0;printf("请输入需要判断的数字");scanf("%d", &nValue);if (nValue % 2 == 0){printf("偶数\r\n");}else{printf("奇数\r\n");}return 0;
}

2.通过函数封装判断算法:对奇偶判断函数进行封装

#include <stdio.h>int IsEvenNumber(int nNumber)
{if (nNumber % 2 == 0)return 1;else return 0;
}int main(int argc, char* argv[])
{int nValue = 0;printf("请输入需要判断的数字");scanf("%d", &nValue);if (IsEvenNumber(nValue)){printf("偶数\r\n");}else{printf("奇数\r\n");}return 0;
}

3.没有函数封装,利用while循环减2后余数判断算法进行奇偶判断

#include <stdio.h>int main(int argc, char* argv[])
{int nValue = 0;printf("请输入需要判断的数字");scanf("%d", &nValue);//利用值不断减去2,根据最终的计算的值是0还是1判断奇偶while (nValue != 0 && nValue != 1){nValue -= 2;}if (nValue == 0){printf("偶数\r\n");}else{printf("奇数\r\n");}return 0;
}

4.对新算法进行封装

以上的算法修改,导致程序的结构与之前的版本有较大不同。
但是,如果将新算法封装在判断奇偶性的函数中,则与原有结构看起来非常一致。

//封装while循环
int IsEvenNumber(int nNumber)
{while (nNumber != 0 && nNumber != 1){nNumber -= 2;}if (nNumber == 0)return 1;elsereturn 0;
}int main(int argc, char* argv[])
{int nValue = 0;printf("请输入需要判断的数字");scanf("%d", &nValue);if (IsEvenNumber(nValue)){printf("偶数\r\n");}else{printf("奇数\r\n");}return 0;
}

5.对数据输入函数进行封装

#include <stdio.h>
//奇偶判断函数封装
int IsEvenNumber(int nNumber)
{while (nNumber != 0 && nNumber != 1){nNumber -= 2;}if (nNumber == 0)return 1;elsereturn 0;
}
//数据输入函数封装
int GetUserNumber()
{int nValue = 0;printf("请输入需要判断的数字");scanf("%d", &nValue);return nValue;
}int main(int argc, char* argv[])
{int nNumber = GetUserNumber();if (IsEvenNumber(nNumber)){printf("偶数\r\n");}else{printf("奇数\r\n");}return 0;
}

6.总结

面向过程编程: 函数使得程序模块化
使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节

这有利于分清职责,也提高了合作的灵活性。
类似于手机充电线,只要接口能够适配,那么并不关心USB线的另一端是怎样的供电设备。

7.学习视频地址:为什么使用函数?

C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)相关推荐

  1. 不显示参数名_第51p,万能参数与返回值,Python中函数的返回值

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第51篇文章,第三阶段的课程:Python进阶知识:详细讲解Python中的函数(四)====>函数的参数与返回值(下篇). ...

  2. Java 函数式编程案例(函数式接口作为参数和返回值)

    文章目录 案例1:函数式接口作为参数 1. 1 原日志代码 1.2 优化的代码 案例2:函数式接口作为返回值 实际开发中使用的 案例1:函数式接口作为参数 1. 1 原日志代码 public clas ...

  3. web前端-JavaScript中的函数(创建,参数,返回值,方法,函数作用域,立即执行函数)

  4. 重学Java(035)——Java基础知识(类作为成员变量、接口作为成员变量、接口作为方法参数和返回值类型)

    学习内容:三种引用类型用法 一.类作为成员变量 二.接口作为成员变量 三.接口作为方法参数和返回值类型 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进 ...

  5. 函数的返回值可以不用赋值_C语言学习|函数的应用《一》

    C语言为程序的结构提供了函数和模块 一.函数的定义与使用 <编程之道>中写道:"一个程序应该是灵活自由的.它的子过程就像串在一根线子上的珍珠."子过程在C语言中被称为& ...

  6. 13_python基础—函数进阶(参数、返回值、递归)

    文章目录 目标 一.函数参数和返回值的作用 1.1 无参数,无返回值 1.2 无参数,有返回值 1.3 有参数,无返回值 1.4 有参数,有返回值 二.函数的返回值 进阶 2.1 示例 -- 温度和湿 ...

  7. php 函数返回值mixed,认识函数的类型、参数与返回值

    函数的类型.参数与返回值 一.函数的基本语法语法 functionfunctionName(类型限定参数列表):返回值类型 { } 案例:计算两个数之和. functionsum(int$a,int$ ...

  8. go函数详解:函数定义、形参、返回值定义规范、函数内存分析、不支持重载、支持可变参数、基本数据类型和数组默认都是值传递的、支持自定义数据类型、函数返回值命名

    引入 [1]为什么要使用函数: 提高代码的复用型,减少代码的冗余,代码的维护性也提高了 [2]函数的定义: 为完成某一功能的程序指令(语句)的集合,称为函数. [3]基本语法 func 函数名(形参列 ...

  9. C语言基础——“hello word”篇

    C语言基础--"hello word"篇 在昨天的教程中,大家已经对C语言有了简单的了解.但是对于我们新人来说,光是了解什么是C语言是不够的,我们要学会怎么利用C语言进行编程,在学 ...

最新文章

  1. python数据文件读写
  2. 谈行业数字化转型,先要搞明白ICT生态的共赢共生
  3. ObservableCollection排序
  4. 【GoLang】GoLang 遍历 map、slice、array方法
  5. iphone以旧换新活动_iPhone销量靠降价,安卓终于要赢了?
  6. R语言:expand.grid() 函数解析
  7. Django中HttpResponse和JsonResponse的区别和用法
  8. c++ map是有序还是无序的_c++中map与unordered_map的区别
  9. python 基础 列表
  10. Reflection in .net
  11. Android 系统权限
  12. jQuery选择器总结[转]
  13. 产品需求文档:如何撰写一份敏捷的PRD (模板2.0)
  14. 金山打字专业文章计算机,打字测试-金山打字2003打字测试有哪些文章?金山打字2003打字测试有哪 爱问知识人...
  15. T Day-1 星空之夜
  16. Windows10环境下自己配置Pytracking详细流程(有参考博客)
  17. html地址欄小圖標,网站地址栏前面的小图标favicon.ico制作方法
  18. undefined reference to `__stack_chk_guard' .. undefined reference to `__stack_chk_fail'
  19. web高德地图路线规划(多条)
  20. vm-install vmware tools安装

热门文章

  1. 开发必备的网络知识极简版 (用于快速梳理)
  2. FLASK中利用javascript实现按钮点击事件
  3. storyboard搭建项目_iOS应用开发中StoryBoard搭建UI界面的基本使用讲解
  4. 面对困难需要坚持和专注
  5. redis分布式锁之redisson可重入锁
  6. 开发定制一个属于自己的小型数据库
  7. [儿童益智玩具]怎么玩?儿科学会给出了10条建议
  8. 微信小程序图书商城毕业设计,图书商城购物小程序系统设计与实现,图书商城购物小程序商城毕设作品参考
  9. AI时代护照证件阅读录入
  10. 除了简历上的内容还能跟面试官聊啥?