c语言程序设计基础函数学习教案_第1页
c语言程序设计基础函数学习教案_第2页
c语言程序设计基础函数学习教案_第3页
c语言程序设计基础函数学习教案_第4页
c语言程序设计基础函数学习教案_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

1、会计学1c语言程序设计基础函数语言程序设计基础函数本章内容本章内容 5.2 函数原型与函数调用函数原型与函数调用 5.3 函数的嵌套调用函数的嵌套调用 5.4 函数的递归调用函数的递归调用 5.1 函数基础知识函数基础知识第1页/共101页本章内容本章内容 5.6 变量的作用域变量的作用域5.7 变量的存储类别变量的存储类别 5.5 调用与被调用函数间的数据传递调用与被调用函数间的数据传递第2页/共101页本节内容本节内容 5.1.2 函数的分类函数的分类 5.1.3 函数的定义函数的定义 5.1.1 函数的概念函数的概念第3页/共101页C程序程序源程序文件源程序文件1函数函数1函数函数n源

2、程序文件源程序文件n函数函数1函数函数m第4页/共101页n可以将一些重复使用的功能或操作定义成一个函数,在其他函数中如果需要可以直接调用这个函数,而省掉了很多重复性的工作。并且使程序结构看起来更加简单清晰。第5页/共101页#include /包含预处理命令main( ) /主函数int max1(int x, int y); /max1函数声明int a,b,c; /声明部分,定义变量printf(Please input two integers:n); /调用printf函数 scanf(%d,%d,&a,&b); /调用scanf函数 c=max1(a,b); /调用

3、max1函数printf(max=%dn, c); /调用printf函数 int max1(int x, int y) /定义max1函数 int z; if(xy) z=x; else z=y; return(z ); 第6页/共101页数调用。因此,语言程序的执行总是从main函数开始, 完成对其它函数的调用后再返回到main函数,最后由main函数结束整个程序。一个语言源程序必须有且只有一个主函数main。第7页/共101页使用。第8页/共101页它的返回值为“空类型”,空类型的说明符为“void”。第9页/共101页#include /包含预处理命令main( )/主函数void m

4、ax2(int x, int y);/max2函数声明int a,b;/声明部分,定义变量printf(Please input two integers:n); /调用printf函数 scanf(%d,%d,&a,&b);/调用scanf函数 max2(a,b);/调用max2函数,无返回值 void max2(int x, int y)/定义max2函数 int z; if(xy) z=x; else z=y; printf(max=%dn, z); 第10页/共101页函数定义及函数说明时用到的参数,称为形式参数(简称为形参)。在函数调用时也必须给出参数,称为实际参数(

5、简称为实参)。进行函数调用时,主调函数将把实参的值传送给形参,供被调函数使用。如例5-1中的max1或max2函数都有两个整型的参数x和y。第11页/共101页第12页/共101页。n由左、右大括号括起来的部分称为函数体。其中声明部分对函数内部用到的变量以及变量的类型进行说明,并说明该函数中所调用的函数类型。语句部分,规定函数中要执行的语句,由C语言的基本语句组成,是函数的核心部分。第13页/共101页带形式参数的个数及各参数的类型。形式参数表列可以为空,即定义的函数为无参函数,也可以有多个形参,当有多个形参时,各参数之间用逗号隔开。但无论有没有形参,函数名后的括号都不能丢掉。第14页/共10

6、1页#include int dif(int x, int y) int z;z = x y ? x-y : y-x; return( z );main( )/主函数int a,b,c; /声明部分,定义变量printf(Please input two integers:n); /调用printf函数 scanf(%d,%d,&a,&b);/调用scanf函数 c=dif(a,b);/调用dif函数有参,有返回值并赋给变量cprintf(dif=%dn, c);/调用printf函数 第15页/共101页序结构清晰,需要时可以用其它函数代替。第16页/共101页本节内容本节内

7、容 5.2.2 函数的参数函数的参数 5.2.3 函数的调用函数的调用 5.2.4 函数的返回值函数的返回值 5.2.1 函数的原型函数的原型第17页/共101页第18页/共101页, 第19页/共101页#include main( ) void calc(float x,float y,char opr);/对被调函数calc的说明 float a,b; char opr;printf(Input expression:);scanf(%f%c%f,&a,&opr,&b);calc(a,b,opr);void calc(float x,float y,char op

8、r)/函数calc的定义 switch(opr) case +:printf(%5.2f%c%5.2f=%6.2fn,x,opr,y,x+y);return;case -:printf(%5.2f%c%5.2f=%6.2fn,x,opr,y,x-y);return;case *:printf(%5.2f%c%5.2f=%6.2fn,x,opr,y,x*y);return;case /:printf(%5.2f%c%5.2f=%6.2fn,x,opr,y,x/y);return;default :printf(Operator error! n); 第20页/共101页数之后时,一定要先声明函数

