C语言函数应用

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;
}

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值