程序设计基础第7章.ppt

上传人:牧羊曲112 文档编号:4990984 上传时间:2023-05-28 格式:PPT 页数:69 大小:524KB
返回 下载 相关 举报
程序设计基础第7章.ppt_第1页
第1页 / 共69页
程序设计基础第7章.ppt_第2页
第2页 / 共69页
程序设计基础第7章.ppt_第3页
第3页 / 共69页
程序设计基础第7章.ppt_第4页
第4页 / 共69页
程序设计基础第7章.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《程序设计基础第7章.ppt》由会员分享,可在线阅读,更多相关《程序设计基础第7章.ppt(69页珍藏版)》请在三一办公上搜索。

1、C/C+语言 程 序 设 计,第5章 函数和存储类,学习目标:熟练掌握函数的定义、声明、返回、调用 熟练掌握值调用、传值(指针)调用和引用调用 理解变量的作用域与存储类 了解递归函数的概念与使用方法了解函数指针的概念与使用方法掌握自定义函数的调试方法,5.1 函数的基本概念,一个较大的程序一般应分为若干个程序模块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序来实现模块的功能。函数,就是子程序的一种最常见形式。一个C程序可由一个主函数和若干个函数构成。由主函数调用其它函数,其它函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。要善于利用函数,以减少

2、重复编写程序段的工作量。,一个程序中函数调用的示意图,例题:编写程序,实现功能:输入两个非0整数a和b,然后求得ab和ba并输出结果。,#include void main()int a,b,i;float c;cout a b;c=1;if(b 0)/指数为负整数 for(i=1;i=-b;i+)c=c*a;c=1/c;else/指数为正整数 for(i=1;i=b;i+)c=c*a;,couta 的b次方是c;c=1;if(a 0)/指数为负整数 for(i=1;i=-a;i+)c=c*b;c=1/c;else/指数为正整数 for(i=1;i=a;i+)c=c*b;coutb的a次方是c

3、 endl;,在上面程序中,计算ab和ba各有一段程序,这两段程序极其相似,仅仅是a和b交换位置。可以把其中一段提取出来,构成一个名为f的函数。,#include float f(int x,int y)/形参x、y int i;float r;r=1;if(y 0)/指数为负整数 for(i=1;i=-y;i+)r=r*x;r=1/r;else/指数为正整数 for(i=1;i=y;i+)r=r*x;,return r;void main()int a,b;float c;cout a b;c=f(a,b);/调用函数时,为实参a、bcout a的b次方是c;c=f(b,a);cout b的

4、a次方是cendl;,函数f的函数体包含着计算xy的程序,函数首部的“f(int x,int y)”从形式到含义都与数学中的函数f(x,y)相似,f是函数名,括号中的x和y在数学中称为自变量,在函数首部中称为参数。在数学中,用具体的值代入自变量,就确定了函数值,在程序中,用具体的值a、b或b、a“代入”参数,就能算出函数值。与数学稍有不同的是参数和函数值都要指明类型。,主函数的执行部分,函数f的执行部分,利用系统函数pow,计算乘幂#include#include void main()int a,b;float c;cout a b;c=pow(a,b);cout a 的 b 次方是 c;c

5、=pow(b,a);cout b 的 a 次方是 c endl;,程序的执行从main函数开始,调用其它函数后流程回到main函数,在main函数中结束整个程序的运行。所有的函数都是平行的,即在定义函数时是互相独立的,一个函数并不从属于另一函数,即函数不能嵌套定义,main函数也不例外。除main函数之外,函数之间可以互相调用。main函数可以调用任何一个函数,但其他任何函数都不能调用main函数,main函数是被操作系统调用执行的。程序中使用的函数包括:系统提供的标准库函数,如cin,cout,pow、getch、getche、sqrt、strcpy、strcmp等都是库函;用户自定义函数,

