C语言程序设计实例教程课件7

PPT
  • 阅读 58 次
  • 下载 0 次
  • 页数 34 页
  • 大小 178.500 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
C语言程序设计实例教程课件7
可在后台配置第一页与第二页中间广告代码
C语言程序设计实例教程课件7
可在后台配置第二页与第三页中间广告代码
C语言程序设计实例教程课件7
可在后台配置第三页与第四页中间广告代码
C语言程序设计实例教程课件7
C语言程序设计实例教程课件7
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 34
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】C语言程序设计实例教程课件7.ppt,共(34)页,178.500 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44537.html

以下为本文档部分文字说明:

第7章函数•7.1模块化程序设计的概念•7.2库函数•7.3函数的定义和调用•7.4函数的返回值及其类型•7.5函数调用时参数间的传递•7.6函数的嵌套调用•7.7函数的递归调用•7.8局部变量和全局变量•7.9静态存储变量和动态存储变量•7.10内部函数和外部

函数•7.11程序举例7.1模块化程序设计的概念模块化程序设计,是将一个大型程序按照其功能分解成若干个相对独立的功能模块,然后再分别进行设计,最后把这些功能模块按照层次关系进行组装。基本思想是“自顶向下、逐步求精”。C语言程序是一个函数式

的程序结构,即C语言程序的全部功能都是由函数实现的,而每个函数对应一个独立的模块,通过函数间调用来实现程序的总体功能。如图7.1所示,是一个程序中函数调用示意图。在C语言中,函数分为主函数、库函数、用户自定义

函数三种。程序的执行由主函数开始,然后调用其它函数,最终返回主函数结束。main函数a函数b函数c函数d函数e函数图7.1函数调用示意图7.2库函数C语言提供了丰富的标准函数,即库函数。7.2.1C语言常用库函数1)数学函数调用数学库函数时,要求程序在调用数学库函数前应包含下面的头文件:#i

nclude"ma2)字符函数和字符串函数调用字符函数时,要求程序在调用字符函数前应包含下面的头文件:#include"ctype.h"调用字符串函数时,要求在源文件中应包含下面的头文件:#include"string.h"3)输入输出函数调用输入输出函数时,要求在源文件中应包含下面的

头文件:#include"stdio.h"4)动态分配函数和随机函数调用动态分配函数和随机函数时,要求在源文件中应包含下面的头文件:#include"stdlib.h"7.2.2标准库函数的调用前面讲到,调用C语言标准库函数时必须在源程序中用include

命令。include命令的格式是:#include<头文件名>或#include"头文件名"7.3函数的定义和调用由用户编写的函数称为自定义函数。7.3.1函数的定义函数定义的一般格式如下:类型说明符函数名(类型名形式参数1,类型名形式参数2

,…)/*函数的首部*/{说明部分/*函数体*/语句部分}7.3.2函数的调用1.函数调用的一般形式函数调用的一般形式为:函数名([实参表]);如果是调用无参函数,则[实参表]可以没有,但括号不能省略。如果实参表列包含

多个实参,则各实参间用逗号隔开。实参与形参的个数应相等,类型应一致。实参与形参按顺序对应,一一传递数据。2.函数调用的方式按函数在程序中出现的位置来分,有3种函数调用方式。1)函数语句函数语句的调用,是指把被调函数作为一个独立的语句直接出

现在主调函数中。2)函数表达式被调函数出现在主调函数中的表达式中,这种表达式称为函数表达式。在被调函数中,必须有一个函数返回值,返回主调函数以参加表达式的运算。3)函数参数函数参数的调用,是指被调函数作为另一个函数的参数时的调用,而另一个函数则是

被调函数的主调函数。嵌套调用,如图7.2所示。main函数printf函数max函数图7.2函数嵌套调用3.调用函数时的注意事项调用函数时,应注意以下几点:(1)被调函数必须是已存在的函数,可以是自定义函数,也

可以是库函数。(2)在主调函数中,要对被调函数先做声明。(3)如果被调函数的返回值为int类型,则不管被调函数位置如何均不需要在主调函数中说明。关于函数声明的一般形式为:函数类型函数名(参数类型1,参数类型2…);或函数类型函数名(

参数类型1,参数名1,参数类型2,参数名2…);(4)如果被调用函数的声明放在源文件的开头,则该声明对整个源文件都有效。(5)如果被调用函数的声明是在调用函数定义的内部,则该声明仅对该调用函数有效。(6)在函数调用中,有下面几种情况可以省略声明:a.如果调用函数和被调用函数是在同一个源文件

中,而且被调用函数的定义是在调用函数之前。b.函数的返回值是整数或字符。c.所有被调用函数的声明都是在源文件开头。d.如果被调用函数不是在源文件开头,而是在源文件中间且在所有函数之外某处被声明时,则在被声明之后引用它时,不必再声明,但在被声明

之前引用它时,需要对其进行声明。(7)如果调用函数和被调用函数的定义是在同一源文件中,应该先说明或定义被调用函数。7.4函数的返回值及其类型函数的返回值通过函数体内的return语句实现。return语句的格式如下:return表达式;

或return(表达式);如果没有返回值,格式中的左、右圆括号可以省略,即写为:return;7.5函数调用时参数间的传递函数之间的联系,是通过调用函数时参数的传递及函数值的返回。在定义函数时,函数名后面圆括号内的参数称形式参数。调用函数时,函数名后面圆括号内的参数为实参。7.5.1变量、常

量、数组元素作为函数参数在函数调用时,使用变量、常量或数组元素作为函数参数时,将实参的值复制到形参相应的存储单元中,即形参和实参分别占用不同存储单元,这种传递方式称为“值传递”。值传递的特点是单向传递,即只能把实参的值传递给形

