一、函数的调用与返回值
1、函数调用的形式
函数名(实参列表);
max(a,b);
2、函数调用的方式
(1)、语句调用(不要求函数有明确的返回值)
(2)、表达式调用(有明确的返回值)
3、函数的返回值
(1)、·可以有多条返回语句,但每条语句的返回值只有一个,如不需要指明返回值可写成return;
二、函数的参数
1、理解形参和实参
函数名后括号内说明的变量是形参
在被调用处给出对应的参数,这些参数是实参,可以是常量,变量和表达式。
2、数组作为函数参数
/*二维数组名作为函数参数*/
#include"stdio.h"
max(int b[][4])
{
int i,j,k,max1;
max1=b[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(b[i][j]>max1)
max1=b[i][j];
return(max1);
}
void main()
{
int m,a[3][4]={5,16,30,40,23,4,156,8,1,3,50,37};
m=max(a);
printf("max=%d\n",m);
}
3、函数声明和函数原型
4、函数的嵌套调用
5、函数的递归调用
(1)、/*利用递归算法求Fibonacci数列*/
#include"stdio.h"
long f(int n)
{
long s;
if(n==1||n==2)
return 1;
s=f(n-1)+f(n-2);
return s;
}
void main()
{
int n;
printf("input n:");
scanf("%d",&n);
if(n<0)
printf("error!\n");
else
printf("第%d项Fibonacci数列的值为%ld\n",n,f(n));
}
(2)、 /*汉诺塔问题*/
void hanoi(int n,char x,char y,char z)
{
if(n==1)
printf("%c->%c\n",x,z);
else
{
hanoi(n-1,x,z,y);
printf("%c->%c\n",x,z);
hanoi(n-1,y,x,z);
}
}
void main()
{
int m;
printf("input number:");
scanf("%d",&m);
printf("移动的过程为:\n");
hanoi(m,'A','B','C');
}
6、变量的作用域
(1)、局部变量
(2)、全局变量
7、变量的存储方式
(1)、静态存储(在编译时就分配了空间)
(2)、动态存储(在程序运行过程才分配空间)
【1】、静态局部变量
static 数据类型说明符变量名;
(程序运行过程不在进行初始化)
【2】、自动变量
auto 数据类型说明符变量名;
auto int a;等价于int a;
【3】、寄存器变量
regiater 数据类型说明符变量名;(用于提高程序的执行效率)
【4】、外部变量声明语句
extern 数据类型说明符变量名;
三、内外部函数
1、内部函数
static 类型说明符函数名(形参表)
例:static int f(int a,int b);
2、外部函数
四、指针与函数
/*实现系统提供的字符串连接函数strcat(s1,s2)的全部功能*/
char *mystrcat(char *s1,char *s2)
{
char *p=s1;
while(*s1)
s1++;
while(*s1++=*s2++);
return(p);
}
void main()
{
char s[40]="Hello, ";
printf("%s\n",mystrcat(s,"Welcome to you!"));
}