目录
函数的概念
函数相信在数学上大家都不陌生,比如一元函数,二元函数。
那么在C语言中函数又是什么意思呢?我们一起来看看!
函数事实上是从英文function翻译过来的,从英文也可以看出来函数是用来实现一定的功能的,C语⾔中的函数就是⼀个完成某项特定的任务的⼀⼩段代码,就相当于一个小的程序来实现所需要完成的功能,一个个小的程序组装在一起就可以实现总任务。⼀个⼤的计算任务可以分解成若⼲个较 ⼩的函数(对应较⼩的任务)完成。同时⼀个函数如果能完成某项特定任务的话,这个函数也是可以 复⽤的,提升了开发软件的效率。
在C语言中,从用户的角度来看,可以分为:
1.库函数
2.自定义函数
从函数的形式来看,可以分为:
1.无参函数
2.有参函数
库函数
自定义函数
自定义函数就是程序员自己定义的函数,它可以用来解决程序员专门需要的函数,它给程序员写 代码更多的创造性。
函数的语法形式
函数的一般形式如下:
1 ret_type fun_name()
2{
3
4}
ret_type 是函数返回类型,是⽤来表⽰函数计算结果的类型,有时候返回类型可以是 void ,表⽰什么都不返回
举例
下面我们可以通过下面几个例子来更好地理解。
1.用函数来实现加法
//实现加法
#include<stdio.h>
int Add(int x, int y)//int为返回类型,这里需要返回一个整型,Add是函数名,(接收两个整型参数)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 0;
int b = 0;
printf("请输入两个数:\n");
scanf("%d %d", &a, &b);
printf("和为:%d\n", Add(a, b));//函数的调用
return 0;
}
2.用函数来实现输出最大值
#include<stdio.h>
int Max(int x, int y)
{
return x > y ? x : y;//条件表达式
}
int main()
{
int a = 0;
int b = 0;
printf("请输入两个数:\n");
scanf("%d %d", &a, &b);
printf("最大值为:%d\n", Max(a, b));
return 0;
}
形参和实参
在前面我们提到了函数按函数的形式可以分为:
1.无参函数
2.有参函数
这里我们首先需要了解形参和实参
我们用下面的代码来更好的理解
#include<stdio.h>
int Max(int x, int y)
{
return x > y ? x : y;//条件表达式
}
int main()
{
int a = 0;
int b = 0;
printf("请输入两个数:\n");
scanf("%d %d", &a, &b);
printf("最大值为:%d\n", Max(a, b));
return 0;
}
在这个代码中调⽤Max函数时,传递给函数的参数a和b,称为实际参数,简称实参。实际参数就是真实传递给函数的参数。 把a和b的值传递过去,进行相应的处理。
return语句
在前面我们也可以看到return语句可以带回函数的返回值到调用的地方,在使用时有几个注意事项:
#include<stdio.h>
void print()
{
printf("************\n");
return;
}
int main()
{
print();//无参函数
return 0;
}
#include<stdio.h>
int Add(int x, int y)
{
float z = x + y;
return z;
}
int main()
{
int a = 3;
int b = 5;
printf("%d\n", Add(a, b));
return 0;
}
比如上面这个代码虽然return后面返回的是浮点数,但是系统会⾃动将返回的值隐式转换为整型。
#include<stdio.h>
void test()
{
printf("Hello!\n");
if (1)
return;
printf("YES!!!!\n");
}
int main()
{
test();//函数调用
return 0;
}
这个代码只打印了Hello!遇到了return,后边的代码不再执⾏,这个适用于想提前返回的情况。
当第一个条件满足,就直接返回,后面的就不会继续执行。
数组做函数参数
在一些情况下,我们需要处理多个数据,这个时候我们可以使用数组来进行传参处理多个数据。
首先,我们需要知道以下这些注意事项:
一维数组做参数
//写⼀个函数将⼀个整型数组的内容,全部置为-1,再写⼀个函数打印数组的内容。
#include<stdio.h>
void set_arr(int arr[], int sz,int set)
{
int i = 0;
for (i = 0; i < sz; i++)
arr[i] = set;
}
void print_arr(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main()
{
int arr[10] = { 0 };
int sz = sizeof(arr) / sizeof(arr[0]);
print_arr(arr, sz);
set_arr(arr, sz, -1);
print_arr(arr, sz);//可以多次调用
return 0;
}
二维数组做参数
例子:有一个3*5的二维数组,求数组元素中的最大值
//有一个3*5的二维数组,求元素的最大值
#include<stdio.h>
void print_arr(int arr[3][5], int r, int c)
{
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
printf("%3d", arr[i][j]);
printf("\n");
}
}
int Max(int arr[][5], int r, int c)//二维数组传参可以省略行,不可以省略列
{
int max = arr[0][0];
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
if (arr[i][j] > max)
max = arr[i][j];
}
}
return max;
}
int main()
{
int arr[3][5] = { {1,2,3,4,5},{12,23,45,19,34},{6,7,9,8,10} };
print_arr(arr, 3, 5);//打印二维数组
int ret = Max(arr, 3, 5);//返回值存放到ret中
printf("最大值为:%d\n", ret);
return 0;
}