嵌入式学习第九天!(函数)

发布时间:2024年01月25日

1. 函数定义:

函数类型 函数名(数据类型1 形参1, 数据类型2 形参2, ...)
{
    函数体

    return 返回值;
}

2. 函数的调用

函数名(实参1, 实参2, ...);

3. 函数的声明

????????如果被调函数的定义在主调函数的下方,需要对被调函数声明一下

4. 变量作用域和生存周期:

? ? 1. 作用域:

????????变量能够使用的范围

????????变量作用域默认为离定义该变量最近的大括号内

????????局部变量:变量作用域在某个大括号范围内

????????全局变量:变量作用域在整个文件中

????????全局变量都在所有函数的外面定义

? ? 2. 生成周期:

????????变量从空间被开辟到被回收的整个过程成为生存周期

????????存储类型 数据类型 变量名;

????????1. auto(默认)

????????????????自动型变量、局部变量

????????????????将变量存放在栈区:

????????????????????????1. 未经初始化值未随机值

????????????????????????2. 执行到变量定义时开辟空间

????????????????????????3. 执行到超过变量作用域范围回收变量空间

????????2. register

????????????????寄存器变量

????????????????寄存器存满,会将变量存放到栈区(等价于auto类型)? ?

????????3. extern

????????????????外部变量

extern int a;

????????????????声明一个变量未外部存储的变量

????????4. static

????????????????静态变量

????????????????将变量存放在数据区中:

????????????????????????1. 未经初始化值为0值;

????????????????????????2. 编译时开辟空间,程序运行时加载该空间

????????????????????????3. 程序结束时回收空间

????????????????static作用:

? ? ? ? ? ? ? ? ????????1. 将变量定义为静态变量

????????????????????????2. 可以将变量的作用域限定到本文件中

????????????????????????3. 可以防止多文件全局变量名冲突

????????5. 递归函数:

????????????????函数定义时调用函数本身

????????????????????????1. 递归一定要有结束条件

????????????????????????2. 避免深层次的递归

????????????????练习:

????????????????1. 从终端输入一个n,封装函数获得斐波那契数列第n项的值1 1 2 3 5 8 13 21 34 55 ...

#include <stdio.h>

int FeiBoNaQie(int N)
{
	if(N <= 2)
	{
		return 1;
	}
	else
	{
		return FeiBoNaQie(N-1) + FeiBoNaQie(N-2);
	}
}

int main(void)
{
	int	Num = 0;
	int Ret = 1;
	
	scanf("%d",&Num);
	
	Ret = FeiBoNaQie(Num);

	printf("Ret = %d\n",Ret);

}

????????????????2. 利用递归函数实现Hanoi(汉诺)塔问题。

#include <stdio.h>

int HanNuoTa(int N,char src, char tmp,char dst)
{
	if(N == 1)
	{
		printf("%c -> %c\n",src, dst);
	}
	else
	{
		HanNuoTa(N-1, src, dst, tmp);
		printf("%c -> %c\n",src,dst);
		HanNuoTa(N-1,tmp,src,dst);
	}

	return 0;
}

int main(void)
{
	int Num = 0;
	scanf("%d",&Num);

	HanNuoTa(Num, 'A', 'B', 'C');

	return 0;

}

???

????????6.函数的传参:

????????????????1. 赋值传递(复制传递)

????????????????????????实参将值拷贝一份给形参,形参是实参的副本,形参的值发生改变不会影响实参

????????????????2. 全局变量传递?

? ? ? ? 7. 数组传递:
int a[5];
//1. 形式1:
int Fun(int array[5]);
//2. 形式2:
int Fun(int array[], int len);

? ? ? ? ? ? ? ? 注意:数组传递时,函数体内部形参操作的数组和实参操作的数组为同一数组

? ? ? ? ? ? ? ? 练习:主函数中定义一个数组,并对元素初始化,封装一个函数完成获得数组中所有元素的平均值

#include <stdio.h>

double GetAvgNum(int ary[],int len)
{
	int i = 0;
	int sum = 0;
	double avg = 0;
	
	for(i = 0; i < len; i++)
	{
		sum += ary[i];
	}

	avg = (double)sum / (double)len;

	return avg;

}

int main(void)	
{
	int num[5] = {0};
	int i = 0;
	for(i = 0; i < 5; i++)
	{
		scanf("%d",&num[i]);
	}

	printf("average_num = %.2lf\n",GetAvgNum(num,5));

	return 0;
}

作业:

? ? ? ? 1. 封装数组元素冒泡排序的函数、输入输出的函数;

#include <stdio.h>

int InputArray(int array[], int len)
{
	int i = 0;
	
	for(i = 0; i < len; i++)
	{
		scanf("%d",&array[i]);
	}
	
	return 0;
}

int OutputArray(int array[], int len)
{
	int i = 0;
	
	for(i = 0; i< len; i++)
	{
		printf("%d ",array[i]);
	}
	
	printf("\n");
	
	return 0;
}

int SortArray(int array[], int len)
{
	int i = 0;
	int j = 0;
	int tmp = 0;

	for(j = 0; j < len-1; j++)
	{
		for(i = 0; i < len-1-j; i++)
		{
			if(array[i] > array[i+1])
			{
				tmp = array[i];
				array[i] = array[i+1];
				array[i+1] = tmp;
			}
		}
	}

	return 0;
}

int main(void)
{
	int a[5] = {0};

	InputArray(a,5);
	SortArray(a,5);
	OutputArray(a,5);

	return 0;
}

? ? ? ? 2.?封装一个函数实现获得一个数字每位数上的和值;例如输入12345,输出结果为15

#include <stdio.h>

int SumNum(int Num)
{
	int sum = 0;
	if(Num < 10)
	{
		sum = Num;
	}
	else
	{
		while(Num > 9)
		{
			sum += Num % 10;
			Num /= 10;
		}
		sum += Num;
	}
	return sum;
}

int main(void)
{
	int num = 0;
	int sum = 0;

	scanf("%d",&num);
	sum = SumNum(num);

	printf("sum = %d\n",sum);

}

? ? ? ? 3.?封装一个函数判断给定的数字是否为素数

#include <stdio.h>

int Judge_Prime(int Num)
{
	int i = 0;
	for(i = 2; i < Num; i++)
	{
		if(Num % i == 0)
		{
			return 0;
		}
	}
	return 1;
}

int main(void)
{
	int a = 0;

	scanf("%d",&a);

	if(Judge_Prime(a))
	{
		printf("素数\n");
	}
	else
	{
		printf("不是素数\n");
	}

	return 0;
}


文章来源:https://blog.csdn.net/weixin_52799506/article/details/135832855
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。