C语言程序设计教学课件:函数学习指导_第1页
C语言程序设计教学课件:函数学习指导_第2页
C语言程序设计教学课件:函数学习指导_第3页
C语言程序设计教学课件:函数学习指导_第4页
C语言程序设计教学课件:函数学习指导_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、函数学习指导学习方法建议掌握C语言的基本语法规则掌握程序设计的一般思想和方法多阅读程序、多动手上机编写、调试程序熟练程序的调试过程一、 C语言基本组成结构基本数据类型数据的输入输出选择程序设计循环程序设计数组函数指针编译预处理结构体、共用体文件 本章知识点函数的定义函数的声明函数参数的传递函数的调用函数的返回值函数的递归调用变量的作用域和存储方法内部函数和外部函数一、函数定义定义函数应包括的内容:(1)指定函数的名字,以便以后按名调用;(2)指定函数的类型,即函数值的类型;(3)指定函数的参数的名字和类型(有参);(4)指定函数执行的操作,即函数完成的功能。定义函数的一般形式类型标识符 函数名

2、(形式参数表) 说明部分 语句若无参数,写void或空。是被初始化的内部变量,寿命和可见性仅限于函数内部不说明类型,自动按整型处理.建议都指定类型函数体(一段程序,实现函数的功能)二、函数的调用(1) 函数语句: (把函数调用作为一个语句) 一般形式:函数名(实际参数表);(2) 函数表达式:(函数调用出现在一个表达式中,必须带回一个值) 一般形式:变量名=函数表达式 函数调用执行过程:计算各个表达式(TC2.0,VC+6.0实参求值顺序自右至左);把得到值赋给对应的形参;执行函数体;遇到return或执行完最后一条语句,返回到函数调用处.三、函数的返回值 1. 函数的返回值语句 一般形式:r

3、eturn 表达式; 或 return (表达式); 功能:退出函数,将表达式的值带回主调函数,回到程序原来的位置继续执行。 return语句只能把一个返回值传递给调用函数。若return语句中表达式类型与函数类型不一致,以函数类型为准。返回值可以是有确定值的常量、变量或表达式,也可以是地址。当返值是地址时,应该用指针接受。无返回值的函数,应定义为void类型(无类型函数)。 (VC+6.0必须指定函数类型)。一个函数中可以有多个返回语句。1. 值传递: 在函数调用时,实参将其值传递给形参。 实参对形参的数据传递是“单向传递值传递”,只由实参传递给形参,而不能由形参传回来给实参。 实参与形参占

4、用不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。在执行被调用函数时,形参的值如果发生变化,并不会改变主调函数中实参的值。如:简单变量、常量、表达式、下标变量、函数调用等。四、函数参数的传递2.地址传递:函数调用时,将实参的地址传递给形参。 实参和形参指向同一内存空间,对形参的修改,直接影响实参。 如:数组名、变量的地址作参数。例: 有函数调用语句: int i=3; printf(”%d,%d”,i,+i);输出结果为:4,4 若改为: int i=3, j; j=i; printf(”%d,%d”,i,+j);

5、输出结果为:3,4 main () int x=1,y=2,z=1; printf(%d %dn,(+x,y+,z+),x+y+z+); 2 4例1 编写函数交换两个变量的值。 #include “stdio.h” void swap ( int x, int y) int temp; temp=x; x=y; y=temp; printf ( x=%d, y=%dn, x, y);main ( ) int a, b; a=5; b=10; printf ( a=%d, b=%dn, a, b); swap(a, b); printf ( a=%d, b=%dn, a, b);运行结果:a=5

6、 ,b=10 x=10 ,y=5a=5 ,b=10例2:编写函数求三个数中的最大值。#include “stdio.h”int max(int x,int y,int z) int t; if(x=y) t=x; else t=y; if(tz) t=z; return t;main() int x,y,z; scanf(“%d%d%d”.&x,&y,&z); printf(“max=%d”,max(x,y,z);实参单项值传递,带回一个返回值。例3:删除字符串中指定字符,在主函数中调用并输出删除子串后的字符串。void del( char s , int i, int n)int j, k,

7、 length=0; while(slength!= 0) A ; j=-i; k=i+n; while(klength) sj+=sk+; sj= 0;main( ) char str=management; del( B ); printf(The new string is: %sn, str);答案 A: length+ B: str,3,4实参与形参是地址传递,对形参的操作就是对实参的操作。无需返回值输出:mament 例4: 编写函数,找出任意一个二维数组中的鞍点。鞍点即是该位置上的元素在所在行中最大而在所在列中最小。要求输出鞍点的位置,无鞍点时给出有关信息。 #include s

