资源描述
C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C语言复习第十节,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,C语言复习第十节,C,语言复习第十节,假设定义数组:int a108;问数组共有多少元素?在内存中存储时占多少字节?如何在内存中存放?最后一个单元的元素下标是多少?,2,7.3 字符数组,字符数组是用来存放字符数据的数组,数组中的每个元素只能存放一个字符。,一、定义,形式:char c5,包含5个元素:c0、c1.c4,c0 c1 c2 c3 c4,C h i n a,说明:由于机器内实际存放的是字符的ASCII码值整型数,故上面的定义也可以是:,int c5;,3,二、赋初值,同一维数组类似。,1。定义时赋初值,如:char c5=C,h,i,n,a;,不能超过5个字符,假设少于5个,后面的赋给空字符“0。,说明:1假设字符个数与数组长度一样时,可以不指定数组长度。如:,char c=H,o,w,a,r,e,y,o,u;,系统可以自动定义c数组的长度为11,即c11,2。用赋值语句-必逐个赋值.,如:chr c3;c0=A;c1=B;c2=C;,4,三、字符串和字符串完毕标志,C语言中将字符串用字符数组来表示。,1。用“0作为字符串的完毕标志。“0是ASCII码值为“0的空操作,在此表示字符串完毕。,2。字符串常量的初始化,前面讲初始化时,一个一个字符写,也可简单。,如:char c=“How are you;,或:char c=“How are you;,系统可以自动识别c数组的长度为12,,相当于:char c=H,o,w,a,r,e,y,o,u,0;,H o w a r e y o u 0,5,四、字符数组的输入输出,一字符数组的输入,1。用scanf函数,1用格式符%c:一次输入一个单字符。,如:char str6;int i;,for (i=0;iy?x:y;,return(z),14,C,语言复习第十节,一、一般形式,:,类型标识符 函数名,(,形式参数列表,),变量说明,语句,如:,int max(int x,int y),int z;,z=xy?x:y;,return(z),定义一个求绝对值函数,abs,?,float abs(float x),float y;,y=(x=0)?x:-x;,return(y),说明:1.类型标识符为函数的数据类型,表示了该函数返回值的数据类型.假设不加类型说明按整型.,2.无参函数无形参列表,也可无类型(因无返回值)。,15,3.,形参类型说明既可在参数列表中,也可在函数体外给出。如:形式参数说明的传统方式,int max(x,y),int x,y,;,.,4.,变量说明不能写在函数体外,如:,int z .,5.,空函数,形式,:,类型说明符 函数名,(),如,:dummy(),表示该函数什么也不作,.,通常程序中将一些要调用的函数处,加一空函数。将后来编好的函数可以加在此处。,16,C,语言复习第十节,一、形参与实参:,形参:函数定义中的参数在被调函数中。,实参:调用函数时,给出的参数,在主调函数中,调用函数时,大都有值传递关系,即将主调函数实参送到被调函数的形参。调用后,被调函数将函数值再传回主调函数,int max(int x,int y),int z;,z=xy?x:y;,return(z),如:,d=max(a,b);,m=max(c,d);,a,b x,y;zd,c,d x,y;z m,每次把最大值返给主调函数,17,例1:求a,b,c三个数中的最大值。,main,int a,b,c,d,m;,scanf(“%d,%d,%d,_,_,printf(“max is%dn,m);/*输出结果*/,d=max(a,b);m=max(c,d);,m=max(max(a,b),c);,主函数:,定义;,输入;,调用函数计算或处理;,输出;,子函数:,处理:实现函数功能,int max(int x,int y);,int z ;,if (xy)z=x;,else z=y;,return(z);/*,将,z,值返回*,/,总结规律?,两步合一,用,if,语句写函数,18,C,语言复习第十节,1.定义函数时,形参必指定类型int x,int y)。,2.实参与形参类型应一致。字符型和整型可通用。,3。实参可以是常量,变量或表达式。但变量和表达式要有确定 的值。,如:a=1,b=2;max(a*b,a+b);,4.参数的传递是“值传递,即单向传递。,数据只能由“实参“形参,不能由“形参“实参,19,如:将上例改动一下:a=1,b=2;,d=max(a+2,b);,参数传递:int max(int x,int y),a 1 b 2 a 1 b 2,x 3 y 2 x 3 y 2,完毕后,x的3并不送回a.,5.值传递前,形参x,y并未分配内存单元。,调用完毕后,形参所占内存空间即可释放。,20,请说出该程序的输出结果:,main(),int a=5,b=10;,asd(a,b);,printf(a=%d,b=%dn,a,b);,getch();,asd(int x,int y),x=x+3;y=y+5;,21,作用:将一个确定的返回值送给调用函数。,说明:1函数中可以没有返回值。,函数中也可以有多个return.,2返回值可以是表达式:,如:max(int x,int y),return(xy?x:y);,(3)可以不写。,如:return z 与return(z)一样。,二、函数的返回值,返回值语句的格式:,return(),返回一个确定的值,22,4。返回值的类型一般应与函数的类型一致。,如:int max(int x,int y);max为整型,z也应为整型。,5。假设函数类型与返回值类型不同,由函数类型决定返回值类型。返回值类型自动转换成函数类型。,6。为了明确函数“不带回值,可用关键字“void 定义“无类型函数。,23,C,语言复习第十节,有以下程序,#define P 3,void F(int x)return(P*x*x);,main(),printf(%dn,F(3+5);,程序运行后的输出结果是,A)192B)29C)25D),编译出错,24,一、函数调用的一般形式:,函数名实参列表;,如:a=5;b=8;,c=max(a,b);,说明:1假设为无参函数调用,可以无实参列表。,2各参数间用“,号分开。,3实参与形参个数应相等,类型应一致。,C,语言复习第十节,25,C,语言复习第十节,1,。作为函数语句:把函数调用作为一个语句,swap(*p1,*p2);,交换数据函数,如:,short(a,10);,2,。作为函数表达式,main(),int a,b,s;,scanf(“%d,%d,s=sum(a+b,b*2);,printf(“sum=%dn,s);,sum(int x,int y),int z;,z=x+y;运行:10,15,return(z),问:,sum,函数为何类型?,sum=55,默认,-int,26,如:c=5*max(a,b)-2;,这种情况函数应有返回值。,3。作为函数参数,将函数调用作为一个函数的实参。,如:m=max(max(a,b),c);,又如:求:s=a+b+c,printf(“s=%d,sum(a,sum(b,c);,实质也是函数表达式调用的一种。,27,*三、对被调函数的说明,用户定义的函数,假设与主函数在同一文件中,应在主函数中对被调函数返回值类型进展说明。,例3。求:y=x2+x3+x5,分析:编一求xn的函数-power(x,n),调用3次。,函数形参:x,n;用t=t*x,开场t=1循环n次,t为xn。,主函数:(1)定义,a(x的实参,y.,(2)输入a.,(3)3次调用power(x,n),(4)输出y的值。,一般主函数中:定义、输入、调子函数处,理、,输出;,子函数中:处理或计算数据,。,28,main(),long power(int x,int n);/*,声明被调函数*,/,int a;long y;,scanf(%d,y=power(a,2)+power(a,3)+power(a,5);,printf(y=%ldn,y);,long power(int x,int n)/*,函数首部*,/,int i;/*,函数体*,/,long t=1;,for(i=1;i=n;i+),t=t*x;,return t;,t=1;,for(i=1;i1),例,4(,例,87),。,有五人,第,5,人比第,4,人大,2,岁,第,4,人比第,3,人大,2,岁,第,3,人比第,2,人大,2,岁,第,2,人比第,1,人大,2,岁。第,1,人,10,岁,问第,5,人多少岁?,33,n=1 时,c=10,否那么c=age(n-1)+2,age(int n)求age(5)的过程:,int c;age(5)=age(4)+2,age(3)+2,age(2)+2,return(c);age(1)+2,10,main(),int nl;,nl=age(5);,printf(“第5人的年龄为:%d,nl);,if (n=1)c=10;,else c=age(n-1)+2;,运行,:,第,5,人的年龄为:,18,回推,递推,age(n)=,10 (n=1),age(n-1)+2 (n1),34,例5 用递归调用法求n!.,分析:6!=6*5!,5!=5*4!,2!=2*1!,1!=1,公式:,主函数:1输入任一整数n,(2)fac(n)函数-y.(3)输出值y。,float fac(int n),float f;,if (n=0|n=1)f=1;,else f=n*fac(n-1);,return(f);,main(),int n;float y;,scanf(%d,y=fac(n);,printf(“%d!=%f,n,y);,n,!,=,1 (n=0,,,1),n*(n-1)!(n1),假设要编一将一组数排序的函数,传递的是什么?,35,main(),int y=10;,while(y-);printf(y=%dn,y);,程序运行后的输出结果是,Ay=0By=-1,Cy=1Dwhile构成无限循环,36,C,语言复习第十节,数字字符0的ASCII值为48,假设有以下程序,main(),char a=1,b=2;,printf(%c,b+);printf(%dn,b-a);,程序运行后的输出结果是,A)3,2B)50,2C)2,2D)2,50,37,上机作业:,实验七,1,2,附加题,求100内能被3整除的数字之和
展开阅读全文