9、,再使用。第21页/共101页为实参。n实参的值是在主调函数中给定的,在调用过程中将实参的值传递给相应的形参,从而实现主调函数向被调函数的数据传送。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。第22页/共101页第23页/共101页n指针),实参传递地址给形参,这样形参和实参存在于一个地址空间,被调函数对形参做的任何操作都会影响主调函数中的实参变量,实参与形参的传递是双向的。第24页/共101页#include void swap(int x, int y) int z;z=x; x=y; y=z; printf(x=%d,y=%d,x ,y);main( ) int a,b;p

10、rintf(please input a,b: );scanf(%d,%d,&a,&b);swap(a,b); printf(na=%d,b=%dn,a,b);第25页/共101页n函数名()第26页/共101页#include int dif(int x, int y) int z; z = x y ? x-y : y-x; return( z );main( )int m,n ,diff;m=10;n=4;diff=dif(m,n);printf(dif=%d n,diff);第27页/共101页第28页/共101页n作为参数的函数调用。函数作为另一个函数调用的实际参数出现

11、。n这种情况是把该函数的返回值作为实参进行传递,因此要求该函数必须是有返回值的。第29页/共101页#include int cube (int x) /定义cube函数 return (x * x * x); main( ) int a;printf(nEnter an integer number:);scanf(%d, &a);printf(%d * %d * %d = %dn, a, a, a, cube (a); 第30页/共101页第31页/共101页第32页/共101页#include main() int dif(float x,float y); float a,b;

12、 int c; printf(please input a,b: ); scanf(%f,%f,&a,&b); c=dif(a,b); printf(difference is %dn,c);int dif(float x,float y) /函数类型为整型 float z; /z为实型变量 z=xy?x-y:y-x; return(z);第33页/共101页第34页/共101页第35页/共101页第36页/共101页#include int dif(int x,int y,int z);/dif函数的说明int max(int x,int y,int z);/max函数的说明

13、int min(int x,int y,int z);/min函数的说明void main() int a,b,c,d;printf(please input a b c:); scanf(%d%d%d,&a,&b,&c); d=dif(a,b,c);/调用dif函数 printf(Max-Min=%dn,d);int dif(int x,int y,int z) /定义dif函数,求最大值与最小值之差 return max(x,y,z)-min(x,y,z); /调用max和min函数第37页/共101页int max(int x,int y,int z) /定义ma

14、x函数,求三个数中最大值 int r;r=xy?x:y;return(rz?r:z);int min(int x,int y,int z) /定义min函数,求三个数中最小值 int r;r=xy?x:y;return(rz?r:z);第38页/共101页最终可以达到结束递归的条件。第39页/共101页第40页/共101页第41页/共101页#include void dtoo( int x)/定义递归函数dtoo unsigned int m;m=x%8;/除8取余数x=x/8;/除8求商if (x!=0) dtoo(x);printf(%d,m);main( ) unsigned int

15、n;printf(please decimal digit n:);scanf(%d,&n);/输入十进制整数printf(%d)10=(,n);dtoo(n);/调用递归函数dtooprintf()8n); 第42页/共101页#include float fac (int n) float f=0; if(n0) printf(n0,error!); else if (n=0 | n=1) f=1; else f=fac(n-1)*n; return (f);main( ) int n; float y; printf(Input a integer n:); scanf(%d,&

16、amp;n); y=fac(n); printf(%d!=%-10.0fn,n,y);第43页/共101页ABC第44页/共101页A B CA BCA B C第45页/共101页n1.2 将A上一个盘子从A移到B;n1.3 将C上一个盘子从C移到B。A BC1.1A BC1.2A BC1.3第46页/共101页A B C3第47页/共101页第48页/共101页第49页/共101页第50页/共101页第51页/共101页#include void move(int no, char from, char to) printf(Move %3d : %c - %cn, no, from, to

17、); void hanoi(int n, char one, char two, char three) if (n=1) move(n, one, three); else hanoi(n-1, one, three,two); move(n, one, three); hanoi(n-1, two, one, three); void main() int n; printf(Input the number of diskes: ); scanf(%d,&n); printf(The step to moving %3d diskes:n,n); hanoi(n, A, B, C

18、); 第52页/共101页第53页/共101页本节内容本节内容 5.5.2调用与被调用函数间的地址传递调用与被调用函数间的地址传递 5.5.1调用与被调用函数间的数值传递调用与被调用函数间的数值传递第54页/共101页第55页/共101页第56页/共101页#include void fun(int x, int y) x+; y+; printf(x=%d,y=%d,x ,y);main( ) int m,n;printf(please input m,n: );scanf(%d,%d,&m,&n); fun(m,n); printf(nm=%d,n=%dn,m,n);第57

19、页/共101页第58页/共101页#include void sort(int x, int y,int z)int temp; if(xy) temp=x; x=y; y=temp;if(xz) temp=x; x=z; z=temp;if(yz) temp=y; y=z; z=temp;printf(x=%d y=%d z=%dn,x,y,z);第59页/共101页main( )int a3,i ;for (i=0; i3; i+) scanf(%d,&ai); sort(a0,a1,a2); for(i=0;i3;i+) printf(a%d=%d,i,ai); printf(n