8、tdio.h#define M 4#define N 4voit andian(int aMN)int i,j,k,max,jj,flag=0; for(i=0;iM;i+) max=ai0; for(j=0;jmax) max=aij; jj=j; for(k=0;kM;k+) if(akjj=M) printf(%d %d %dn,i,jj,aijj); flag=1; if(flag=0) printf(无鞍点!n); main() int i,j,aMN; for(i=0;iM;i+) for(j=0;jN;j+) scanf(“%d”,&aij); andian(a);运行情况:输入

9、:1 9 7 6 4 6 0 5 8 7 8 2 3 8 9 8输出:1 1 6例5:以下函数的功能是利用顺序查找法从给定的数组中检索关键字m,若找到此元素或查找到数组尾时结束,若找到,返回此元素的下标;若未找到,返回值-1。#include int search(int a10,int n) int i; for(i=0;i10;i+) if( A ) return (i) ; return (-1);main() int i,a10=2,1,0,3,4,6,7,9,5,8,m,no; scanf(“%d”,&m); no=search(a, m); if( B ) printf(“nOK,

10、Found! %d”,no+1); else printf(“nSorry,Not Found! ”); A: ai=n B: no!=-1例6:使用函数编写一个竞赛评分程序。(设有6位选手,5位评委)。可以使用随机数函数获取数据,随机函数包含在stdlib.h中,函数原型:int rand(void)。 注意:为了使每次生成的随机数都不同,在使用rand()函数之前要使用包含在time.h中的srand(time(NULL)函数重新部署一次种子。如: #include #include #include main() int a30,i; srand(time(NULL); for(i=0;

11、i30;i+) ai=rand()%90+10; 程序示例/*评分程序*/#include stdio.h#include #include #define M 6#define N 5void mark(float aMN,float dM)int i,j,k,b=0,c=0;float sum,max,min; for(k=0,i=0;iM;i+,k+) min=max=ai0; sum=ai0; b=c=0;for(j=1;jmax) max=aij; b=j; if(aijmin) min=aij; c=j; sum=sum+aij; dk=(sum-aib-aic)/3; for(k

12、=0;kM;k+) printf(第%d名的成绩是:%.2fn,k+1,dk);main()float aMN,dM;int i,j;srand(time(NULL); /* 重新部署一次种子 */ printf(请按顺序输入N位评委对每位选手的评分并按回车:n);for(i=0;iM;i+) /* 随机产生选手成绩*/ for(j=0;jN;j+) aij=rand()%90+10; for(i=0;iM;i+) /* 输出随机产生的选手成绩*/ for(j=0;j=0;i-) printf(%d ,ai); main()int n=5;scanf(%d,&n); transfer(n);五

13、、递归程序设计递归的概念: 在调用一个函数的过程中直接或间接地 调用该函数本身。递归函数的执行过程: -递归调用:记住本次现场,递归调用。 -终了调用:返回上次调用现场。特点: -是无终止的递归调用,程序中应该给定一 个限制递归次数的条件。 -结构简练。例8:利用递归方法,编写函数计算x的n次方。#include “stdio.h”double f(double x,int n)double s; if(n0) s=x*f(x,n-1);else if(n=0) s=1;return s;main()int n;double x,m;printf(Input X:n);scanf(%lf,&x

14、);printf(Input N:n);scanf(%d,&n);m=f(x,n); printf(Answer=%lfn,m);例9:以下程序的功能是利用递归方法,计算第5位学生的年龄。#include stdio.hint age(int n)if(n=1) c=10; else c=age(n-1)+2;return c;main()int n=5;printf(“age:%dn”,age(5); 递推公式如下: 10 ( n=1) age(n-1)+2 (n1)age(n)=六、变量的作用域与存储方法1.局部变量(内部变量) 定义:在函数内部(包括主函数)或复合语句中定义的变量,作用域

15、只能在本函数或定义它的复合语句内使用。 如:形参,普通变量。 2. 全局变量定义:在函数之外定义的变量。使用范围:可以为本文件中所有的函数使用。作用域:从定义变量的位置开始到本文件结束。在同一个文件中,当全局变量与局部变量同名时,在局部变量的作用域内,全局变量不起作用。3.变量的存储方法 自动变量、 静态局部变量、全局变量、寄存器变量例10:阅读以下程序,写出程序的运行结果。main() int i=3, j=2, k; k=i+j; int k=8; if(i=4) printf(%d, , k); else printf(%d, , j); printf(%d, %d,i,k); 运行结果

