第六章函数
你好!我是小柒今天我们来学习一下函数。
函数
回顾:其实咱们第一天就见到了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。
又到了小柒和大家说再见的时候啦,函数的学习就这样愉快的结束了,好好敲代码,记得预习指针,加油哦!
浙公网安备 33010602011771号