一、       什么是函数

函数是具有特定功能的模块。可以说一个完整的程序其实是由多个函数共同完成的。C语言的全部工作都是由程式各样的函数完成的,所以也把C语言称为函数式语言。使用模块化设计可能 使程序的层次结构清晰,全球程序的编写、阅读、调试。

二、       函数的分类

就像你一样,说你从性别的角度分属于男还是女?如果从肤色的角度分你是属于黄种人还是白种人?如果从高低的角度分你是属于高的,还是低的呢?所以说同一类事物可以从不同的角度进行分类。函数也是一样从定义的角度分为库函数和自定义函数、从传递参数的角度分为有参函数与无参函数、从返回值的角度分为有返回值函数与无返回值函数。各种函数的区分请参照如下:

  1. 1.   库函数:系统已经定义好的函数,可以直接使用。如strlen,strcmp
  2. 2.   自定义函数:根据需要手动所写的函数。
  3. 3.   有参函数:函数头后的括号里有内容的函数。
  4. 4.   无参函数:函数头后括号里无内容的函数。
  5. 5.   返回值函数:函数最后有return语句的函数。
  6. 6.   无返回值函数:函数里没有return语句的函数。

三、       变量的应用

变量的有效作用范围称为变量的作用域。按照有效作用范围可以把变量分为全局变量和局部变量两种。

  1. 1.   全局变量

全局变量是在函数外部定义的变量,也称全程变量,或外部变量。全局变量的作用域是从变量定义的位置开始,到所在源文件结束。全局变量的操作范围,属于其定义所在的源程序文件中。如下图所示:

如上图所示a、b、x、y、m、n这六个变量作用不同,所以如果用全局变量,那么我们最好使用a、b这两个变量定义时的方法,写在所有函数的上头。

  1. 2.   局部变量

局部变量也称为内部变量,指在函数内部定义的变量。或一对花括号“{}”里的变量,只在其定义的范围内起作用,范围之外无法访问。

举例:

  1. void fun(int a,int b)
  2.  
  3. {
  4.  
  5. int x,y;
  6.  
  7. }

其中变量a、b、x、y都是局部变量,作用范围就是函数fun内。

四、       函数思维

通过下面程序段我们来看下函数思维的过程,以及函数的定义和使用过程。

  1. /* Note:Your choice is C IDE */
  2.  
  3. #include "stdio.h"
  4.  
  5. void check(int a);//声明函数
  6.  
  7. void main()
  8.  
  9. {
  10.  
  11. int num;
  12.  
  13. printf("请输入一个数:");
  14.  
  15. scanf("%d",&num);
  16.  
  17. check(num);
  18.  
  19. }
  20.  
  21. void check(int a) // 形参
  22.  
  23. {
  24.  
  25. if(a%==&&a%==) //与 且 都 并且
  26.  
  27. printf("%d是3与4的倍数\n",num); //一名话可加可不加{}
  28.  
  29. else
  30.  
  31. printf("%d不是3与4的倍数\n",num);
  32.  
  33. }

注意:参数传递

1:只能实参传给形参

2:参数之间用逗号隔开

3:传递时个数要一致,类型要一致

  1. 1.   函数的说明

在全局上自定义函数应该在主函数之前有一个说明,目的是告诉系统在主函数中要用到一个自定义函数,被主函数直接调用或间接调用。说明的时候就要写清楚这个函数的数据类型是什么,自变量有几个,都是什么数据类型的。

如:语句  void check(int a);

声明方式是:函数头+;

  1. 2.   无参无返回值函数的定义

函数的定义的格式为:

void  函数名( )

{

说明部分;

语句部分;

}

  1. 3.   函数的调用

无参无返回函数的调用格式是通过函数名来调用的.

无参函数的调用格式为:函数名();

  1. 4.   扩展内容:形式参数和实在参数

针对案例当中需要我们理解形式参数与实在参数说明如下:

