c语言程序设计5(函数)

上传人:飞*** 文档编号:54018574 上传时间:2018-09-07 格式:PPT 页数:49 大小:307KB
返回 下载 相关 举报
c语言程序设计5(函数)_第1页
第1页 / 共49页
c语言程序设计5(函数)_第2页
第2页 / 共49页
c语言程序设计5(函数)_第3页
第3页 / 共49页
c语言程序设计5(函数)_第4页
第4页 / 共49页
c语言程序设计5(函数)_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《c语言程序设计5(函数)》由会员分享,可在线阅读,更多相关《c语言程序设计5(函数)(49页珍藏版)》请在金锄头文库上搜索。

1、5.1 函数概述,第5章 程序的组织结构,5.2 标准函数,函数的基本格式 :函数返回类型 函数名(形式参数表)函数体,例:int maxValue(int d1, int d2) if(d1=d2) return d1;else return d2;,函数原型 函数原型不包含函数体的函数声明。 用编译预处理命令include将相应的函数原型加入到程序中。,P127 例1:根据给定的两个坐标点(x1,y1)和(x2,y2),计算两点之间的距离。,问题分析 计算两点之间距离的公式为 d=,在这个公式中含有平方和开平方的运算,可以直接利用C语言提供的标准函数实现这两个运算。,算法描述,#inclu

2、de #include main( ) int x1, y1, x2, y2;double distance;printf(“nEnter 2 coordinates(x1,y1,x2,y2)n“); scanf(“%d%d%d%d“, ,程序代码,P128 例2:掷骰子游戏。 骰子是一个有六个面的正方体,每个面分别印有16之间的小圆点代表点数。假设这个游戏的规则是:两个人轮流掷骰子6次,并将每次投掷的点数累加起来。点数多者获胜;点数相同平局。 请编写程序,模拟这个游戏的过程,并给出玩100盘之后,谁是最终的获胜者。,随机数的产生及应用实例,由于每个人掷骰子所得到的点数是随机的,所以需要借助随

3、机数发生器,每次产生一个16之间的整数,以此模拟玩者掷骰子的点数。 为了计算在每盘中,甲、乙两人所掷的点数,需要定义两个int型变量d1,d2,用于作为记录每个人投掷点数的累加器。 为了记录每个人的获胜盘数,需要再定义两个int型变量c1,c2,用于记录每个人获胜的盘数。,问题分析,算法描述,#include #include main() int d1, d2, c1, c2, i, j;c1 = c2 = 0; /* 初始化 */randomize( ); /* 初始化随机数产生器 */for (i=1; id2)c1+; /* 累加获胜盘数 */else if (d1c2) /* 输出最

4、终获胜者信息 */printf(“nThe first win.“);elseif (c1c2)printf(“nThe second win.“);elseprintf(“They tie.“); ,程序代码,函数的定义 基本格式 函数返回类型 函数名(形式参数表)函数体例: double distance(int x, int y)double d;d = sqrt(x*x+y*y);/*(x,y)到原点之间的距离*/return d;,5.3 自定义函数,C语言规定,一个函数可以有返回值,也可以没有返回值。如果有返回值,返回值的类型在函数名前声明,并在函数体中利用return 语句将返回

5、值返回;如果没有返回值,在函数名前声明void。默认的返回类型是int。 函数名不但应该符合C语言的自定义标识符命名规范,还应该“见名知意”。 参数表是函数之间交换信息的接口。既可以通过它将外界的数据传递给函数,也可以通过它将函数的操作结果带出函数。如果形式参数属于一维数组类型,无须指出一维数组的元素个数。,函数体是函数的核心部分,在这里列出了需要执行的语句序列。,P131 例:int max(int value , int n) int i, maxValue;maxValue=value0;for(i=1; imaxValue)maxValue=valuei;return maxValue

6、;,函数调用语句的基本格式为:函数名(实在参数表); 实在参数与形式参数的数据类型和个数一一对应。,例 求两个数中的最大值 #include void main( ) int a,b,c,max(int x, int y);scanf(“%d,%d”, ,定义函数时,形参 调用函数时,实参,函数的调用,P131 例:计算n个整数的平均值 double average( int value , int num)/*可不指出元素个数*/ int i, sum=0;for( i=0; inum; i+)sum+=valuei;return sum*1.0/num; main( ) int dataA

