函数与模块化程序设计基础课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《函数与模块化程序设计基础课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 模块化 程序设计 基础 课件
- 资源描述:
-
1、6.1 6.1 概述概述6.2 6.2 函数的定义函数的定义6.3 6.3 函数的调用函数的调用6.4 6.4 变量的作用域与存储特性变量的作用域与存储特性啄木鸟啄木鸟 制作制作 6.1 6.1 概述概述6.1 6.1 概述概述一一.模块与函数模块与函数1.结构化程序设计 C语言是结构化的程序设计语言。一种设计程序的技术。通常采用自顶向下逐步求精的设计方法和单入口单出口控制结构。2.“自顶向下”的模块化程序设计方法将一个大问题按层次分解成多个方便解决小问题的模块的设计思想.啄木鸟啄木鸟 制作制作3.功能模块 求解较小问题的算法和程序称作“功能模块”,各功能模块可以先单独设计,然后将求解所有子问
2、题的模块组合成求解原问题的程序。主控模块主控模块模块模块1_1模块模块1_n模块模块2_1模块模块2_n模块模块n_1模块模块n_n模块模块1模块模块2模块模块n由功能模块组成程序的结构图 6.1 6.1 概述概述啄木鸟啄木鸟 制作制作4.函数:完成相对独立功能的程序例6-1,输入年月日,计算出该日为该年的第几天。分析:(1)判断年份是否为闰年。年份有闰年与平年之分,两者的区别在于闰年的二月为29天,平年的二月为28天。因此,给定一个年份,首先应确定其是否是闰年。(2)求月份对应的天数。月份不同,其对应的天数不同,1、3、5、7、8、10、12月每月为31天,4、6、9、11月每月为30天,2
3、月根据所在年份是否为闰年来确定。(3)求总天数。分为经历完整的月份天数与经历不完整的月份天数。(4)输出数据。年月日及相应的天数。6.1 6.1 概述概述啄木鸟啄木鸟 制作制作程序实现:(1)判断闰年。int leap(int year)int lp;lp=(year%4=0&year%100!=0|year%400=0)?1:0;return lp;主控模块主控模块判断闰年判断闰年求某月的天数求某月的天数输输 出出输输 入入求总天数求总天数程序模块结构图程序模块结构图 6.1 6.1 概述概述啄木鸟啄木鸟 制作制作(2)求某月的天数。/*函数month_days调用函数leap判断year是
4、否为闰年*/int month_days(int year,int month)int ds,d;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:d=31;break;case 2:d=leap(year)?29:28;break;/*若为闰年,d赋值29,否则赋值28*/default:d=30;return d;6.1 6.1 概述概述啄木鸟啄木鸟 制作制作(3)求天数和。/*函数days调用函数month_days,求各月份对应的天数*/int days(int year,int month,int day)
5、int i,ds=0;for(i=1;i0?1:(x=0?0:-1);return y;/*返回函数值返回函数值*/6.2 6.2 函数的定义函数的定义啄木鸟啄木鸟 制作制作(3)return语句的表示形式如下:语句的表示形式如下:return 表达式;表达式;或或 return(表达式);表达式);符号函数的另一种定义形式:符号函数的另一种定义形式:int sign(int x)/*形式参数类型说明与参数列表与函数名一起说明形式参数类型说明与参数列表与函数名一起说明*/return y=x0?1:(x=0?0:-1);/*返回一个复杂的表达式的值返回一个复杂的表达式的值*/当函数类型为当函数
6、类型为float型并且型并且return语句缺省时,调用出错。语句缺省时,调用出错。当函数类型为当函数类型为int型并且型并且return语句的表达式缺省或语句的表达式缺省或return语句缺省时,返回不确定的值(在语句缺省时,返回不确定的值(在TC2中返回值为中返回值为0)6.2 6.2 函数的定义函数的定义啄木鸟啄木鸟 制作制作例例6-3:写出以下程序的运行结果。:写出以下程序的运行结果。max()/*函数类型缺省,为函数类型缺省,为int型,型,return语句缺省语句缺省*/min()/*函数类型缺省,函数类型缺省,return语句缺省表达式语句缺省表达式*/return;main()
7、printf(%d,%dn,max(),min()););程序运行结果为:程序运行结果为:-256,-256 /*返回值不确定,返回值不确定,TC2开发环境中返回值为开发环境中返回值为0*/若函数若函数max与函数与函数min的类型为的类型为float,则返回值为:则返回值为:Floating point error:Domain.Abnormal program termination 6.2 6.2 函数的定义函数的定义啄木鸟啄木鸟 制作制作在具有多个函数的在具有多个函数的C程序中,主函数出现的位置并不重程序中,主函数出现的位置并不重要。为阅读方便,可将主函数要。为阅读方便,可将主函数ma
8、in放在最前面。为了避免放在最前面。为了避免过多的函数声明语句,习惯上将主函数放在所有函数之后。过多的函数声明语句,习惯上将主函数放在所有函数之后。不论主函数放在什么位置,一旦启动该程序,总是从主函不论主函数放在什么位置,一旦启动该程序,总是从主函数开始执行,并且最终在主函数结束整个程序的执行。数开始执行,并且最终在主函数结束整个程序的执行。3.函数函数main一个一个C语言程序至少包含一个函数,并且必须有且只能有语言程序至少包含一个函数,并且必须有且只能有一个名为一个名为main的函数,称之为主函数。的函数,称之为主函数。在包含多个函数的程序中,不仅可以由主函数调用其它函在包含多个函数的程序
9、中,不仅可以由主函数调用其它函数,还可以由被调函数调用其它函数,但任何函数都不能调数,还可以由被调函数调用其它函数,但任何函数都不能调用主函数。用主函数。通常主函数的类型定义为通常主函数的类型定义为void(在在TC2中可省略函数中可省略函数main的类型说明)。的类型说明)。6.2 6.2 函数的定义函数的定义啄木鸟啄木鸟 制作制作6.3 函数的调用函数的调用在在C语言的一般函数体中,可以包含对其它函数的调用,语言的一般函数体中,可以包含对其它函数的调用,称为函数的嵌套调用,甚至包含对自身的调用,称为函数的称为函数的嵌套调用,甚至包含对自身的调用,称为函数的递归调用。递归调用。一个函数一旦被
10、定义,就可在程序的其它函数中使用它,这一个函数一旦被定义,就可在程序的其它函数中使用它,这个过程称为函数调用。个过程称为函数调用。一一.函数的一般调用与声明函数的一般调用与声明函数名函数名(实际参数列表)实际参数列表)1.函数调用形式函数调用形式函数调用的一般形式:函数调用的一般形式:6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作实际参数也称为实在参数,简称为实参,实际参数之间以实际参数也称为实在参数,简称为实参,实际参数之间以“,”分隔。分隔。函数调用时,实参与形参应保持个数、次序及类型的一致性,函数调用时,实参与形参应保持个数、次序及类型的一致性,以确保实参与形参之间数据的正确
11、传递。以确保实参与形参之间数据的正确传递。实际参数一般为表达式,可以是常量、变量(调用时必须有实际参数一般为表达式,可以是常量、变量(调用时必须有确定的值或确定的地址)。确定的值或确定的地址)。形式参数必须为变量。形式参数必须为变量。当实际参数的个数、次序、类型与对应形式参数的个数、次当实际参数的个数、次序、类型与对应形式参数的个数、次序、类型不一致时,系统并不提示错误,后果却难以预测。序、类型不一致时,系统并不提示错误,后果却难以预测。注意注意 6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作C语言中函数调用的三种形式语言中函数调用的三种形式:函数语句调用函数语句调用函数表达式调用
12、函数表达式调用函数参数调用函数参数调用在函数调用后加在函数调用后加“;”,构成一个语句。,构成一个语句。调用函数的目的可能是执行一个动作或调用函数的目的可能是执行一个动作或完成特定的功能。完成特定的功能。大多数函数的调用形式。大多数函数的调用形式。被调用函数执行的结果为调用函数提供被调用函数执行的结果为调用函数提供一个值,除非一个函数的类型说明为一个值,除非一个函数的类型说明为void型。型。调用函数通过表达式接收值。调用函数通过表达式接收值。被调函数作为某个函数的一个参数。被调函数作为某个函数的一个参数。6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作例例6-4,函数语句调用与函数
13、表达式调用。函数语句调用与函数表达式调用。#include void main()()printf(nk1=%d,printf(n%k2););程序运行结果为:程序运行结果为:k2k1=3 6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作void main()/*主函数中采用函数参数调用形式调用函数主函数中采用函数参数调用形式调用函数max2*/int x,y,z,m;scanf(%d,%d,%d,&x,&y,&z);printf(max=%dn,max2(max2(x,y),z);/*内层函数内层函数max2的值作为外层函数的值作为外层函数max2的实参,整个函数的实参,整个函数m
14、ax2的值的值又作函数又作函数printf的的实参的的实参*/例例6-5:函数参数调用形式调用函数:函数参数调用形式调用函数max2:int max2(int a,int b)/*求两个数中较大者求两个数中较大者*/int y;y=(ab)?a:b;return y;6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作2.函数声明函数声明调用用户自定义函数时,一般调用函数和被调用函数应在同调用用户自定义函数时,一般调用函数和被调用函数应在同一个文件中,在调用函数中对被调用函数返回值的类型、函数一个文件中,在调用函数中对被调用函数返回值的类型、函数名称、函数形式参数的类型进行说明,这种说明
15、称为函数声明。名称、函数形式参数的类型进行说明,这种说明称为函数声明。函数声明的一般形式如下:函数声明的一般形式如下:类型名类型名 函数名(类型函数名(类型1 形参形参1,类型,类型2 形参形参2,类型,类型n 形参形参n););或或类型名类型名 函数名(类型函数名(类型1,类型,类型2,类型,类型n););或或类型名类型名 函数名();函数名();函数声明是以语句形式出现的,因此其后有语句结束标记函数声明是以语句形式出现的,因此其后有语句结束标记“;”。若函数定义放在主调函数之前,遵循先定义后调用原则若函数定义放在主调函数之前,遵循先定义后调用原则,函数函数声明可以省略。声明可以省略。6.3
16、 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作例例6-6:编程求两个整数的阶乘之和。编程求两个整数的阶乘之和。long fac(n)/*定义函数定义函数fac,其功能是求其功能是求n!*/int n;int i;long r=1;/*注意注意r的初始化值为的初始化值为1*/for(i=1;i=n;i+)r=r*i;return r;#include void main()int m1,m2;long result;long fac(int);/*在主函数中声明后面定义的函数在主函数中声明后面定义的函数fac*/scanf(%d,%d,&m1,&m2);result=fac(m1)+fac
17、(m2);printf(%d!+%d!=%ldn,m1,m2,result);6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作二二.形参与实参形参与实参形式参数形式参数(简称形参简称形参)定义函数使用的参数定义函数使用的参数实际参数实际参数(简称实参简称实参)调用函数使用的参数调用函数使用的参数C语言中,采用函数之间的参数传递方式或用全局变量共享数语言中,采用函数之间的参数传递方式或用全局变量共享数据方式,使一个函数能对不同的数据进行相同功能的处理。据方式,使一个函数能对不同的数据进行相同功能的处理。C语言函数的参数传递均采用单向值传递方式(或称复制方式)。语言函数的参数传递均采用单
18、向值传递方式(或称复制方式)。单向值传递方式是指在函数调用时,将实参之值传递给对应单向值传递方式是指在函数调用时,将实参之值传递给对应的形式参数,使形参具有与实参相同的值。的形式参数,使形参具有与实参相同的值。当实际参数是变量的地址值、指针常量或指针变量时,实际当实际参数是变量的地址值、指针常量或指针变量时,实际参数传递给形式参数的是地址值,也同样是单向值传递方式。参数传递给形式参数的是地址值,也同样是单向值传递方式。6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作例例6-76-7,求方程,求方程ax2+bx+c=0(a 0)的实数根。的实数根。分析:分析:(1)一元二次方程的实根的
19、条件是:)一元二次方程的实根的条件是:。(2)定义函数)定义函数dict来判断数方程是否有实根,有实根则返回函来判断数方程是否有实根,有实根则返回函数值数值1,否则返回函数值,否则返回函数值0;然后在主函数中求方程的实根。;然后在主函数中求方程的实根。240bac#include#include void main()float a,b,c,x1,x2,d,dt;int dict(float,float,float);/*声明函数声明函数dict及形式参数类型及形式参数类型*/printf(Input a,b,c:);scanf(%f,%f,%f,&a,&b,&c);/*输入方程输入方程*/d
20、=dict(a,b,c);/*调用函数调用函数dict,传递实参传递实参a,b,c*/dt=b*b-4*a*c;/*,可以用一个函数实现可以用一个函数实现*/24bac 6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作if(d)x1=(-b+sqrt(dt)/(2*a););x2=(-b-sqrt(dt)/(2*a););printf(实根实根x1=%f,x2=%fn,x1,x2);else printf(无实数根无实数根!n););int dict(a,b,c)/*定义函数定义函数dict及形参说明及形参说明*/float a,b,c;float d;d=b*b-4*a*c;/*可
21、以用一个函数实现可以用一个函数实现*/if(d=0)return(1);else return(0);6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作函数main函数dictabcabc实参与形参数据传递通过函数调用,将实参的值传递给形参通过函数调用,将实参的值传递给形参.函数调用时,系统对参数的处理步骤为:函数调用时,系统对参数的处理步骤为:(1)计算各实参的值,将实参值压入形参栈中,然后执行函数体。)计算各实参的值,将实参值压入形参栈中,然后执行函数体。(2)当函数执行完返回时,形参从栈顶弹出(取走)。)当函数执行完返回时,形参从栈顶弹出(取走)。6.3 6.3 函数的调用函数的
22、调用啄木鸟啄木鸟 制作制作有关实参与形参的几点说明:有关实参与形参的几点说明:(1)在函数定义中指定的形参,未调用时,它们不占用存储单元。)在函数定义中指定的形参,未调用时,它们不占用存储单元。只有调用该函数时,形参才被分配空间,函数调用结束后,形参只有调用该函数时,形参才被分配空间,函数调用结束后,形参所占的存储单元被释放。所占的存储单元被释放。(2)实参为表达式。函数调用时,先计算表达式的值,然后将值)实参为表达式。函数调用时,先计算表达式的值,然后将值传递给形参。常量、变量、函数值都可看成是表达式的特殊形式。传递给形参。常量、变量、函数值都可看成是表达式的特殊形式。(3)定义函数时,形参
23、的排列没有次序要求,但对形参列表中每)定义函数时,形参的排列没有次序要求,但对形参列表中每个参数要进行说明。调用函数时,实参类型、个数及排列次序应个参数要进行说明。调用函数时,实参类型、个数及排列次序应与形参一一对应。若类型不一致,必须在参数前加上强制转换符,与形参一一对应。若类型不一致,必须在参数前加上强制转换符,否则会发生否则会发生“类型不匹配类型不匹配”的错误。的错误。(4)实参与形参的数据传递为单向传递,只可由实参向形参传)实参与形参的数据传递为单向传递,只可由实参向形参传递,不能由形参传回实参。实参与形参处在不同的函数中,作用递,不能由形参传回实参。实参与形参处在不同的函数中,作用的
24、区域不同,即使实参与形参同名,也是不同的变量。的区域不同,即使实参与形参同名,也是不同的变量。6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作三三.函数的嵌套调用函数的嵌套调用 所谓函数的嵌套调用是指一个函数调用另一函数的过程中所谓函数的嵌套调用是指一个函数调用另一函数的过程中又出现对其它的函数调用。又出现对其它的函数调用。这种嵌套调用的层次原则上不限制。这种嵌套调用的层次原则上不限制。函数1 函数2 函数3 .调用函数2 调用函数3 .6.3 6.3 函数的调用函数的调用啄木鸟啄木鸟 制作制作例例6-8,采用函数多重嵌套调用求方程,采用函数多重嵌套调用求方程ax2+bx+c=0(a
25、 0)的实数根。的实数根。#include#include void main()float a,b,c,x1,x2;int dict(float,float,float););float dt(float,float,float););float root(float,float,float,int););printf(Input a,b,c:););scanf(%f,%f,%f,&a,&b,&c););函数声明函数声明if(dict(a,b,c)x1=root(a,b,c,1);/*调用函数调用函数root*/x2=root(a,b,c,0);printf(实根实根x1=%f,x2=%fn
展开阅读全文