C语言函数+诺汉塔

对于上一期的变量,大家如果学习过单片机的会发现51单片机使用了C语言的定义类型,分外还有自身的C51变量类型,如:sfr,sbit等。这些会在介绍单片机相关的文章中提及的。
在函数中,最常见的时main()函数了,因为所有的程序中都需要包含main,他是我们程序执行的开始,也是末尾。
在main以外的函数可以由人员自行编写,只要符合逻辑要求,就不会出现问题。
函数结构:函数类型+函数名+(返回类型)
其余跟main函数差不多,内部内容由人员自行编写,符合语法和逻辑即可。
函数分类:
定义角度
1.标准函数(库函数)
2.用户自定义函数
有无返回值
1.有返回值:该类函数被调用执行完毕,将向调用者返回一个执行结果,称为函数返回值。用return+变量。
2.无返回值:无返回值函数不需要向主调函数提供返回值。通常用户定义此类函数时需要指定它的返回类型为空(void类型)。
函数的形式
1.无参函数:即函数定义、声明和调用中均不带参数。
2.有参函数:就是在函数定义和声明时都有参数。在函数调用时也必须给出参数。即当主调函数调用被调用函数时,主调函数必须把值传递给形参也就是函数名后面的括号里面的变量)**以供被调用函数使用。
定义的形式:
函数类型 函数名(类型说明 变量名)
{
函数体;
}
例子:

#include <stdio.h>
int max(int a,int b)
{
	int c;
	c=a>b?a:b;
	return c;
}
void main()
{
	int x,y;
	printf("请输入两个整数:");
	scanf("%d%d",&x,&y);
	printf("%d和%d的最大值为:%d\n",x,y,max(x,y));
}

在这里插入图片描述

范例中的max()函数是一个求a、b两者中的最大值函数。其中a、b是形式参数,当主函数main()调用max()函数时,把实际参数传递给被调用函数中的形参a和b。花括号内的是函数体,计算出a、b的最大值,赋值给c,并通过return语句将c的值带回到主调函数中。
(1)函数名必须符合标识符的命名规则(即只能由字母、数字和下划线组成,开头只能为字母或下划线),且同一个程序中函数不能重名,函数名是用来唯一标识一个函数。
(2)函数类型规定了函数返回值的类型。如max()是int型的,那函数的返回值也是int型的。返回值也就是return后面的c。
(3)函数名后面圆括号括起来的部分称为形式参数列表。如果有多个形式参数,应该分别给出个形式参数的类型,并用逗号隔开,该数函数就是有参函数。
形参在调用前是不占据内存的。
相对应的调用函数时里面时实参,可以是常量,也可以是表达式。

(4)函数体是由一对花括号“{ }”括起来的语句列表,用于描述函数所要进行的操作。函数体又包含了说明部分和执行部分。其中,说明部分是对函数体内部所用到的各种变量类型进行定义和声明,对被调用的函数进行声明;执行部分是实现函数功能的语句序列。
(5)还有一类比较特殊的函数时空函数,即函数体内没有语句。调用空函数时,空函数表示什么都不做。
(6)C语言所有子函数都是平行的,不输入任何其他函数,他们之间可以相互调用。但是函数的定义不能包含在另一个函数的定义内,即函数不能嵌套定义。
如:

int func_fst(int a,int b)
{
	..........
	int func_snd(int c,int d)
	{
		...........
	}
}

例题:汉诺塔

#include <stdio.h>

 void printdisk(char x,char y)
 {
 	printf("%c------>%c\n",x,y);
 }
 
 void hanoi(int n,int a,int b,int c)
 {
 	if(n==1)
 	{
 		printdisk(a,c);
	 }
	 else
	 {
	 	hanoi(n-1,a,c,b);//a借助c移到b
	 	printdisk(a,c);
	 	hanoi(n-1,b,a,c);//b借助a移到c
	 }
 }
 
int main()
 {
 	int n;
 	printf("Input n:");
 	scanf("%d",&n);
 	hanoi(n,'a','b','c');
 }

结果:
在这里插入图片描述

若文章中有什么错误,不理解的,可以随时@我,我可以随时修改、解答。或者有更好的学术建议也可以向我提出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值