7、rray100;int n, i;double ave;scanf(“%d”, ,函数的返回值,函数没有返回值在声明函数的时候,函数名前使用了保留字void。用函数调用语句调用。,例: 函数调用的简单例子 #include void main( ) void printstar( ); /*函数声明*/void print_message( ); /*函数声明*/printstar( ); print_message( );printstar( ); void printstar( ) printf(“*n”); void print_message( ) printf(“ How do yo

8、u do!n”); ,输出: *How do you do! *,函数有返回值函数执行完毕后,返回一个相应类型的数值。用return语句返回该值:return 表达式;用函数调用表达式调用。,如: printf(“The average is %6.2f”, average(dataArray, n); ave= average(dataArray, n);,参数的传递,1. 函数调用时,被调函数中的形参被分配临时的存储单元,实参的值赋给形参变量,2. 实参可以是常量、变量或表达式,3. 实参的个数、类型和顺序必须与形参一致,4. 形参与实参各占一个独立的存储空间,调用结束后,形参单元被释放,

9、形参值的改变不会影响实参-值传递,例:P134 main( ) int v1=10, v2=20;printf(“v1=%d v2=%dn”,v1,v2);printf(“_ do swap _n”);swap(v1,v2);printf(“v1=%d v2=%dn”,v1,v2); void swap(int x, int y) int temp;temp=x;x=y;y=temp; ,v1=10 v2=20 _ do swap _,v1=10 v2=20,自定义函数的应用实例,P136 例3:输出“九九表”。 它是一个9行9列的二维表格,加上一个行标题和一个列标题,显示出来应该是10行10

10、列。,#include void drawLine(int n,char ch); /* 连续显示n个ch字符 */ main() int i,j;printf(“n 9.9 tablen“); /* 显示表名 */drawLine(30, =); /* 显示每列的标题 */printf(“n 1 2 3 4 5 6 7 8 9“);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, -);else

11、 drawLine(30, =); ,void drawLine(int n, char ch) /*连续显示n个ch字符*/ int i;putchar(n); /*换行*/for (i=1; i=n; i+)putchar(ch); /*连续显示n个字符ch*/ ,P138 例4:计算 要求精确度达到10-6。,问题分析 在这个公式中,第i项的分子是xi;分母是i!。为了便于计算每一项的数值,设计了两个函数power( )和factorial( ) 分别用来完成计算xi和i!的任务。另外,为了更好地体现模块化的设计思路,再设计一个函数e( ) 用于计算ex。,算法描述,程序代码,long

12、factorial(int n) /* 计算n! */ int i;long f = 1;for (i=2; i= 1E-6 );/* 精度的检查 */return result; ,#include long power(int x, int y); long factorial(int n); double e(int x); main( ) int x;printf(“nEnter x:“);scanf(“%d“, ,#include double e(int x); main( ) int x;printf(“nEnter x:“);scanf(“%d“, ,解二,计算最长文本行 所谓

13、文本行是指以换行符n作为结束标志的文本序列。,用数组名作函数参数地址传递,实参数组与形参数组共占同一段内存单元,P140 例5:从键盘输入一组文本行,求出最长行并且输出。每个文本行的长度不一样; 通过键盘输入文本行,并以空行作为结束标志。,5.4 函数与数组的应用实例,问题分析,从问题的求解要求可知,没有必要保存输入的所有文本行。只需保存已经输入各行中的最长行,以及刚输入的当前行。字符数组maxline保存最长文本行,字符数组line存放当前输入的文本行。整型变量maxlength记录当前最长文本行的长度。,设计一个专门用于计算最长文本行的函数void readline(char maxlin

14、e )。其实现过程为:一边输入文本行保存于数组line、一边与当前最长的文本行长度进行比较。如果新输入的文本行更长,则更新记录最长文本行的信息,最后得到的最长文本行将通过参数带出去。,算法描述,#include #include void readline(char maxline ); main() char maxline80=“;readline(maxline); /* 输入并计算最长行 */printf(“nThe longest line is:n“);puts(maxline); /* 输出最长行 */ ,程序代码,void readline(char maxline ) /* 输入并计算最长文本行 */ char line80;int maxlength; maxlength=0; /*初始化*/line0=0;printf(“nEnter text lines:n“);do int n;gets(line); /*输入文本行*/n = strlen(line);if (nstrlen(maxline) /*与记录的最长文本行进行比较*/maxlength = n; /*更新记录最长文本行的信息*/strcpy(maxline, line); while (n0); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号