函数概念:

  1. C语言程序是由函数组成

  2. 什么是函数? 函数就是一段具备特定功能的程序段

定义函数的目的:

  定义函数的目的: 将一个功能封装以来方便复用

不使用函数的弊端:

1.重复代码太多, 又臭又长

2.当需求变更, 很多地方都需要修改代码

使用函数的好处:

1.提高了代码的复用性, 代码更简洁

2.当需求变更, 不用修改很多地方

函数的定义:

  应该有4个确定:

    1.确定函数名称(给函数起一个有意义的名称, 让调用者一看到名称就知道这个函数是干什么的)

    1.1函数是标示符的一种 , 遵守规则 : 26个字母 , 数字 , _组成, 遵守规范: 驼峰命名

    2.确定形参列表

    2.1形参列表的格式 (数据类型 变量名称, ...)

    2.2如何确定形参列表? 就看看以后调用函数时, 是否需要传递一些辅助的数据给函数

    3.确定返回值

    4.确定返回值类型

    4.1return的是什么类型, 那么返回值类型就写什么类型

格式:

返回值类型 函数名称(形参列表)
{
函数体; // 语句; ...
}

示例:

int getMax(int v1, int v2)
{
int max = v1 > v2 ? v1 : v2;
/*
return有两个作用:
1.返回数据给函数调用者
2.结束函数
*/
return max;
}

函数的调用:

#include <stdio.h>

// 注意: 形参列表中的变量只有当函数被调用时才会分配存储空间

// 形参列表中的每一个变量我们称之为, 形式参数, 简称形参

int average(int v1, int v2)
{
int average = (v1 + v2) / ;
return average;
} int main(int argc, const char * argv[]) {
// 需求: 求两个数的平均值
int a = ;
int b = ;
// 调用函数时传入的参数, 我们称之为实际参数, 简称实参
int result = average(a, b);
printf("result = %i\n", result);
return ;
}

函数注意点:

// 1.如果"基本数据类型"(char int double float)作为函数的参数, 在函数中修改形参的值, 不会影响到外面实参的值
// 2.实参的个数, 必须和形参的个数相同
int getMin(int v1, int v2)
{
// 注意: 在函数中修改形参的值, 不会影响到外面实参的值(当然也有一定的前提)
v1 = ;
int min = v1 < v2 ? v1 : v2;
return min;
}
// 3.返回值可以和返回值类型不一样,但是如果返回值和返回值类型不一样的时候 \
系统会对返回值进行自动类型转换(隐式类型转换), 将返回值转换为返回值类型
// 注意: 在企业级开发中千万不要这样写
// 4.函数可以有形参也可以没有形参
int getHeight()
{
return 1.75;
}
// 5.函数名称不能相同
// 5.1形参列表不同也不可以
// 5.2返回值类型不同也不可以
void test()
{ }
void test()
{ }
void test(int a)
{ }
int test()
{ }
// 6.函数不能嵌套定义
void test()
{
void demo()
{ }
}
// 7.C语言是弱语言
// 7.1函数可以没有返回值类型
// 如果函数没有写返回值类型, 那么默认就是int类型
test()
{
return 1.75;
}

函数的声明:

//C语言规定: 一般情况下, 如果想要调用一个函数, 该函数必须在调用之前出现
//函数的声明的作用: 在调用函数之前, 告诉系统有这个函数 并且告诉系统, 该函数叫什么名字, 接收什么参数, 返回什么类型的值
int sum(int v1, int v2);
//也可以写成:
int sum(int, int);
// 函数的声明, 只需要在函数被使用之前告知系统就可以了, 它可以写在函数的外面也可以写在函数的里面

函数的实现:

// 完整的实现了函数的功能的代码, 称之为函数的定义(函数的实现)
int sum(int v1, int v2)
{
return v1 + v2;
}
/*
C语言中是不允许重复定义(实现)同名称的函数
int sum(int v1, int v2)
{
return v1 + v2;
}
*/

函数递归:

// 需求: 要求用户输入一个大于0的数, 如果用户输入的数不大于0  那么就一直重复的提醒输入重新输入, 直到用户输入的值大于0为止
#include <stdio.h>
void scanfNumber(); int main(int argc, const char * argv[]) {
/*
循环实现:
int number = -1;
while (number < 0) {
printf("请输入一个大于0的整数, 以回车结束\n");
scanf("%i", &number);
}
printf("number = %i\n", number);
*/ // 一般情况下, 能用循环做得事情, 用递归函数都能做
// 但是要注意: 不是什么时候都使用递归, 递归要慎用(性能问题)
// 什么是递归函数: 函数自己搞自己
scanfNumber();
// 注意: 递归一定要由一个明确的结束条件, 否则会造成死循环(无限循环)
return ;
} void scanfNumber()
{
// 1.接收用户输入的值
int number = -;
printf("请输入一个大于0的整数, 以回车结束\n");
scanf("%i", &number);
// 2.判断用户输入的值是否合法
if (number < ) {
// 不合法, 需要重新输入
// 函数可以自己调用自己
scanfNumber();
}
else
{
printf("number = %i\n", number);
}
}

