函数与编译预处理共41页

合集下载

函数与编译预处理

函数与编译预处理

函数与编译预处理一、函数的定义1、无参函数的定义形式类型标识符函数名()第一行:函数首部{声明部分语句 { }包含的:函数体}例1:void fun( ){printf(“Hello!\n”);}2、有参函数的定义形式类型标识符函数名(形式参数列表){声明部分语句}例2:int max(int x, int y){ int z;z = x > y ? x : y;return (z);}注:“类型标识符”是指函数值的类型。

若省略,默认为int。

二、函数的调用无参函数:函数名()有参函数:函数名(实际参数列表)例3:在main函数中调用fun和max函数void main( ){int m,n,t;scanf(“%d,%d”,&m,&n);t=max(m,n); /*调用max函数*/fun(); /*调用fun函数*/printf(“max number is %d\n”,t);}注:1、C语言程序由函数构成,其中有且仅有一个main函数,各函数书写的先后顺序任意。

2、函数的定义是相互独立的,不能在一个函数的内部定义另一个函数,即函数的定义不能嵌套。

3、程序从main函数开始执行,其他函数被调用时执行,调用完后回到主调函数,最后在main函数中结束整个程序。

三、函数的声明在主调函数中一般要对被调函数进行声明。

声明的作用是告知编译器被调函数的函数名、函数类型、参数个数和参数类型,方便进行语法检查。

声明的形式:类型标识符函数名(形式参数列表);即:函数首部加分号例如:void fun( );int max(int x, int y);其中参数名称可省略,如:int max(int , int );Turbo C在以下两种情况中,可省略函数声明:1、被调函数定义在主调函数前。

2、被调函数类型为int、char。

四、参数的传递1、形参是变量,但函数被调用时才被分配内存,调用完毕,所占内存将被释放。

C++学习课件PPT5 函数和编译预处理

C++学习课件PPT5 函数和编译预处理

