C语言函数篇讲解

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中的表达式类型一致。如果不一致,则以函数
类型为准。
3. 若函数中没有return语句,函数也会带回一个不确定
的值,为了明确表示“不带回值”,用关键字“void” 定义“无类型” (或称“空类型”)。
例:void printstar( ) { printf(“******************\n”); } main( ) { printstar( ); printmessage( ); printstar( );} void printmessage( ) { printf(“ How do you do!\n”); }
How do you do! ******************
说明:
1. 一个源程序文件由一个或多个函数组成,但必须有且仅 有一个main函数。
2. C程序的执行从main函数开始,调用其他函数后,流程 回到main函数,main函数结束整个函数的运行。
3. 由主函数调用其他函数,其他函数也可互相调用,但 不能调用main函数。同一个函数可以被一个或多个函 数调用任意多次。
max(int x, int y) { int z;
z=x>y?x:y; return(z);}
二 关于形参与实参的说明:
1. 未出现函数调用时,形参变量不占内存中的存储
单元。在发生函数调用时,形参才被分配内存单
元。调用结束后,形参所占的内存单元被释放。
2. 实参可以是常量、变量或表达式,必须有确定的
int maxnum(int x, int y, int z)
{ int m;
m=x;
if(m<y) m=y;
if(m<z) m=z;
return m;
}
main()
{ int a, b, c, max;
scanf(“%d%d%d”,&a,&b,&c) ;
max=maxnum(a, b, c);
printf(“max=%d”,max);
5.函数体:当声明部分和语句都没有时,称为“空函数”, 空函数没有任何实际作用;
形式:类型说明符 函数名( ) {}
例如:dummy( ) {}
例如:
返回值 类型
函数名
形参1 形参2
int max ( int x, int y )
{ int z;
声明部分
z=x>y?x:y; return(z); }
4. 从用户角度看,函数分为两种:
① 标准函数:即库函数,由系统提供。
② 用户自定义函数:用户自己定义的。
5. 从函数形式看,函数分为两种:
①无参函数。
②有参函数。
6.2 函数定义的一般形式
一 函数定义的一般形式
列表
类型标识符 函数名(类型1 形参1,类型2 形参2,…) { 声明部分 语句 }
二 说明:
add(int a ,int b) { int z;
z=a+fun(b); return z; } 运行结果:
41
汉诺塔问题 ( Hanoi)
fun( int t) { return t*t; }
6.7 数组作为函数参数
➢ 数组元素作函数参数 ➢ 数组名作函数参数 ➢ 多维数组名作函数参数
一. 数组元素作函数实参
int i;
{ int i;
for(i=0;i<10;i++)
float sum=0,aver;
scanf(“%f ”,&s[i]);
for(i=0;i<10;i++)
ave=fun(s);
sum=sum+a[i];
printf(“ave=%.2f ”,ave); aver=sum/10;
}
return aver;
值。在调用时,将实参的值赋给形参变量。
3. 实参与形参的类型应相同或兼容。如果类型不一
致,则将实参转换为和形参类型一致时再赋值。
例如:main( ) { int c; c=max(3.5,5+2);
printf(“Max is %d”,c);}
max(int x, int y)
{ int z;
z=x>y?x:y; return(z); }
}
6.5 函数的嵌套调用
C语言不能嵌套定义函数,但可以嵌套调用 函数,即允许在调用一个函数的过程中,又调用 另一个函数。例如:
main函数


调用a函数


结束
a 函数


调用b函数


a函数结束
b 函数