递归格式:

 /*
有5个人坐在一起,问第5个人多少岁?他说比第4个人大两岁。问 第4个人岁数,他说比第3个人大两岁。问第3个人,又说比第2个 人大两岁。问第2个人,说比第1个人大两岁。最后问第1个人, 他说是10岁。请问第5个人多大?
第一个人得岁数 == 10 结束条件
第二个人得岁数 == 第一个人 + 2 // 12
第三个人得岁数 == 第二个人 + 2 // 14
第四个人得岁数 == 第三个人 + 2 // 16
第五个人得岁数 == 第四个人 + 2 // 18
一致第一个人得年龄, 和每个人之间的年龄差, 求第n个人的年龄
age(1) == 10
age(2) == age(1) + 2;
age(3) == age(2) + 2;
age(4) == age(3) + 2;
age(5) == age(4) + 2; age(n) = age(n - 1) + 2; 计算公式
*/
#include <stdio.h> int main(int argc, const char * argv[]) {
int result = age();
printf("result = %i\n", result);
return ;
} int age(int n)
{
// 定义结束条件
if (n == ) {
return ;
}
else{
return age(n - ) + ;
}
} /*
递归: 确定结束条件 找规律确定公式
if(结束条件){
reutrn ..;
}
else{
return 公式;
}
*/

C语言基础--函数的更多相关文章

  1. 黑马程序员——C语言基础 函数

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)函数的定义 1> 任何一个C语言程序都是由一个或者多个程序段( ...

  2. C#语言基础——函数

    函数一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能.所有的高级语言中都有子程序这个概念,用子程序实现模块的功能.在C#语言中,子程序的作用是由一个主函数和若干个函数构成.由主函 ...

  3. C语言基础:函数指针 分类: iOS学习 c语言基础 2015-06-10 21:55 15人阅读 评论(0) 收藏

    函数指针:指向函数的指针变量. 函数名相当于首地址. 函数指针定义:返回值类型  (*函数指针变量名)(参数类型1,参数类型2,....)=初始值 函数指针类型:返回值类型  (*)(参数类型1,参数 ...

  4. C语言基础:函数(Function) 分类: iOS学习 c语言基础 2015-06-10 21:48 14人阅读 评论(0) 收藏

    函数:一段具有某些特定功能的代码段. 使用函数的严格规定: 1.函数声明 2.函数定义 3.函数调用 函数声明:告知系统编译器该系统的函数名,函数参数,参数类型,参数个数,参数顺序等等,以便函数调用时 ...

  5. Java之--Java语言基础组成—函数

    Java语言基础组成-函数 Java语言由8个模块构成,分别为:关键字.标识符(包名.类名.接口名.常量名.变量名等).注释.常量和变量.运算符.语句.函数.数组. 本片主要介绍Java中的函数,函数 ...

  6. Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于“一等公民”. 函数 ...

  7. 第二十三节:Java语言基础-详细讲解函数与数组

    函数 函数在Java中称为方法,在其他语言中可能称为函数,函数,方法就是定义在类中具有特定功能的程序.函数,在Java中可称为方法. 函数的格式: 修饰符 返回值类型 函数名(参数类型 参数1, 参数 ...

  8. JavaScript 引入方式 语言规范 语言基础 数据类型 常用方法 数组 if_else 比较运算符 for while 函数 函数的全局变量和局部变量 {Javascript学习}

    Javascript学习 JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript ...

  9. GO学习-(12) Go语言基础之函数

    Go语言基础之函数 函数是组织好的.可重复使用的.用于执行指定任务的代码块.本文介绍了Go语言中函数的相关内容. 函数 Go语言中支持函数.匿名函数和闭包,并且函数在Go语言中属于"一等公民 ...

随机推荐

  1. 如何保存CONSOLE LOG

    很早以前就想过问题,但因为我们一直有自动化程序去做,所以没仔细研究.   今天学习了一下,其实很简单,在sdsf.da 里面搜索master会看到下面这样一个TASK *MASTER* STC0000 ...

  2. 【转】ecshop后台语言项执行漏洞详解

    该漏洞需要能登录ecshop后台权限,简单修改下语言项目,即可在网站植入木马后门. 以下是详细分析 1.登陆到ecshop台后,选择模板管理,语言项编辑,搜索用户信息 为什么要搜索用户 该漏洞需要能登 ...

  3. 三联运算&&字节码转换

    三联运算 if 1 == 1: name = 'alex'else: name = 'sb' name = 'alex' if 1 == 1 else 'sb lambda f2 = lambda a ...

  4. JAVA基础知识之JDBC——编程步骤及执行SQL

    JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...

  5. Poj(1251),Prim字符的最小生成树

    题目链接:http://poj.org/problem?id=1251 字符用%s好了,方便一点. #include <stdio.h> #include <string.h> ...

  6. MVC 强类型ViewData[] TempData[]

    一.ViewData[] //赋值 ViewData["u"]="值"; //取值 数据类型 u= ViewData["u"] as 数据类 ...

  7. [转](五)unity4.6Ugui中文教程文档-------概要-UGUI Interaction Components

    大家好,我是孙广东.   转载请注明出处:http://write.blog.csdn.net/postedit/38922399 更全的内容请看我的游戏蛮牛地址:http://www.unityma ...

  8. MVC区域使用

    新建项目 Main: 添加一个MVC5控制器并添加index视图:(HomeController) Views/Home/Index.cshtml内容: @{ Layout = null; } < ...

  9. gdb进行多线程调试

    http://blog.csdn.net/xabc3000/article/details/6819867 http://www.cnblogs.com/xuxm2007/archive/2011/0 ...

  10. SQL*Loader实验笔记【二】

      所有SQL*Loader实验笔记 实验案例总结(1-7):     SQL*Loader实验笔记[一] 实验案例总结(8-13):   SQL*Loader实验笔记[二] 实验案例总结(14-19 ...