函数第指针讲稿.ppt
《函数第指针讲稿.ppt》由会员分享,可在线阅读,更多相关《函数第指针讲稿.ppt(111页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、函数第指针函数第指针第一页,讲稿共一百一十一页哦本学期内容本学期内容n函数与指针(模块化程序设计)函数与指针(模块化程序设计)n结构体(自定义数据类型)结构体(自定义数据类型)面向对象面向对象类类n文件(数据的持久化)文件(数据的持久化)n其他知识点:预处理、位运算其他知识点:预处理、位运算n综合项目综合项目“学生成绩管理系统学生成绩管理系统”第二页,讲稿共一百一十一页哦第7章 第8章函数 指针第三页,讲稿共一百一十一页哦本章知识要点本章知识要点n怎样定义函数?如何调用函数?如何声明函数?怎样定义函数?如何调用函数?如何声明函数?n什么是函数的参数?在函数调用时,参数是如何传递的?什么是函数的
2、参数?在函数调用时,参数是如何传递的?n值传递与地址传递的区别是什么?值传递与地址传递的区别是什么?n变量、内存单元和地址之间是什么关系?变量、内存单元和地址之间是什么关系?n什么是直接访问?什么是间接访问?什么是直接访问?什么是间接访问?n什么是指针变量?指针变量的基本运算有哪些?什么是指针变量?指针变量的基本运算有哪些?怎样才能使用怎样才能使用指针变量?指针变量?n指针作为函数参数的作用是什么?指针作为函数参数的作用是什么?n如何使用指针实现函数调用返回多个值?如何使用指针实现函数调用返回多个值?n如何利用指针实现对数组的访问?如何利用指针实现对数组的访问?第四页,讲稿共一百一十一页哦本章
3、技能要求本章技能要求n能够使用函数进行模块化程序设计能够使用函数进行模块化程序设计函数的定义、调用。函数的定义、调用。n能够使用指针,在函数调用时进行间接访问能够使用指针,在函数调用时进行间接访问使用指针访问单个变量使用指针访问单个变量使用指针访问数组使用指针访问数组第五页,讲稿共一百一十一页哦任务程序(设计子函数)任务程序(设计子函数)n1.计算圆柱体积(有返回值,有参数计算圆柱体积(有返回值,有参数的函数)的函数)n2.求组合数求组合数(函数的嵌套调用)(函数的嵌套调用)n3.五个人求年龄问题(函数的递归)五个人求年龄问题(函数的递归)n4.寻找保险箱密码寻找保险箱密码(指针的概念)(指针
4、的概念)n5.狸猫换太子狸猫换太子(指针做函数参数)(指针做函数参数)n6.对成绩的进行排序(数组名(指针)做函数对成绩的进行排序(数组名(指针)做函数参数)参数)n综合项目(综合项目(一一):用函数实现学生成绩的输入、):用函数实现学生成绩的输入、排序、插入、输出结果等功能。排序、插入、输出结果等功能。值传递值传递地址地址传递传递第六页,讲稿共一百一十一页哦7.1计算圆柱体积计算圆柱体积7.1.1程序解析程序解析7.1.2函数的定义函数的定义7.1.3函数的调用函数的调用第七页,讲稿共一百一十一页哦7.1.1程序解析计算圆柱体积程序解析计算圆柱体积例例7-1输入圆柱体的高和半径,求圆柱体积,
5、输入圆柱体的高和半径,求圆柱体积,volume=*r2*h。要求定义和调用函数要求定义和调用函数cylinder(r,h)计算圆计算圆柱体的体积。柱体的体积。第八页,讲稿共一百一十一页哦例例7-1源程序源程序/*计算圆柱体积计算圆柱体积*/#includevoidmain()doubleheight,radius,volume;doublecylinder(doubler,doubleh);/*函数声明函数声明*/printf(Enterradiusandheight:);scanf(%lf%lf,&radius,&height);/*调用函数调用函数,返回值赋给,返回值赋给volume*/v
6、olume=cylinder(radius,height);printf(Volume=%.3fn,volume);第九页,讲稿共一百一十一页哦例例7-1源程序源程序/*定义求圆柱体积的函数定义求圆柱体积的函数*/doublecylinder(doubler,doubleh)doubleresult;result=3.1415926*r*r*h;/*计算体积计算体积*/returnresult;/*返回结果返回结果*/Enterradiusandheight:3.010Volume=282.743第十页,讲稿共一百一十一页哦7.1.2函数的定义函数的定义n函数是指完成一个特定工作的独立程序模块
7、。函数是指完成一个特定工作的独立程序模块。库函数:由库函数:由C语言系统提供定义语言系统提供定义如如scanf()、()、printf()等函数()等函数自定义函数:需要用户自己定义自定义函数:需要用户自己定义如计算圆柱体体积函数如计算圆柱体体积函数cylinder()()nmain()也也是是一一个个函函数数,C程程序序由由一一个个main()或或多多个个函函数数构构成。成。n程程序序中中一一旦旦调调用用了了某某个个函函数数,该该函函数数就就会会完完成成一一些些特特定定的的工作,然后返回到调用它的地方。工作,然后返回到调用它的地方。函函数数经经过过运运算算,得得到到一一个个明明确确的的运运算
8、算结结果果,并并需需要要回回送送该该结结果果。例例如,函数如,函数cylinder()返回圆柱的体积。返回圆柱的体积。函数完成一系列操作步骤,不需要回送任何运算结果。函数完成一系列操作步骤,不需要回送任何运算结果。第十一页,讲稿共一百一十一页哦1返回运算结果返回运算结果的函数定义的函数定义函数类型函数类型函数名(形参表)函数名(形参表)/*函数首部函数首部*/*函数体函数体*/函数实现过程函数实现过程return表达式;表达式;把函数运算的结果回送给主函数把函数运算的结果回送给主函数只能返回一个值只能返回一个值函数返回值的类型函数返回值的类型没有分号doublecylinder(doubler
9、,doubleh)doubleresult;result=3.1415926*r*r*h;returnresult;第十二页,讲稿共一百一十一页哦形参形参类型类型1参数参数1,类型,类型2参数参数2,类型,类型n参数参数n参数之间用逗号分隔,每个参数前面的类型都必须分别写明参数之间用逗号分隔,每个参数前面的类型都必须分别写明函数类型函数类型函数名(形参表)函数名(形参表)函数实现过程函数实现过程return表达式;表达式;不能写成不能写成doubler,hdoublecylinder(doubler,doubleh)doubleresult;result=3.1415926*r*r*h;ret
10、urnresult;第十三页,讲稿共一百一十一页哦doublecylinder(doubler,doubleh)/*函数首部函数首部*/*函数体函数体,写在一对大括号内,写在一对大括号内*/doubleresult;result=3.1415926*r*r*h;/*计算圆柱体积计算圆柱体积*/returnresult;/*返回运算结果返回运算结果*/分析函数的定义分析函数的定义函数类型函数类型函数名函数名形参表形参表与函数类型一致与函数类型一致第十四页,讲稿共一百一十一页哦2不返回运算结不返回运算结果的函数定义果的函数定义void函数名(参数表)函数名(参数表)/*函数首部函数首部*/*函数体
11、函数体*/函数实现过程函数实现过程return;/*可以省略可以省略return*/这类函数通常用于屏幕输出等这类函数通常用于屏幕输出等表示不返回结果表示不返回结果不能省略不能省略否则否则函数类型被默认定义为函数类型被默认定义为int第十五页,讲稿共一百一十一页哦例例7-2输出输出5之内的数字金字塔。之内的数字金字塔。/*输出数字金字塔输出数字金字塔*/#includeintmain(void)voidpyramid(intn);/*函数声明函数声明*/pyramid(5);/*调用函数,输出数字金字塔调用函数,输出数字金字塔*/return0;voidpyramid(intn)/*函数定义函
12、数定义*/inti,j;for(i=1;i=n;i+)/*需要输出的行数需要输出的行数*/for(j=1;j=n-i;j+)/*输出每行左边的空格输出每行左边的空格*/printf();for(j=1;j=i;j+)/*输出每行的数字输出每行的数字*/printf(%d,i);/*每个数字的前后各有一个空格每个数字的前后各有一个空格*/putchar(n);122333444455555 第十六页,讲稿共一百一十一页哦7.1.3函数的调用函数的调用n定义一个函数后,就可以在程序中调用这个定义一个函数后,就可以在程序中调用这个函数。函数。n调用标准库函数时,在程序的最前面用调用标准库函数时,在程
13、序的最前面用#include命令包含相应的头文件。命令包含相应的头文件。n调用自定义函数时,程序中必须有与调用函调用自定义函数时,程序中必须有与调用函数相对应的函数定义。数相对应的函数定义。第十七页,讲稿共一百一十一页哦1函数调用的形式和过程函数调用的形式和过程n使用返回值:使用返回值:volume=cylinder(radius,height);printf(“%fn”,cylinder(radius,height);n完成操作:完成操作:pyramid(5);常用于常用于voidvoid类型函数的调用类型函数的调用常用于返回结果的函数的调用常用于返回结果的函数的调用常量、变量、表达式常量、
14、变量、表达式函数名函数名(实参表实参表)第十八页,讲稿共一百一十一页哦函数调用的过程函数调用的过程n计计算算机机在在执执行行程程序序时时,从从主主函函数数main开开始始执执行行,如如果果遇遇到到某某个个函函数数调调用用,主主函函数数被被暂暂停停执执行行,转转而而执执行行相相应应的的函函数数,该该函函数数执执行行完完后后,将将返返回回主主函函数数,然然后后再再从从原原先先暂停的位置继续执行。暂停的位置继续执行。n函数遇函数遇return或最后的大括号,返回主函数或最后的大括号,返回主函数第十九页,讲稿共一百一十一页哦分析函数调用的过程分析函数调用的过程#includeintmain(void)
15、doubleheight,radius,volume;doublecylinder(doubler,doubleh);printf(Enterradiusandheight:);scanf(%lf%lf,&radius,&height);volume=cylinder(radius,height);printf(Volume=%.3fn,volume);return0;doublecylinder(doubler,doubleh)doubleresult;result=3.1415926*r*r*h;returnresult;调用调用函数函数实参实参形参形参执行函数中的语句执行函数中的语句返回
16、调用它的地方返回调用它的地方第二十页,讲稿共一百一十一页哦2参数传递参数传递n函数函数定义定义时的参数被称为时的参数被称为形式参数形式参数(简称(简称形参形参)doublecylinder(doubler,doubleh);n函数函数调用调用时的参数被称为时的参数被称为实际参数实际参数(简称(简称实参实参)volume=cylinder(radius,height);n实参实参形参形参在参数传递过程中,实参把值复制给形参,与位置有关,与名字无关。在参数传递过程中,实参把值复制给形参,与位置有关,与名字无关。形参和实参形参和实参一一对应一一对应:数量一致,类型一致,顺序一致:数量一致,类型一致,
17、顺序一致形参形参:变量,用于接受实参传递过来的值:变量,用于接受实参传递过来的值实参实参:常量、变量或表达式:常量、变量或表达式n存储单元存储单元在内存中,实参单元与形参单元是不同的单元。在内存中,实参单元与形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参调用结束后,形参单元被释放,实参单元仍保留并维持原值。调用结束后,形参单元被释放,实参单元仍保留并维持原值。单向传递,只由实参传给形参,而单向传递,只由实参传给形参,而不能由形参传回来给实参不能由形参传回来给实参第二十一页,讲稿共一百一十一页哦3函数
18、结果返回函数结果返回n函数返回的两种情况函数返回的两种情况完完成成确确定定的的运运算算,有有一一个个运运算算结结果果返返回回给给主主调调函数。函数。完完成成指指定定工工作作,没没有有确确定定的的运运算算结结果果需需返返回回给给主调函数(函数类型主调函数(函数类型void)。)。n函数结果返回的形式:函数结果返回的形式:return表达式;表达式;return(表达式表达式);第二十二页,讲稿共一百一十一页哦【例【例7-3】定义判断奇偶数的函数】定义判断奇偶数的函数even(n)定义一个判断奇偶数的函数定义一个判断奇偶数的函数even(n),当,当n为偶数时返回为偶数时返回1,否则返回,否则返回
19、0。/*判断奇偶数的函数判断奇偶数的函数*/inteven(intn)/*函数首部函数首部*/if(n%2=0)/*判别奇偶数判别奇偶数*/return1;/*偶数返回偶数返回1*/elsereturn0;/*奇数返回奇数返回0*/如何调用该如何调用该函数?函数?第二十三页,讲稿共一百一十一页哦4函数原型声明函数原型声明函数类型函数类型 函数名函数名(参数表参数表);doublecylinder(doubler,doubleh);voidpyramid(intn);n函数必须先定义后调用,将主调函数放在被调函数的后函数必须先定义后调用,将主调函数放在被调函数的后面,就像变量先定义后使用一样。面
20、,就像变量先定义后使用一样。n如果自定义函数在主调函数的后面,就需要在函数调用如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数原型声明。前,加上函数原型声明。n函数声明:说明函数的类型和参数的情况,以保证函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。程序编译时能判断对该函数的调用是否正确。只写函数定义中的第只写函数定义中的第1 1行(函数首部),并以分号结束。行(函数首部),并以分号结束。第二十四页,讲稿共一百一十一页哦#includeintmain(void)doubleheight,radius,volume;doublecylinder(
21、doubler,doubleh);printf(Enterradiusandheight:);scanf(%lf%lf,&radius,&height);volume=cylinder(radius,height);printf(Volume=%.3fn,volume);return0;doublecylinder(doubler,doubleh)doubleresult;result=3.1415926*r*r*h;returnresult;第二十五页,讲稿共一百一十一页哦练习练习n1.在屏幕上打印五行在屏幕上打印五行*号,每行分别为号,每行分别为5个,个,30个,个,10个个,28个,个,
22、16个个n2.比较两个整数,输出大者。调用两次函数,比较两个整数,输出大者。调用两次函数,求求3个数的大者。改写函数求三个数的大者个数的大者。改写函数求三个数的大者第二十六页,讲稿共一百一十一页哦写出下列函数的函数首部写出下列函数的函数首部n求求n!n求求xyn求(求(1+2+n)n求(求(m+n)n求最大公约数,最小公倍数求最大公约数,最小公倍数第二十七页,讲稿共一百一十一页哦7.2求组合数求组合数8.2.1分析分析8.2.2函数的定义函数的定义8.2.3函数的嵌套调用函数的嵌套调用1.输入输入m,n2.求求3个阶乘个阶乘3.计算计算4.输出结果输出结果第二十八页,讲稿共一百一十一页哦求求N
23、!#includevoidmain()longfac(intn);intn;longy;printf(“n=);scanf(%d,&n);y=fac(n);printf(“%d!=%15ldn,n,y);long fac(int n)long f=1;int i;for (i=1;i=n;i+)f=f*i;return f;第二十九页,讲稿共一百一十一页哦求求N!#includevoidmain()longfac(intn);longCmn(intm,intn);intn,m;longy;printf(“m=);scanf(%d,&m);printf(“n=);scanf(%d,&n);y=C
24、mn(m,n);printf(“Cmn=%15ldn,y);long fac(int n)long f=1;int i;for (i=1;i1)第三十四页,讲稿共一百一十一页哦用一个函数来描述上述递归过程:用一个函数来描述上述递归过程:int age(int)*求年龄的递归函数求年龄的递归函数*int;if(n=1)c=10;else c=age(n-1)+2;return(c););用一个主函数调用用一个主函数调用age函数,求得第函数,求得第5人的年龄。人的年龄。#include void main()printf(“%d”,age(5);运行结果如下:运行结果如下:第三十五页,讲稿共一百
25、一十一页哦例例7.8 用递归方法求!用递归方法求!=!。!(,)(,)!()!()!()()#inchudelongfac(intn)longf;if(n=0|n=1)f=1;elsef=fac(n-1)*n;returnf;第三十六页,讲稿共一百一十一页哦例例7.9 hanoi7.9 hanoi(汉诺)塔问题。这是一个古典的数学问题,是一个用递归(汉诺)塔问题。这是一个古典的数学问题,是一个用递归方法解题的典型例子。方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有问题是这样的:古代有一个梵塔,塔内有3 3个座个座A A、B B、C C,开始时,开始时座上有个盘子,盘子大小不等,大的在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 指针 讲稿
限制150内