资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,*,第九章,函数,回顾,2-1,指针是一个变量,它存储另一个对象的内存地址,指针的声明由基本类型、星号,(*),和变量名组成,为指针赋值,赋值运算符右侧必须是一个地址如果是普通变量需要在前面加一个取地址运算符,&,;如果是另一个指针变量或者是一个数组,不需要加,&,运算符,运算符,*,用于返回指针指向的内存地址中存储的值,2,回顾,2-2,指针算术运算的含义是指针的移动,将指针执行加上或者减去一个整数值,n,的运算相当于指针向前或向后移动,n,个数据单元,指针可以执行比较相等的运算,用来判断两个指针是否指向同一个变量,指向数组的指针,存储的是数组中元素的地址。数组,data,的第,(i+1),个元素的地址可表示为,&,datai,或,(,data+i,),3,目标,描述,C,语言中的函数,掌握,C,语言中常见的内置函数,理解函数原型和函数的返回值,熟练掌握自定义函数的定义和调用,4,void main(),:,x=x*x*x;,y=y*y*y;,z=z*z*z;,ans1=,x+y+z,;,a=a*a*a;,b=b*b*b;,c=c*c*c;,ans2=,a+b+c,;,:,为什么使用函数,重复多次的同一计算类型,void main(),:,ans1=,cube(x,y,z,);,ans2=,cube(a,b,c,);,:,int,cube(int,a,b,c,),int,ans,;,ans,=(a*a*,a)+(b,*b*,b)+(c,*c*c);,return,ans,;,函数,主程序,ans,函数可以把相对独立的某个功能抽象出来,使之成为程序中的一个独立实体。可以在同一个程序或其他程序中多次重复使用,5,函数机制的优点,使程序变得更简短而清晰,有利于程序维护,可以提高程序开发的效率,提高了代码的重用性,6,函数类型,内置函数:,由语言系统提供;,用户无须定义,也不必在程序中作类型说明;,只需在程序前包含有该函数定义的头文件,;,自定义函数:,用户在程序中根据需要而编写的函数,;,7,常用内置函数,内置函数,头文件,用途,double,sqrt(double,x),math.h,计算,x,的平方根,double pow(double x,double y),计算,x,的,y,次幂,double,ceil(double,x),求不小于,x,的最小整数,并以,double,形式显示,double,floor(double,x),求不大于,x,的最大整数,并以,double,形式显示,int,toupper(int,x),ctype.h,如果,x,为小写字母,则返回对应的大写字母,int,tolower(int,x),如果,x,为大写字母,则返回对应的小写字母,int,rand(void,),stdlib.h,产生一个随机数,void,exit(int,retval,),终止程序,8,问题描述:,求自然数,1,10,的平方根和立方。,内置函数,sqrt,和,pow,示例,2,6,64,#include,#include,void main(),int,x=1;,double,squareroot,power,;,while(x,=10),squareroot,=,sqrt(x,);,power=pow(x,3);,printf,(%d,的平方根,:%3.2ft%d,的立方,:%5.0f n,x,squareroot,x,power,);,x+;,1,的平方根,:1.00 1,的立方,:1,2,的平方根,:1.41 2,的立方,:8,3,的平方根,:1.73 3,的立方,:27,4,的平方根,:2.00 4,的立方,:64,5,的平方根,:2.24 5,的立方,:125,6,的平方根,:2.45 6,的立方,:216,7,的平方根,:2.65 7,的立方,:343,8,的平方根,:2.83 8,的立方,:512,9,的平方根,:3.00 9,的立方,:729,10,的平方根,:3.16 10,的立方,:1000,Press any key to continue,9,内置函数,ceil,和,floor,示例,2,6,64,#include,#include,void main(),printf,(=floor()=);,printf(n,floor(99.1)=%f n,floor(99.1),);,printf,(floor(-99.1)=%fn,floor(-99.1),);,printf,(floor(99.9)=%fn,floor(99.9),);,printf,(floor(-99.9)=%fn,floor(-99.9),);,p,rintf(n=ceil()=);,printf(n ceil(99.1)=%fn,ceil(99.1),);,printf(ceil(-99.1)=%fn,ceil(-99.1),);,printf(ceil(99.9)=%fn,ceil(99.9),);,printf(ceil(-99.9)=%fn,ceil(-99.9),);,=floor()=,floor(99.1)=99.000000,floor(-99.1)=-100.000000,floor(99.9)=99.000000,floor(-99.9)=-100.000000,=ceil()=,ceil(99.1)=100.000000,ceil(-99.1)=-99.000000,ceil(99.9)=100.000000,ceil(-99.9)=-99.000000,Press any key to continue,10,toupper,和,tolower,示例,2,6,64,#include,#include,void main(),char msg1,msg2,to_upper,to_lower;,printf,(,请输入一个小写字母:,);,msg1=,getchar,();,to_upper,=,toupper(msg1),;,printf,(,转换为大写:,%,cn,to_upper,);,printf,(,请输入一个大写字母:,);,fflush(stdin,);,msg2=,getchar,();,to_lower,=,tolower(msg2),;,printf,(,转换为小写:,%,cn,to_lower,);,请输入一个小写字母:,d,转换为大写:,D,请输入一个大写字母:,E,转换为小写:,e,Press any key to continue,11,内置函数,rand,示例,2,6,64,#include,#include,/#include,void main(),int,i;,printf,(,产生,10,个,0,到,99,之间的随机数序列:,nn,);,/,srand(unsigned)time(NULL,);,for(i,=0;iy?x:y;,return m;,该函数名为,displayDiscount,,无参数,使用,void,说明无返回值,函数体内的语句用于根据产品的价格求折扣后的价格。,该函数名为,max,,它有两个,double,类型的参数,返回值为,double,类型。在函数体内有三条语句实现了求两个数中较大的数,并将它返回。,13,函数原型,#include,float count(int,int);,void main(),.,.,float,count(int,x,int,y),.,函数原型说明在形式上与函数头部类似,最后加一个分号。原型说明中参数表里的参数名可以不写(只写参数类型)。,14,通过在程序中使用函数名称,可以执行函数中包含的语句,这称为调用函数,函数之间允许相互调用,也允许嵌套调用,函数还可以自己调用自己,称为递归调用,#include,void,main(),:,set_discount();,displayDiscount();,:,:,float set_discount(),:,:,float displayDiscount(),:,:,函数调用,15,void,reverse,(),:,:,#include,void,main(),:,palindrome();,:,:,void palindrome(),:,reverse();,:,函数嵌套调用,从一个函数调用另一个函数称为函数的嵌套调用,16,/*,此函数用于计算,a,的阶乘,*,/,int,factorial(int,a),if(a=1),return 1;,else,a=a*,factorial(a-1),;,return a;,函数递归调用,在一个函数体内调用自身称为函数的递归调用,17,问题描述:,根据用户的选择求不同形状的面积。,函数调用示例,#include,void,AreaOfRect,();,void,AreaOfTriangle,();,void,AreaOfRound,();,void main(),int,select;,do ,printf,(0,、退出,n 1,、长方形,n 2,、三角形,n 3,、圆形,n);,printf,(,请选择功能:,);,scanf(%d,&select,);,if(select,=0)break;,switch(select,),case 1:,AreaOfRect,();,break;/,长方形,case 2:,AreaOfTriangle,();,break;/,三角形,case 3:,AreaOfRound,();,break;/,圆形,default:,printf,(,输入有误,请在,0,4,之间选择。,n);,while(1);,void,AreaOfRect,(),int,x,y,;,printf,(,请输入长方形的长,:);,scanf(%d,&x,);,printf,(,请输入长方形的宽,:);,scanf(%d,&y,);,printf,(,面积为:,%,dn,(x,*y);,void,AreaOfTriangle,(),int,x,y,;,printf,(,请输入三角形的底,:);,scanf(%d,&x,);,printf,(,请输入三角形的高,:);,scanf(%d,&y,);,printf,(,面积为:,%,dn,(x,*y)/2);,void,AreaOfRound,(),int,r;,printf,(,请输入圆形的半径,:);,scanf(%d,&r,);,printf,(,面积为:,%dn,3.14*r*r);,函数原型,演示:,示例,6,18,int,divisibleCheck(int,num),if(num%5=0),return 1;,else,return 0;,C,语言中的函数至多可以返回一个值,不能返回多个值;,返回值的数据类型必须与函数原型中返回值的数据类型匹配;,当遇到,return,语句时,函数执行将终止。程序控制流将立即返回调用函数;,函数返回值,C,语言中的,return,语句用于向调用函数返回值,语法如下:,return();,19,函数返回值示例,#include,int,get_age,();,void main(),int,age1,age2,age3;,age1=,get_age,(),;,age2=,get_age,(),;,age3=,get_age,(),;,if(age1 age2)&(age1 age3),printf(n,年龄为,%d,的人最大,n,age1);,else if(age2 age1)&(age2 age3),printf(n,年龄为,%d,的人最大,n,age2);,else if(age3 age1)&(age3 age2),printf(n,年龄为,%d,的人最大,n,age2);,内存,age1,age2,65,78,age3,int,get_age,(),int,age;,printf(n,请输入年龄:,);,scanf(%d,&age,);,return age;,请输入年龄:,65,请输入年龄:,78,请输入年龄:,54,年龄为,78,岁的人最大,54,20,总结,2-1,函数是程序中的一个相对独立的单元或模块,程序在需要时可以任意多次地调用函数来完成特定功能,使用函数带来的好处:程序更清晰、易维护、分模块方便设计与开发、提高代码的重用性,语言提供了极为丰富的内置函数,这些内置函数分门别类地放在不同的头文件中,要使用这些内置函数,只要在程序前包含相应的头文件即可,21,总结,2-2,自定义函数是用户在程序中根据需要而编写的函数,函数的结构包括:返回值类型、函数名、参数列表、函数体,函数原型说明以便向编译器指出该函数使用什么样的格式和语法,函数调用时程序控制流将转向被调函数,被调函数执行结束时,控制流返回主调函数,return,语句用于向调用函数返回值,22,
展开阅读全文