C语言学习(六)函数
admin
2024-04-03 20:47:27
0

文章目录

  • 一、函数基础
    • 1.1 什么是函数
    • 1.2 为什么使用函数
    • 1.3 定义函数
      • 1.3.1 函数定义格式
        • 1.3.1.1 函数定义示例
          • 1.3.1.1.1 int返回类型的函数定义
          • 1.3.1.1.2 无返回类型的函数定义
          • 1.3.1.1.3 double返回类型的函数定义
      • 1.3.2 return表达式含义
        • 1.3.2.1 return表达式示例
  • 二、函数的分类
    • 2.1 有参函数和无参函数
      • 2.1.1 有参数函数示例
      • 2.1.2 函数调用和函数定义的顺序
      • 2.1.3 形参和实参
  • 三、变量作用域
    • 3.1 变量作用域
      • 3.1.1 全局变量
      • 3.1.2 局部变量
      • 3.1.3 注意

一、函数基础

1.1 什么是函数

逻辑上:

1、能够完成特定功能的独立的代码单元。

物理上:

1、能够接受数据。
2、能够对接收的数据进行处理。
3、能够将数据处理的结果返回(也可以不返回任何值)。

总结:函数是一个工具,它是为了解决大量类似问题而设计的。函数可以当作一个黑匣子。

1.2 为什么使用函数

1、避免了重复性编写代码的操作。
2、有利于程序的模块化。

1.3 定义函数

1.3.1 函数定义格式

函数定义的本质是详细描述函数之所以能够实现某个特定功能的具体方法。

函数返回值类型 函数名字(函数的形参列表)
{函数的执行体;return 待返回的值;
}

注意:

  1. 函数定义时必须指定函数的类型,带返回值的函数类型应该与其返回值类型相同。函数返回值的类型也称为函数的类型,因为如果函数名前面的返回值类型和函数执行体中的表达式的类型不同的话,最终函数返回值的类型以函数名前的返回值类型为准。而没有返回值的函数类型应该定义为void类型。
  2. 函数名的命名方法与命名变量的方法一样,不能以数字开头,只能以字母和下划线开头,且遵循驼峰原则。
  3. 函数名的命名不能使用C语言的关键字进行命名。
  4. 函数名的命名应尽量简单易懂。

1.3.1.1 函数定义示例

1.3.1.1.1 int返回类型的函数定义
#include // 主函数就是一个int返回类型的函数。int表示该函数的返回值为int类型
// main为函数名
// 圆括号中的void表示该函数无参数
int main(void){return 0; // 0表示主函数返回值为0
}
# include // 定义f()函数
int f()
{return 10.8;	//因为函数的返回值类型为int,所以最终f的返回值是10而不是10.8
}// 定义主函数
int main(void)
{int x = 0;x = f(); printf("%d\n", x); // x的值为10return 0;
}
1.3.1.1.2 无返回类型的函数定义
// void表示该函数无返回数据类型。
// Info表示函数名。
// 圆括号中的void表示该函数无参数。
void Info(void){printf("This is info");return; // 表示终止函数,而不是返回类型值。return也可不写。
}
1.3.1.1.3 double返回类型的函数定义
// double表示该函数的返回类型为double类型
// Div表示函数名
// void表示该函数无参数
double Div(void){double num = 10.0;
double div = 5.0;
double ret = 0;ret = num / div;return ret;
}

1.3.2 return表达式含义

1、终止被调函数,向主调函数返回表达式的值。
2、如果return后的表达式为空,则只终止函数,不向被调用函数返回任何值。
3、break是用来终止循环和switch,return是用来终止函数的。

1.3.2.1 return表达式示例

# include void f(void)
{int i;for (i = 0; i < 5; ++i){printf("同志们辛苦了\n");break;		//终止循环return;		//终止函数}printf("同志们好\n");
}
int main(void)
{f();return 0;
}

二、函数的分类

1、有参函数和无参函数
2、有返回值和无返回值
3、库函数和用户自定义函数
4、值传递函数和地址传递函数
5、普通函数和主函数(main函数)

一个程序必须有且只能有一个主函数。主函数可以调用普通函数,普通函数不能调用主函数。普通函数可以相互调用。主函数是程序的入口,也是程序的出口。

2.1 有参函数和无参函数

有参函数就是在函数名后的括号中有参数的定义。在函数名后面括号中的参数称为形参。在函数调用时传递的具体值是实参。无参函数就是在函数名后的括号中为void或为空的函数。

2.1.1 有参数函数示例

示例1:比较两个数的最大值

# include // i,j为函数的形参
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}

示例2:判断是否为素数

# include 
# include // bool表示返回值为布尔类型
// val为函数的形参,int为形参的数据类型
bool Isprime(int val)
{int i;for (i = 2; i < val; ++i){if (val % i == 0)break;}if (i == val)return true;elsereturn false;
}int main(void)
{int val = 0;scanf("%d", &val);// val为函数的实参if (Isprime(val))printf("Yes");elseprintf("No");return 0;
}

2.1.2 函数调用和函数定义的顺序

如果函数调用写在了函数定义的前面,则必须加函数前置声明
函数前置声明:

