欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    中央电大C语言A课程辅导6.docx

    • 资源ID:2639789       资源大小:24.58KB        全文页数:17页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    中央电大C语言A课程辅导6.docx

    1、中央电大C语言A课程辅导6C语言程序设计A课程辅导(6)-第6章 函数主要内容: 一、函数的定义 二、函数的调用 三、变量的作用域 四、递归函数 五、函数指针 六、函数应用举例一、函数的定义 函数定义格式 () 有效范围:由所使用的保留字extern或static决定,若使用extern则称为全局函数或外部函数;若使用static则称为局部函数或静态函数。若选项被省略,则默认为是全局函数。对于全局函数,能够在一个程序的其他每个程序文件中被声明和调用;对于局部函数,则只能被所在的程序文件声明和调用。 类型名:给出函数通过return语句返回的值的类型,当使用保留字void作为类型名时,则不需要返

    2、回值。 函数名:是用户为函数所起的名字,它是一个符合C语言命名规定的标识符。通常用函数名反映该函数的功能。如用SUM表示求和。 参数表:又称形式参数表,它包含有任意多个参数说明,当多于一个时其前后两个参数说明项之间必须用逗号分开。每个参数说明包括类型名和参数名两项内容。 函数体:是一条复合语句,它以左花括号开始,到右花括号结束,中间为一条或若干条C语句。 函数头:在函数定义中,函数体之前的部分构成函数头,又称为函数原型。取出函数头再加上分号就构成该函数的原型声明语句。 函数定义格式举例 (1) void f1() . /返回无类型,无须返回值,函数名为f1 /参数表为空,即不带有任何参数。 (

    3、2) static void f2(int x) . /文件域函数,无返回类型,函数名 /为f2,带有一个int型参数x (3) int f3(int x,int* p) . /全局域函数,返回值类型为int, /函数名为f3,带有2个参数,一个为整型x,另一个为整型指针p (4) char* f4(char a). /返回类型为字符指针,函数名为f4, /带有一个一维字符数组参数a,标记为后跟一对中括号 (5) void f5(float cN, int m) . /无类型,函数名f5,第 /1个为二维单精度型数组参数c,第2个为整型参数m。 /标记是后跟两对中括号,并在第2个内给出常量(列

    4、数)。 函数定义和使用的几点说明函数定义位置:可以出现在整个程序的任一个程序文件内的任何位置。函数原型声明语句:在利用函数调用表达式调用一个函数之前,必须出现有该函数的原型声明语句或函数定义。函数的常量形参:即在一般的形参说明项前加上const修饰。如: void f6(const float x, float y) . /x常量形参,y一般形参 void f7(const char* a, char* b) . /a常量形参,b一般形参 在f6函数体中只能读取x的值,不能改变它的值,对y可任意操作。 在f7函数体中只能读取a所指的字符或字符串,不能改变它,对b任意。 一维数组参数说明项的格式

    5、: 等价于指针参数说明: * 指针变量名就是数组参数说明中的数组名。如一个函数定义中的数组参数说明 int a /数组参数说明,指向int类型元素的指针 int* a /等价于指针参数说明 当调用它们时,对应的实参为同类型的数组名,访问它们既可以是指针方式也可以是下标方式。 二维数组参数说明项格式: 等价的指针参数说明: (*) 如假定一个函数定义中的: 二维数组参数说明: float cN /指向N个float类型元素的指针 等价的指针参数说明: float(*c)N 当调用它们时,与c对应的实参为具有相同列数N的二维数组名,访问它们既可以是指针方式也可以是下标方式。 编写具体函数定义举例例

    6、1:编写一个函数定义,求3个整数中的最大值。int MaxValue(int x, int y, int z) /用x,y,z分别表示3个整数形参int w; /w作为临时变量,存放大者if(x=y) w=x; else w=y; /x和y中的大者赋给w保存if(w=z) return w; else return z; /返回w和z中的大者例2:编写一个函数定义,求n个整数中的最大值。分析:n个整数用一个一维数组a来表示,n也是一个整型参数,采用顺序比较的方法查找出数组an中的最大值。int MaxArray(int a, int n) /数组参数和表示数组长度的参数 / int a可改为i

    7、nt* aint x,i; /用x保存当前比较中的大者,i为循环变量x=a0; /把a中第1个元素值赋给xfor(i=1; ix) x=ai;return x; /返回最大值 二、函数的调用 函数调用格式 ( )函数调用:又称为函数调用表达式。函数名:在前面已经声明或定义了的函数名称,否则在编译时将报错。实参表:可含0、1或多个用逗号分开的实参,每个实参可以为任何表达式。每个实参同函数定义或声明中的形参相对应。 格式举例 (1) fd1(); /实参表为空 (2) fd2(bx, 10); /实参表有2个参数,一个为变量,一个为常量 (3) fd3(2*a-3); /实参表只有一个参数,它是一

    8、个算术表达式 (4) double y=fd4(5, sin(x), b3); /常数、函数、下标变量 调用过程第一步:参数传递。把实参的值传送给函数定义中对应的形参。第二步:执行函数体。执行函数定义中的函数体。第三步:返回。当执行到函数体中的任一条return语句或最后的花括号则返回。 参数传递就是在函数调用时,自动把实参表中的每个实际参数的值向形参表中每个对应的形式参数传递的过程。此过程首先计算出每个实参值,接着为每个形参变量分配相应的存储空间,然后把每个实参值对应赋给每个形参变量中。举例1:int f1(int x, int y, int z) /参数为一般变量int w;if(x=y)

    9、 w=x; else w=y;if(w=z) return w; return z;int s=f1(25, 38, 30); /调用f1函数,返回值为38int a=15, b=23, c=36,d; d=f1(a,b,c); /实参值不变,返回值36举例2:void f4(int* x, int* y) /参数为指针变量 /交换x和y所指向对象的内容,作用于实参变量int w;w=*x; *x=*y; *y=w;int a=25, b=18; f4(&a, &b); /把a和b的地址赋给x和y,实参值被交换得到结果:a=18, b=25举例3:void f5(int a, int n) /

    10、int *a,参数为数组(指针)变量 /按相反次序排列数组an的n个数据,作用于实参数组int i,w;for(i=0; in/2; i+) w=ai; ai=an-1-i; an-1-i=w; /对称值对调 int b5=12,35,56,62,78; f5(b,5); /把b的值传送给a,a也指向b,修改了数组b得到结果:b5=78,62,56,35,12 举例4:int f6(const int *a, int n) /a,参数a所指对象不能被修改 /返回数组an中的n个整数之和int i,sum=0;for(i=0; in; i+) sum+=*a+; /累加求和,只取值不修改retu

    11、rn sum; /若ai=5则编译出错 int b5=5,8,4,10,20; int x=f6(b,5); /把b的值传送给a,a也指向b /返回值47举例5:#include#define Col 10void f7(char (*a)Col, int m);void main() char b3Col=one,two,three; f7(b,3); /把b的值传送给a,输出b中3个字符串void f7(char (*a)Col, int m) /二维数组参数aColint i;for(i=0; im; i+) /输出每行字符串printf(%sn,ai);三、变量的作用域 变量作用域的概

    12、念程序中使用的每个变量都有它的作用域(有效区域),离开它的作用域该变量就不起任何作用了。变量的作用域从定义它的位置开始,到所在的程序模块结束。 作用域分类:全局、文件、函数、块 全局域变量:在所有函数定义之外定义的变量,通常是在主程序文件的开始或头文件中定义,在该程序的所有文件里都有效,但在其他程序文件中使用时必须加以声明。全局变量若没有被初始化,则自动被赋值0。 文件作用域变量:在所有函数定义之外定义的变量,通常是在每个程序文件的开始定义,此变量定义语句的开始必须使用static保留字。文件域变量的作用域属于所在的文件,若它没有被初始化,则也自动被赋值0。例如:#include#define

    13、 NN 15 /相当于文件域常量int x=3,y; /全局变量,x值3,y值0static double a,b; /文件域变量,初值均为0.0const int MM=20; /全局域常量void main() /可以使用以上定义的任何常量和变量 /在同一程序的其他程序文件中,经声明后只能使用上面的全局量 /声明格式为:extern int x,y; extern const int MM; 函数作用域:专指语句标号,供goto语句用。Goto语句只能转移到本函数定义中的一个带有语句标号的位置。 块作用域变量:又称为局部变量。一种情况:在一条复合语句内定义,作用域从定义点开始到复合语句结束

    14、。另一种情况:函数定义中的形参变量,作用域为整个函数体。 函数定义体内的自动变量和静态变量 函数定义体内的变量都属于块作用域变量,即局部变量,但根据变量性质又分为2种:一种叫自动变量,另一种叫静态变量。如:void ff() int z=0; /自动变量,不赋初值,值不确定 static int k; /静态变量,第1次自动赋初值0 k+=5; /每次调用此函数在k的原值上加5 z+=5; /每次都在0上加5int i; for(i=1; i=5; i+) ff(); 分析变量作用域的程序举例程序1:#include#define NN 8 /文件域符号常量 int NumNN=12,10,8

    15、,3,5,0,7,2; /全局域数组int Sum() /求全局数组NumNN中的所有元素之和 int i,s=0; /i,s为局部变量,作用域为此函数体 for(i=0; iNN; i+) s+=Numi; return s; /返回所求元素之和int Max() /求全局数组NumNN中的所有元素的最大值 int i,m=Num0; /i,m为局部变量,作用域为此函数体 for(i=1; im) m=Numi; return m; /返回所有元素的最大值void main() int c; /局部变量,从此处到主函数结束 c=Sum()+2*Max(); /47+2*12=71 print

    16、f(c=%dn,c); /输出结果:c=71程序2:#includeint Mul(int a, int n); /函数原型声明语句void main() int b5=1,2,3,4,5; /只作用于主函数的数组 int r1,r2; /只作用于主函数的局部变量 r1=Mul(b,5); /所有元素乘积,值120 r2=Mul(b+2,3); /b2*b3*b4,值60 printf(r1=%d, r2=%dn,r1,r2); /输出:r1=120, r2=60int Mul(int a, int n) /a和n的作用域为该函数 int i,p=1; /局部变量,作用域到复合语句结束 for

    17、(i=0; in; i+) p*=ai; 求a数组中n个元素之积 return p; /返回p的值程序3: #include int x=10; /全局变量 void main() int y=20; /局部于整个主函数的变量 printf(x=%d, y=%dn,x,y); /输出:x=10, y=20 int x=30; /局部于此复合语句内的变量,优先于外部同名变量 y=y+x; /y为外部的,x为内部的 printf(x=%d, y=%dn,x,y); /输出:x=30, y=50 /内部的x的作用域就此结束 printf(x=%d, y=%dn,x,y); /输出:x=10, y=5

    18、0 /y作用域就此结束 /全局变量x的作用域到整个程序运行结束程序4: #include int Cdiv(int m, int n) /求出m和n的最大公约数 /m和n只作用于此函数 int r; /局部变量 if(mn) r=m; m=n; n=r; /大者放m,小者放n while(r=m%n) m=n; n=r; /循环结束时n的值为最大公约数 return n; /返回n值 void main() int m,n; /此处的m和n只作用于主函数 printf(输入两个正整数求其最大公约数: ); scanf(%d %d,&m,&n); printf(%d 和 %d 的最大公约数为:

    19、%dn,m,n,Cdiv(m,n); /进行Cdiv(m,n)调用时,m和n的值分别对应传送, /在Cdiv(m,n)的函数体中对m和n的修改,与此处的m和n无关 /允许不同作用域的变量同名运行结果: 输入两个正整数求其最大公约数: 25 40 25 和 40 的最大公约数为: 5程序5: #include void xk2(); void main() int i; for(i=1; i5*f(4)-5*4*f(3)-5*4*3*f(2)-5*4*3*2*f(1) -5*4*3*2*1-5*4*3*2-5*4*6-5*24-120 /x=120又如:int f7(int a, int n)

    20、if(n=1) return a0; /结束递归并返回else return an-1+f7(a,n-1); /递归调用int a5=2,5,4,8,6;int z=f7(a,5); /6+f7(a,4)-6+8+f7(3)-6+8+4+f7(2)-6+8+4+5+f7(1) -6+8+4+5+2-6+8+4+7-6+8+11-6+19-25 /z=25*五、函数指针 函数名是指向该函数执行代码的指针int fa(int x, int y)return x+y; int (*) (int, int) 定义函数指针变量并赋予同类型函数的函数名(指针)后,可以同函数名一样使用int (*fp) (

    21、int, int)=fa;fa(a,b); fp(a,b); 函数的形参表中也可以使用函数参数void fc(char* p, int hf(int, int); /hf为函数形参/fc(”abcd”, fa); fc(str, fp); /fa和fp为函数实参 使用函数参数的程序举例 #include int Length(char* p) int i=0; while(*p+) i+; return i;/返长度 void Out(char *s, int(*pp)(char*) / printf(%d: %sn, pp(s), s); /输出s串的长度和串值 / pp(s)的调用就是Le

    22、ngth(s)的调用 void main() char* x1=123456; char* x2=asder oiu; Out(x1, Length); /输出: 6: 123456 Out(x2, Length); /输出: 9: asder oiu 六、利用函数编写程序举例 通常用一个函数,完成一个程序设计中相对独立的功能,而一个程序通常有若干个函数所组成,整个程序的功能通过函数的调用来实现。例1:编写一个程序,判断从键盘上输入的任一个整数是否为素数。分析:判断一个整数是否为素数的功能相对独立,可以单独编写成一个函数,该函数带有一个整数参数,假定用x表示,函数名假定用Prime表示,该函数

    23、应该把判断结果返回,所以返回类型应定义为int,当返回1时表明x是一个素数,返回0时则表明不是一个素数。 若一个整数是素数,则它不能被除1和本身之外的任何数整除,也就是说,若一个整数x能够分解为两个整数a和b的乘积,则它就不是素数,在这两个整数a和b中,一个若小于等于,则另一个必然大于等于。所以判断一个整数x是否为素数,只要判断是否能够被2中的任一数整除即可,若能够被其中的任一个数整除,则它不是素数,若不能被其中的所有数整除,则才是一个素数。 根据以上分析,编写出函数如下: int Prime(int x) int y=(int)sqrt(x); int i; for(i=2; iy) ret

    24、urn 1; else return 0; 在该程序的主函数中,应定义一个整型变量,假定仍用x表示,用来接收从键盘上输入的整数,接着应把x作为实参去调用求素数的函数,判断x是否为素数,然后再根据不同的判断结果输出相应的信息。带主函数的程序如下: #include #include int Prime(int x); void main(void) int x,yn; printf(从键盘输入一个正整数:); scanf(%d,&x); yn=Prime(x); if(yn) printf(%d 是一个素数!n,x); else printf(%d 不是一个素数! n,x); 若程序要求输出自然

    25、数100以内的所有素数,只要修改一下主程序即可得到。 void main(void) int x,yn; printf(%d ,2); for(x=3; x=60则停止,再接着使后面指针j依次向前移动,直到aj=j为止。 例如: a8=23, 67, 52, 83, 75, 28, 44, 70 i j a8=23, 67, 52, 83, 75, 28, 44, 70 i j a8=23, 44, 52, 83, 75, 28, 67, 70 i j a8=23, 44, 52, 83, 75, 28, 67, 70 i j a8=23, 44, 52, 83, 75, 28, 67, 70 i j a8=23, 44, 52, 28, 75, 83, 67, 70 i,j 函数定义: void TwoPart(int a, int n) int i=0, j=n-1; int x; while(ij) /进行下一遍比较和交换 while(ai60 & i=60 & j=0) j-; /条件满足时指针前移 if(ij) x=ai; ai=aj; aj=x


    注意事项

    本文(中央电大C语言A课程辅导6.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开