(1)  形式参数是在定义函数时放在函数名称之后的括号中的参数。在函数未被调用时,系统不对形式参数分配内存单元。在函数被调用时,系统会立刻给形式参数分配内存单元;调用结束后,再释放掉形式参数所占有的内存单元。因此,形式参数属于局部变量,其作用域限定在它所在的函数体内。这就不难理解在定义函数时为什么要指定形参变量的数据类型了。

(2)  实在参数是一个具有确定值的表达式。函数在调用时,要将实在参数赋给形参变量。比如代码中if(check(num)==1)调用子函数,这时num为实在参数,在这之前变量num是被赋过具体值的。在函数被调用后,系统会把num的值赋给形式参数a.

注:实在参数的个数及类型应与形式参数一致,赋值时多个参数之间的前后对应关系不变。

心形代码

  1. /* Note:Your choice is C IDE */
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. #include "windows.h"
  5. int i,j;
  6. void gotoxy(int x,int y);
  7. int color(int c);
  8. void xin(){
  9. color();
  10. gotoxy(,);
  11. printf("■");//8行28列
  12. Sleep();
  13. gotoxy(,);
  14. printf("■");
  15. Sleep();
  16. gotoxy(,);
  17. printf("■");
  18. Sleep();
  19. gotoxy(,);
  20. printf("■");
  21. Sleep();
  22. gotoxy(,);
  23. printf("■");
  24. Sleep();
  25. gotoxy(,);
  26. printf("■");
  27. Sleep();
  28. gotoxy(,);
  29. printf("■");
  30. Sleep();
  31. gotoxy(,);
  32. printf("■");
  33. Sleep();
  34. gotoxy(,);
  35. printf("■");
  36. Sleep();
  37. gotoxy(,);
  38. printf("■");
  39. Sleep();
  40. gotoxy(,);
  41. printf("■");
  42. Sleep();
  43. gotoxy(,);
  44. printf("■");
  45. Sleep();
  46. gotoxy(,);
  47. printf("■");
  48. Sleep();
  49. gotoxy(,);
  50. printf("■");
  51. Sleep();
  52. gotoxy(,);
  53. printf("■");
  54. Sleep();
  55. gotoxy(,);
  56. printf("■");
  57. Sleep();
  58. gotoxy(,);
  59. printf("■");
  60. Sleep();
  61. gotoxy(,);
  62. printf("■");
  63. Sleep();
  64. gotoxy(,);
  65. printf("■");
  66. Sleep();
  67. gotoxy(,);
  68. printf("■");
  69. for(i=;i<;i++){
  70. gotoxy(,i);
  71. printf("■");
  72. }
  73. for(i=;i<;i++){
  74.  
  75. gotoxy(,i);
  76. printf("■");
  77. }
  78. for(i=;i<;i++){
  79.  
  80. gotoxy(,i);
  81. printf("■");
  82. }
  83. for(i=;i<;i++){
  84. gotoxy(,i);
  85. printf("■");
  86. }
  87. for(i=;i<;i++){
  88. gotoxy(,i);
  89. printf("■");
  90. }
  91. for(i=;i<;i++){
  92. gotoxy(,i);
  93. printf("■");
  94. }
  95. for(i=;i<;i++){
  96. gotoxy(,i);
  97. printf("■");
  98. }
  99. }
  100. void menu(){
  101. for(i=;i<;i+=){
  102. gotoxy(i,);
  103. color();
  104. printf("□");
  105. gotoxy(i,);
  106. printf("□");
  107. }
  108. for(i=;i<;i++){
  109. gotoxy(,i);
  110. printf("□");
  111. gotoxy(,i);
  112. printf("□");
  113. }
  114. for(i=;i<;i+=){
  115. for(j=;j<;j++){
  116. gotoxy(i,j);
  117. color();
  118. printf("■");
  119. }
  120. }
  121. }
  122. void people(){
  123. color();
  124. for(i=;i<;i++){
  125. gotoxy(,i);
  126. printf("■");
  127. }
  128. gotoxy(,);
  129. printf("■");
  130. gotoxy(,);
  131. printf("■");
  132. gotoxy(,);
  133. printf("■");
  134. gotoxy(,);
  135. printf("■");
  136. gotoxy(,);
  137. printf("■");
  138. gotoxy(,);
  139. printf("■");
  140. gotoxy(,);
  141. printf("■");
  142. gotoxy(,);
  143. printf("■");
  144. gotoxy(,);
  145. printf("■");
  146. gotoxy(,);
  147. printf("■");
  148. gotoxy(,);
  149. printf("■");
  150. gotoxy(,);
  151. printf("■");
  152. gotoxy(,);
  153. printf("■");
  154. gotoxy(,);
  155. printf("■");
  156. gotoxy(,);
  157. printf("■");
  158. gotoxy(,);
  159. printf("■");
  160. gotoxy(,);
  161. printf("■");
  162. gotoxy(,);
  163. printf("■");
  164. gotoxy(,);
  165. printf("■");
  166. /*gotoxy(36,13);
  167. printf("■");*/
  168. gotoxy(,);
  169. printf("■");
  170. gotoxy(,);
  171. printf("■");
  172. gotoxy(,);
  173. printf("■");
  174. gotoxy(,);
  175. printf("■");
  176. gotoxy(,);
  177. printf("■");
  178. gotoxy(,);
  179. printf("■");
  180. gotoxy(,);
  181. printf("■");
  182. /*gotoxy(36,17);
  183. printf("■");*/
  184. gotoxy(,);
  185. printf("■");
  186. gotoxy(,);
  187. printf("■");
  188. //y
  189. gotoxy(,);
  190. printf("■");
  191. gotoxy(,);
  192. printf("■");
  193. gotoxy(,);
  194. printf("■");
  195. gotoxy(,);
  196. printf("■");
  197. gotoxy(,);
  198. printf("■");
  199. gotoxy(,);
  200. printf("■");
  201. gotoxy(,);
  202. printf("■");
  203. gotoxy(,);
  204. printf("■");
  205. gotoxy(,);
  206. printf("■");
  207.  
  208. }
  209. void gotoxy(int x,int y){
  210. COORD c;
  211. c.X=x;
  212. c.Y=y;
  213. SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
  214. }
  215. int color(int c){
  216. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
  217. return ;
  218. }
  219. void main()
  220. {
  221.  
  222. system ( "mode con cols=60 lines=28" );
  223. system("title 原来是因为");
  224. menu();
  225. gotoxy(,);
  226. system("pause");
  227. xin();
  228. for(i=;i>=;i--){
  229. Sleep();
  230.  
  231. gotoxy(,i);
  232. color();
  233. printf("■");
  234. gotoxy(,i+);
  235. color();
  236. printf("■");
  237.  
  238. }
  239. /*system("cls");*/
  240. /*menu();*/
  241. people();
  242.  
  243. gotoxy(,);
  244. system("pause");
  245. }

