课程章节:
课程名称:物联网/嵌入式工程师
章节名称:第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;
}
课程评价:
通过对变量属性的学习,能够熟练的写出一些函数。
热门评论
这么好的文章怎么不更新啦