16、:2,3,5例11:阅读下列程序,给出程序运行结果。#include stdio.h“int fun(int x, int y) static int m=0, i=2; i+=m+1; m=i+x+y; return m; main() int a=2,b=3; printf(%d, , fun(a,b); printf(%dn, fun(b,a); 运行结果8,17例12:输入6名学生5门课程的成绩,分别用函数求出: 每门课程的平均分;找出最高分数所对应的学生和课程。/* 求学生的成绩 d7-5-6*/#include stdio.h#include #include int n,k;in

17、t pmax(int b65) int i,j,m; m=b00; for(i=0;i6;i+) for(j=0;jm) m=bij;n=i;k=j; return m ;void sum(int b65,float w5) int i,j,s; for(i=0;i5;i+) s=0; for(j=0;j6;j+) s+=bji; wi=s/6.0; main()int a65,i,j,max; float p6; srand(time(NULL); for(i=0;i6;i+) for(j=0;j5;j+) aij=rand()%90+10; for(i=0;i6;i+) for(j=0;j

18、5;j+) printf(%3d ,aij); printf(n); sum(a,p); for(i=0;i5;i+) printf(%5.2f ,pi); printf(n); max=pmax(a); printf(“max=%3d,coure=%3d,student=%3dn,max,n+1,k+1); 例13: 编写函数,利用全局变量求一维数组中正数的平均值和负数的平均值传递给调用函数输出。#include “stdio.h”float zaver=0,faver=0; /*定义全局变量*/void saver(int array ,int n) int i,z=0,f=0; for(

19、i=0 ; i=0) zaver+=arrayi;z+; else faver+= arrayi;f+; if(z!=0) zaver=zaver/z; /*计算正数的平均值*/ if(f!=0) faver=faver/f; /*计算负数的平均值*/main() int a10=1,-3,4,6,-2,7,9,-8,-5,0; saver(a,10); printf(“正数平均值=%f,负数平均值=%fn”,zaver,faver); 七、内部函数和外部函数1 . 内部函数(静态函数)定义:只能被本文件中其它函数调用的函数。格式:static 类型标识符 函数名(形参表)函数体 例如:sta

20、tic int fun(a, b) 作用:函数的作用域限于所在文件,不同文件中同名函数互不干扰,便于程序的格式化。2. 外部函数定义:允许被其它文件调用的函数。格式: extern 类型标识符 函数名(形参表)函数体例如: extern int fun(int a, int b) 2. 外部函数定义:如果一个函数允许被其它文件调用,称为外部函数。定义格式: extern 类型标识符 函数名(形参表)函数体 如:extern int fun(int a, int b) 或 int fun(int a, int b) 通常不加 static 标识符的函数都是外部函数。 例14: 下面程序由两个文件

21、组成,请分析运行结果。/* 文件一 prog1.c*/#include stdio.h#include prog2.cint x=10,y=10; extern void sub() ; void add() int y=5; y=10+x; x*=2; printf(add:y=%d; ,y); main() x+=5; add(); sub();printf(main:x=%d; main:y=%dn,x,y); /* 文件二 prog2.c*/#include “stdio.h”extern int x;void sub() int y=5; x-=y; printf(“sub:y=%d

22、;”,y); 运行结果:/* 例15该程序功能包括3个计算圆形体体积的函数*/#include stdio.hdouble vol_ball() /* 计算球体体积*/double r;printf(请输入球的半径:); scanf(%lf,&r); return (4.0/3.0*3.1415926*r*r*r);double vol_cylind() /* 计算圆柱体积*/double r,h;printf(请输入圆柱的底圆半径和高:); scanf(%lf%lf,&r,&h); return (3.1415926*r*r*h);double vol_cone() /* 计算圆锥体积*/d

23、ouble r,h;printf(请输入圆锥的底圆半径和高:); scanf(%lf%lf,&r,&h); return (3.1415926*r*r*h/3.0);main()int choice; do printf( =功能选项=n); printf( 1-计算球体体积 n); printf( 2-计算圆柱体积 n); printf( 3-计算圆锥体积 n); printf( 0-退 出 n); printf(请选择: ); scanf(%d,&choice); switch(choice) case 1: printf(球体积为:%.2fn,vol_ball(); break; case 2: printf(圆柱体积为:%.2fn,vol_cylind(); break; case 3: printf(圆锥体积为:%.2fn,vol_cone(); break; case 0: break; while(choice!=0); printf(谢谢使用! n);按下列要求编写程序:(1)生成10个2位随机正整数并存在a数组中;(2)编写函数实现按从小到大顺序排序,并调用它;(3)任意输入一个数,并插入到数组中,使之仍然有序;(4)任意输入一个0到9之间的整数k,删除ak。分析:在长度为n+1的有序数组中插入一个数,首先要确定插入位置。从第

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论