参,而形参值的任何变化都不会影响实参。7.5.2数组名作为函数参数数组名作为函数参数时,不是值的单向传递,而是把实参数组的首地址传给形参数组,这个两个数组共用一段存储单元,即实参数组名和形参数组名共同指向数组的第一个元素。7.6函数的嵌套调用C语言中的函数定义是互相独立的,函数和

函数之间没有从属关系,一个函数既可以被其它函数调用,同时它也可以调用别的函数,这就是函数的嵌套调用。fun1main返回printffun2返回调用调用调用结束图7.4函数嵌套调用过程7.7函数的递归调用所谓递归,就是自己

调用自己。函数的递归调用有两种形式:(1)直接递归调用,即一个函数可直接调用该函数本身。(2)间接递归调用,即一个函数可间接地调用该函数本身。7.8局部变量和全局变量7.8.1局部变量在一个函数内定义的变量

称为内部变量,它只在本函数内有效,而在其它函数内不能使用,故这些变量又称为局部变量。7.8.2全局变量在函数外部定义的变量称为外部变量,外部变量是全局变量。全局变量的作用范围为:从定义全局变量位置开始到源程序结束。全局变量

可以在其作用范围内由其它函数所共用。7.9静态存储变量和动态存储变量变量从变量值存在的时间(即时域,亦称生存期)角度来分,可分为静态存储变量和动态存储变量。7.9.1静态存储变量所谓静态存储变量是指在程序运行期间分配固定的

存储空间的变量。静态存储变量的定义格式为:static数据类型名变量名[=初始化常数表达式]7.9.2动态存储变量所谓动态存储变量是在程序运行期间根据需要进行动态的分配存储变量,它是在程序执行的某一时刻被动态建

立,在另一时刻被动态撤消的一种变量。动态存储变量有两种:自动(auto)变量和寄存器(register)变量。1.自动变量自动变量说明的一般格为:[auto]类型名变量名[=初始表达式],…auto为自动变量存储

类别标识符,[auto]可省略,系统默认为auto。以前函数中所定义的变量大都是auto变量。2.寄存器变量所谓寄存器变量,是指将变量的值保留在CPU(中央处理器)的寄存器内,它不占用内存单元。程序运行时,可以直接访问寄存器内的数据,其速度比访问内存的数据快得多。register类型标识符号变量名

7.10内部函数和外部函数根据函数的使用范围,可分为内部函数和外部函数。7.10.1内部函数在定义函数的前面使用static关键字,此函数称内部函数。7.10.2外部函数在定义函数的前面加extern关键字,此函数称为外部函数。如:externintfun(a,b)7.11程

序举例【例7-16】编写函数,要求统计输入文本中单词的个数,单词之间用空格符、换行符、跳格符隔开。程序如下:#include"stdio.h“#defineIN1/*标志一个单词的内部*/#defineOUT0/*标志一个

单词的外部*/main(){intn;n=countword();printf("n=%d\n",n);}countword(){intc,nw,state;state=OUT;nw=0;while((c=getchar())

!=EOF){if(c==‘’||c==‘\n’||c==‘\t’)state=OUT;/*在一个单词的外部*/elseif(state==OUT)/*如果遇到单词的第一个字符*/{state=IN;/*状

态变量置成IN,在单词的内部*/nw++;/*单词个数增1*/}}returnnw;}说明:(1)当状态变量state标志为:在单词内部且读入的字符不是分隔符时,表示c仍是单词的一部分,因此不作任何操作;如果读入的字符是分隔符,表示一个单词已结束,准备统计下一个单词。(2)在whi

le循环中,用EOF作为循环结束的标志,EOF是在stdio.h文件中定义了的预定义符,在TurboC的环境下,输入﹤Ctrl﹥+﹤Z﹥后,回车,即输入了EOF。【例7-17】从键盘输入一较大正整数n(n>=6),并验证从6到n之间的所有偶数都可以分解为两个素数之和的形

式。程序如下:#include"stdio.h"#include"math.h"intprime(intm){inti,k;k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)return(0);elsereturn(1);}main(){

intn,a,b,limit;while(1){printf("\nInputanumber>=6:");scanf("%d",&limit);if(limit>=6)break;}for(n=6;n<=li

mit;n+=2)for(a=3;a<=n/2;a+=2)if(prime(a)){b=n–a;if(prime(b)){printf("%d=%d+%d\n",n,a,b);break;}}}说明:(1)prime(m)函数是用于验证m是不是素数的函数。当其返回值为0时,说明m不是素数

;当其返回值为1时,说明m是素数。(2)main()函数中有一个双层循环,第一层循环的循环变量n是一个从开始到limit为止的连续偶数,此程序的主要功能就是判断这些偶数是否都能表示成两个素数之和的形式;第二层循环

的主要目的是寻找a、b(b=n-a)两个素数之和,以使n=a+b成立。由于除此之外,其它素数都是奇数,因而a、b始终取奇数。(3)由此程序不难看出,如果一个偶数能够表示为一组以上的素数之和,则只取一个素数最小、另一个素数最大的一组。

【例7-18】输入100个整型数,并把其中的最大值和最小值显示出来。程序如下:#include"stdio.h"intmax,min;voidfind(inta[],intn){inti;max=a[0];min=a[0];for(i=1;i<n;i++){if(a[i]>max)max=a

[i];if(a[i]<min)min=a[i];}}main(){intdata[10],i;for(i=0;i<10;i++)scanf("%d",&data[i]);find(data,10);printf("max=%d,mim=%d\n"

,max,min);}说明:find函数将查找到的最大值和最小值分别存放在全局变量max和min中,并通过max和min传递给main()函数。由此可见,利用全局变量可以在函数之间进行多个数据的传递。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?