一、函数
函数
是c语言的基本单位
观察下面的数学中的函数:
f(x) = x+1
现在我们把它变成C语言函数的格式:
double f(float x)
{
return x + 1;
}
f
是函数名double
是函数的返回类型x
是函数的参数,又称为形参
float
是参数x的类型x + 1
是函数的返回值
二、函数的基本格式
函数返回类型 函数名(参数类型 参数名, 参数类型 参数名......)
{
xxx
return 返回值;
}
1、函数名的命名规则
与变量的命名规则相同
2、函数的返回值
-
函数的返回值格式为
return 返回值
(注意:return和返回值间有一个空格) -
函数的返回值类型可以是前面学过的基本数据类型(int、float、char等)、数组、字符串,以及将要学习的结构体、联合体、指针等,而且函数还有一个特殊的值类型:空值(void)。
-
void 表示返回值为空,我们再来看一下主函数
void main() { }
可以看到,它就是一个没有返回值的函数
-
除了void型函数,其他所有类型的函数都必须有 return 语句。
3、return 语句
return 语句除了表示函数返回了一个数据,也标志着函数的结束
。
在return语句
执行后
,函数立即结束,且不会再执行后面的所有代码
虽然 void 型函数没有返回值,但它可以有 return 语句,不过它的后面没有任何数据:
void main()
{
printf("Hello World\n");
return;
printf("我不会被执行");
}
4、函数的参数
- 函数的参数表示函数要"接收"的数据,参数类型表示“接收”的数据的类型,参数名是我们给接收到的数据起的名字,以便我们在函数中使用它。
- 一个函数可以有0个或多个参数
int myFunction(int x, int y)
{
return y - x;
}
上面的函数myFunction
接收两个int类型的数据,且它的返回值是第二个参数减去第一个参数的值。
三、函数的调用
函数名(参数1,参数2…)
在调用函数时,向函数里传递的参数又称为
实参
#include <stdio.h>
int sum(int x, int y)
{
printf("现在进入了sum函数\n");
return x + y;
}
void main()
{
int a = 2, b = 5;
int c = sum(a, b); // 这里的a和b就称为“实参”
printf("%d + %d = %d", a, b, c);
}
现在我们把sum函数和主函数交换一下位置
#include <stdio.h>
void main()
{
int a = 2, b = 5;
int c = sum(a, b);
printf("%d + %d = %d", a, b, c);
}
int sum(int x, int y)
{
printf("现在进入了sum函数\n");
return x + y;
}
这时重新运行程序会就出现出现一条警告(sum函数未定义):
虽然这个程序能在dev-c++中运行,但这样写在某些编译器中不会运行,正确的做法是在main函数之前声明sum函数
#include <stdio.h>
int sum(int x, int y); // 声明了sum函数,表示它接收两个整型参数
void main()
{
int a = 2, b = 5;
int c = sum(a, b);
printf("%d + %d = %d", a, b, c);
}
int sum(int x, int y)
{
printf("现在进入了sum函数\n");
return x + y;
}
四、函数的声明
函数返回类型 函数名(参数类型 参数名, 参数类型 参数名…);
可以看出函数的声明就是去掉了下方的函数体;
请看下面的sum函数:
int sum(int x, int y)
{
return x + y;
}
它的声明是
int sum(int x, int y);
我们在声明函数时还可以省略形参的名称:
int sum(int, int);
在mian函数后面定义的函数必须声明,在main函数之前定义的函数可以声明,也可以不声明。
小练习
编写一个程序,输入一个整数,并输出它的阶乘。(要求使用函数完成)
- 只有正整数和 0 有阶乘,规定0的阶乘为1
- n 的阶乘为 1 x 2 x 3…n的积
- 例如:3的阶乘是 1 x 2 x 3 = 6, 4的阶乘是1 x 2 x 3 x 4 = 24
参考答案
#include <stdio.h>
int fun(int);
void main()
{
int a;
printf("n = ");
scanf("%d", &a);
if(a < 0)
printf("负数没有阶乘");
else
printf("%d! = %d", a, fun(a)); // n! 表示n的阶乘
}
int fun(int x)
{
if(x == 0)
{
return 1;
}
int num = 1;
for(int i = 2; i <= x; i++)
{
num *= i;
}
return num;
}
好了,文章到这里就结束了,我们下一节再见
每周五晚20:00更新