20、);第60页/共101页指向该数组第一个元素的指针传给被调函数。实际上形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。n5.5.2.1 一维数组名作为函数参数第61页/共101页#include void sort(int b ,int n); void printarr(int b ); main( ) int a10 = 11,52,23,77,48,64,59, 32,93,38; printf(Before sort:n); printarr(a); sort(a,10); printf(After sort:n); printarr(a);void printar

21、r(int b10) int i; for (i=0; i10; i+) printf(%5d,bi); printf(n); 第62页/共101页void sort(int b , int n) int i,j,t; for (i=1; in; i+) for (j=0; jbj+1) t=bj;bj=bj+1;bj+1=t; 第63页/共101页第64页/共101页第65页/共101页第66页/共101页#include get_sum_row(int x 3, int result ,int row, int col) int i,j; for(i=0;irow;i+) resulti=

22、0; for(j=0;jcol;j+) resulti+=xij; main() int a23=3,6,9,1,4,7; int sum_row2,row=2,col=3,i; get_sum_row(a,sum_row,row,col); for(i=0;irow;i+) printf(The sum of row%d=%dn,i+1,sum_rowi);第67页/共101页第68页/共101页#include void turn(int arra 4,int arrb 3); main( ) int a34=1,2,3,4,5,6,7,8,9,10,11,12; int i,j,b43;

23、turn(a,b);printf(array b:n);for (i=0; i4; i+) for (j=0; j3; j+)printf(%5d,bij);printf(n); 第69页/共101页void turn(int arra 4,int arrb 3) /矩阵转置函数 int r, c; for (r=0; r3;r+) for (c=0; c4; c+) arrbcr=arrarc;第70页/共101页共同拥有一段内存空间。第71页/共101页本节内容本节内容 5.6.2 全局变量全局变量 5.6.1 局部变量局部变量第72页/共101页。第73页/共101页第74页/共101页

24、第75页/共101页#include void sub();main() int a,b; a=3; b=4; printf(main:a=%d,b=%dn,a,b); sub(); printf(main:a=%d,b=%dn,a,b);void sub() int a,b; a=6; b=7; printf(sub:a=%d,b=%dn,a,b);第76页/共101页#include void sub(int a,int b) /定义sub函数,有两个形参a,b int c;/定义变量ca=a+b; b=b+a; c=b-a;printf(sub:ta=%d b= %d c= %dn,a,

25、b,c);main() int a=1,b=1,c=1;/main函数中定义变量a、b、c printf(main:ta=%d b= %d c= %dn,a,b,c);sub(a,b); int a=2,b=2; printf(comp:ta=%d b= %d c= %dn,a,b,c); printf(main:ta=%d b= %d c= %dn,a,b,c); 第77页/共101页第78页/共101页第79页/共101页第80页/共101页#include void sub() extern int x;/在sub函数内说明全局变量xx+;/若没有对全局变量x进行说明,则无法使用prin

26、tf(sub: %dn,x); extern int x=5; /定义全局变量xmain() sub();x=x+5; /在main函数内全局变量x无须说明,可直接使用printf(main: %dn,x);第81页/共101页n在同一源文件中,允许全局变量和局部变量同名。在局部变量的作用域内,全局变量不起作用。第82页/共101页#include #define N 3#define M 5float aveN;/定义外部变量main()void aver(float stuM);float scoreNM;int i,j;printf(please input scores: );for(

27、i=0;iN;i+)for(j=0;jM;j+)scanf(%f,&scoreij);aver(score);/调用aver函数计算每人平均分for(i=0;iN;i+)printf(ave%d= %f ,i,avei); /输出外部数组ave中各元素值printf(n); 第83页/共101页void aver(float stu5)int m,n;float sum;for(m=0;mN;m+)sum=0;for(n=0;nM;n+)sum+=stumn;avem=sum/5; /每人平均分保存在外部数组ave中第84页/共101页#include main( ) void f(i

28、nt x, int y);/函数f的说明extern int a;/全局变量a的说明int b=6,c=7;/定义局部变量b、cf(b,c);printf(%dt%dt%dn,a,b,c); int a=9,b=8;/定义局部变量a、b printf(%dt%dt%dn,a,b,c); c=10; printf(%dt%dt%dn, a,b,c); printf(%dt%dt%dn,a,b,c); printf(%dt%dt%dn,a,b,c); 第85页/共101页int a = 5; /定义全局变量avoid f(int x, int y)/定义函数f int b,c;/定义局部变量b、c

29、b=a+x; c=a-y;printf(%dt%dt%dn,a,b,c); 第86页/共101页本节内容本节内容 5.7.2 自动变量自动变量 5.7.3 静态变量静态变量 5.7.4 外部变量外部变量 5.7.1 变量的存储方式与生存期变量的存储方式与生存期 5.7.5 寄存器变量寄存器变量第87页/共101页第88页/共101页变量名;第89页/共101页n由于自动变量的作用域和生存期都局限于定义它的个体内(函数或复合语句内), 因此不同的个体中允许使用同名的变量而不会混淆。第90页/共101页#include main() void prt(void);int x=1; int x=3; prt();printf(2nd x=%dn,x); /输出2nd x=3, 复合语句内定义的x有效print

温馨提示

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

评论

0/150

提交评论