C语言-复习计划提纲记要.doc

上传人:一*** 文档编号:808889 上传时间:2019-07-16 格式:DOC 页数:31 大小:247.50KB
返回 下载 相关 举报
C语言-复习计划提纲记要.doc_第1页
第1页 / 共31页
C语言-复习计划提纲记要.doc_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《C语言-复习计划提纲记要.doc》由会员分享,可在线阅读,更多相关《C语言-复习计划提纲记要.doc(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C C 语言复习提纲语言复习提纲第一章第一章 C C 语言程序设计概述语言程序设计概述一、Visual C+6.0 开发环境 1、了解 Visual C+6.0 的安装过程; 2、了解 Visual C+6.0 的工作界面,菜单和工具栏的使用; 二、掌握 C 语言程序运行的过程 1、编辑:编辑:是指把按照 C 语法规则编写的程序代码通过编辑器(Visual C+ 6.0,Turbo C 3.0)输入计算机,并存盘。在存盘时,C 源文件的扩展名为 .c 2、编译:将编译:将 C C 语言源程序编译成目标程序语言源程序编译成目标程序,即对源程序进行编译,并将源程序转换为扩展名 为.obj 的二进制

2、目标代码(即把已经编辑好的源程序翻译成二进制目标代码的过程把已经编辑好的源程序翻译成二进制目标代码的过程) 。 3、连接连接:将用户程序生成的目标代码文件(.obj)和系统提供的库文件(.lib)中的某些代 码连接在一起,生成一个可执行文件(.exe) 。 4、执行执行:执行生成的可执行代码,并输出结果。 5、调试调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错 误和逻辑错误的过程。 三、结构化程序设计的基本概念 1、概念 以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,将原来较为复杂的 问题化简为一系列简单模块的设计,任何模块都可以使用一些基本

3、的结构来实现,任何复杂的程序, 都可以使用这些基本结构按一定的顺序组合起来,这些基本结构的特点都是只有一个入口、一个出 口,这样的程序设计方法称为结构化程序设计。 2、基本思想 结构化程序设计的基本思想是采用结构化程序设计的基本思想是采用“ “自顶向下,逐步细化、模块化设计、结构化编码自顶向下,逐步细化、模块化设计、结构化编码“的程序设 计方法和“单入口单出口“的控制结构。 3、三种基本结构 顺序结构顺序结构 选择结构选择结构 循环结构循环结构 4、三种基本结构的特点 只有一个入口 只有一个出口 每一个基本结构中的每一部分都有机会执行到 结构内不存在“死循环” 5、设计原则 自顶向下 逐步细化

4、 模块化设计 结构化编码 四、C 程序的基本组成: C 程序是由若干个函数构成的,至少有一个主函数 main(),main()main()的位置可以任意,的位置可以任意,其他各函 数在程序中的前后位置也是可以任意的。程序的执行总是从主函数开始,在主函数中结束。主函数程序的执行总是从主函数开始,在主函数中结束。主函数 是可以调用其他任何非主函数的函数,任何非主函数也可以调用其它任何非主函数。是可以调用其他任何非主函数的函数,任何非主函数也可以调用其它任何非主函数。 C 程序的基本组成:声明区、主程序区、函数定义区。 1、声明区 处在程序文件的所有函数的外部,一般包含:包含头文件、宏定义、类定义、

5、结构体定义、函 数声明、全局变量声明、条件编译等。 2、主程序区 主程序以 main()函数开始,main()函数(主函数)是程序运行时的入口,包含局部变量的声 明、函数调用、一般运算、结构控制、对象与结构的处理、文件处理等。 3、函数定义区 函数的定义包含函数说明和函数体两部分。4、注释 /或/* */为注释,不能嵌套 不产生编译代码,不影响程序的执行效率。 五、标识符 1、标识符的定义:用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称 为标识符。 2、标识符的命名规则:由字母、数字或下画线组成,并且第由字母、数字或下画线组成,并且第 1 1 个字符必须为字母或下画线。个字符

6、必须为字母或下画线。 注意:标识符区分大小写,即大写字母和小写字母的通常意义不同,且不能与关键字重名。注意:标识符区分大小写,即大写字母和小写字母的通常意义不同,且不能与关键字重名。 练习练习 1_11_1:下列变量标识符哪些是正确的,哪些是不正确的?:下列变量标识符哪些是正确的,哪些是不正确的?a3bca3bc if a!bc _abc_abc abcabc _3abc_3abc a_bca_bc 3abc3、标识符分类:关键字、预定义标识符、用户自定义标识符。第二章第二章 数据类型、运算符和表达式数据类型、运算符和表达式一、C 语言的数据类型C C 语言中基本数据类型包括整型、实型、字符型

7、、枚举类型,构造类型有数组、结语言中基本数据类型包括整型、实型、字符型、枚举类型,构造类型有数组、结构体、共用体等。构体、共用体等。、基本数据类型(见 P17) 、构造类型又称为组合类型,它是由基本类型按照某种规则组合而成的。 数组:是由具有相同数据类型的元素组成的集合。 结构体:是由不同的数据类型构成的一种混合的数据结构,构成结构体的成员的数据类型 一般不同,并且在内存中分别占据不同的存储单元。 共用体:是类似于结构体的一种构造类型,与结构体不同的是构成共同体的数据成员共用 同一段内存单元。 枚举:是将变量的值一一列举出来,变量的值只限于列举出来的值的范围内。 、指针类型变量用于存储另一变量

8、的地址,而不能用来存放基本类型的数据。它在内存中占图2_1 C语言的数据类型数据类型基本类型空类型(无值类型)void构造类型指针类型实型(浮点型)联合型类型union单字符型char整型int 单精度型float双精度型double字符型宽字符型w-char 逻辑型bool类类型class枚举类型enum结构类型struct数组类型据一个存储单元。 、类是一种数据类型,它定义的是一种对象类型,由数据和方法组成,描述了属于该类型的 所有对象的性质。 二、常量和变量 、常量:在程序运行的整个过程中,其值始终保持不变的量。 整型常量:表示形式有十进制、八进制(以 0 开头)和十六进制(以 0x 或

9、 0X 开头) 。整 型常量可以后缀字母 L(或 l)表示长整数,后缀字母 U(或 u)表示无符号整数。 实型常量(浮点型常量):表示形式有一般形式和指数形式。实型常量缺省为 double 型 (双精度型) ,如后缀 f 或 F,则为 float 型(单精度型) 。 字符常量:用单撇号括起来的一个字符。如A,*等。 转义字符:用反斜杠引导的,具有特定含义的字符(见 P22表 2-4),如 n,367,x8a。 注:C 语言字符集中的任何一个字符均可用转义字符来表示。 字符串常量:用双撇号括起来的字符序列。如“student“,“广东广州“等。 布尔常量:false,true。 符号常量: #d

10、efine 宏名 常数 练习练习 2 2_1_1:下列哪些是合法的常量:下列哪些是合法的常量: 12.7f 09860986 0986.012 、0625L 87U -0x98C2 01a01a -6.87E-2 1.2e0.51.2e0.5 E-3E-3 0xFF 2L 72 160 -0xffff 5E2.05E2.0 -0xcdf 1.3E1.3E 2E0 06680668 (21)011 (22)0xe (23)-01 (24)-0x48a (2525)0x0x 变量:指程序在运行时其值可改变的量。 变量应先定义(声明其类型和名称)后使用; 变量定义的一般形式为: ,; 在定义一个变量

11、的同时,也可以给它赋以初值。 练习练习 2_22_2 以下正确的变量标识符是以下正确的变量标识符是 3abc3abc $amount$amount Num_of_Student ifif a!bca!bc _above _abc abab sin day三、运算符和表达式 1、算术运算符和算术表达式 注意:int i=1.2*3; /结果为 3,而不是 3.6。 int i=5/3 结果为 1。 表达式表达式 17175 5 的结果是的结果是 3 3,表达式,表达式 17175 5 的结果是的结果是 2 2。 2、赋值运算符和赋值表达式 注意: 赋值运算符的结合性是从右至左的 复合赋值运算符:

12、复合赋值运算符:intint a=12;a=12; a+=a-=a*=a;a+=a-=a*=a;(a=a+(a=a-(a=a*a),a=a+(a=a-(a=a*a),结果为结果为 0 0) 注意: 在在 C C 语言中,定义语言中,定义 intint a=b=c=3;a=b=c=3;是错误的,而定义是错误的,而定义 intint a,b,c;a,b,c; a=b=c=3;a=b=c=3;是正确的。是正确的。 练习练习 2_32_3 设设 m=9,i=3,m=9,i=3,则执行运算则执行运算 m%=i+1m%=i+1 后后,m,m 的值是多少?结果的值是多少?结果 1 1。 m=m%(i+1)m

13、=9%(3+1)m=1m=m%(i+1)m=9%(3+1)m=1。 3、关系运算符和关系表达式 注意: 关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符。例如:a+bc 等价于 (a+b)c,a!=bc 等价于 a!=(bc) “=”与“=”的区别4、逻辑运算符与逻辑表达式 注意: 逻辑非的优先级最高,逻辑与次之,逻辑或最低 练习练习 2_42_4 若有若有 intint a=3,b=0;a=3,b=0;则表达式则表达式 ac=+a|+b;a=b=3;c=+a|+b;后,后,b b 的值为的值为 3 3。 练习练习 2_72_7 设设 x x、y y 和和 z z 都是都是 i

14、ntint 型变量,且型变量,且 x=8,x=8, y=3,y=3, z=5,z=5, 则表达式则表达式 x*y/z+6-14%zx*y/z+6-14%z 的值为的值为 6 6。 练习练习 2_82_8 设有定义设有定义:int:int x=1,y=-1;x=1,y=-1;则执行语句则执行语句 printf(“%dn“,(x-printf(“%dn“,(x-后的输出结果是后的输出结果是 0 0。 练习练习 2_92_9 设设 x x,y y,z z,t t 均为均为 intint 型变量,则执行以下语句型变量,则执行以下语句 x=y=z=1;t=+x|+yx=y=z=1;t=+x|+y 后,后

15、, x x、y y、z z、t t 的值分别为的值分别为 2 2,1 1,1 1,1 1。 6、条件运算符 表达式 1?表达式 2:表达式 3 注意: 结合性是自右向左结合性是自右向左。ab?a:cd?c:d 相当于 ab?a:(cd?c:d) 条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符条件运算符的优先级别高于赋值运算符,低于关系运算符和算术运算符。如: ab?a-b:b-a 相当于 ab?(a-b):(b-a) 练习练习 2_102_10 设有变量说明:设有变量说明:intint x=3x=3,y=5y=5;那么表达式:;那么表达式:z=xy?x:yz=xy?x:y 运算

16、后,运算后,z z 的值是的值是 5 5。 7、位运算符 位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。 练习练习 2_112_11 intint a=5,b=6;aa|b=7;ab=3;b=-7;b2=1a=5,b=6;aa|b=7;ab=3;b=-7;b2=1。 注:在位运算中,操作数左移三位,其结果相当于操作数乘以注:在位运算中,操作数左移三位,其结果相当于操作数乘以 8。 8、逗号运算符 表达式, 表达式, , 表达式 n 注意: 自左至右,依次计算各表达式的值, “表达式 n” 的值即为整个逗号表达式的值。如:a = 3 * 5, a * 4, a +

17、 5 的值为 20。 四、运算符的优先级与结合性 1、所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边 的运算符结合,还是先与右边的运算符结合。 自左至右的结合方向,称为左结合性。反之,称为右结合性。 结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运 算符都是左结合性。 2、表达式求值 按运算符的优先级高低次序执行。例如,先乘除后加减。 如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合 方向(结合性)进行。 例如,算术运算符的结合方向是算术运算符的结合方向是“自左至右自左至右” ,即:在执行“a b +

18、c”时,变量 b 先与减 号结合,执行“a - b” ;然后再执行加 c 的运算。 练习 2_12 设 int x=2,y=3,z=4; 执行语句行 x+;y+=1;z=x+y-以后,x,y 和 z 的值分别是 多少? 答案:3,3,7 练习练习 2_132_13 若有定义若有定义 intint m=2;m=2;则逻辑表达式则逻辑表达式(m=3)后,后,n 的值为的值为 2。练习练习 2_16 如果如果 a=5,b=3,c=7,d=9,则条件表达式则条件表达式 am,正常输出;3.69 3.23.2,根据定义和数据,根据定义和数据 的输入方式,输入函数语句的正确形式为的输入方式,输入函数语句的

19、正确形式为 scanf(“%lf%lf“,n = m+ -1;printf(“%d %dn“, m ,n); 输出结果是输出结果是 3,1。第四章第四章 选择结构程序设计选择结构程序设计一、算法 1 1、算法的概念:算法是指、算法的概念:算法是指为解决一个问题而采取的确定的、有限的方法和步骤。为解决一个问题而采取的确定的、有限的方法和步骤。 2、算法的描述方法最常用的有算法的描述方法最常用的有自然语言、流程图、自然语言、流程图、N-S 流程图、流程图、PAD 图和伪代码等。图和伪代码等。 二、顺序结构程序设计 顺序结构是结构化程序设计中最简单、最常见的一种程序结构。顺序结构中的语句是按照书写

20、的先后次序执行的,并且每个语句都会被执行到。 练习 4_1 编写一个程序,从键盘上输入一个学生 5 门课的成绩,计算出该学生的总成绩和平 均成绩,并用自然语言描述算法。 解:设变量 a、b、c、d、e 分别表示学生 5 门课的成绩,sum 表示总成绩,aver 表示平均成 绩, 则用自然语言描述算法如下: 输入学生 5 门课的成绩 a、b、c、d、e; 求总成绩 sum=a+b+c+d+e; 求平均成绩: aver =sum/5.0; 输出总成绩和平均成绩。 程序如下: #include main() float a,b,c,d,e,sum,aver; printf(“请输入学生 5 门课的成

21、绩n“);scanf(“%f,%f,%f,%f,%f“, sum=a+b+c+d+e; aver=sum/5.0; printf(“总成绩=%0.2f,平均成绩=%.2fn“,sum,aver); 练习练习 4_24_2 编写一个程序,从键盘输入梯形的上底、下底和高的值(浮点数)编写一个程序,从键盘输入梯形的上底、下底和高的值(浮点数) ,计算并输出其,计算并输出其 面积(保留两位小数)面积(保留两位小数) ,并用,并用 N-SN-S 结构图表示算法。结构图表示算法。 解:设变量 a、b、h、area 分别表示梯形的上底、下底、高和面积,则用 N-S 结构图表示算法 如下:程序如下: #inc

22、lude main() float a,b,h,area; printf(“请输入梯形的上底、下底和高n“); scanf(“%f,%f,%f“,area=(a+b)*h/2.0; printf(“梯形的面积为%0.2fn“,area); 练习练习 4_34_3 编写一个程序,从键盘输入圆的半径,计算并输出圆的周长和面积(保留两位小数)编写一个程序,从键盘输入圆的半径,计算并输出圆的周长和面积(保留两位小数) ,用伪代码表示出算法。,用伪代码表示出算法。 解:设用变量 r 、length、area 分别表示圆的半径、周长和面积,则用伪代码表示算法如下:BEGINinput rlength=2*

23、3.14*rarea=3.14*r*rprint length,area END 程序如下: #include #define PI 3.14 main() float r,length,area; printf(“请输入圆的半径n“); scanf(“%f“, length=2*PI*r; area=PI*r*r; printf(“圆的周长为%0.2fn“,length); printf(“圆的面积为%0.2fn“,area); 输入梯形的上底 a、下底 b 和高 h 计算梯形的面积:area=(a+b)*h/2.0 输出结果。三、选择结构程序设计 1、if 语句 、if 语句的一般格式if

24、(表达式) 语句组 1;else语句组 2; if 语句中的“表达式”必须用“(”和“)”括起来。表示程序执行的条件,常用关系运 算符、逻辑运算符等表示的条件表达式,其结果只有两个值“1”或“0” (成立或不成立) 。如:表示字符型变量如:表示字符型变量 chch 是大写英文字符的是大写英文字符的 C C 语言表达式是语言表达式是 ch=Aprintf(“输入行李的重量:“);scanf(“%f“,if(w40.0)x=40.0*0.3+(w-40.0)*0.8;elsex=w*0.5; printf(“行李重量 w=%.2f 公斤,托运费 x=%.2f 元n“,w,x); 2switch 语

25、句 、switch 语句的一般形式 switch(表达式) case 常量表达式 1:语句组;break;case 常量表达式 2:语句组;break;.case 常量表达式:语句组;break;default:语句组;break; 、执行过程 当 switch 后面“表达式”的值,与某个 case 后面的“常量表达式”的值相同时,就执行 该 case 后面的语句(组) ;当执行到 break 语句时,跳出 switch 语句,转向执行 switch 语句的下 一条。 如果没有任何一个 case 后面的“常量表达式”的值,与“表达式”的值匹配,则执行 default 后面的语句(组) 。然后,

26、再执行 switch 语句的下一条。 说明 switch 后面的“表达式” ,可以是 int、char 和枚举型中的一种。 每个每个 casecase 子句后面的子句后面的“常量表达式常量表达式”的值,必须各不相同,的值,必须各不相同,否则会出现相互矛盾的现象 (即对表达式的同一值,有两种或两种以上的执行方案) 。 case 后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号, 就从此标号开始执行,不再进行标号判断,所以要退出要退出 switchswitch 语句,方法是使用语句,方法是使用 breakbreak 语句。语句。 各 case 及 default 子句的先后

27、次序,不影响程序执行结果。 多个 case 子句,可共用同一语句(组) 用 switch 语句实现的多分支结构程序,完全可以用 if 语句或 if 语句的嵌套来实现。 练习练习 4_54_5 以下程序段的输出结果是以下程序段的输出结果是 int x=7,y=8,z=9; if(xy)x=y,y=z;z=x; printf(“%d,%d,%dn“,x,y,z); 结果:7,8,7 练习练习 4_64_6 以下程序的输出结果是以下程序的输出结果是 #include void main() int m=5; if(m+5) printf(“%dn“,m); else printf(“%dn“,m-)

28、; 结果:6 练习练习 4_74_7 以下程序的输出结果是以下程序的输出结果是 #include void main() int k=1,x=0,y=0; switch(k) case 0:y+; case 1:x+; case 2:x+;y+; printf(“x=%d,y=%dn“,x,y); 结果 x=2,y=1第五章第五章 循环结构程序设计循环结构程序设计一、循环程序设计 1、while 语句 、一般格式while(循环继续条件) 循环体语句组; 、执行过程 求解“循环继续条件”表达式。如果其值为非 0,转;否则转。 执行循环体语句组,然后转。 执行 while 语句的下一条。 练习

29、5_1:/*程序功能:求 1100 的累计和*/ #include void main() int i=1,sum=0; /*初始化循环控制变量 i 和累计器 sum*/while( i void main() int a=10,b=10,i; for(i=0;a8;b=+i) printf(“%d %d “,a-,b); 程序输出的结果是 10 10 9 1 练习练习 5_55_5 有以下程序有以下程序 #include void main() int k; for(k=0;k void main() int m; for(m=1;m=1) a-;程序执行后,a 的值是 0。 练习练习 5_

30、105_10 以下程序以下程序 #include void main() int i; for(i=0;i void main() int i=1;while(i3) 程序代码如下: #include void main() int F1=1,F2=1;int F,S=2,n=3;while(ni; j-) /*内循环:进行每趟比较*/if(datajmain()int i,j,min;float temp,ave=0;float a11;printf(“n 输入评委所打的分数:n“);for(i=1;iaj)min=j;temp=ai;ai=amin;amin=temp;for(i=2;i字

31、符串 2,函数返回值正整数。 使用说明 如果一个字符串是另一个字符串从头开始的子串,则母串为大。 不能使用关系运算符“”来比较两个字符串,只能用 strcmp() 函数来处理。 4、拷贝字符串strcpy()函数 调用方式:strcpy(字符数组, 字符串) 其中“字符串”可以是串常量,也可以是字符数组。 函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。 使用说明 字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志0一 起复制。 不能用赋值运算符“”将一个字符串直接赋值给一个字符数组,只能用 strcpy()函数 来处理。 5连接字符串strc

32、at()函数 调用方式:strcat(字符数组, 字符串) 函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。 “字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修 改。 使用说明 由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目 标字符串;否则,会因长度不够而产生问题。 连接前两个字符串都有结束标志0,连接后“字符数组”中存储的字符串的结束标志 0被舍弃,只在目标串的最后保留一个0。 6求字符串长度strlen()函数(len 是 length 的缩写) 调用方式:strlen(字符串) 函数功能:

33、求字符串(常量或字符数组)的实际长度(不包含结束标志) 。 练习练习 6_76_7 执行执行 charchar str10=str10= “I“I amam a a teacher0“;strlen(strteacher0“;strlen(str)后的结果是)后的结果是 1414。 7将字符串中大写字母转换成小写strlwr()函数 调用方式:strlwr(字符串)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不 转换。 8将字符串中小写字母转换成大写strupr()函数 调用方式:strupr(字符串) 函数功能:将字符串中小写字母转换成大写,其它字符(包括大

34、写字母和非字母字符)不转 换。第七章第七章 函数函数 一、函数的定义与调用 1、函数的定义 任何函数(包括主函数 main())都是由函数说明和函数体两部分组成。根据函数是否需要参 数,可将函数分为无参函数和有参函数两种。 、无参函数的一般形式函数类型 函数名( void ) 说明语句部分;可执行语句部分; 注意:在旧标准中,函数可以缺省参数表。但在新标准中,函数不可缺省参数表;如果不需要 参数,则用“void”表示,主函数 main()例外。 、有参函数的一般形式 函数类型 函数名( 数据类型 参数,数据类型 参数 2 ) 说明语句部分;可执行语句部分; 有参函数比无参函数多了一个参数表。调

35、用有参函数时,调用函数将赋予这些参数实际的值。 为了与调用函数提供的实际参数区别开,将函数定义中的参数表称为形式参数表,简称形参表。练习 7_1:定义一个函数,用于求两个数中的大数。 解:/*功能:定义一个求较大数的函数并在主函数中调用*/ int max(int n1, int n2) /*定义一个函数 max()*/ return (n1n2?n1:n2); main() int max(int n1, int n2);/*函数说明*/int num1,num2;printf(“input two numbers:n“);scanf(“%d%d“, return 语句的功能:返回调用函数,

36、并将“返回值表达式”的值带给调用函数。 注意:调用函数中无 return 语句,并不是不返回一个值,而是一个不确定的值。为了明确表 示不返回值,可以用“void”定义成“无(空)类型” 。 函数类型 函数的类型说明符指明了函数的类型,它实际上是函数返回值的类型。如果不要求函数有返回函数的类型说明符指明了函数的类型,它实际上是函数返回值的类型。如果不要求函数有返回 值,函数的类型说明符可以写为值,函数的类型说明符可以写为 voidvoid,如果缺省,如果缺省,C C 语言函数返回类型的默认定义类型是语言函数返回类型的默认定义类型是 intint 型。型。 在定义函数时,对函数类型的说明,应与 r

37、eturn 语句中、返回值表达式的类型一致。 如果不一致,则以函数类型为准。如果缺省函数类型,则系统一律按整型处理。 即:在即:在 C C 语言中,函数返回值的数据类型取决于在定义该函数时所指定的数据类型。语言中,函数返回值的数据类型取决于在定义该函数时所指定的数据类型。 3、对被调用函数的说明和函数原型 在 ANSI C 新标准中,采用函数原型方式,对被调用函数进行说明,其一般格式如下: 函数类型函数类型 函数名函数名( (数据类型数据类型 参数名参数名, 数据类型数据类型 参数名参数名 2)2); /C 语言同时又规定,在以下 3 种情况下,可以省去对被调用函数的说明: 当被调用函数的函数

38、定义出现在调用函数之前时。因为在调用之前,编译系统已经知道了被 调用函数的函数类型、参数个数、类型和顺序。 如果在所有函数定义之前,在函数外部(例如文件开始处)预先对各个函数进行了说明,则 在调用函数中可缺省对被调用函数的说明。 当一个函数是当一个函数是 intint 类型时,它与被调用者的前后位置关系可以忽略,可以省略对被调函数的类型时,它与被调用者的前后位置关系可以忽略,可以省略对被调函数的 说明。说明。 4、函数的调用 一般形式为: 函数名(实际参数表) 切记:实参的个数、类型和顺序,应该与被调用函数所要求的参数(形参)个数、类型和顺序 一致,才能正确地进行数据传递。 、调用函数方式:

39、函数表达式。函数作为表达式的一项,出现在表达式中,以函数返回值参与表达式的运算。 函数语句。C/C 语言中的函数可以只进行某些操作而不返回函数值,这时的函数调用可作为 一条独立的语句。 函数实参。函数作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为实 参进行传送,因此要求该函数必须是有返回值的。 、说明: 调用函数时,函数名称必须与具有该功能的自定义函数名称完全一致。 实参在类型上按顺序与形参,必须一一对应和匹配。如果类型不匹配,C 编译程序将按赋值 兼容的规则进行转换。如果实参和形参的类型不赋值兼容,通常并不给出出错信息,且程序仍然继 续执行,只是得不到正确的结果。 如果实参

40、表中包括多个参数,对实参的求值顺序随系统而异。有的系统按自左向右顺序求实 参的值,有的系统则相反。Turbo C 和 MS C 是按自右向左的顺序进行的 。 练习练习 7_27_2 写出以下程序运行的结果写出以下程序运行的结果 #include void main() int x=2,y=5; int max(int, int); max(x,y); printf(“max=%dn“,max(x,y); int max(int a,int b) int temp; if(ab) temp=a; else temp=b; return temp; 运行结果:max=5 5、函数的形参与实参 、函

41、数的参数分为形参和实参两种,作用是实现数据传送。 形参出现在函数定义中,只能在该函数体内使用。发生函数调用时,调用函数把实参的值复制 1 份,传送给被调用函数的形参,从而实现调用函数向被调用函数的数据传送。 练习 7_3:实参对形参的数据传递。 /*实参对形参的数据传递。*/ void main() void s(int n); /*说明函数*/int n=100; /*定义实参 n,并初始化*/s(n); /*调用函数*/printf(“n_s=%dn“,n); /*输出调用后实参的值,便于进行比较*/ void s(int n) int i;printf(“n_x=%dn“,n); /*输

42、出改变前形参的值*/for(i=n-1; i=1; i-) n=n+i; /*改变形参的值*/printf(“n_x=%dn“,n); /*输出改变后形参的值*/ 、说明: 实参可以是常量、变量、表达式、函数等。无论实参是何种类型的量,在进行函数调用时, 它们都必须具有确定的值,以便把这些值传送给形参。 形参变量只有在被调用时,才分配内存单元;调用结束时,即刻释放所分配的内存单元。 因此,形参只有在该函数内有效。调用结束,返回调用函数后,则不能再使用该形参变量。 实参对形参的数据传送是单向的,即只能把实参的值传送给形参,而不能把形参的值反向地 传送给实参。 实参和形参占用不同的内存单元,即使同

43、名也互不影响。 6、函数的嵌套调用和递归调用 、函数的嵌套调用 指在执行被调用函数时,被调用函数又调用了其它函数。 如图所示:、函数的递归调用 函数的递归调用是指,一个函数在它的函数体内,直接或间接地调用它自身。 练习练习 7_47_4 用递归函数解决猴子吃桃问题。问题描述如下:有一堆桃子不知其数,猴子每天吃用递归函数解决猴子吃桃问题。问题描述如下:有一堆桃子不知其数,猴子每天吃 前一天的一半多一个,到第十天只剩一个,试编程求这堆桃子的个数。前一天的一半多一个,到第十天只剩一个,试编程求这堆桃子的个数。 解: 设第 n 天的桃子数为 x(n),则根据题意可写出递归公式1 (n=10) x(n)

44、=(x(n+1)+1) * 2 (n void main() int x(int n); printf(“第一天的桃子数为:%dn“,x(1); int x(int n) int total; if(n=10) total=1; else total=(x(n+1)+1)*2; return total; 二、变量的作用域、局部变量与全局变量 变量的作用域是指变量在程序中的有效范围。变量的作用域是指变量在程序中的有效范围。C C 语言中的变量,按作用域范围可分为两种:局语言中的变量,按作用域范围可分为两种:局 部变量和全局变量。部变量和全局变量。 、局部变量(内部变量) 在一个函数内部说明的变量是内部变量,它只在该函数范围内有效。只有在包含变量说明的函 数内部,才能使用被说明的变量,在此函数之外就不能使用这些变量了。所以内部变量也称“局部 变量” 。 局部变量的作用域被限定在其所定义的局部范围中。局部变量的作用域被限定在其所定义的局部范围中。 、关于局部变量的作用域还要说明以下几点: 主函数主函数 main()main()中定义的变量是内部变量中定义的变量是内部变量,也只能在主函数中使用,其它函数不能使用。同 时,主函数中也不能使用其它函数中

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com