c语言进阶2-变量的作用域与无参函数的更多相关文章

  1. C语言基础之变量、作用域

    1.变量的定义 变量类型 变量名; int score; 2.变量的赋值 score = 100; score = a; score = b = 100; 3.变量的输出 int a = 200; p ...

  2. C语言进阶_变量属性

    人们总说时间会改变一些,但实际上这一切还得你自己来. 一.概念详解 变量:计算机语言中储存计算结果,其值可以被修改.通过变量名来访问计算机中一段连续的内存空间. 属性:区别于同类事物的特征. C语言中 ...

  3. R语言学习笔记-变量的作用域

    R语言是如何将变量值和变量绑定的 在r语言中,当前的 workspace就是global enviroment,当输入变量名时,首先会在global enviroment中搜索该变量,如有,则将它显示 ...

  4. C语言 变量的作用域和生命周期(转)

    转自 https://blog.csdn.net/u011616739/article/details/62052179 a.普通局部变量 属于某个{},在{}外部不能使用此变量,在{}内部是可以使用 ...

  5. C/C++——C++变量的作用域与生命周期,C语言中变量的作用域和生命周期

    全局变量 作用域:全局作用域(全局变量只需在一个源文件中定义,就可以作用于所有的源文件.) 生命周期:程序运行期一直存在 引用方法:其他文件中要使用必须用extern 关键字声明要引用的全局变量. 内 ...

  6. C语言的变量的作用域和生存期

    一.c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令:      2)初始化数据段(数据段)——在 ...

  7. C语言中变量的作用域和生命周期

    变量的类型: 1. 局部变量和全局变量 局部变量也称为内部变量. 局部变量是在函数内作定义说明的.其作用域仅限于函数内, 离开该函数后再 使用这种变量是非法的. 全局变量也称为外部变量,它是在函数外部 ...

  8. C语言变量的作用域和存储类型

    1.动态局部变量:也称局部变量.自动变量,是指在函数内部定义的自动变量,不带static修饰,作用域是定义该变量的子程序.在退出函数后,变量自带内存会自动释放. 2.静态局部变量:是指在函数内部定义的 ...

  9. C语言中变量、全局变量与变量的作用域

    什么是变量: 变量常量都是表征数据的一种形式:常量用来表示数据的值: 变量不仅可以用来表示数据的值:还可以用来存放数据:因为变量对应着一定的内存单元: 变量和常量必须先定义后使用. 变量名和常量名都是 ...

