C/C++教程

【养成记】嵌入式挑战第11天,C语言中的函数:函数初识、全局变量、局部变量、静态变量

本文主要是介绍【养成记】嵌入式挑战第11天,C语言中的函数:函数初识、全局变量、局部变量、静态变量,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

课程章节:

课程名称:物联网/嵌入式工程师
章节名称:第4周之第三讲 1-1 至 1-6 C语言中的指针:指针和二维数组、数组指针和二维数组
讲师姓名:大白老师

课程内容:

C语言中的函数:函数初识

前言

C语言强调模块化编程,这里所说的模块就是函数,即把每一个独立的功能均抽象为一个函数来实现。从一定意义上讲,C 语言就是由一系列函数串组成的。

我们之前把所有代码都写在 main 函数中,这样虽然程序的功能正常实现,但显得杂乱无章,代码可读性、可维护性较差。学完本节之后,应把每个具体的独立功能单位均抽象为一个函数,在 main 函数中调用各个函数。

C语言函数基本用法

概念

函数是一系列C语言语句的集合,为了完成某个可能会重复使用的功能,而封装起来的代码。
设计的好处: 实现模块化的编程思想,提高程序的可读性
函数设计要求: 见名知意

使用方法

方法1:先声明,在定义

返回值类型 函数名(类型 参数1,类型 参数2….); // 函数的声明

int main()
{
    函数名(参数1,参数2,参数3); // 函数的调用
    return 0;
}

返回值类型 函数名(类型 参数1,类型 参数2….) // 函数的定义
{
    C语言代码;
    return 数据;
}
示例代码
#include <stdio.h>

void  printf_star(); // 函数的声明

//*
//**
//***
int main() // 程序的入口,程序开始的地方
{
    int k = 0;
    
    for(k = 1;k <= 3;k++)
    {
        printf_star();// 函数的调用
    }
    return 0;
}

// void 表示返回空
void  printf_star()  // 函数的定义
{
    int i = 0,j = 0;
   
    for(i = 1;i <= 3;i++)// i代表行数
    {
        for(j = 1;j <= i;j++) // j代表每行答应的星星个数        
        {
             printf("*");
        }
        printf("\n");
    }
    return ;
}

【推荐】方法2:在main函数上定义

返回值类型 函数名(类型 参数1,类型 参数2….) // 函数的定义
{
    C语言代码;
    return 数据;
}

int main()
{
    函数名(参数1,参数2,参数3); // 函数的调用
    return 0;
}
代码示例
#include <stdio.h>

//void 表示返回空
void  printf_star()  // 函数的定义
{
    int i = 0,j = 0;
    int k = 0;
    for(i = 1;i <= 3;i++)// i代表行数
    {
        for(j = 1;j <= i;j++) // j代表每行答应的星星个数        
        {
            putchar('*');
        }
        putchar('\n');
    }
    return ;
}

//*
//**
//***
int main() // 程序的入口,程序开始的地方
{
    int k = 0;
    
    for(k = 1;k <= 3;k++)
    {
        printf_star();// 函数的调用
    }
 
    return 0;
}

课后任务

练习

1.设计一个void do_sum()函数,要求函数内部无参数和返回值,内部定义一个变量int m,
 要求用户从键盘输入一个数据赋值给m。
 判断m的值,若是m为奇数,输出1 + 3 + 5 + 7 + 9 +...+m的和.
          若是m为偶数,输出0 + 2 + 4 + 6 + 8 +...+m的和.
2.设计一个void do_Result()函数,要求函数内部定义int a,b两个变量,
然后从键盘输入2个整数赋值给a,b,并输出(a + b) / 2的值。

代码

#include <stdio.h>

// 
void do_sum()
{
    int i,m,ret,result = 0;
    printf("请输入一个数据:\n");
    ret = scanf("%d",&m);

    if (ret != 1)
    {
        while (getchar() != '\n');
        printf("请输入数字!");
        do_sum();
    }

    i = m & 1 ? 1 : 0;

    for (; i <= m; i+=2) {
        result += i;
        i != m ? printf("%d + ",i) : printf("%d",i);
    }

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

    return;
}