#include “iostream.h” int i=100;
全局变量i
void main(void)
局部变量i
{ int i=50,j=20; int max(int i,int j);
局部变量i
cout<<max(i,j)<<‘\t’;
cout<<max(::i,j); }
引用全局变量
int max(int i,int j)
14:07
5.2 例
#include "iostream.h"
int maxi(int a,int b) 注意这里的
{ return a>b?a:b;} 实参表达式
void main()
计算顺序
{
int a,b;
a=20; b=40;
cout<< maxi(b+a,b=b+1); 问题:maxi函数输出值?
14:07
动态变量与静态变量例
例 #include “iostream.h”
int t(void) {static int i=100;
i+=5; return i; } void main(void) {cout<<“i=“<<t()<<‘\t’; cout<<“i=“<<t()<<‘\t’; }
14:07
河内塔问题:
第一步已完成: A(n-1)B(借助C)
A柱
B柱
C柱
第二步:将A柱剩下的一个最大的盘子移到C 柱
AC
14:07
原状态: A柱
河内塔问题:

C语言程序设计_06函数与编译预处理

C语言程序设计_06函数与编译预处理

注意:所有的递归问题都一定可以用非递归的算法实现,并 且已经有了固定的算法。如何将递归程序转化为非递归程序 的算法已经超出了本书的范围,感兴趣的读者可以参看有关 数据结构的文献资料。
6.5 变量的作用域与存储类别 6.5.1 变量的作用域 在程序中能对变量进行存取操作的范围称为变量的作用域。 根据变量的作用域不同,变量分为局部变量和全局变量。 1.局部变量 在一个函数体内或复合语句内定义的变量称为局部变量。局 部变量只在定义它的函数体或复合语句内有效,即只能在定 义它的函数体或复合语句内部使用它,而在定义它的函数体 或复合语句之外不能使用它。
(3)将分解后的每个小问题作为一个整体,描述用这 些较小的问题来解决原来大问题的算法。 由第(3)步得到的算法就是一个解决原来问题的递归 算法。由第(1)步将问题的规模缩到最小时的条件就 是该递归算法的递归结束条件。 【例6.7】利用递归函数打印如图6-7所示的数字金字塔 图形。
图6-7 数字金字塔
2.函数体 在函数定义的最外层花括号括起来的部分称作函数体。在函 数体的前面部分可以包含函数体中程序对象的声明和变量定 义,声明和定义之后是描述函数功能的语句部分。 函数体中的RETURN语句用于传递函数的返回值。一般格式 为: RETURN 表达式;
说明: (1)一个函数中可以有多个RETURN语句,当执行到某个 RETURN语句时,程序的控制流程返回调用函数,并将 RETURN语句中表达式的值作为函数值带回。 (2)若函数体内没有RETURN语句,就一直执行到函数体 的末尾,然后返回调用函数。这时也有一个不确定的函数值 被带回。 (3)若不需要带回函数值,一般将函数定义为VOID类型。 (4)RETURN语句中表达式的类型应与函数返回值的类型 一致。不一致时,以函数返回值的类型为准。 3.空函数 C语言还允许函数体为空的函数,其形式为: 函数名() {} 调用此函数时,什么工作也不做。

函数与编译预处理

函数与编译预处理

,一一传递数据。
2、函数调用的方式
(1)函数语句 printf(“%d”,’3’);
(2)函数表达式 y=power(3,3);
(3)函数参数 函数调用作为一个函数的实参如:
maxval=max(max(a,b),c);
3、 对被调用函数的声明和函数原型
①在一个函数中调用另一函数需要具备的条件:
a、调用的函数必须是已经存在的函数(是库函数或自己定
的参数表称为形式参数表,简称形参表。
★ 说明:函数定义不允许嵌套。
在C语言中,所有函数(包括主函数main()都是平行的。 一个函数的定义,可以放在程序中的任意位置,主函数main() 之前或之后。但在一个函数的函数体内,不能再定义另一个
函数,即不能嵌套定义。
2019/10/10
C语言程序设计教程
第6章 函数与编译预处理 10
3、函数类型与返回值
在C语言中可把函数分为有返回值函数和无返回值函数两种: (1)函数返回值与return语句
有返回值的函数,是通过函数中的return语句来获得的。 ①return语句的一般格式: return ( 返回值表达式 );
②return语句的功能:返回调用函数,并将“返回值表达式”
的值带给调用函数。
例6_2:计算1!+2!+3!+…+10! 的值
void main() {
long mm( int n); int i; long s=0; for (i =1; i <=10; i ++)
s+= mm(i ); printf(“\n%ld”,s); }
long mm( int n) { long t=1; int i;

函数与编译预处理

函数与编译预处理
(2) 间接递归 void a() { … b(); … } void b() { … a(); …}
例6.3 用递归方法计算n!。
long fact(int n) { if(n==0||n==1) return 1; else return n*fact(n-1); } main() { int n; long m; scanf("%d",&n); m=fact(n); printf("%d!=%ld\n",n,m); }
程序举例
1.以下程序的输出结果是 #define M(x,y,z) x*y+z main() {int a=1,b=2,c=3; printf(“%d\n”,M(a+b,b+c,c+a)); }
计算过程: 1+2*2+3+3+1=12
4+4*4+4/2+2*2+2=28
有以下程序执行后输出结果是 #define f(x) x*x main() {int i; i=f(4+4)/f(2+2); printf(“%d\n”,i); }
2.带参数的宏定义
带参数的宏定义的一般形式为: #define 宏名(形参表) 字符串 对带参数的宏,在调用时,不仅要宏展开,而且要用实参去代换形参。 带参数宏调用的一般形式为:宏名(实参表); #define MAX(x,y) x>y?x:y main() { int a,b,m; scanf("%d%d",&a,&b); m=MAX(a,b); printf("max=%d\n",m);
全局变量和局部变量的使用特点 变量存储类别

C++_函数与编译预处理

C++_函数与编译预处理
根据函数的运算结果,函数又有返回值和无返 回值之分。
使用函数的方式是:先说明(定义),后使用 (调用)。
4.2 函数的定义与调用
4.2.1 函数的定义 说明:
函数定义的一般形式:
1. 返回类型指函数返回的值的类型, 也称为:函数类型。
返回类型 函数名(参数表) 2.
{
语句序列
3.
return 返回值;
2 30
x yz 4 95
(3) x=2 y=3 z=0
4.3.2 引用调用
引用类型变量是其它变量的别名,对引用类型变量的 操作实际上就是对被引用变量的操作。
说明一个引用类型变量时,必须要用另一个变量对其 初始化。说明引用型变量的语法格式为:
<数据类型> &<引用型变量名>=<变量名>; 其中,数据类型必须与变量名的类型相同,&表明所说明 的变量为引用类型变量。例如:
{ int x=2,y=3, z=0; x yz
cout<<"(1) x="<<x<<" y="<<y<<" z="<<z<<endl; 2 30
add (x, y, z);
cout<<"(3) x="<<x<<" y="<<y<<" z="<<z<<endl;
} (1) x=2 y=3 z=0 (2) x=4 y=9 z=5
void main(void)
{
int x, y=36;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档