第3章 函数与编译预处理.pptx
1第3章函数与编译预处理
2/60本章要点3.1 函数的概念3.2 函数的定义与调用3.3 函数的参数传递3.4 递归函数3.5 内置函数3.6 变量和函数的属性3.7 编译预处理
3/603.1 函数的概念函数就是一些代码的集合,实现相对单一的功能。函数的作用一是把一个复杂的程序分解成若干个功能相对独立的小模块,以便于管理和阅读;二是将程序中那些仅因为某些数的不同却要重复编写多次的代码独立出来编成函数。函数分类从用户使用的角度系统函数(库函数或标准函数)?对应的函数库例:库函数sqrt(x)头文件math.h#includecmath命令自定义函数从函数的形式无参数函数例:main()有参数函数例:calc_sum(intn)main()func1()func2()func3()func5()func4()
4/60例3.1在主函数中调用其他函数,实现n个自然数之后。#includeiostreamusingnamespacestd;intsum=0;//定义变量sum,初值为0doublecalc_sum(intnx)//定义calc_sum()函数{intk,s=0;for(k=1;k=n;k++)s=s+k;returns;}voidprint_s()//定义print_s()函数{cout“sum=”sumendl;//输出结果sum的值}intmain(){intn;cinn;//输入nsum=calc_sum(n); //调用calc_sum()函数print_s(); //调用print_s()函数return0;}
5/603.2 函数的定义与调用函数的定义形式:数据类型函数名(形式参数列表){声明语句执行语句}函数体定义了函数要完成的具体操作如,自定义函数定义:intmax(intx,inty){ intz;z=xy?x:y;return(z);}注:当函数返回值为整形时可省略。函数体中的声明部分当需要从被调函数返回一个值(供主调函数使用)时,被调函数中必须包含return语句。此例是将z的值作为函数值,返回调用点,其中括号可省略函数首部,函数值为整型,有两个整型形参
6/603.2 函数的定义与调用——说明例3.1的voidprint_s(void)函数是无参函数,定义中首句可写成:voidprint_s()//定义print_s()函数的首部例3.1的calc_sum(intn)函数是有参函数(1个参数,整型)intcalc_sum(intn)//定义calc_sum()函数在定义函数时必须指定函数的类型。
7/603.2 函数的定义与调用——举例#includeiostreamusingnamespacestd;intmax(intx,inty)//定义函数{intz;//max中的局部变量z=xy?x:y;return(z);}intmain(){inta,b,c;//main中的局部变量cout输入2个整数:;cinab;c=max(a,b);//调用函数coutmax=cendl;return0;}思考:如果main函数定义在max函数之前,程序能否通过编译?c=max(a,b);定义a,b,c
8/603.2 函数的定义与调用——声明函数的声明(1)对库函数的声明对库函数的声明语句已经写在有关包含文件中了,因此只要在程序文件头用include语句将这些包含文件包含到本程序中来,就完成了对库函数的声明。(2)对自定义函数的声明必须在调用某自定义函数的语句之前写上如下声明语句:函数类型关键字函数名([参数1类型,参数1名称][,参数2类型,参数2名称][…]);例如:floatadd(floatx,floaty);或者:floatadd(float,float);//略去参数名称
9/603.2 函数的定义与调用——函数原型函数原型函数声明(函数的首部)称为函数原型。函数原型的两种表示形式:函数类型关键字函数名([参数1类型][,参数2类型][…]);或函数类型关键字函数名([参数1类型,标识符1][,参数2类型,标识符2][…]);例如:floatadd(floatx,floaty);它的函数原型为:floatadd(float,float);//略去参数名称或floatadd(floatp,float