C语言程序设计
----教学过程篇函数调用
函数调用的一般形式函数名 (实参列表 );
如果调用的是无参函数,则实参列表可以不写,但是函数名后面的括号不能够省略函数调用
函数调用的方式
1.函数语句把函数作为一个语句来写如,display(实参列表 );
2.函数作为表达式把函数作为表达式中的一部分,这样使用的函数一定是要有返回值的函数如,most = max(x,y);
函数调用
3.函数参数将函数作为其他函数的实际参数,这种类型的调用也要求函数必须是有返回值的。
如:
int max(int x,int y)
{ int z;
z=x>y?x:y;
return (z);
}
main()
{ max(12,max(3,99));}
函数调用
对被调用的函数声明和函数原型一个函数调用另一个函数必须具备的条件
1.被调用的函数必须是已经声明和定义了的
2.如果被调用的函数是库函数,则在程序的最开始要加上头文件( #include
<stdio.h>)
函数调用
3.如果要调用的函数是用户自己定义的函数,在主调函数中要对被调函数进行声明。
如,int max(int x,int y)
{}
main()
{ int max(int x,int y)
}
函数调用
----函数原形在函数声明中不使用形参名,只使用形参的类型如,int max(int,int)
关于函数调用的补充说明:
1.如果函数在调用之前没有声明,则编译系统会把第一次遇到的函数形式作为函数声明,并自动的把该函数加上 int一起声明函数调用
2.如果被调用函数的定义出现在 主调函数之前,则被调用函数无需在主调函数中声明
3.如果在所有函数之前,函数的外部已经做了函数的声明,则在主调函数中无须再对所调用的函数进行声明
int max(int x,int y);
int max(int x,int y)
{}
main()
{ int m=10,n=100;
max(m,n); }
函数调用(程序一)
#include <stdio.h>
#include <stdlib.h>
#define n 3
void turn(int a[n][n])
{
int i,j,b[n][n];
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
b[j][i]=a[i][j];
}
函数调用(程序一)
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
a[i][j]=b[i][j];
}
}
}
void display(int a[n][n])
{
int i,j;
函数调用(程序一)
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%5d ",a[i][j]);
}
printf("\n");
}
}
main()
{
int i,j,k,a[n][n];
函数调用(程序一)
for(i=0,k=1;i<n;i++)
{
for(j=0;j<n;j++,k++)
{
a[i][j]=k;
}
}
printf("转置前的二维数组,\n");
display(a);
turn(a);
printf("转置后的二维数组,\n");
display(a); system("pause"); }
函数的嵌套调用
C语言中函数的定义不允许嵌套,但函数的调用是可以嵌套的
int max(int x,inty){}
int min(int x,int y){}
main()
{ int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
max(min(a,b),c);
}
函数调用上述函数嵌套的调用方法:
1.首先执行 main()函数
2.遇到调用 max()的操作语句,则程序转到 max()函数执行
3.执行 max()函数头,然后遇到 min()函数的调用,转到 min()函数去执行
4.执行 min()函数,若再无嵌套,则执行完 min()函数,返回到调用 min()函数处(即返回 max()函数),执行 max()
函数调用没有执行完的部分,直到 max()函数执行完毕
5.返回到 main()函数中调用 max()函数处,
继续执行完 main()函数没有执行完的部分,直至结束函数调用函数的递归调用在调用一个函数的过程中又出现直接或间接的调用函数本身,称为函数的递归调用例如,int f(int x)
{ int z;
if(x==1)
{z=20;}
else
{z=f(x-1)-1;}
return (z); }
函数调用(程序二)
从键盘读入数据 n,求 n的阶乘的结果用递归法做
#include <stdio.h>
#include <stdlib.h>
long f(int n)
{ long result;
if (n==1)
{
result=1;
}
else
{result = f(n-1)*n;
函数调用(程序二)
}
return (result);
}
main()
{
int a;
printf("please input a number:\n");
scanf("%d",&a);
printf("%d! =%ld\n",a,f(a));
system("pause");
}
函数调用(程序三)
汉诺塔问题
#include <stdio.h>
#include <stdlib.h>
void move(char x,char y)
{
printf("%c-->%c\n",x,y);
}
void hanoi(int n,char one,char two,char three)
{
if(n==1)
{
函数调用(程序三)
move(one,three);
}
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
函数调用(程序三)
main()
{
int m;
printf("please input the number of disks:\n");
scanf("%d",&m);
printf("the step of move %d disks:\n",m);
hanoi(m,'A','B','C');
system("pause");
}
函数调用(程序四 )
P186 T13
#include <stdio.h>
#include <stdlib.h>
int p(int x,int n)
{
int result;
if(n==0)
{
result =1;
}
if(n==1)
{
函数调用(程序四 )
result=x;
}
if(n>1)
{
result = ((2*n-1)*x-p(x,n-1)-(n-1)*p(x,n-2))/n;
}
return(result);
}
main()
{
int n,x;
函数调用(程序四 )
int result;
printf("please input 'n' and 'x':\n");
scanf("%d%d",&n,&x);
result = p(n,x);
printf("the result is,%d\n",result);
system("pause");
}
函数调用(程序五 )
P120 T6.10
#include <stdio.h>
#include <stdlib.h>
int left(int n)
{
int result;
if (n==10)
{
result= 1;
}
else
{
函数调用(程序五 )
result=(left(n+1)+1)*2;
}
return(result);
}
main()
{
int result;
result=left(1);
printf("第一天共摘桃子 %d个,\n",result);
system("pause");
}