第六章函数

你好!我是小柒今天我们来学习一下函数。

函数

回顾:其实咱们第一天就见到了main主函数,我们在里面学会了很多知识,写了很多代码,现在我们就来认识一下函数。

本节内容

1、函数的定义

2、自定义函数

3、函数的返回值

4、return关键字

5、函数的声明

6、 数组做函数参数

7、递归函数

8、变量的作用域

 

小柒什么是函数呢?

C程序

代码段1函数---功能---播放

代码段2函数---功能---暂停

代码段3函数---功能---停止

答:任何一个C语言程序都是由一个或多个代码段(小程序)构成的,每个代码都有自己的功能,我们称这些程序段为“函数”;作用:实现某个功能的程序段,每个函数都有自己的功能,C程序中可能会有很多函数,但是函数的名字都是唯一的。

1、函数的定义

格式:

返回值类型 函数名(形式参数列表){

函数体

返回值

}

示例

#include <stdio.h>

 int main(int argc, const char * argv[]) {

    printf("Hello, World!\n");

    return 0;

}

2、自定义函数

格式:

#include <stdio.h>

返回值类型 函数名(形式参数列表){

函数体

返回值

}

main函数{

函数体(可调用自定义函数)

return 0;

}

 

示例

#include <stdio.h>

//类型修饰符int 函数名hh(形式参数列表)

int hh(int a,int b){

    int sum = a +b;

    //    返回值

    return sum;

}

int main(int argc, const char * argv[]) {

    // insert code here...

    printf("Hello, World!\n");

    //    调用函数

    //    用整型C = 函数hh(实际参数);

    int c = hh(10, 20);

    printf("c = %d\n",c);

    小柒提示:形参和实参要一一对应

    return 0;

}

打印结果:

c = 30

小柒补充:

1)、如上代码a,b是形式参数,简称形参;10,20是实际参数,简称实参

2)、实参和形参之间只是传递值。例如将数值10拷贝给变量a。

3)、函数也可以没有形参

 

3、函数的返回值

小柒什么是返回值?

答:返回值就是函数调用完后,返回给函数调用者的结果,用return关键字进行返回。

 定义函数时,要指明函数的返回值类型 

格式1:

int hh(int a,int b){

    int sum = a +b;

    //    返回值

    return sum;

}

 

格式2:

viod hh(){

printf("mmmm");

}

小柒提示;一个函数可以没有返回值,如果没有返回值,应该用void表示返回值类型

 

4、return关键字

小柒什么return关键字?

答:return关键字用于在函数内部返回一个值给函数调用者 

一个函数内部可以多次使用return语句,使用了return语句后,

函数就会马上停止执 行,return语句后面的代码就不再被执行 。

 示例

#include <stdio.h>

//类型修饰符int 函数名hh(形式参数列表)

int hh(int a,int b){

    

    if (a < b) {

        return b;

    }

    

    // 有返回值

    return a;

    

}

int main(int argc, const char * argv[]) {

    // insert code here...

    printf("Hello, World!\n");

    //    调用函数

    //    用整型C = 函数hh(实际参数);

    int c = hh(10, 20);

    printf("%d\n",c);

    //    小柒提示:形参和实参要一一对应

    return 0;

 

}

打印结果:20

 

 5、函数的声明

小柒什么是函数的声明?

答:指的就是函数的描述,也叫函数原型。是指函数的返回值类型、函数名、参数列表

格式:int hh(int a,int b);

示例

#include <stdio.h>

//函数的声明部分

int hh(int a,int b);

int main(int argc, const char * argv[]) {

    // insert code here...

    printf("Hello, World!\n");

    //    调用函数

    //    用整型C = 函数hh(实际参数);

    int c = hh(10, 20);

    printf("%d\n",c);

      小柒提示:形参和实参要一一对应

    return 0;

 

}

//函数的实现部分

//类型修饰符int 函数名hh(形式参数列表)

int hh(int a,int b){

    if (a < b) {

        return b;

 }

    // 有返回值

    return a;

 }

6、 数组做函数参数

示例

#include <stdio.h>

//函数的声明部分

void nz(int n);

int main(int argc, const char * argv[]) {

    int a[5];

    printf("请输入5个数用空格隔开\n");

    for (int i = 0; i < 5; i++) {

        scanf("%d",&a[i]);

//        调用

        nz(a[i]);

    }

    return 0;

 

}

//函数的实现部分

void nz(int n){

    if (n > 0) {

        printf("%d",n);

    }else{

        printf("小于0");

    }

}

打印结果:

请输入5个数用空格隔开

1 2 3 4 5

1

2

3

4

5

 

7、递归函数

调用有两种方式,一种叫嵌套调用,一种叫递归调用。

其实,我们一种都在使用嵌套调用,比如自定义一个函数a,在main函数里面调用a就是嵌套调用。

递归,就是在运行的过程中调用自己,在里面可以写点条件,防止容易死循环,用return跳出循环。

示例:

//键盘输入5循环打印:5 4 3 2 1

#include <stdio.h>

//第二种方法递归调用

void b(int value){

//    给一个条件防止死循环

    if (value == 0) {

        return;

    }

    printf("%d\n",value);

    value--;

//    自己调用自己

    b(value);

}

int main(int argc, const char * argv[]) {

//第一种方法for循环

    /*

    int a;

    scanf("%d",&a);

    for (int i = a; i > 0; i--) {

        printf("%d\n",i);

        

    }

     */

    int a;

    scanf("%d",&a);

//    调用自定义函数

    b(a);

        return 0;

}

小柒提示:记得给一个停下来的条件,不然就死循环了。

 

8、变量的作用域

变量的作用域的分类:全局变量 与 局部变量;局部变量 又分为 动态局部变量 和 静态局部变量,

小柒什么是全局变量?

答:在函数之外定义的变量称为全局变量,全局变量可以为本文件中其他函所共用(作用域),它的有效范围(生存期)从定义变量开始到文件结束,而且使用全局变量时变量会变颜色。

小柒什么是动态局部变量?

答:没特殊声明的变量一般都为动态局部变量 int a;

小柒什么是 静态变量?

答: static叫静态局部变量格式:static int a;

小柒动态变量和静态变量的相同点?

答:而两者的作用域是一样。只能在定义他的函数内起作用,离开了这个函数就不起作用了。

 示例:

#include <stdio.h>

int d = 1;//声明一个全局变量

int fun(int p){

//  定义一个静态局部变量d初值为5

//    第一次运行走这句话

    static int d = 5;//第二次运行不会走这句话

    d = d + p;

//   p = 4

    printf("p = %d\n",p);

//   (1)第一次运行d = 5+4

//   (2)第二次运行d = 9+4

    printf("d = %d\n",d);

    //返回一个d

    return d;

}

int main(int argc, const char * argv[]) {

    int a = 3;

//   (d = 4)全局的d = 1而且全局的变量会变颜色

    d = d+a;

//    循环两次

    for (int i = 0; i < 2; i++) {

        //此处的d值为4,传送给形参p

        fun(d);

        printf("全局 d =  %d\n",d);

    }

        return 0;

 

}

小柒提示:如果在同一个源文件中,全局变量与局部变量同名,则在局部变量的作用范围内,全局变量被“屏蔽”,即全局变量不起作用。如上例子的fun函数里的d与全局的d。

又到了小柒和大家说再见的时候啦,函数的学习就这样愉快的结束了,好好敲代码,记得预习指针,加油哦!

posted on 2015-12-26 16:44  xxQMYxx  阅读(162)  评论(0)    收藏  举报

导航