b函数结束
main( ) { int x,y,sum;
x=5; y=6; sum=add(x,y); printf(“%d”,sum); }
第六章 函数
教学目标:掌握函数的定义; 理解并运用函数的 调用; 理解函数的声明。
教学重点:函数的定义; 函数的调用。 教学难点:函数的定义。 教学时数:4学时
6.1 概述
例: printstar( )
{ printf(“******************\n”);} main( )
{ printstar( ); printmessage( ); printstar( );} printmessage( ) { printf(“ How do you do!\n”);} 结果: ******************
1.in用t 数fu组n名(i作nt函b数[参] 数) ,应该在主调函数和被调函数分
{ 别定义数组。 2. 实参∶——数组名
形参形—参—还数可组以名写或指针变量 成int b[10]或
3.}实参数组与形参数组类i型nt应b[一20致] 。
main()
4.{系统in将t实a参[1数0]组; 的首地址传给形参数组
float add(float x, float y) { return (x+y); } main() { float a,b,sum;
scanf(“%f%f”,&a,&b); sum=add(a,b); printf(“sum=%f”,sum); }
例2:通过函数调用的方式,求三个整数的最大值。
1.fu函n数( )语; 句。 d函=m数a不x(带a,回b)值; ,只完成一定的操作。
2.p函rin数tf表(“达m式ax。=%d\n”, d);
e要=m求a函x(数a,带b)回+c确; 定值,参加表达式运算。
3.p函rin数tf参(“数m。ax=%d\n”, e);
p要rin求tf函(“数m带ax回=确%d定\值n”,,m作a为x(一a,个c))参; 数。
1.所有函数在定义时都是互相独立的,即不能嵌套定义; 2.类型标识符:说明了函数返回值的类型,当返回值为
int时,可省略不写; 3.函数名:遵循标识符的命名规则;同一个函数中函数名
必须唯一;
4.形参:只能是变量,每个形参前要有类型名;当定义的 函数没有形参时叫作“无参函数” ;
形式:类型标识符 函数名() { 声明部分 语句 }
alter(int x, int y) { int t;
t=x; x=y; y=t; }
总结:形参的值发生 改变,并不能 影响实参。
三 函数的返回值
1. 函数通过return语句返回函数的值,若不需要
返回函数值,可以不要return语句。 形式:return (表达式);
return (变 量); 括号可省略 return (常 量); 例如:return z;或return 0;或return (a+b); 2. 定义函数时,函数的返回值类型应与return语句
4. 实参变量对形参变量是单向的“值传递” 。即 只能实参传给形参,不能由形参传回来给实参。
在内存中,实参单元与形参单元是不同的单元。
main( ) { int a=10, b=20;
a 10 20 b
alter(a, b);
printf(“a=%d,b=%d\n”,a,b); x 1200 }
210 y
/*返回z的值*/
}
main()
{float a,b,c;
scanf(“%f,%f”,&a,&b);
c=add(a,b); /*接受加法函数的返回值*/
printf(“%f”,c);
}
4. 若在函数定义之前, 在函数的外部已做了函数
声明,则在各个主调函数中不必对所调用的函
数再作声明。 例: char letter(char,char);
语句(执 行部分)
函数体
6.3 函数参数和函数的值
一 形式参数和实际参数
实际参数: 调用函数时,函数名后面括弧中的参数称为
“实际参数”(简称实参)。
形式参数:定义函数时,函数名后面括弧中的参数称为
“形式参数”(简称形参)。 例如:main( )
{ int a,b,c; scanf(“%d,%d”,&a,&b); c=max(a,b); printf(“Max is %d”,c);}
printf(“Sum is %f”,c);
}
float add(float x, float y)
{float z;
z=x+y;
return(z);
}
3. 若被调用函数定义出现在主调函数之前,可以
不必声明。
wenku.baidu.com
例:float add(float x,float y)
{float z;
z=x+y;
return(z);
{ int i, j, k, t;
main()
for(i=0; i<9;i++)
{ int a[10], i;
{ k=i; for(j=i+1; j<10;j++)
float f(float,float); int i(float,float); main() {…} char letter(char c1,char c2) {…} float f(float x,float y) {…} int i(float j,float k) {…}
四 程序举例 例1:用函数调用的方法求两个数的和。
这样,系统就保证使函数不带回任何值。
6.4 函数的调用
一 函数调用的一般形式
有参函数的
函数名(实参表列); 调用形式 或 函数名(); 无参函数的
调用形式
说明:1.各实参间用逗号格开。 2.实参与形参的个数应相同,类型应一致。 3.被调用函数必须是已经存在的函数。
m二ai函n()数调用的方式
{按i出nt现a的=位10置,b分=2,0,有c=如30下,d三,e种; 函数调用方式:
说明: 1.使用用户定义函数时,要对函数进行声明。 2.如果函数的返回值类型为int,可以不用声明。
例:main( )
{float add(float x, float y); /*对被调函数声明*/
float a,b,c;
scanf(“%f,%f”,&a,&b);
c=add(a,b);
/*函数调用(函数表达式)*/
}
s[0] s[1] s[2] s[3] s[4] s[5] s[6] s[7] s[8] s[9] a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
s[n]和a[n]指的是同一单元。
例3:编写函数,用选择排序对数组中的10个数按
由小到大排序。
void fun(int b[ ])
}
int max(int x, int y)
{ return (x>y?x;y); }
fun()
{ printf(“***********”);}

三 对被调用函数的声明
函数声明的一般形式: 函数类型 函数名(参数类型1,参数类型2, …); 例: int max(int, int); 或 int max(int x, int y);
5. 用参数数f∶组 组un名 随(a作 之);函 改数 变参。数时,形参数组的改变也可以使实
}
例2:有一个一维数组score,内放10个学生成绩, 求平均成绩。
float fun(float a[10]); 函数声明
main()
{ float s[10],ave;
float fun(float a[10] )
———与变量作实参一样,是单向值传递
例1:输入一行字符,分别统计出其中大写字母和
小写字母的个数。
#include “stdio.h” main() {char a[30]; int i, k=0, p=0; gets(a); for(i=0; a[i]!=‘\0’; i++)
int fun(char x ) { if(x>=’A’&&x<=‘Z’)
return 1; if(x>=’a’&&x<=‘z’)
return 2; }
{ if(fun(a[i])==1) k++;
if(fun(a[i])==2) p++; }
printf(“大写字母个数:%d”, k);
printf(“小写字母个数:%d”, p);
}
二. 数组名作函数实参
———传递的是数组的首地址 (此时形参和实参指的是同一内存单元)
相关文档
最新文档