对于上一期的变量,大家如果学习过单片机的会发现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');
}
结果:
若文章中有什么错误,不理解的,可以随时@我,我可以随时修改、解答。或者有更好的学术建议也可以向我提出。