遵义网站制作如何收费,德城区建设局网站,如何选择武进网站建设,重庆的网络公司与数学意义上的函数不同#xff0c;C语言中的函数又称为过程#xff0c;接口#xff0c;具有极其重要的作用。教科书上将其定义为#xff1a;程序中的子程序。 在计算机科学中#xff0c;子程序#xff08;英语#xff1a;Subroutine, procedure, function, routine, me… 与数学意义上的函数不同C语言中的函数又称为过程接口具有极其重要的作用。教科书上将其定义为程序中的子程序。 在计算机科学中子程序英语Subroutine, procedure, function, routine, method,subprogram, callable unit是一个大型程序中的某部分代码 由一个或多个语句块组成。它负责完成某项特定任务而且相较于其他代 码具备相对的独立性。 一般会有输入参数并有返回值提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库 目录
函数分类
自定义函数
库函数
函数的参数
实际参数实参
形式参数形参
函数的调用
传值调用
传址调用
嵌套调用
链式访问
函数递归
函数的定义与声明
函数的定义
函数的声明
重点 函数分类 C语言的函数分为两类一类是自定义函数另一类则是库函数。 自定义函数 顾名思义自定义函数就是自己定义的函数函数定义的语法规则如下 ret_type fun_name(para1, *)
{statement;//语句项
}
ret_type 返回类型可以是内置类型也可以是自定义类型无返回值时为void
fun_name 函数名(命名规则同变量命名规则建议采用规范的命名方法如大驼峰命名法下划线命名法)
para1 函数参数(数量不限但是不建议太多)
有返回值有参数
#include stdio.hint get_int_max(int a, int b)
{if (a b)return a;elsereturn b;
}int main()
{int x 0; int y 0;scanf(%d%d, x, y);int max get_int_max(x, y);printf(%d, max);return 0;
} 无返回值无参数
#include stdio.hvoid print_hello()
{printf(hello!\n);
}int main()
{print_hello();return 0;
} 库函数 在使用C语言编程时几乎大量的用户都会使用某一个相同或者相似的功能如打印printf而每个人使用时都需要自己定义此功能模块严重降低了编程的效率。为了支持可移植性和提高程序的效率所以C语言的基础库中提供了一系列类似的库函数方便程序员进行软件开发。因此对于库函数通俗的理解就是别人已经替我们写好的符合我们要求的可以直接使用的函数使用库函数必须包含对应的头文件。通过 www.cplusplus.com学习库函数掌握学习库函数方法以及常用库函数即可 在日常工作生活中库函数并不能满足我们的全部需求因此总会需要我们自己去实现符合预期的功能和模块这也是自定义函数存在的意义。 库函数 strcpy 的学习和使用 #include stdio.h
#include string.hint main()
{char ch1[] hello world\n;char ch2[15];char* ch3 strcpy(ch2, ch1);printf(%s%s%s, ch1, ch2, ch3);return 0;
} 函数的参数
实际参数实参 真实传给函数的参数叫实参。实参可以是常量、变量、表达式、函数等。无论实参是何种类型的量在进行函数调用时它们都必须有确定的值以便把这些值传送给形参。 形式参数形参 形式参数是指函数名后括号中的变量因为形式参数只有在函数被调用的过程中才实例化分配内存单元所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。 形参是实参的一份临时拷贝形参和实参可以同名 函数的调用
传值调用 函数的形参和实参分别占有不同内存块对形参的修改不会影响实参。 #include stdio.hvoid modify_x(int x)
{x 10;
}int main()
{int x 0;modify_x(x);printf(%d\n, x);return 0;
} 传址调用 传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。 这种传参方式可以让函数和函数外边的变量建立起真正的联系也就是函数内部可以直接操作函数外部的变量这也是为什么使用scnaf函数传参时需要 。(指针篇中详解) #include stdio.hvoid modify_x(int* x)
{*x 10;
}int main()
{int x 0;modify_x(x);printf(%d\n, x);return 0;
} 嵌套调用 函数和函数之间可以根据实际的需求进行组合的也就是互相调用的。函数内调用其他函数称为嵌套调用。 #include stdio.hint add_x(int x, int y)
{return x y;
}int mult_x(int x) // x*x
{int i 0;int num x;for (i 0; i x - 1; i){num add_x(num, x);}return num;
}int main()
{int x 0;scanf(%d, x);int ret mult_x(x);printf(%d\n, ret);return 0;
} 链式访问 把一个函数的返回值作为另外一个函数的参数称为链式访问。 #include stdio.hint add_x(int x, int y)
{return x y;
}int mult_x(int x) // x*x
{int i 0;int num x;for (i 0; i x - 1; i){num add_x(num, x);}return num;
}int main()
{int x 0;scanf(%d, x);printf(%d\n, mult_x(x)); //链式访问return 0;
} 函数递归 程序调用自身的编程技巧称为递归 recursion。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算大大地减少了程序的代码量。 递归的主要思考方式在于把大事化小 递归的两个必要条件不满足则会出错 存在限制条件当满足这个限制条件的时候递归便不再继续。 每次递归调用之后越来越接近这个限制条件。 #include stdio.hvoid print(int x)
{if (x / 10 0)print(x / 10);printf(%d , x % 10);}int main()
{int num 12345;print(num);return 0;
} 程序执行流程 函数的定义与声明
函数的定义 函数的定义是指函数的具体实现交待函数的功能实现。 函数的声明 1. 告诉编译器有一个函数叫什么参数是什么返回类型是什么。但是具体是不是存在函数声明决定不了。 2.编译器通过函数声明来寻找对应的函数。 3. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。 4. 函数的声明一般要放在头文件中的。 void print(int x); // void print(int); (可以省略参数变量名但不建议这么写)
重点 1.函数的定义也相当于一次声明因此当我们的函数定义写在函数调用的前面同一个文件时不需要专门写声明也可以找到并调用函数。 2.函数必须先声明后使用否则编译器会找不到对应的函数而报错。 3.C语言标准头文件中存放着标准库函数的声明这也是为什么我们使用库函数时需要包含对应的头文件C语言标准库文件中存放的是函数的具体实现细节即定义。 4.在实践中我们通常把函数的声明和定义分离声明放到头文件中.h后缀的文件定义编译成二进制文件。目的不想让别人清楚我们所实现的功能和模块的具体实现方法只向外提供使用的接口和方法即声明和注释。