随机推荐

  1. Linux下的wfopen(手工打造)

    Of Linux on wfopen (open wide-character version of the file name and mode) to achieve Not directly a ...

  2. 通过内核对象在服务程序和桌面程序之间通信的小问题 good

    关于在通过 事件对象 在服务程序和普通桌面应用程序相互之间通信的问题,分类情况进行讨论:1.普通桌面应用程序中创建事件,服务程序中打开事件 XP的情况普通桌面应用程序中创建: m_hEvent = : ...

  3. Webapi实现websocket实时通讯

    应用场景:前端页面发起一个websocket请求与后端进行实时通讯.后端监听某端口获取数据,将监听到的数据加工处理,通过websocket发送到前端. 这里只提供后台的处理方案仅供参考. 1.后端监听 ...

  4. CodeSmith使用SQLite Provider找不到请求的 .Net Framework 数据提供程序

    关于CodeSmith5使用SQLite Provider时的报错:System.BadImageFormatException: 未能加载文件或程序集“System.Data.SQLite,.... ...

  5. 记一次在win2008下添加nginx自启动服务的操作

    为了在win环境下添加nginx自启服务,我度娘了, 找到在cnblogs下(http://www.cnblogs.com/JayK/p/3429795.html)有篇文章是介绍如何添加nginx到w ...

  6. Netty源码分析--NIO(一)

    好久没写博客了,最近打算花些时间把Netty的源码好好读一读,下面是本人在学习的过程中的一些笔记,不能确保自己思考的完全是正确的,如果有错误,欢迎大家指正. 由于本人的语文功底烂的很,通篇使用大白话来 ...

  7. kubernetes实战篇之为默认账户创建镜像拉取密钥

    系列目录 上一节我们分别使用纯文本账户密码和docker的config文件一创建一个kubernetes secret对象,并且把它添加到containers的imagePullSecrets字段用以 ...

  8. 推荐一个高效,易用功能强大的可视化API管理平台

    项目管理 提供基本的项目分组,项目管理,接口管理功能 接口管理 友好的接口文档,基于websocket的多人协作接口编辑功能和类postman测试工具,让多人协作成倍提升开发效率 MockServer ...

  9. Redis 在java中的使用(登录验证,5分钟内连续输错3次密码,锁住帐号,半小时后解封)(三)

    在java中使用redis,做简单的登录帐号的验证,使用string类型,使用redis的过期时间功能 1.首先进行redis的jar包的引用,因为用的是springBoot,springBoot集成 ...

  10. Java基础知识了解

    第一章 开发前言 一.java语言概述 Java是当下最流行的一种编程语言,至今有20年历史了.Java语言之父是James Gosling. Java是Sun公司(Stanford Universi ...