(17)--第07章C语言程序设计函数.ppt
《(17)--第07章C语言程序设计函数.ppt》由会员分享,可在线阅读,更多相关《(17)--第07章C语言程序设计函数.ppt(91页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 函数本章内容7.1求素数7.2俄罗斯方块的随机显示7.3汉诺塔7.4明文与密文7.5内部函数与外部函数本章学习目标掌握函数的定义方法熟悉函数声明的作用与方法掌握函数的调用方法掌握变量、函数的作用域和生命周期掌握函数调用时参数传递的特点掌握递归函数的定义和使用获得运用函数解决实际复杂问题的能力学习导引C语言的函数通常分为库函数与自定义函数C语言提供了丰富的库函数,但应用程序核心功能仍由自定义函数实现函数是程序的基本元素函数使程序的层次结构更清晰函数使程序更容易编写、阅读和调试7.1 求素数函数的引入、定义、参数、返回值、函数申明与调用7.1 求素数以方法3为例,以下代码可以打印10020
2、0之间的所有素数:for(k=100;k200;k=k+1)/*打印出100-200之间的素数*/m=(int)sqrt(k);/*求出k的平方根,再取其整数部分*/for(i=2;im)/*2m之间数都不是k的约数,则k是一个素数*/printf(%5d,k);例例7.17.1编程打印出100200,300600以内的所有素数。分析:打印300600中的素数求解法与100200中素数求解法本质上并无差别,只需要将外循环中k的初值与终值修改成对应值即可。所以,可以采用复制上述代码,修改循环初值与终值的方式来解决问题。这种方法有几个不足:代码完全复制,使得源文件变长,执行文件变得臃肿;复制代码后
3、要及时更换所使用的循环变量初值与终值,否则会出错。函数解决方案:观测这两段代码for(k=101;k200;k=k+1)for(i=2;i=m;i+)if(k%i=0)break;for(k=300;k600;k=k+1)100200将变化的两处地方用两个变量:start,end来代替,上述代码就可以改造成一个函数sectionPrime。void sectionPrime(int start,int end)int i,m,k;for(k=start;kend;k=k+1)/*打印出start-end之间的素数*/m=(int)sqrt(k);for(i=2;i m)printf(%5d,k
4、);printf(n);有了sectionPrime函数,主函数就变得更简单:int main()int i,m,k;sectionPrime(100,200);/*打印出300-600之间的素数*/sectionPrime(300,600);/*打印出300-600之间的素数*/return 0;源程序例例7.2 7.2 从键盘输入若干个大于1的正整数,输出其中的素数,输入负数时结束。分析:1.输入一个数number2.如果number0,退出3.如果number是素数,输出4.转到1.可以设计一个函数:isprime(intx)用来表示判断整数x是否为素数,如果x是素数,isprime(x
5、)的值为1,否则为0。则主函数可以表示如下:intmain()intnumber;intisprime(intx);/*函数声明*/printf(输入数据:n);while(1)。while(1)scanf(%d,&number);/*输入一个数number*/if(number0)/*输入的是负数时,退出*/return0;if(isprime(number)/*如果number是素数,输出*/printf(%3d是素数n,number);/*继续输入下一个数*/isprime函数怎么设计?怎么判断N是素数?所有比1大的整数中,除了1和它本身以外,没有别的约数,这种整数叫做质数或素数。int
6、isprime(intx)/*函数的定义*/inti;for(i=2;i1);/*如果x在2x的平方根之中没有约数,x1时,则x是素数*/*x小于等于1的时候,根据定义x不是素数*/源程序自定义函数:1.函数定义函数定义指明了一个函数的名字、函数的返回值类型、函数的参数列表和函数的功能代码所有函数定义都是平行的,在一个函数的函数体内,不能再定义另一个函数2.函数声明函数声明位于函数的调用之前指出一个函数的名称、函数的返回值类型、函数参数的类型函数的声明要与函数的定义相容函数的定义如果出现在函数的调用之前,则可以省去函数声明自定义函数:3.函数调用函数之间允许相互调用,也允许嵌套调用程序的执行总
7、是从main函数开始一个程序有且仅有一个主函数main7.1.1 函数的定义有参函数的定义有参函数定义的一般形式为:函数类型函数名(形式参数列表)声明部分;语句序列;7.1.1 函数的定义7.1.1 函数的定义无参函数的定义无参函数定义的一般形式为:函数类型函数名()声明部分;语句序列;无参函数的定义无参函数定义的一般形式为:函数类型函数名(void)声明部分;语句序列;例如:voidhello(void)printf(Hello,worldn);7.1.2函数的参数和函数的值形参和实参函数定义中的参数称为形参(又称形式参数)函数调用时填写的参数称为实参(又称实际参数)发生函数调用时,主调函数
8、把实参的值传送给被调函数的形参变量,从而实现主调函数向被调函数的数据传送。7.1.2函数的参数和函数的值函数的形参和实参具有以下特点:1.形参变量在每次函数被调用时分配存储空间,在调用结束时,由系统释放所分配的内存单元。2.实参都必须具有确定的值,以便把这些值传送给形参3.实参和形参的数量必须严格一致,对应位置的参数在数据类型上应兼容4.函数调用中发生的数据传送是单向的值传递例7.3形参与实参所占用的内存单元不同。#include void para_adress(int x)printf(形参x的地址:=0X%X;x=%dn,&x,x);int main()int i=10;printf(实
9、参i的地址:=0X%x;i=%dn,&i,i);para_adress(i);return 0;可能的运行结果:(运行结果与内存状态有关)实参i的地址:=0X12FF7C;i=10形参x的地址:=0X12FF2C;x=10运行结果表明:形参与实参所占内存是不一样的例7.4 验证实参到形参的单向值传递。源代码:主函数实参:n=5,sm=0子函数:实参送到形参 a=5,s=0子函执行后形参:a=5,s=15函数执行后主函数实参:n=5,sm=0运行结果表明:形参的改变不会引起实参发生改变,即形参到实参是单向值传递的2.函数的值函数的值只能通过return语句返回主调函数return表达式;或者为:
10、return(表达式);函数值的类型和函数定义时规定的函数类型应保持相容如果函数值为整型,在函数定义时可以省去函数类型说明无返回值的函数,必须明确定义为“空类型”,类型说明符为void7.1.3函数声明与函数调用1.函数声明先定义,后使用,这是C语言规则。函数在调用之前必须先对函数返回值数据类型、函数名和函数的参数个数与各个参数的类型进行说明,这就是函数声明(函数原型、函数说明)函数声明以分号结束函数声明可以不包含参数的名字,但必须包含所有参数的类型,用逗号分开2.函数调用函数调用形式:函数名(实际参数表)函数常用的方式:赋值表达式的右值:z=max(x,y);单独的函数语句:printf(%
11、d,a);函数作为实参:printf(%d,max(x,y);函数出现在条件表达式中:if(isprime(x)。例7.5函数作为赋值表达式的右值#include int main()int a,b,s;int sum(int a,int b);/*函数说明*/printf(请输入两个数据a b:n);scanf(%d%d,&a,&b);s=sum(a,b);printf(s=%dn,s);return 0;请输入两个数据a b:4 8 s=12运行结果:例7.6 函数作为单独的函数语句void menu()/*函数的定义*/printf(欢迎使用图书信息管理系统n);printf(1.录入学
12、生成绩n);printf(2.查询学生成绩n);printf(3.修改学生成绩n);printf(4.删除学生成绩n);printf(5.备份学生成绩n);printf(6.退出系统n);#include int main()void menu();/*函数声明*/menu();/*函数调用,函数语句*/return 0;7.2 俄罗斯方块的随机显示全局变量与局部变量、变量的存储类型例7.7俄罗斯方块的随机显示怎么表示俄罗斯方块?可以用一个2维数组来存放一个方块0,0,0,0,1,1,1,1表示:1,0,0,0,1,1,1,0表示:。那存放7种不同的俄罗斯方块需要用一个3维数组:intfk72
13、4=0,0,0,0,1,1,1,1,/*第1种图形*/1,0,0,0,1,1,1,0,/*第2种图形*/0,0,0,1,0,1,1,1,/*第3种图形*/1,1,0,0,1,1,0,0,/*第4种图形*/0,1,1,0,1,1,0,0,/*第5种图形*/0,1,0,0,1,1,1,0,/*第6种图形*/1,1,0,0,0,1,1,0,/*第7种图形*/;显示方块的函数设计:drawfk(int fkn)要显示编号为fkn的方块,只需要用两层循环显示fkfkn中的两行数据即可。void drawfk(int fkn)/*显示第fkn号方块图形*/int i,j;for(i=0;i2;i+)/*分
14、两行显示*/for(j=0;j4;j+)/*每行有4个位置*/if(fkfknij)/*该位置为1*/printf();else printf();printf(n);怎么实现随机显示?随机数与那些函数有关?srand函数函数srand(unsignedzz)通过无符号整数参数zz用于指定随机函数的种子。种子不同,随机函数产生的序列是不同的。rand函数函数rand()用来获得一个界于032767(0 x7FFF)之间的伪随机数,并通过函数值返回。怎么实现随机显示?随机数与那些函数有关?time函数函数time(time_t*timer)是获取或者设置当前的系统时间。当timer为NULL时,
15、表示获取当前系统时间。如果每次都用当前系统时间做随机种子,那么可以保证每次的随机序列是不同的。例7.7俄罗斯方块的随机显示int main()int fkn;/*方块号*/char choice;/*用户的按键*/srand(unsigned)time(NULL);/*初始化随机种子*/fkn=rand()%7;/*产生需要显示的方块序号*/do drawfk(fkn);/*显示方块*/choice=getch();/*等待用户按键*/fkn=rand()%7;/*重新产生需要显示的方块序号*/system(cls);/*在Visual C+表示清除字符界面的函数*/while(choice!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 17 07 语言程序设计 函数
限制150内