2021-05-26

函数

  • 1.库函数
  • 2.自定义函数
  • 3.函数的参数
  • 4.函数的嵌套调用和链式调用
    • (1)嵌套调用
    • (2)链式访问
  • 5.函数的声明和定义
    • (1)函数声明
    • (2)函数的定义
  • 6.函数递归

1.库函数

C语言中,为了支持可移植性和提高程序效率,在基础库中提供了一系列的类似的库函数,方便程序员进行软件开发。
注意:
1.查找函数和库函数,可以浏览www.cplusplus.com。
2.学习过程中不需要刻意去记忆,需要时再去查找。

2.自定义函数

自定义函数和库函数一样,有函数名,返回值类型和函数参数,不同点是这些函数都是由我们自己定义。
组成:

ret_type fun_name(paral,*)
{
     
	Statement;//语句项
}
//ret_type:返回值类型
//fun_name:函数名
//paral:函数参数

例如:

int LeapYear(int x)
{
     
	if ((x % 4 == 0 && x % 100 != 0) || x % 400 == 0){
     
		return 1;
	}
	return 0;
}

注意:
1.当函数五返回值时,类型为void。
2.函数返回值只能传一个值,若要传多个值,可以使用指针等办法。
3.设计函数时尽量遵循“高内聚低耦合”的原则。

3.函数的参数

实参:真实传递给函数的参数。
形参:函数名后括号中的变量。
例如:

#include
#include

int LeapYear(int xp)
{
     
	if ((xp % 4 == 0 && xp % 100 != 0) || xp % 400 == 0){
     
		return 1;
	}
	return 0;
}```

int main(void)
{
     
	int x = 0;
	scanf("%d", &x);
	if (LeapYear(x)){
     
		printf("第%d年是闰年\n", x);
	}
	else{
     
		printf("第%d年不是闰年\n", x);
	}
	system("pause");
	return 0;
}

其中x为实参,xp为形参。
注意:
1.形参实例化之后相当于实参的一份临时拷贝,因此不可直接通过操作形参来操作实参。
2.形参在函数调用完后被自动销毁。

4.函数的嵌套调用和链式调用

(1)嵌套调用

在一个函数内调用另外一个函数。

#include 
void new_line()
{
     
	printf("hehe\n");
}
void three_line()
{
     
	int i = 0;
	for (i = 1; i < 3; ++i){
     
		new_line();
		return 0;
	}
}
int main(void)
{
     
	three_line();
	return 0;
}

(2)链式访问

把一个函数的返回值作为另外一个函数的参数。

#include 
int main(void)
{
     
	printf("%d", printf("%d", printf("%d", 27)));
	return 0;
}

注意:
1.函数的练市调用从内向外。
2.函数形参实例化从右向左。

5.函数的声明和定义

(1)函数声明

函数声明的关键字为extern。

#include 
#include 
#pragma once
extern void BubbleSort(int *a, int num);

注意:
1.函数的声明一般出现在函数的使用前,要满足先声明再使用的原则。
2.函数的声明一般要放在头文件的开头,即.h文件的开头。
3.其中#pragma once用来防止头文件被反复包含,等价于以下程序。

#ifndef __TEST_H__
#define __TEST_H__
#include 
#include 
extern void BubbleSort(int *a, int num);
#endif

(2)函数的定义

函数的定义是指函数的具体实现,交代函数的功能介绍。

#include "test.h"
void BubbleSort(int *arr,int num)
{
     
	for (int m = 0; m < num; ++m){
     
		for (int n = 0; n < num - m - 1; ++n){
     
			if (arr[n]>arr[n + 1]){
     
				Spaw((arr + n), (arr + n + 1));
			}
		}
	}
}

6.函数递归

递归是程序调用自身的编程技巧,重要思想是将大事化小。
注意:
1.递归的两个必要条件:
(1)递归需要存在限制条件,当满足此条件时,递归便不再执行。
(2)每次递归调用后会越来越接近此限制条件。
2.递归可能会使效率低下(时间),甚至有可能栈溢出(空间)。
例:求n的阶乘

int factorial(int n) {
     
 if(n <= 1)
 return 1;
 else
 return n* factorial(n-1);
}

你可能感兴趣的:(c语言)