6、如本例中f(x,y)。,5.2.1函数的定义函数定义必须遵照C+规定的格式。任何函数都由函数首部和函数体组成,与主函数一样。,例 无参函数 printstar()printf(“*n”);或 printstar(void)printf(“*n”);,例 有参函数 int max(int x,int y)int z;z=xy?x:y;return(z);,5.2函数的定义和调用,合法标识符,函数返回值类型缺省int型无返回值void,函数体,类型标识符表示函数值的数据类型,当函数有返回值时,在函数名的前面应加上返回值的类型说明。象前面出现过的主函数那样,只执行一系列语句,不要求函数产生返回值的,

7、类型标识符是void(或void main(void)。当函数的返回值为整型时,函数名前的数据类型int可以省略。形参表中列出函数的全部参数,中间用逗号分隔。每个参数除了参数名外,还要指定数据类型,例如:(int x,int y)之所以称为形参,是因为它们还没有真实的值。形参表中的每个参数都有双重的作用:对外,表示一个在调用函数时需要“代入”的位置;对内,相当于声明了一个变量,在函数体中可以直接使用这个变量。如果形参的数据类型是一维数组,那么方括号中的元素个数可以空缺。,实参可以是常量、变量或表达式,如max(3,a+b);但要求它们有确定的值。在调用时将实参的值赋给形参变量(若形参是数组名,

8、则传递的是数组首地址而不是变量的值)。没有参数的函数没有形参表,但一对圆括号不能缺少,前面出现过的主函数都是这样的函数。函数体的格式与主函数没有差别,都写在和之间。可以有“空函数”,它的形式为:类型标识符 函数名()调用此函数时,什么工作也不做,没有任何实际作用。用作今后函数功能的扩充。,5.2.2函数的调用函数调用的一般形式是 函数名(实参表)实参表中列出实际“代入”的参数,参数的个数、次序应当与形参表所列的一致,中间用逗号分隔。每个实参都是一个表达式,表达式的类型必须与对应形参的类型兼容。如果参数个数为0,实参表是空的,但一对括号仍然要有,调用库函数getch、getche时就是这样。函数

9、调用作为表达式,可以出现在程序中任何允许出现表达式的场合。例如:c=f(a,b);cout a 的 b 次方是 c;或合并成一句 cout a 的 b 次方是 f(a,b);又如 c=max(f(a,b),f(b,a);/max是调用另一个函数,f(a,b)和f(b,a)作为函数max的两个实参,5.2.3函数的声明函数可以先定义后调用,也可以调用的函数出现在函数定义之前,即先调用,后定义。这样做的好处是使整个源程序呈现主干在前、枝节在后的结构,便于阅读和理解。如果函数a调用函数b,并且函数b的定义出现在函数a之后,那么,在函数a首次调用b之前,必须先对函数b加以说明,这就是函数声明(函数原型

10、)。函数声明的一般形式是 类型标识符 函数名(形参表);函数声明与后面函数定义中的函数首部相比:1、两者的函数名、函数类型完全相同。2、两者中形参的数量、次序、类型完全一致。3、函数声明中的形参名字没有任何作用,可与函数定义中的形参名字相同,也可不同,甚至可完全省略。4、函数声明以分号结束,而函数首部不能有分号。,如果函数a调用函数b,b的函数声明写在函数a的声明部分,只对函数a中的调用有效.void a()void b();void b(),b的函数声明写在函数a的定义之外,使位于声明之后的所有函数都能调用函数b。void b();void a()void b(),1、首先被调用的函数必须是

11、已经存在的函数(是库函数或用户自己定义的函数,若使用库函数,一般要在本文件开头添加预处理命令)。2、如果使用用户自己定义的函数,而且该函数与调用它的函数(即主调函数)在同一个文件中,一般还应该在主调函数对被调用函数的返回值的类型作说明。,函数声明与函数定义是两个不同的概念。函数声明只表明函数的外在特性:调用时需要多少参数,分别是什么类型,返回的函数值是什么类型。而函数定义是对一个函数的完整描述,不但表明外在特性,而且表明函数的功能怎样实现。因此,当函数定义出现在函数调用之前时,不必再有函数声明,而即使有了函数声明,函数定义也不能缺少。说明:,5.3函数的返回值及其类型返回语句的一般格式是 re

12、turn 表达式;或 return(表达式);功能:结束函数的执行,并且将表达式的值作为函数的值带回给调用者。注意:函数中可有多个return语句。若无return语句,遇时,自动返回调用函数。C语言允许在没有返回值的函数中使用return语句,以便立即结束函数的执行,将程序的执行流程返回到调用函数中。,函数值的类型。既然函数有返回值,这个值当然应属于某一个确定的类型,应当在定义函数时指定函数值的类型。例如:int max(float x,float y)/函数值为整型 char letter(char c1,char c2)/函数值为字符型凡不加类型说明的函数,一律自动按整型处理。若函数值类

13、型和return语句中表达式的值不一致,则以函数类型为准。对数值型数据,可自动进行类型转换。即函数类型决定返回值的类型。(若函数的类型为float,定义return值的类型为int)warning:return:conversion from int to float,possible loss of data如果被调用函数中没有return语句,并不带回一个确定的、用户所希望得到的函数值,但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。为了明确表示“不带回值”,可以用“void”定义“无类型”(或称“空类型”)。,例54编一程序,求s=1+2233nn/分析:程序

14、将n作为函数参数,函数计算结果通过return语句返回调用程序,再累加到变量s中。#include long power(int n)int i;long t=1;for(i=1;in;for(i=1;i=n;i+)s+=power(i);coutsendl;,5.4函数参数及其传递方式函数的参数表是函数与调用者之间传递数据的通道,参数表中的每一个形参,都是函数内部的一个变量。例如:函数f的函数首部是float f(int x,int y),那么x和y在f的函数体内就是两个变量。用语句c=f(a,b)调用函数f时,a、b是对应x、y的实参。实参的值首先被自动地赋给对应的形参,然后才开始执行函数

15、体中的语句。我们不妨把这一传递过程,想象为执行一句赋值语句,等号的左边是形参,右边是实参。形参与实参形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中的表达式,例 比较两个数并输出大者,#include int max(int x,int y);void main()int a,b,c;cinab;c=max(a,b);couty?x:y;return(z);,说明:实参必须有确定的值 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换函数调用转换 形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放,参

16、数传递方式,值传递方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值特点:形参与实参占用不同的内存单元单向传递,例 交换两个数,#include void swap(int a,int b)int temp;temp=a;a=b;b=temp;couta=atb=bendl;void main()int x=7,y=11;coutx=xty=yendl;coutswapped:endl;swap(x,y);coutx=xty=yendl;,11,11,7,地址传递方式:函数调用时,将数据的存储地址作为参数传递给形参特点:形参与实参占用

17、同样的存储单元“双向”传递实参和形参必须是地址常量或变量,#include void swap(int*p1,int*p2)int p;p=*p1;*p1=*p2;*p2=p;void main()int x=7,y=11;coutx=xty=yendl;coutswapped:endl;swap(,例 交换两个数,数组作为函数参数,数组元素作函数实参与变量作实参一样,是单向传递,“值传递”方式。在未出现函数调用时,它们并不占内存中的存储单元。只有在发生调用时函数中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。形参的值如果发生改变,并不会改变主调函数的实参的值。数组名作函数

18、参数数组名作函数参数时,是“地址传递”,是把实参数组的起始地址传递给形参数组,两个数组共占同一段内存单元。形参数组中各元素的值如发生变化会使实参数组元素的值同时发生变化。在主调函数与被调函数分别定义数组,且类型应一致,如不一致,结果将出错。形参数组大小(多维数组第一维)可不指定。形参数组名是地址变量。,例 求学生的平均成绩,#include float average(int stu10,int n);void main()int score10,i;float av;coutscorei;av=average(score,10);coutAverage is:avendl;,float av

19、erage(int stu10,int n)int i;float av,total=0;for(i=0;in;i+)total+=stui;av=total/n;return av;,实参用数组名,形参用数组定义,int stu,例 数组元素与 数组名作函数参数比较,#include void swap2(int x,int y)int z;z=x;x=y;y=z;void main()int a2=1,2;swap2(a0,a1);couta0=a0endla1=a1endl;,值传递,#include void swap2(int x)int z;z=x0;x0=x1;x1=z;void

20、 main()int a2=1,2;swap2(a);couta0=a0endla1=a1endl;,地址传递,例 数组元素与 数组名作函数参数比较,例 数组排序-简单选择排序,9,49,i=0,例 数组排序-简单选择排序,13,68,i=1,i=8,例 数组排序-简单选择排序,引用调用在函数的形参表中,在参数名前面加上地址运算符“&”,就表示这个参数的传递方式是引用调用。但是,在调用函数时,与此对应的实参仍然只写变量名,不要加“&”。使用引用调用的形参,虽然在函数内部也当作变量使用,但C+并不为它安排自己的存储区域,它用的就是实参的存储区域,换句话说,引用调用的形参与实参其实是同一个变量,只

21、不过在函数内部暂时改用另一个名字罢了。既然是同一个变量,在函数调用时,就不需要从实参向形参赋值,如果在函数执行过程中,改变了形参的值,那么函数返回后,实参的值当然有同样的改变。,引用调用实际上是把实参变量的地址信息传递给函数,而在函数体内,则把这个地址当作形参的地址。如果要让函数f的两个参数都使用引用调用,形参表的写法是:(int&x,int&y)这种用“&”来表示引用调用的方法适用于各种类型的参数,但有一个例外:数组类型的形参,不允许使用“&”,也不必使用“&”,因为对数组类型的参数,C+在参数传递时一定采用类似引用调用的方式。正因为不需要为数组类型的形参专门分配存储空间,所以一维数组变量名

22、后面的方括号中可以空缺元素个数(对二维数组,为了正确划分行列,只能空缺第一个方括号中的元素个数)。,使用引用调用的参数或数组参数,函数的执行部分能通过对形参的赋值去改变实参的值;使用指针类型的参数,函数的执行部分也能通过指针找到调用者的变量,直接对其赋值。C+提供的库函数,普遍使用指针类型的参数来传递数据。如果一个形参是某种类型的指针,则实参通常也应当是同样类型的指针,但数组仍然是特殊情况。例如,库函数strcpy有两个形参,都是字符类型的指针变量,调用这个函数时,实参既可以是字符类型的指针,也可以是字符数组,因为引用字符数组名就相当于引用字符型的指针变量。我们在前面使用strcpy时,就是直

23、接以字符串作为实参的。这一特殊情况并不限于字符类型,任何其他类型指针的形参,都可以用相同元素类型的数组名作为实参。,例 交换两个数,#include void swap(int,引用调用,5.5函数的嵌套与递归调用,嵌套调用C规定:函数定义不可嵌套,但可以嵌套调用函数,例 求三个数中最大数和最小数的差值,#include int dif(int x,int y,int z);int max(int x,int y,int z);int min(int x,int y,int z);void main()int a,b,c,d;cinabc;d=dif(a,b,c);coutMax-Min=de

24、ndl;,int dif(int x,int y,int z)return max(x,y,z)-min(x,y,z);int max(int x,int y,int z)int r;r=xy?x:y;return(rz?r:z);int min(int x,int y,int z)int r;r=xy?x:y;return(rz?r:z);,递归调用定义:函数直接或间接的调用自身叫函数的递归调用,说明 C编译系统对递归函数的自调用次数没有限制 每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出,int f(int x)int y,z;z=

25、f(y);.return(2*z);,例 求n的阶乘,#include int fac(int n)int f;if(nn;y=fac(n);coutn!=yendl;,例 求第n个Fibonaci数,#include int fab(int n)if(n=0|n=1)return 1;else return(fab(n-1)+fab(n-2);void main()int n,y;coutn;y=fab(n);coutfab(n)=yendl;,5.6变量的作用域和存储类,变量的属性 数据类型:变量所持有的数据的性质(操作属性)存储属性存储器类型:寄存器、静态存储区、动态存储区生存期:变量在

26、某一时刻存在-静态变量与动态变量作用域:变量在某区域内有效-局部变量与全局变量 变量的存储类型 auto-自动型 register-寄存器型 static-静态型 extern-外部型变量定义格式:存储类型 数据类型 变量表;,如:int sum;auto int a,b,c;register int i;static float x,y;,5.6.1变量的作用域 局部变量与全局变量C+有以下的规定:1、在函数内部声明的变量,包括形参表中列出的形参,称为这个函数的局部变量(或内部变量);在函数之外声明的变量,称为全局变量(或外部变量)。2、函数的局部变量,只在函数内部有效,或者说,局部变量的作

27、用域是其所在的函数。3、全局变量,对声明位置以后的所有函数有效,或者说,全局变量的作用域,是从声明位置开始直到整个程序结束。4、如果局部变量的作用域与同名全局变量的作用域重叠,那么在重叠的范围内,那个全局变量无效。,局部变量又分为动态和静态两种,本书中出现过的局部变量都是动态局部变量,如果在声明局部变量时加上“static”。例如static int i声明了一个静态局部整型变量i 变量都要用存储空间来保存自己的值。全局变量和静态局部变量一旦占用空间,要到程序运行结束才会释放;动态局部变量只在函数被调用时占用存储空间,函数运行结束立即释放,但是,数组或其他采用引用调用的形参是例外,它们根本不占

28、用新的空间。如果为局部变量指定初值,那么,对于静态局部变量,这个初值只在开始时一次赋给变量;而对于动态局部变量,这个初值在函数每次执行时都要赋给。,占用空间方式的差别带来了性能的差别。函数执行结束时,动态局部变量的值随着空间的释放而失去意义;而全局变量和静态局部变量的值,能够一直保持到再次赋值或程序运行结束。这里要注意,一直保持着值,不等于一直能使用,作用域的限制仍然起作用。在复合语句中定义的变量也是局部变量,其作用域仅仅是所在的复合语句。在程序中尽量不要使用全局变量:1、使用全局变量的函数的通用性降低了,把这样的函数移植到其他程序时,需要将有关的外部变量及其值一起移过去,既不方便,又容易造成

29、外部变量之间的同名冲突。2、使用全局变量过多,会给阅读和修改程序带来困难,因为一个变量的值会牵涉到多个函数。3、全局变量在程序的整个执行过程中都占用着存储空间,降低了内存的使用效率。,/*功能观察全局变量与局部变量的差异之一*/#include int a=3,b=5;/a、b为全局变量 int max(int a,int b);void main()int a=8;/a为局部变量 cout b?a:b;/有了局部变量a、b全局变量a、b不起作用 return c;,/*功能观察全局变量与局部变量的差异之二*/#include iostream.h int sum(int k);void ma

30、in(void)int s,i;for(i=1;i=5;i+)s=sum(i);cout s endl;int sum(int k)static int x=0;return(x-=k);,/*功能观察全局变量与局部变量的差异之三*/#include int f(int);void main()int a=2,i;for(i=1;i=3;i+)cout f(a)n;int f(int a)int b=0;static int c=3;b=b+1;c=c+1;return(a+b+c);,5.6.2变量的存储类 动态变量与静态变量 存储方式静态存储:程序运行期间分配固定存储空间动态存储:程序运行

31、期间根据需要动态分配存储空间,生存期静态变量:从程序开始执行到程序结束动态变量:从包含该变量定义的函数开始执行至函数执行结束,变量存储类型,局部变量默认为auto型register型变量个数受限,且不能为long,double,float型局部static变量具有全局寿命和局部可见性局部static变量具有可继承性extern不是变量定义,可扩展外部变量作用域,例 文件file1.cint a;main().f2;.f1;.f1()auto int b;f2;.f2()static int c;,例 auto 变量的作用域,#include void main()int x=1;void pr

32、t(void);int x=3;prt();cout2nd x=xendl;cout1st x=xendl;void prt(void)int x=5;cout3th x=xendl;,运行结果:3th x=52nd x=31st x=1,#include iostream.hvoid main()void increment(void);increment();increment();increment();void increment(void)int x=0;x+;coutxendl;,例 局部静态变量值具有可继承性,运行结果:1 1 1,#include iostream.hvoid

33、main()void increment(void);increment();increment();increment();void increment(void)static int x=0;x+;coutxendl;,运行结果:1 2 3,外部变量在函数外定义的变量没有指定其存储类别,就是一个外部变量。外部变量是全局变量,其有效范围:从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件。,应尽量少使用全局变量,因为:全局变量在程序全部执行过程中占用存储单元降低了函数的通用性、可靠性,可移植性降低程序清晰性,容易出错,定义 说明次数:只能1次 可说明多次位置:所有函数之外

34、函数内或函数外分配内存:分配内存,可初始化 不分配内存,不可初始化,外部变量说明:extern 数据类型 变量表;,外部变量定义与外部变量说明不同,若外部变量与局部变量同名,则外部变量被屏蔽,外部变量可用存储类型:缺省 或 static,extern char c1,c2;,extern char c1,c2;,外部变量在引用外部变量的文件中的所有函数外部,应使用extern对外部变量进行说明,目的是说明使用的变量是在其他的文件中定义过的全局变量,本文件不再为其分配内在。这种说明一般应在文件的开头且位于所有函数的外面,也可在函数内部。extern只能说明变量而不能定义变量。不能用extern来

35、初始化变量。如:extern int x=100;是错误的。,#include iostream.hvoid main()void gx(),gy();extern int x,y;cout1:x=xty=yendl;y=246;gx();gy();void gx()extern int x,y;x=135;cout2:x=xty=yendl;int x,y;void gy()cout3:x=xty=yendl;,例 用extern扩展外部变量作用域,运行结果:1:x=0 y=02:x=135 y=2463:x=135 y=246,例题:编写程序,实现功能:从键盘输入3个整数,然后输出其中最小

36、的一个。要求定义并使用求两数中较小者的函数int min(int x,int y),输入与输出由主函数完成。#include int min(int x,int y);/声明函数min void main()int a,b,c,m;cin a b c;m=min(a,b);/调用函数min,得到a、b中的较小者 m=min(m,c);/调用函数min,在a、b中的较小者与c之中找出最小者 cout m n;int min(int x,int y)/定义函数min if(x y)return x;else return y;,例题:编写程序,实现功能:从键盘输入两个整数,然后输出两数之和。要求定

37、义并使用求两数之和的函数int add(int x,int y),输入与输出由主函数完成。#include int add(int x,int y);/声明函数add void main()int a,b;cin a b;cout add(a,b)n;/调用函数add int add(int x,int y)/定义函数add return x+y;/返回函数值x+y,例题:编写程序,实现功能:从键盘读入一个字符串,输出其中所有小写字符。要求定义函数islower(char ch),检查ch是否小写字母,是则返回1,否则返回0。主函数完成键盘输入和屏幕输出。#include int islowe

38、r(int ch);/声明函数islower void main()char str256;int i;cin str;i=0;while(stri!=0)if(islower(stri)/调用函数islower返回值1时即为真 cout stri;i+;cout n;,int islower(int ch)/定义函数islower返回值为1或0 if(ch=a),例题:编写程序,实现功能:从键盘输入行数和一个字符,然后显示由此字符组成的三角形(右图是行数为3,字符为星号时的显示情况)。要求定义并使用显示三角形的函数void draw_t(int n,char ch),主函数完成键盘输入。#i

39、nclude void draw_t(int n,char ch);void main()char ch;int n;cin n;/图形行数cin ch;/组成图形的字符draw_t(n,ch);,void draw_t(int n,char ch)int i,j;for(i=1;i=n;i+)for(j=1;j=2*i-1;j+)cout ch;cout n;,*,例题:编写程序,实现功能:从键盘输入行数、列数和一个字符,然后显示由此字符组成的空心矩形(下图是行数为4,列数为9,字符为“#”时的显示情况)。要求定义并使用显示空心矩形的函数void draw_r(int m,int n,cha

40、r ch),主函数完成键盘输入。#include void draw_r(int m,int n,char ch);void main()char ch;int m,n;cin m;/图形的行数cin n;/图形的列数cin ch;/组成图形的字符draw_r(m,n,ch);void draw_r(int m,int n,char ch)int i,j;,#,for(j=1;j=n;j+)cout ch;cout n;for(i=1;i=m-2;i+)cout ch;for(j=1;j=n-2;j+)cout;cout ch n;for(j=1;j=n;j+)cout ch;cout n;,

41、例题:编写程序,实现功能:从键盘输入10个整数,然后输出它们的和。要求定义并使用为数组求和的函数int sum(int b)。#include int sum(int b);void main()int a10;int i,s;for(i=0;i ai;s=sum(a);cout s n;,int sum(int b)int i,sum=0;for(i=0;i 10;i+)sum=sum+bi;return sum;,例题:编写程序,实现功能:先从键盘指定个数,再按此个数输入整数,然后输出它们的平均值。要求定义并使用对数组前n个元素求和的函数float aver_n(int b,int n)。

42、#include#define MAX 10 float aver_n(int b,int n);void main()int aMAX;int n,i;cin n;/累加的数的个数for(i=0;i ai;cout aver_n(a,n)n;,float aver_n(int b,int n)int i;float s=0;for(i=0;i n;i+)s=s+bi;return s/n;,例题:编写程序,实现功能:先从键盘指定个数,再按此个数输入整数,然后按从大到小的次序输出。要求定义并使用为数组前n个元素排序的函数void sort_n(int b,int n)。,#include#de

43、fine MAX 10 void sort_n(int b,int n);void main()int aMAX;int m,i;cin m;for(i=0;i ai;sort_n(a,m);for(i=0;i m;i+)cout ai;cout n;,void sort_n(int b,int n)int i,j,max,max_index;for(i=0;i max)max=bj;max_index=j;bmax_index=bi;bi=max;,字典序是按照字典来进行排序,即根据ASCII码由小到大排序。习题:1、编写程序,实现功能:在main函数中,读入一行长度小于20的字符串;然后调

44、用名为“process”的函数,统计出该字符串中数字字符的个数,返回统计结果(如输入aBc$990,输出3)2、编写程序,实现功能:在main函数中,读入一行长度小于20的字符串;然后调用名为“process”的函数,统计出该字符串中非字母字符的个数,返回统计结果(如输入aBc$990,输出4)3、编写程序,实现功能:在main函数中,读入一行长度小于20的字符串;然后调用名为“process”的函数,将字符串中的所有大写字母转换成小写字母,返回统计结果(如输入aBc$990,输出abc$990),4、编写程序,实现功能:在main函数中,读入一行长度小于20的字符串;然后调用名为“process”的函数,将字符串中,在所有非字母字符处,用“”字符取代,返回统计结果(如输入aBc$990,输出abc#)5、编写程序,实现功能:在main函数中,读入以空格分隔的两个整数,依次赋给变量a和b,然后调用名为“process”的函数,进行判断,若ab,则返回a-b的值;否则返回b-a的值;最后在main函数中,返回结果。6、编写程序,实现功能:在main函数中,读入以空格分隔的两个整数,依次赋给变量a和b,然后调用名为“process”的函数,返回a和b中的小者;最后在main函数中,返回结果。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号