//
void do_Result()
{
    int a,b,ret;
    printf("请输入两个2个字符数据:\n");
    scanf("%d",&a);
    scanf("%d",&b);

    ret = (a + b) / 2;
    printf("(%d + %d) / 2 = %d\n",a,b,ret);

    return;
}

int main()
{
    do_sum();
    do_Result();
    return 0;
}

C语言中的函数:全局变量、局部变量、静态变量

全局变量

全局变量 : 在函数外部定义的变量,我们叫做全局变量.
特点:
(1) 在本文件中的任何函数中都可以使用。-----作用域
(2) 在定义变量的时候,系统会申请内存空间,当main()函数结束的时候,
 系统会回收全局变量对应的内存空间. -----生命周期
(3) 全局变量未初始化,值默认为0

局部变量

局部变量 : 在函数内部定义的变量,我们叫做局部变量。
特点:
(1) 只能在定义它的那个函数内部使用,其他位置不能使用。----作用域
(2) 调用函数时,运行在定义变量代码的时候,系统会申请内存空间, 当定义该变量的函数调用结束后,
 系统会回收局部变量对应的内存空间. -----生命周期
(3) 局部变量未初始化,值默认为随机值。

示例代码

#include <stdio.h>

int global = 20; //全局变量

void do_global()
{
    global ++;
    printf("global = %d\n",global);
    return ;
}

void do_local()
{
    int t = 10;  //局部变量
    t++;

    printf("t = %d\n",t); //1
    return ;
}

int main()
{
    do_global();
    do_global();
    do_global();
    printf("======================\n");
    global++;
    printf("g = %d\n",global);
    do_local();
    do_local();
    do_local();

    return 0;
}

静态变量

静态局部变量

格式:
static  数据类型 变量名;

static int c;

特点:
(1)静态局部变量,可以改变原来变量的生命周期,当定义该变量的函数调用结束后,
系统不会回收对应的内存空间,当main()函数结束后, 内存空间才会被回收.
(2)只能在定义它的那个函数内部使用,其他位置不能使用。----作用域
(3)静态局部变量未初始化,值默认为0

代码示例

#include <stdio.h>

void do_local()
{
    // 只定义一次,可以使用多次
    static int t = 10;// 局部变量
    t++;

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

int main()
{
    do_local();
    do_local();
    do_local();
    return 0;
}

课后任务

练习

定义全局变量 global_data = 0;
设计无参数的函数global_calc(),在这个函数内部
要求用户从键盘输入一个数据赋值给global_data,然后要求
该函数输出,从1~global_data之间所有能被7整除的数据。

main函数来调用以下global_data这个函数。

学习笔记:

代码

#include <stdio.h>

// 
void do_sum()
{
    int i,m,ret,result = 0;
    printf("请输入一个数据:\n");
    ret = scanf("%d",&m);

    if (ret != 1)
    {
        while (getchar() != '\n');
        printf("请输入数字!");
        do_sum();
    }

    i = m & 1 ? 1 : 0;

    for (; i <= m; i+=2) {
        result += i;
        i != m ? printf("%d + ",i) : printf("%d",i);
    }

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

    return;
}

//
void do_Result()
{
    int a,b,ret;
    printf("请输入两个2个字符数据:\n");
    scanf("%d",&a);
    scanf("%d",&b);

    ret = (a + b) / 2;
    printf("(%d + %d) / 2 = %d\n",a,b,ret);

    return;
}

int main()
{
    do_sum();
    do_Result();
    return 0;
}

课程评价:

通过对变量属性的学习,能够熟练的写出一些函数。

这篇关于【养成记】嵌入式挑战第11天,C语言中的函数:函数初识、全局变量、局部变量、静态变量的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!