1.函数就是对功能的封装。在程序中用到的所有函数,必须“先定义,后使用”。
分为有参和无参函数
定义函数的语法
函数返回值类型 函数名(形参列表)
{ 函数体 }
例子:封装函数,比较两个整数,返回最大的整数。
int getMax(int n1,int n2)
{
int max = 0;
if (n1>n2)
{
max = n1;
}
else
{
max = n2;
}
return max;
}
调用函数:
#include<stdio.h>
int getMax(int n1,int n2); //必须加分号
int main()
{
int a, b; scanf("%d%d", &a, &b);
int max = getMax(a, b);
printf("max=%d\n", max);
return 0;
}
在函数定义的时候,函数名后括号中定义的变量就是形参。
在调用函数的时候,函数名后括号中的实实在在的数据是实参
(1)函数的返回值时通过函数中的 return 语句获得的;
(2)一个函数中 return 语句可以有 0 个或多个;
(3)函数值的类型应该与 return 语句后面的数据类型保持一致;
(4)对于没有返回值的函数,函数的类型应该为 void 类型;
2.变量的作用域
局部变量和全局变量同时存在,那么优先使用局部变量。
(1)全局变量在程序的全部执行过程中都占用内存单元,所以,不是必要情况,不 建议使用全局 变量。
(2)使用全局变量过多,程序的可读性降低,程序不清晰。
(3)当全局变量与局部变量重名的时候,在局部变量作用域范围内,局部变量起作用。
(4)局部变量不能与局部变量重名。
(5)全局变量不能与全局变量重名。
3.局部变量的存储方式有 2 种,自动存储和静态存储。默认是自动存储。
(1)静态局部变量属于静态存储类别,在静态区(也叫全局区)内分配存储单元。在程序整个运行期间都不释放。
(2)自动局部变量属于动态存储类别,分配在栈区,函数调用时分配空间,函数调 用结束释放空间。
(3)对静态局部变量是在编译时赋初值的,既只赋值一次。在程序运行的时候它已 经有初值了。并且如果我们在定义静态局部变量的时候不给它赋初值,编译器会自 动赋值为 0.
(4)虽然静态局部变量在静态区存储,函数调用结束之后,它仍然存在,但是在别 的函数中不可以调用它。因为他是局部变量!
4.全局变量是在静态存储区(也叫全局区)存放的,因此他的生存期是固定的。存在 于程序的整个运行过程中。
5.用 extern 的关键字声明全局变量,来扩展全局变量的作用域。
6.递归函数
函数被调用,不管是自己调用自己,还是被其它函数调用,都将会给被调用函数分 配栈帧。
不存在无穷递归。即递归函数必须要有一个是递归结束的出口(要有递归中止的条 件语句)。
/对一个无符号的整数求阶乘
int fac(int n)
{
if(n <= 1) //每次调用发生时都,首先判断递归终止条件。
return 1;
else return fac(n-1) *n;
}
7.编写一个计算器
int main()
{
int a, b;
char x,y;
do
{
printf("欢迎使用计算机\n请输入数字+运算符+数字\n");
scanf("%d%c%d", &a, &x, &b);
if (x == '+')
{
printf("%d+%d=%d\n", a, b, add(a, b));
}
else if (x == '-')
{
printf("%d-%d=%d\n", a, b, sub(a, b));
}
else if (x == '*')
{
printf("%d*%d=%d\n", a, b, cheng(a, b));
}
else if (x == '/')
{
if (b != 0)
{
printf("%d/%d=%d\n", a, b, chu(a, b));
}
else
{
printf("除数不能为0\n");
}
}
else
{
printf("错误\n");
}
printf("是否使用计算器输入y或者n\n");
rewind(stdin);
scanf("%c", &y);
if (y == 'y')
{
continue;
}
else
{
break;
}
}
while (y=='y');
}
int add(int a, int b)
{
int c;
c = a + b;
return c;
}
int sub(int a, int b)
{
int c;
if (a > b)
{
c = a - b;
}
else
{
c = b - a;
}
return c;
}
int cheng(int a, int b)
{
int c;
c = a * b;
return c;
}
int chu(int a, int b)
{
int c;
c = a / b;
return c;
}