好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

c语言程序设计第4章函数.ppt

51页
  • 卖家[上传人]:xiao****1972
  • 文档编号:72162087
  • 上传时间:2019-01-22
  • 文档格式:PPT
  • 文档大小:833.31KB
  • / 51 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第4章 函数,基本知识讲解,§4.1 概述 §4.2 带自定义函数的程序设计 §4.3 变量的作用域和存储类别 §4.4 典型例题,返回,§4.1 概述,C语言源程序可由一个主函数和若个辅助函数组成 由主函数调用其他函数其他函数也可互相调用§4.1 概述,main( ) { printstar( ); print_message( ); printstar( ); } printstar( ) { printf( “ ********** \n”); } print_message( ) { printf(“How do you do ! \n”); },§4.1 概述,说明: 1. 一个源程序文件由一个或多个函数组成一个源程序文件是一个编译单位 2. C程序的执行从main 函数开始,在main函数中 结束 3. 所有函数都是平行的,即函数不能嵌套定义, 函数可以互相调用,但不能调用main函数 4. 从用户使用的角度看,函数有两种: 标准函数(库函数)和自定义函数 5. 从函数的形式看,函数分为两类: 无参函数和有参函数 #,返回,§4.1.1 函数的定义,一、无参函数的定义形式 类型标识符 函数名( ) { 函数体 },例: printstar( ) { printf( “ ********** \n”); },§4.1.1 函数的定义,二、有参函数定义的一般形式 类型标识符 函数名(形式参数表) { 函数体 },§4.1.1 函数的定义,例如: int max( int x, int y) { int z; z=xy?x:y; return (z); },§4.1.1 函数的定义,三、一个函数可以是空函数。

      如: dummy( ) { },返回,#,一、函数的返回 1. 被调用函数执行到最后的“}”时,自动返回 2. 被调用函数执行到return语句时返回,§4.1.2 函数的返回和返回值,二、函数的返回值 1. return语句 return(表达式); 或:return 表达式; 或:return; return语句的用途有二: (1)用于结束函数的执行并返回到调用者; (2)用来向调用者传递一个返回值 注意:该语句对非void函数适用§4.1.2 函数的返回和返回值,§4.1.3 函数的声明和调用,要正确实现函数间的调用需满足下列条件: 必须给出满足函数运行时要求的参数; 被调用函数必须存在; 被调用函数必须允许调用例: { ………… c = max(a ,b); …………} int max(int x, int y) {…………},一、函数调用形式,函数名(实参表列);,§4.1.3 函数的声明和调用,1.函数语句 如:printf(“One worle”); 2.函数表达式 如:c=max(a,b); 3.函数参数 如:m=max(a, max(b,c)); printf(“%d”, max(a,b));,§4.1.3 函数的声明和调用,,二、函数调用的方式,main( ) { float a,b,c; scanf(“%f,%f”, },§4.1.3 函数的声明和调用,三、函数声明的一般形式 函数类型 函数名(类型1, 类型2, …, 类型n); 或: 函数类型 函数名(类型1 名1, 类型2 名2…);,例如:float add(float a, float b); 或: float add(float , float );,再如:char fun2(int i, char p1);,§4.1.3 函数的声明和调用,注意:函数声明与函数定义不同!,main( ) { int a,b,c; void print( ); scanf(“%d,%d”, },int max( int x, int y) { int z; z=xy?x:y; return(z); } void print( ) { int i; for(i=0;i5;i++) printf(“%c”,’*’); printf(“\n”); },,§4.1.3 函数的声明和调用,例4-10:计算组合C(m,n)=m!/(n!(m-n)!) 分析:求阶乘是公用模块 程序清单如下:,§4.1.3 函数的声明和调用,返回,计算组合,main( ) { int m, n; long cmn, temp; long factor(int); scanf(“%d %d”, },long factor( int x) { long y; for(y=1; x0; x--) y=y*x; return(y); },,§4.1.4 形式参数和实在参数,一、形式参数和实际参数 形式参数:定义函数时函数名后括号中的变量名,简称形参; 实际参数:调用函数时函数名后括号中的表达式,简称实参。

      §4.1.4 形式参数和实在参数,二、参数值的传递 实参传值给形参,main( ) { int a,b,c; scanf(“%d,%d”, },int max( int x , int y) { int z; z=xy?x: y; return(z); },§4.1.4 形式参数和实在参数,关于形参和实参的说明: 1. 实参可以是常量、变量或表达式, 如:c = max(3,a+b); 2. 定义函数时,必须指定形参的类型; 3. 实参与形参的类型应一致或兼容 4. C语言规定,实参对形参的数据传递是“值传递” 5. 函数未调用时,形参并不占内存中的存储单元在函数调用时,形参才被分配内存单元调用结束后,形参所占的内存单元被释放§4.1.4 形式参数和实在参数,main( ) { int a,b,c; scanf(“%d,%d”, },int max( int x , int y) { int z; z=xy?x: y; return (z); },5,8,8,§4.1.4 形式参数和实在参数,return,2. 函数值的类型 如:int max(int x,int y) char letter(char c1, char c2) double min(int x, double y) C语言默认函数返回值为int型。

      3. 如果函数值的类型和return语句中表达式 的值不一致,则以函数类型为准如:,§4.1.4 形式参数和实在参数,main() { float a, b; int c; scanf(“%f,%f”, },若输入的数据流如下: 1.5, 2.5 则输出的结果为: Max is 2,§4.1.4 形式参数和实在参数,4. 可用“void ”定义“无类型”函数如:,void printstar( ) { printf(“**********\n”); } void p_message( ) { printf(“How do you do!\n”); },§4.1.4 形式参数和实在参数,返回,例1:写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息 分析: 编写函数 prime(int n),其功能是判断n是否是素数,如是则返回1,否则返回0; 编写main(),输入一个整数,调用prime函数,输出是否是素数的信息 程序清单:,§4.2 带自定义函数的程序设计,返回,判断素数,main( ) { int m; scanf(“%d”, },prime( int n) { int i, flag=1; for(i=2; i=n/2; i++) if(!(n% i)) { flag=0;break; } return flag; },,例2:设n0是一给定正整数。

      对i=0,1,2,…, 定义:若ni是偶数,则ni+1=ni/2;若ni是奇数,则ni+1=3ni+1;若ni是1,则序列结束用该方法产生的数称为冰雹数(hailstone)请编写函数void hailstones(int n),其功能是显示由n产生的序列,并按如下形式输出 Hailstones generated by 77: 77 232 116 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 Number of hailstones generated:23 程序清单:,§4.2 带自定义函数的程序设计,返回,返回,冰雹数求解,void hailstones(int n) { int i=0; while (n!=1) { printf(“%5d“,n); i++; if (n%2==1) n=3*n+1; else n=n/2; if(i%6==0)printf(“\n“); } printf(“%5d\n“,i); },,main() { int n; scanf(“%d“, },§4.3 变量的作用域与存储类别,变量的作用域 局部变量和全局变量 变量的生存期 静态存储类别和动态存储类别,§4.3.1 局部变量和全局变量,一、局部变量 在一个函数内部定义的变量是内部变量,它只在本函数范围内有效。

      float f1(int a) { int b, c; …… } char f2(int x,int y) { int i, j; },main( ) { int m,n; …… { int c; c=m+n; …… } …… },,二、全局变量 在函数之外定义的变量称为外部变量,或全局变量(全程变量) 全局变量可以为本文件中其他函数所共用它的有效范围为从定义变量的位置开始到本源文件结束int p=1,q=5; float fa(int a) { int b,c; …… } char c1,c2; char f2(int x, int y) { int i, j; …… } main() { int m,n; …… },,,全局 变量 c1,c2 的作 用范 围,,全局 变量 p,q 的作 用范 围,§4.3.1 局部变量和全局变量,§4.3.1 局部变量和全局变量,注意: 全局变量在程序的全部执行过程中都占有存储单元,而不是仅在需要时才开辟单元 它使函数的通用性降低,因函数在执行时要依赖于其所在的外部变量 降低了程序的清晰性 在同名局部变量作用的范围内,外部变量被“屏蔽”。

      例 外部变量与局部变量同名,§4.3.1 局部变量和全局变量,int a=3,b=5; /*a, b外部变量*/ max(int a, int b) /*a, b局部变量*/ { int c; c=ab?a:b; return(c); } main() { int a=8; /* a局部变量*/ printf(“%d”,max(a,b)); },printf(“%d,%d”,a,b);,返回,§4.3.2 变量的生存期,一、动态存储方式与静态存储方式 静态存储方式:指在程序运行期间分配固定的存储空间的方式 动态存储方式:在程序运行期间根据需要进行动态的分配存储空间的方式§4.3.2 变量的生存期,静态存储区:存储空间的分配在编译阶段进行,且存于其中的数据对象相对于程序的执行是永久的 动态存储区:存储空间的分配是在程序的运行过程中进行的二、auto变量 调用函数时系统自动分配存储空间,在函数调用结束时自动释放这些存储空间,称这类局部变量为自动变量 自动变量用关键字auto作存储类别的声明它也可省 三、用static声明局部变量 静态的 局部的,§4.3.2 变量的生存期,f(int a) { auto int b=0; static int c=3; 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.