1、告诉编译器即将可能出现的若干字母代表的是一个函数。
2、告诉编译器即将可能出现的若干字母所代表的函数的形参和返回值的具体情况。
3、函数声明是一个语句,末尾必须加分号。
4、对库函数的声明是通过# include <库函数所在的文件的名字.h>来实现。

2.1.3 形参和实参

1、个数相同
2、位置一一对应
3、数据类型必须相互对应

三、变量作用域

3.1 变量作用域

3.1.1 全局变量

在所有函数外部定义的变量。
全局变量使用范围:从定义位置到整个程序结束。

示例:

# include int AllArea = 100; // 全局变量,定义在所有函数的外面// int i,int j为函数的形参
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}

3.1.2 局部变量

在一个函数内部定义的变量或者函数的形参。
局部变量的使用范围:只能在本函数的内部使用

局部变量在函数调用时创建,在函数结束后销毁。

示例:

# include int AllArea = 100; // 全局变量,定义在所有函数的外面// int i,int j为函数的形参,也是该函数的局部变量
int max(int i, int j)
{if (i > j)return i;elsereturn j;}int main(void)
{int a, k, m;	// 局部变量,声明在主函数的内部,不能在函数的外面使用while (1){printf("请输入数值:\n");scanf("%d %d", &k, &m);// k,m为函数调用时传入的实参a = max(k, m);printf("%d\n", a);}return 0;
}

3.1.3 注意

在一个函数内部如果定义的局部变量的名字和全局变量的名字一样时,局部变量会屏蔽全局变量。

相关内容

热门资讯

怎么解除订阅安卓系统,安卓系统... 你是不是也和我一样,手机里订阅了好多服务,结果现在想解除订阅,却一头雾水?别急,今天就来手把手教你如...
安卓系统停用怎么开启,轻松恢复... 亲爱的手机控们,你是否曾经遇到过安卓系统突然停用的情况,让你手忙脚乱,不知所措?别担心,今天就来教你...
安卓系统电池健康度,电池健康度... 你有没有发现,你的安卓手机最近是不是有点儿不给力了?电池续航能力大不如前,充电速度也慢了不少?别急,...
安卓系统按键怎么截图,安卓系统... 你是不是也和我一样,有时候想截个图分享给朋友,却发现安卓手机的截图功能有点神秘呢?别急,今天就来手把...
购票系统安卓源代码,架构设计与... 你有没有想过,那些我们每天离不开的购票系统,它们背后的秘密是什么呢?今天,就让我带你一探究竟,揭开购...
安卓手机系统后台测试,深度解析... 你有没有发现,你的安卓手机后台总是悄悄地忙碌着?别小看了这些后台程序,它们可是手机系统稳定运行的关键...
安卓系统重启的图标,解锁设备新... 手机突然重启,是不是心里有点慌?别急,今天就来和你聊聊安卓系统重启的图标,让你一眼就能认出它,再也不...
车载智慧屏安卓系统,智能出行新... 你有没有发现,现在的车载智慧屏越来越智能了?尤其是那些搭载了安卓系统的,简直就像是个移动的小电脑,不...
安卓系统连上网权限,解锁设备无... 你有没有发现,你的安卓手机里有些应用总是偷偷连上网?别小看这个小小的网络权限,它可是能影响你隐私、消...
安卓谷歌操作系统,探索安卓谷歌... 你知道吗?在智能手机的世界里,有一个操作系统可是无人不知、无人不晓,那就是安卓谷歌操作系统。它就像一...
安卓系统手写%怎样调出,具体实... 你有没有遇到过这种情况:在使用安卓手机的时候,突然想用手写输入法来记录一些灵感或者重要信息,可是怎么...
安卓手机重置 系统设置,轻松恢... 手机用久了是不是感觉卡顿得厉害?别急,今天就来教你怎么给安卓手机来个大变身——重置系统设置!想象你的...
win如何安装安卓系统,Win... 哇,你有没有想过,让你的Win系统也能玩转安卓应用?没错,就是那种在手机上轻松自如的安卓系统,现在也...
苹果qq和安卓系统,跨平台体验... 你有没有发现,现在手机市场上,苹果和安卓的较量可是越来越激烈了呢!咱们就来聊聊这个话题,看看苹果QQ...
显示最好的安卓系统,探索最新旗... 你有没有想过,为什么安卓系统那么受欢迎呢?它就像一个魔法盒子,里面装满了各种神奇的魔法。今天,就让我...
安卓app怎么降级系统,系统版... 你有没有发现,有时候安卓手机的系统更新后,新功能虽然炫酷,但老系统用起来更顺手呢?别急,今天就来教你...
雷军脱离安卓系统,引领科技变革... 你知道吗?最近科技圈可是炸开了锅,因为我们的雷军大大竟然宣布要脱离安卓系统,这可真是让人大跌眼镜啊!...
安卓系统自动开网络,安卓系统自... 你有没有发现,手机里的安卓系统有时候会自动开启网络连接,这可真是让人又爱又恨啊!有时候,你正专心致志...
安卓系统怎样控制后台,因为服务... 手机里的安卓系统是不是感觉越来越卡了?后台程序太多,不仅耗电还影响性能。别急,今天就来教你怎么巧妙地...
安卓系统打游戏推荐,一触即达! 你有没有发现,现在手机游戏越来越好玩了?不管是休闲小游戏还是大型MMORPG,都能在手机上畅玩。但是...