书签 分享 收藏 举报 版权申诉 / 44
上传文档赚钱

类型C语言课件第6章函数1new.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4714884
  • 上传时间:2023-01-04
  • 格式:PPT
  • 页数:44
  • 大小:341KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C语言课件第6章函数1new.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    语言 课件 函数 new
    资源描述:

    1、1第 六 章 模块化程序设计 -函数2一、函数概述一、函数概述二、函数的定义及调用二、函数的定义及调用三、局部变量和全局变量三、局部变量和全局变量四、变量的存储类别四、变量的存储类别五、预编译命令五、预编译命令主要内容主要内容:3本章要点 怎样定义函数?如何调用函数?如何声明函数?什么是函数的参数?在函数调用时,参数是如何传递的?在使用函数的过程中,要注意哪些问题?怎样确定函数的参数?如何使用局部变量和全局变量?什么是静态变量?4 怎样把多个函数组织起来?怎样用结构化程序设计的思想解决问题?怎样用函数嵌套求解复杂的问题?怎样用函数递归解决问题?预编译命令的作用?5一、一、函数概述函数概述 把大

    2、问题分解成若干小问题,小问题再进一步分解成若干更小的问题;写程序时,用main()解决整个问题,用子函数解决小问题,main()调用解决小问题的子函数;这些子函数又进一步调用解决更小问题的函数,从而形成函数的嵌套调用。main()函数函数1函数函数2函数函数m函数函数1_1函数函数1_2函数函数m_1函数函数m_n程序结构:程序结构:6C语言中的数学库函数 使用数学库中的函数时,应使用使用数学库中的函数时,应使用#include#include 命令将数学头文件命令将数学头文件 math.h math.h 包含到程序中。包含到程序中。数学函数可用来完成一些常用的数学计算。数学函数可用来完成一些

    3、常用的数学计算。在使用函数时,通常按如下顺序书写:在使用函数时,通常按如下顺序书写:函数名、左圆括函数名、左圆括 号、号、参数(或用逗号分开的参数列表)、右圆括号。参数(或用逗号分开的参数列表)、右圆括号。例如:printf(“%8.2f”,sqrt(900.0);说明如下:执行这条语句时,就会通过调用函数sqrt计算900.0 的平方根。数900.0 是函数sqrt的参数;函数sqrt的参数是double型;函数值也是double型。上述语句的打印结果为30.00。7(一)、(一)、函数的定义函数的定义(二)、(二)、函数的调用函数的调用(三)、函数编程举例(三)、函数编程举例(四)、(四)

    4、、函数的嵌套调用函数的嵌套调用(五)、函数的递归调用(五)、函数的递归调用二、函数的定义及调用二、函数的定义及调用8(一)函数的定义 定义:函数是可重复使用的程序段,从其他的程序段中均可通过调用该函数来执行该函数所包括的程序段。函数的分类:库函数:由C语言系统提供定义如scanf()、printf()等函数 自定义函数:需要用户自己定义如计算圆柱体体积函数cylinder()无参函数:不需要使用(代入)外来数据的函数 有参函数:需要使用(代入)外来数据的函数9(一)函数的定义 函数是指完成一个特定工作的独立程序模块。main()也是一个函数,一个C程序由一个main()或多个函数构成。程序中一

    5、旦调用了某个函数,该函数就会完成一些特定的工作,然后返回到调用它的地方。有的函数经过运算,得到一个明确的运算结果,并需要回送该结果。例如,函数cylinder()返回圆柱的体积。有的函数完成一系列操作步骤,不需要回送任何运算结果。101不返回运算结果的函数定义void 函数名(参数表)函数实现过程 return;这类函数通常用于屏幕输出等这类函数通常用于屏幕输出等表示不返回结果表示不返回结果在在VC环境下函数的返回值类型不能省略。环境下函数的返回值类型不能省略。/*函数首部函数首部*/*函数体函数体*/*可以省略可以省略return*/11例6-1 输出5之内的数字金字塔。/*输出数字金字塔输

    6、出数字金字塔*/#include void pyramid()/*函数定义函数定义*/int i,j;for(i=1;i=5;i+)/*需要输出的行数需要输出的行数*/for(j=1;j=5-i;j+)/*输出每行左边的空格输出每行左边的空格*/printf();for(j=1;j=i;j+)/*输出每行的数字输出每行的数字*/printf(%d,i);/*每个数字的前后各有一个空格每个数字的前后各有一个空格*/putchar(n);12 2 3 3 3 4 4 4 45 5 5 5 5 12例6-2 输出 n 之内的数字金字塔。/*输出数字金字塔输出数字金字塔*/#include void

    7、pyramid(int n)/*函数定义函数定义*/int i,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);12 2 3 3 3 4 4 4 45 5 5 5 5 13举例计算两个三角形面积 例6-3 输入两个三角形三边长,分别求这两个三角形的面积。面积公式:s=其中,p=(a+b+c)/2 要求定义和

    8、调用函数 triangle(a,b,c)计算三角形的面积。)()(cpbpapp14#include#include int main()double a1,b1,c1,a2,b2,c2,p1,p2,s1,s2;printf(请输入第一个三角形的三边长请输入第一个三角形的三边长:);scanf(%lf%lf%lf,&a1,&b1,&c1);printf(请输入第二个三角形的三边长请输入第二个三角形的三边长:);scanf(%lf%lf%lf,&a2,&b2,&c2);p1=(a1+b1+c1)/2;s1=sqrt(p1*(p1-a1)*(p1-b1)*(p1-c1);p2=(a2+b2+c2)

    9、/2;s2=sqrt(p2*(p2-a2)*(p2-b2)*(p2-c2);printf(“s1=%.3f,s2=%.3f n,s1,s2);return 0;不用自定义函数的源程序出现出现功能重复功能重复的语句的语句需优化需优化15例6-3 自定义的函数triangle分析:该函数须代入三边长度值,且有一结果值分析:该函数须代入三边长度值,且有一结果值/*首先定义求三角形面积的函数首先定义求三角形面积的函数*/double triangle(double a,double b,double c)double p,s;/*对语句中使用的变量进行定义对语句中使用的变量进行定义*/p=(a+b+c

    10、)/2;s=sqrt(p*(p-a)r*(p-b)*(p-c);/*计算面积计算面积*/return s;/*返回结果返回结果*/16#include#include int main()double a1,b1,c1,a2,b2,c2,p1,p2,s1,s2;printf(请输入第一个三角形的三边长请输入第一个三角形的三边长:);scanf(%lf%lf%lf,&a1,&b1,&c1);printf(请输入第二个三角形的三边长请输入第二个三角形的三边长:);scanf(%lf%lf%lf,&a2,&b2,&c2);s1=triangle(a1,b1,c1);s2=triangle(a2,b2

    11、,c2);printf(s1=%.3f,s2=%.3f n,s1,s2);return 0;例6-3 该程序的main函数变为:例6-3的源程序由两个函数组成。他们之间是调用和被调用的关系。main 函数调用triangle函数。17double triangle(double a,double b,double c)double s,p;p=(a+b+c)/2;result=sqrt(p*(p-a)*(p-b)*(p-c);return s;函数定义函数类型函数类型 函数名(形参表)/*函数首部函数首部*/*函数体函数体*/函数实现过程函数实现过程 return 表达式表达式;把函数运算的结

    12、果回送给主函数把函数运算的结果回送给主函数只能返回一个值只能返回一个值函数函数返回返回值的值的类型类型没有分号没有分号18形参变量的定义类型1 参数1,类型2 参数2,类型n 参数n参数之间用逗号分隔,每个参数前面的类型都必须分别写明函数类型函数类型 函数名(形参表)函数名(形参表)函数实现过程函数实现过程 return 表达式;表达式;不能写成不能写成 double r,hdouble triangle(double a,double b,double c)double s,p;p=(a+b+c)/2;result=sqrt(p*(p-a)*(p-b)*(p-c);return s;19do

    13、uble cylinder(double r,double h)/*函数首部*/*函数体,写在一对大括号内*/double result;result=3.1415926*r*r*h;/*计算圆柱体积*/return result;/*返回运算结果*/分析函数的定义函数类型函数类型函数名函数名形参表形参表与函数类型一致与函数类型一致20(三)函数的调用 定义一个函数后,就可以在程序中调用这个函数。调用标准库函数时,在程序的最前面用#include命令包含相应的头文件。调用自定义函数时,程序中必须有与调用函数相对应的函数定义。211函数调用的形式和过程 使用返回值:s=triangle(a,b,

    14、c);printf(“%f n”,triangle(a,b,c););完成操作:pyramid(5);/这也称为函数调用语句常用于常用于voidvoid类型函数的调用类型函数的调用常用于返回结果的函数的调用常用于返回结果的函数的调用常量、变量、表达式常量、变量、表达式函数名函数名(实参表实参表)22函数调用的过程 计算机在执行程序时,从主函数main开始执行,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后,将返回主函数,然后再从原先暂停的位置继续执行。函数遇return或最后的大括号,返回主函数23包含子函数的程序的执行过程包含子函数的程序的执行过程(1)(1)程序

    15、的执行从主函数的第一条语句程序的执行从主函数的第一条语句开始;开始;遇到函数调用时,暂停在主调函数中遇到函数调用时,暂停在主调函数中的执行,转去处理函数调用;的执行,转去处理函数调用;为被调函数的形参变量分配内存单元,为被调函数的形参变量分配内存单元,并将实参的值赋给形参变量并将实参的值赋给形参变量.为函数内定义的内部变量分配内存单为函数内定义的内部变量分配内存单元。元。执行被调函数的函数体,直到遇到执行被调函数的函数体,直到遇到return语句;语句;此时,将释放为形参变量和内部变量此时,将释放为形参变量和内部变量分配的内存单元。分配的内存单元。程序的执行流程又转回到主调函数,程序的执行流程

    16、又转回到主调函数,同时将同时将return语句括号中表达式的值带回语句括号中表达式的值带回主函数。主函数。#include void main()int a,b,c;scanf(“%d%d”,&a,&b);c=max(a,b);printf(“The max is%d”,c);int max(int x,int y)int z;z=xy?x:y;return(z);形参形参:xy实参实参:a2b3内部变量内部变量 z形参形参:xy23242参数传递 函数定义时的参数被称为形式参数(简称形参)double triangle(double a,double b,double c,);函数调用时的参

    17、数被称为实际参数(简称实参)s1=triangle(a1,b1,c1);实参形参 在参数传递过程中,实参把值复制给形参。形参和实参一一对应:数量一致,类型一致,顺序一致 形参:变量,用于接受实参传递过来的值 实参:常量、变量或表达式单向传递单向传递253函数结果返回 函数返回的两种情况 完成确定的运算,有一个运算结果返回给主调函数。完成指定工作,没有确定的运算结果需返回给主调函数(函数类型void)。函数结果返回的形式:return 表达式;return (表达式);26对被调函数的声明和函数原型对被调函数的声明和函数原型当被调函数的定义出现在主调函数之后时,当被调函数的定义出现在主调函数之后

    18、时,在主调函数中,在主调函数中,使用函数使用函数原型对被调函数进行声明。原型对被调函数进行声明。函数原型的作用函数原型的作用函数原型告诉编译器函数返回值的数据类型,函数所要接收的参函数原型告诉编译器函数返回值的数据类型,函数所要接收的参数个数、参数类型和参数顺序。数个数、参数类型和参数顺序。编译器用函数原型校验函数调用。编译器用函数原型校验函数调用。函数原型的两种书写格式函数原型的两种书写格式类型标识符类型标识符 函数名函数名(参数(参数1的数据类型,参数的数据类型,参数2的数据类型,的数据类型,);类型标识符类型标识符 函数名函数名(参数(参数1的数据类型的数据类型 参数名参数名1,参数,参

    19、数2的数据类型的数据类型 参数名参数名2,);函数原型函数原型-用于声明被调函数27【例6-4】定义判断奇偶数的函数even(n)定义一个判断奇偶数的函数even(n),当n为偶数时返回整数值1,否则返回整数值0。/*判断奇偶数的函数*/int even(int n)/*函数首部*/if(n%2=0)/*判别 n 的奇偶性*/return 1;/*偶数返回1*/elsereturn 0;/*奇数返回0*/如何调用该如何调用该函数?函数?28例例6.5:编写程序:输入变量:编写程序:输入变量m,n的值,计算组合数:的值,计算组合数:C(m,n)=m!/(n!*(m-n)!)(mn)float f

    20、ac(int x)int i;float t=1;for(i=1;i=x;i+)t=t*i;return(t);input m,n:5 3The result is 10.0 分析:分析:将求阶乘的任务用将求阶乘的任务用子函数子函数实现。实现。主函数主函数负责输入、负责输入、调用函数进行计算、调用函数进行计算、输出结果。输出结果。#include void main()float c;int m,n;float fac(int x);printf(“input m,n:”);scanf(“%d%d”,&m,&n);c=fac(m)/(fac(n)*fac(m-n);printf(“The re

    21、sult is%8.1f”,c);29(四)函数编程举例(四)函数编程举例例6-6:输入精度值e,使用格里高利公式求的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数 funpi(e)求的近似值。7151311430例6-6 源程序/*用格里高利公式计算的近似值,精度为e */#include#include int main(void)double e,pi;double funpi(double e);printf(Enter e:);scanf(%lf,&e);pi=funpi(e);printf(pi=%fn,pi);return 0;double funpi(double e

    22、)int denominator,flag;double item,sum;flag=1;denominator=1;item=1.0;sum=0;while(fabs(item)=e)item=flag*1.0/denominator;sum=sum+item;flag=-flag;denominator=denominator+2;return sum*4;Enter e:0.0001pi=3.141831例6-7 判断素数的函数例6-7:求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。要求定义和调用函数prime(m)判断m是否为素数,当

    23、m为素数时返回整数值1,否则返回整数值0。算法描述:对2100之间的每个数进行判断,若是素数,则输出该数。for(m=2;m=100;m+)if(m是素数)printf(%d,m);prime(m)!=032例6-7 源程序#include#include void main()int count,m;int prime(int m);count=0;for(m=2;m=100;m+)if(prime(m)!=0 )printf(%6d,m);count+;if(count%10=0)printf(n);printf(n);int prime(int m)int i,n;if(m=1)retu

    24、rn 0;n=sqrt(m);for(i=2;i=n;i+)if(m%i=0)return 0;return 1;33(五)、(五)、函数的嵌套调用函数的嵌套调用函数调用可以嵌套:函数调用可以嵌套:即:在调用一个函数的过程中,又可以调用另一个函数。即:在调用一个函数的过程中,又可以调用另一个函数。调用调用a函数函数结束结束调用调用b函数函数main函数函数a函数函数b函数函数例如,某个例如,某个c程序中定义了程序中定义了3个函数:个函数:main,a,b,程序从主函数,程序从主函数开始执行。执行过程如下图所示。开始执行。执行过程如下图所示。返回返回返回返回34四、局部变量和全局变量四、局部变量

    25、和全局变量 局部变量 在函数内定义的变量(包括形参)作用范围:本函数内部本函数内部 定义在复合语句内的变量作用范围:复合语句内部复合语句内部 全局变量 (外部变量)在函数以外定义的变量,不从属于任一函数。作用范围:从定义处到源文件结束从定义处到源文件结束(包括各函数)所以不同函数的所以不同函数的同名变量互不干同名变量互不干扰扰35例6-7 在复合语句中定义局部变量。#include void main()int a;a=1;/*复合语句开始*/int b=2;b=a+b;a=a+b;/*复合语句结束*/printf(%d ,a);b:b:小范围内的临时变量小范围内的临时变量 436#inclu

    26、de stdio.hint x;/*定义全局变量x*/int f()int x=4;/*x为局部变量*/return x;void main()int a=1;x=a;/*对全局变量 x 赋值*/a=f();/*a的值为4*/int b=2;b=a+b;/*b的值为4*/x=x+b;/*全局变量运算*/printf(%d%d,a,x);4,7若局部变量与全局变量若局部变量与全局变量同名,局部变量优先同名,局部变量优先例6-7 全局变量定义37变量作用范围示例int x=1;void main()int a=2;.int b=3;.f();.int t=4;void f()int x=5,b=6

    27、;.int a=7;x=?a=?b=?b=?x=5 b=6 t=4 a没定义没定义 x=?b=?t=?a=?38自动变量(自动变量(auto):普通的局部变量普通的局部变量int x,y;auto int x,y;char c1;auto char c1;函数调用时,定义变量,分配存储单元。函数调用时,定义变量,分配存储单元。函数调用结束,收回存储单元。函数调用结束,收回存储单元。全局变量:从程序执行开始,到程序的结束,存储单全局变量:从程序执行开始,到程序的结束,存储单元始终保持。元始终保持。变量生命周期变量生命周期变量从定义开始分配存储单元,到运行结束存储单元被回收变量从定义开始分配存储单

    28、元,到运行结束存储单元被回收的整个过程。的整个过程。变量生命周期39static 类型名 变量表;作用范围:局部变量 生命周期:全局变量静态局部变量40#include void fun(int k);/*函数原型函数原型*/void main()int k;for(k=1;k=3;k+)fun(k);void fun(int k)static int a;printf(%d,a);a+=k;0,1,3,/*静态局部变量会记住前一次调用时留下来的值静态局部变量会记住前一次调用时留下来的值*/*静态局部变量的初值为静态局部变量的初值为0 */例6-8 静态局部变量示例 局部静态变量局部静态变量的

    29、值在函数调用结束后的值在函数调用结束后不消失不消失,保留原值保留原值,其占用的存储单元,其占用的存储单元不释放不释放,在下一次,在下一次调用该函数时,该变量已有值,就是上一次函数调用该函数时,该变量已有值,就是上一次函数调用结束时的值。调用结束时的值。41全局变量的有关说明:全局变量的有关说明:(2 2)建议不在必要时不要用全局变量,因为:)建议不在必要时不要用全局变量,因为:使函数的通用性降低,因为函数在执行时依赖外部变量。使函数的通用性降低,因为函数在执行时依赖外部变量。使用全局变量过多,降低函数的清晰性。人们难以清楚地判断每使用全局变量过多,降低函数的清晰性。人们难以清楚地判断每个瞬间各

    30、个外部变量的值。在各函数执行时,都可能改变外部变个瞬间各个外部变量的值。在各函数执行时,都可能改变外部变量的值,程序容易出错量的值,程序容易出错。所以要限制使用全局变量。所以要限制使用全局变量。(1 1)全局变量增加了函数间数据联系的渠道;但增加了全局变量增加了函数间数据联系的渠道;但增加了函数间的关联。函数间的关联。(3 3)如果同一源文件中外部变量与局部变量同名,则在)如果同一源文件中外部变量与局部变量同名,则在局部变量的作用范围内,全局变量被局部变量的作用范围内,全局变量被“屏蔽屏蔽”,即它不起,即它不起作用。作用。42六、变量的存储类别六、变量的存储类别一一.内存中供用户使用的存储区包

    31、括:内存中供用户使用的存储区包括:程序区程序区静态存储区静态存储区动态存储区动态存储区二二.用户的数据存储在动态存储区和静态存储区用户的数据存储在动态存储区和静态存储区静态存储区静态存储区存储以下数据:全局变量,静态局部变量存储以下数据:全局变量,静态局部变量动态存储区动态存储区存放以下数据:存放以下数据:函数形参变量、自动变量、以及函数调用时的现场保护函数形参变量、自动变量、以及函数调用时的现场保护和返回地址等。和返回地址等。静态存储区静态存储区中的数据在整个程序运行期间都中的数据在整个程序运行期间都有效,即此存储区中变量的生存期为整个程序有效,即此存储区中变量的生存期为整个程序的执行周期的执行周期动态存储区动态存储区中的数据只在它所在的函数被调用时中的数据只在它所在的函数被调用时才有效,随着调用结束,它们就被释放了。才有效,随着调用结束,它们就被释放了。43用用extern extern 声明外部变量声明外部变量 用于扩展外部变量的作用域。(1)在外部变量定义的文件内,扩展其作用范围;(2)在一个文件中,使用另一个文件中定义的外部变量 参见例8.20,8.2144P142-150:1,2,3作作 业业

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C语言课件第6章函数1new.ppt
    链接地址:https://www.163wenku.com/p-4714884.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库