lesson13程序的组织结构函数调用

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2019/9/9电气与信息工程学院计算机系制作Lesson13程序的组织结构2019/9/9电气与信息工程学院计算机系制作学习目标:31学会使用结构化程序设计方法编写程序2019/9/9电气与信息工程学院计算机系制作3函数调用2函数编写原则1、将比较复杂的问题分解成小问题(函数),以简化程序设计2、将经常用的、公共的功能定义成函数,以在程序中重用2019/9/9电气与信息工程学院计算机系制作3函数调用2练习1:从键盘输入一个数n,输出他的所有质因子,例如输入30输出235要求:1、定义一个函数isPrime(intx)。函数的功能:如果x是质数,返回1,否则返回02、在主函数中,从2循环到n/2,将是n的因子,并且是质数的输出2019/9/9电气与信息工程学院计算机系制作3函数应用3例3:输出乘法口诀表。2019/9/9电气与信息工程学院计算机系制作3函数应用3例3:输出乘法口诀表。分析:它是一个9行9列的二维表格,加上一个行标题和一个列标题,显示出来应该是10行10列。2019/9/9电气与信息工程学院计算机系制作3函数应用3问题分析行与行之间采用若干个“=”或“-”字符表示表格之间的线段,为此,可以定义一个函数,专门用来连续地显示若干个字符,以避免在每次需要显示线段的时候,都重复地书写相应的语句序列。(重用)2019/9/9电气与信息工程学院计算机系制作#includestdio.hvoiddrawLine(intn,charch);/*连续显示n个ch字符*/intmain(){inti,j;printf(\n9.9table\n);/*显示表名*/drawLine(30,'=');/*显示每列的标题*/printf(\n123456789);drawLine(30,'=');for(i=1;i=9;i++){/*显示每行的内容*/printf(\n%3d,i);for(j=1;j=9;j++)printf(%3d,i*j);if(i9)drawLine(30,'-');elsedrawLine(30,'=');}return0;}lesson13_03.c2019/9/9电气与信息工程学院计算机系制作voiddrawLine(intn,charch)/*连续显示n个ch字符*/{inti;putchar('\n');/*换行*/for(i=1;i=n;i++)putchar(ch);/*连续显示n个字符ch*/return;}2019/9/9电气与信息工程学院计算机系制作3函数应用3从键盘输入图形的行数,按照如下规则输出图形,例如行数等于5的图形如下:*************************课堂练习2019/9/9电气与信息工程学院计算机系制作3函数应用3提示:1、定义函数printSpace(intn),输出n个空格2、定义函数printStar(intn),输出n个*号3、在主函数根据图形的行数循环,调用前面的函数输出图形的每一行2019/9/9电气与信息工程学院计算机系制作3函数调用2函数调用的一般形式:函数名(实参列表);形式参数(形参):定义函数时写在函数名后括号内的变量,形参前必须有数据类型intfun(intn)实际参数(实参):调用函数时写在函数名后括号内的变量,实参仅写变量名sum+=fun(i)2019/9/9电气与信息工程学院计算机系制作3函数调用2参数的传递当函数没有执行时,参数此时并不存在,只是用来说明在调用这个函数时需要在这个位置向函数提供的数据类型。在调用函数之后,参数传递需要经历两个基本步骤:首先,根据形式参数的声明格式,为每一个形式参数分配存储空间;然后再将实在参数的值赋给对应的形式参数。2019/9/9电气与信息工程学院计算机系制作3函数调用2c=max(a,b);max(intx,inty){intz;z=xy?x:y;return(z);}intmax(intx,inty);intmain(){inta,b,c;scanf(%d,%d,&a,&b);c=max(a,b);printf(Maxis%d,c);return0;}intmax(intx,inty){intz;z=xy?x:y;return(z);}形参实参例1:函数执行过程lesson13_01.c2019/9/9电气与信息工程学院计算机系制作3函数调用2例2:参数传递,分析程序结果#includestdio.hintmain(){intx=7,y=11;printf(x=%d,y=%d\n,x,y);printf(swapped:\n);swap(x,y);printf(x=%d,y=%d\n,x,y);}swap(inta,intb){inttemp;temp=a;a=b;b=temp;}711x:y:调用前:调用结束:711x:y:调用:711a:b:711x:y:swap:711x:y:117a:b:temp实参和形参是单向值传递!一般地在函数体中修改形参的值是不会影响实参的!lesson13_02.c2019/9/9电气与信息工程学院计算机系制作分析如下程序的执行结果#includestdio.hintfun(intn,ints);intmain(){intsum=0;fun(5,sum);printf(sum=%d,sum);}intfun(intn,ints){inti=0;for(i=1,s=0;i=n;i++)s+=i;returns;}2019/9/9电气与信息工程学院计算机系制作3函数应用3例4:计算要求精确度达到10-6。...!nx...!3x!2xx1en32x2019/9/9电气与信息工程学院计算机系制作3函数应用3问题分析在这个公式中,第i项的分子是xi;分母是i!。为了便于计算每一项的数值,设计了两个函数power()和factorial()分别用来完成计算xi和i!的任务。另外,为了更好地体现模块化的设计思路,再设计一个函数e()用于计算ex。2019/9/9电气与信息工程学院计算机系制作算法描述开始结束1result1iresult+tmpresulti+1ireturnresultxi/i!tmp精度不够YN2019/9/9电气与信息工程学院计算机系制作#includestdio.hlongpower(intx,inty);longfactorial(intn);doublee(intx);intmain(){intx;printf(\nEnterx:);scanf(%d,&x);printf(\ne^%d=%f,x,e(x));return0;}longpower(intx,inty)/*计算xy*/{longp=1;inti;for(i=1;i=y;i++)p=p*x;returnp;}2019/9/9电气与信息工程学院计算机系制作longfactorial(intn)/*计算n!*/{inti;longf=1;for(i=2;i=n;i++)f=f*i;returnf;}doublee(intx)/*计算ex*/{doubleresult=1.0,tmp;inti=1;do{tmp=power(x,i)*1.0/factorial(i);i++;result+=tmp;}while(tmp=1E-6);/*精度的检查*/returnresult;}2019/9/9电气与信息工程学院计算机系制作3课堂练习4!nm*!!(n-m)计算下式,n和m从键盘输入2019/9/9电气与信息工程学院计算机系制作3函数应用3例5:从键盘输入一组文本行,求出最长行并且输出。2019/9/9电气与信息工程学院计算机系制作3函数应用3问题分析从问题的求解要求可知,没有必要保存输入的所有文本行。只需保存已经输入各行中的最长行,以及刚输入的当前行。设计一个专门用于计算最长文本行的函数voidreadline(charmaxline[])。其实现过程为:一边输入文本行保存于数组line、一边与当前最长的文本行长度进行比较。如果新输入的文本行更长,则更新记录最长文本行的信息,最后得到的最长文本行将通过参数带出去。2019/9/9电气与信息工程学院计算机系制作算法描述开始结束0maxlength‘\0’line[0]非空行YN新长度maxlength保存新的最长行输入文本行lineline更长YN2019/9/9电气与信息工程学院计算机系制作#includestdio.h#includestring.hvoidreadline(charmaxline[]);intmain(){charmaxline[80]=;readline(maxline);/*输入并计算最长行*/printf(\nThelongestlineis:\n);puts(maxline);/*输出最长行*/return0;}lesson13_05.c2019/9/9电气与信息工程学院计算机系制作voidreadline(charmaxline[])/*输入并计算最长文本行*/{charline[80];intmaxlength,n;maxlength=0;/*初始化*/line[0]='\0';printf(\nEntertextlines:\n);do{gets(line);/*输入文本行*/n=strlen(line);if(nstrlen(maxline)){/*与记录的最长文本行进行比较*/maxlength=n;/*更新记录最长文本行的信息*/strcpy(maxline,line);}}while(n0);return;}2019/9/9电气与信息工程学院计算机系制作编写程序,将从键盘输入的字符串两头的空格去掉后输出。例如输入的字符串是”ABC”,输出”ABC”要求:1、定义函数trim(chars[]),函数的功能是将字符串两头的空格去掉2、在主函数中调用trim函数将从键盘输入的字符串两头的空格去掉后输出3课堂练习52019/9/9电气与信息工程学院计算机系制作3递归算法与递归函数6C语言允许函数1、嵌套调用,即在函数中可以调用其它的函数。2、递归调用,即在函数内部直接地调用自己。2019/9/9电气与信息工程学院计算机系制作3递归算法与递归函数6f()调f调f2调f1f1()f2()intf(intx){inty,z;……z=f(y);…….return(2*z);}intf1(intx){inty,z;……z=f2(y);…….return(2*z);}intf2(intt){inta,c;……c=f1(a);…….return(3+c);}2019/9/9电气与信息工程学院计算机系制作3递归算法与递归函数6例6:计算阶乘的函数n!=n*(n-1)*(n-2)*…*2*1n!=n*(n-1)*(n-2)*…*2*1n!=n*(n-1)!1!=1递归关系终止条件算n!,必须算出(n-1)!;计算出(n-1)!,必须计算出(n-2)!;…;由此类推,直到推到1!=1,返回后即可依次计算出2!,3!,…,(n-1)!,n!。2019/9/9电气与信息工程学院计算机系制作3递归算法与递归函数6当求解一个问题时,如果求解过程又用到自己则可以使用递归求解)1()!1()1,0(1!nnnnnfloatfac(intn){floatf;returnf;}if(n==0||n==1)f=1;elsef=fac(n-1)*n;intmain(){floaty;intn;printf(“输入:);scanf(%d,&n);y=fac(n);printf(%d!=%.0f,n,y);return0;}lesson13_06.c2019/9/9电气与信息工程学院计算机系制作3递归算法与递归函数6main函数输入m3y=fac(m)输出y6调用facmn3因3!=1或0f=3*fac(

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功