《大学计算机二级考试复习资料.ppt》由会员分享,可在线阅读,更多相关《大学计算机二级考试复习资料.ppt(79页珍藏版)》请在金锄头文库上搜索。
1、全国计算机二级全国计算机二级C语言程序设计语言程序设计考点复习考点复习 全国计算机二级考试全国计算机二级考试 考试方式考试方式 1.笔试:90分钟,满分100分,其中含公共基础知识部分的30分(选择10题20分,填空5题10分)。 2.上机:90分钟,满分100分 3.上机操作包括: (1)填空。(30分,3处填空)(2)改错。(30分,23处改错) (3)编程。(40分,一个自定义函数体)第1章C语言程序设计基本概念一、一、C语言程序的结构语言程序的结构1.程序的构成,程序的构成,main函数和其他函数。函数和其他函数。2.头文件,数据说明,函数的开始和结束标志以及程序中的注释。头文件,数据
2、说明,函数的开始和结束标志以及程序中的注释。3.源程序的书写格式。源程序的书写格式。4.C语言的风格。语言的风格。大纲要求重点:大纲要求重点:考点考点1C语言程序语言程序考点点拨考点点拨:重点记忆程序的构成和书写重点记忆程序的构成和书写 程序是可以连续执行的指令的集合。目前当用的程序程序语言主要程序是可以连续执行的指令的集合。目前当用的程序程序语言主要是是“高级语言高级语言”,如,如Visual Basic、C+、Java和和C。其中。其中C语言具有语言具有高级语言和低级语高级语言和低级语言的双重优点。言的双重优点。 C语言程序由函数构成。一个语言程序由函数构成。一个C语言源程序有且仅有一个语
3、言源程序有且仅有一个main函数和函数和零个或多个其他函数。无论零个或多个其他函数。无论main函数的位置如何,它是程序执行的入口和函数的位置如何,它是程序执行的入口和出口中。出口中。 C语言程序书写自由,一行内可以写一条或多条语句,一条语句也可语言程序书写自由,一行内可以写一条或多条语句,一条语句也可以写在多行。以写在多行。C语言的注释有两种形式,分别为行尾注释语言的注释有两种形式,分别为行尾注释“/”和块和块式注释式注释“/* */”。注释只是给人看,对编译和运行不起作用。注释只是给人看,对编译和运行不起作用。真题举例:真题举例:(11)以下叙述正确的是()(2010.3)A)C语言程序是
4、由过程和函数组成的B)C语言函数可以嵌套调用,例如:fun(fun(x)C)C语言函数不可以单独编译D)C语言中除了main函数,其他函数不可以作为单独文件形式存在B考点点拨考点点拨:C程序的编译连接和后缀程序的编译连接和后缀 C源程序文件源程序文件(后缀为后缀为.c)必须翻译为二进制必须翻译为二进制目标文件目标文件(后缀为后缀为.obj),此,此过程称为过程称为“编译编译”,负责此工作的程序称为,负责此工作的程序称为“编译器编译器”或或“编译程序编译程序”;然后由连接程序把该二进制文件与然后由连接程序把该二进制文件与C语言的各种库函数连接起来,生成语言的各种库函数连接起来,生成可可执行文件执
5、行文件(后缀为后缀为.exe),此过程称为,此过程称为“连接连接”;最后执行该可执行文件,;最后执行该可执行文件,实现程序功能。实现程序功能。考点考点2C语言程序编译连接过程语言程序编译连接过程真题举例:真题举例:(13)以下叙述中错误的是()(2010.9)A)C程序在运行过程中所有计算都以二进制方式进行B)C程序在运行过程中所有计算都以十进制方式进行C)所有C程序都需要编译链接无误后才能运行D)C程序中整型变量只能存放整数,实型变量只能存放浮点数B考点点拨考点点拨:算法的五个特性算法的五个特性 算法是为解决某个特定问题而采取的确定且有限的步骤。算法的五个算法是为解决某个特定问题而采取的确定
6、且有限的步骤。算法的五个特性是:特性是:有穷性、确定性、有效性、零个或多个输入、一个或多个输出有穷性、确定性、有效性、零个或多个输入、一个或多个输出。算法的表示方法有算法的表示方法有自然语言自然语言、流程图流程图、伪代码伪代码和和程序设计语言程序设计语言。考点考点3算法的特性算法的特性真题举例:真题举例:13、以下关于算法叙述错误的是()。(2012.3)A算法可以用伪代码、流程图等多种形式来描述B一个正确的算法必须有输入C一个正确的算法必须有输出D用流程图可以描述的算法可以用任何一种计算机高级语言编写成程序代码B考点点拨考点点拨:记住程序设计的任务记住程序设计的任务 程序设计指设计、编程、调
7、试程序的方法和过程。程序设计通常分为程序设计指设计、编程、调试程序的方法和过程。程序设计通常分为问题建模问题建模、算法设计算法设计、编写代码编写代码和和编译调试编译调试四个阶段。四个阶段。考点考点4程序设计的任务程序设计的任务真题举例:真题举例:11、针对简单程序设计,以下叙述的实施步骤正确的是()。(2012.3)A确定算法和数据结构、编码、调试、整理文档B编码、确定算法和数据结构、调试、整理文档C整理文档、确定算法和数据结构、编码、调试D确定算法和数据结构、调试、编码、整理文档A考点点拨考点点拨:记忆结构化程序的三种结构组成记忆结构化程序的三种结构组成 结构化程序设计通常采用自顶向下、逐步
8、细化、模块化设计、结构化结构化程序设计通常采用自顶向下、逐步细化、模块化设计、结构化编码的方法。结构化程序由三种基本结构组成:顺序结构、选择结构、循编码的方法。结构化程序由三种基本结构组成:顺序结构、选择结构、循环结构。环结构。考点考点5结构化程序和模块结构结构化程序和模块结构真题举例:真题举例:(11)以下关于结构化程序设计的叙述中正确的是()。(2010.9)A)一个结构化程序必须同时由顺序、分支、循环三种结构组成B)结构化程序使用goto语句会很便捷C)在C语言中,程序的模块化是利用函数实现的D)由三种基本结构构成的程序只能解决小规模的问题C第2章数据类型、运算符和表达式二、数据类型及其
9、运算二、数据类型及其运算 1.C的数据类型的数据类型(基本类型,构造类型,指针类型,无值类型基本类型,构造类型,指针类型,无值类型)及其定义方法。及其定义方法。 2.C运算符的种类、运算优先级和结合性。运算符的种类、运算优先级和结合性。 3.不同类型数据间的转换与运算。不同类型数据间的转换与运算。 4.C表达式类型表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式逗号表达式)和求值规则。和求值规则。大纲要求重点:大纲要求重点:考点点拨考点点拨:标识符的命名规则标识符的命名规则 标识符的命名规则有:标识符
10、的命名规则有:(1)由字母、数字、下划线三类字符组成由字母、数字、下划线三类字符组成;(2)必须必须以字母或下划线打头以字母或下划线打头;(3)区分大小写区分大小写;(4)不能和关键字相同不能和关键字相同;(5)尽量见名知尽量见名知义义考点考点1标识符及命名规则标识符及命名规则真题举例:真题举例:(13)以下C语言用户标示符中,不合法的是()(2010.3)A)_1B)AaBcC)a_bD)abD考点点拨考点点拨:记十进制、八进制、十六进制整型常量的表示记十进制、八进制、十六进制整型常量的表示 C语言中整型常量的表示方法有:语言中整型常量的表示方法有:十进制十进制(以非零数字打头以非零数字打头
11、)、八进制、八进制(以以数字数字0打头后跟八进制数符打头后跟八进制数符)、十六进制、十六进制(以以0X或或0x打头后跟十六进制数符打头后跟十六进制数符)。 C语言中整型数据有三大类:语言中整型数据有三大类:短整型短整型(short,2B) 、基本整型、基本整型(int,4B) 、长、长整型整型(long,4B),此为有符号类型,可表示正、负数;在三个关键字前加上此为有符号类型,可表示正、负数;在三个关键字前加上unsigned 则为无符号类型,所占字节数不变,但只能表示正数。则为无符号类型,所占字节数不变,但只能表示正数。 整型数据在内存中以整型数据在内存中以二进制补码二进制补码存放,若超出其
12、表示范围,会产生溢出。存放,若超出其表示范围,会产生溢出。考点考点2整型常量、变量的表示及取值范围整型常量、变量的表示及取值范围考点点拨考点点拨:记实型常量的表示记实型常量的表示 实型常量的表示方法有两种:实型常量的表示方法有两种:小数形式和指数形式小数形式和指数形式。 实型数据主要使用两种类型:实型数据主要使用两种类型:单精度单精度(float , 4B)、双精度、双精度(double, 8B ),注意不同类型的有效数字位数区别。,注意不同类型的有效数字位数区别。 实型数据在内存中以实型数据在内存中以指数形式指数形式存放,实型常量存放,实型常量默认为默认为double型,可以型,可以在常量后
13、加在常量后加f或或F将其按将其按float型处理。型处理。考点考点3实型常量、变量的表示及取值范围实型常量、变量的表示及取值范围考点点拨考点点拨:记字符常量及转义字符常量的定义记字符常量及转义字符常量的定义 普通字符常量是用一对单引号括起来的一个字符表示的常量。字符常普通字符常量是用一对单引号括起来的一个字符表示的常量。字符常量的值是该字符的量的值是该字符的ASCII码值,如码值,如A的值是的值是65,0字符的值是字符的值是48等,等,在内存中占在内存中占1B空间。空间。 转义字符常量指在单引号内由反斜线打头,后跟特定字符表示的常量。转义字符常量指在单引号内由反斜线打头,后跟特定字符表示的常量
14、。需要记的转义字符有三类:需要记的转义字符有三类: (1)控制字符:控制字符:n、 r、b、 t (2)特殊字符:特殊字符: 、 、” (3)转义进制:转义进制: bbb(13位八进制数符位八进制数符)、 xhh(12位十六进位十六进制数符制数符) 字符串常量是用一对双引号括起来的零个或多个字符序列,其中包含字符串常量是用一对双引号括起来的零个或多个字符序列,其中包含的字符可以是普通字符或转义字符,系统自动在字符串末尾增加一个不可的字符可以是普通字符或转义字符,系统自动在字符串末尾增加一个不可显示字符显示字符0(空字符空字符)作为字符串结束标记,字符串所占的内存空间为作为字符串结束标记,字符串
15、所占的内存空间为所含字符数所含字符数+1。考点考点4字符型常量、变量及转义字符常量字符型常量、变量及转义字符常量真题举例:真题举例:(15)以下选项中能表示合法常量的是()(2010.9)A)整数:1,200B)实数:1.5E2.0C)字符斜杠:D)字符串:“007”(13)以下选项中不能用作C程序合法常量的是()(2011.3)A)1,234B)123C)123D)x7G(14)以下选项中可用作C程序合法实数的是A()(2011.3)A).1e0B)3.0e0.2C)E9D)9.12EDAA考点点拨考点点拨:记字符数据的运算方法记字符数据的运算方法 C语言规定,将所有的字符型数据都作为整型来
16、处理。因此,字符常量语言规定,将所有的字符型数据都作为整型来处理。因此,字符常量和转义字符常量可以参与任何整数运算。如和转义字符常量可以参与任何整数运算。如A+32得得a,5-0得得5。常考英文字母大、小写之间的转换,数字字符与整数值之间的相互转换。常考英文字母大、小写之间的转换,数字字符与整数值之间的相互转换。字符数据还可以进行关系运算和逻辑运算。字符数据还可以进行关系运算和逻辑运算。考点考点5字符数据的运算字符数据的运算真题举例:真题举例:(21)以下不能输出字符A的语句是(注:字符A的ASCIl码值为65,字符a的ASCIl码值为97)()(2011.9)A)printf(cn,a-32
17、);B)printf(dn,A);C)printf(“cn”,65);D)print-f(cn,B-1);B考点点拨考点点拨:记字符变量的定义及赋值记字符变量的定义及赋值 C语言中用关键字语言中用关键字char定义字符型变量,在内存中分配定义字符型变量,在内存中分配1B空间,用来存空间,用来存放字符常量的放字符常量的ASCII码值。该值可以作为整型数据来参与运算。码值。该值可以作为整型数据来参与运算。考点考点6字符型变量字符型变量真题举例:真题举例:(22)有以下定义语句,编译时会出现编译错误的是()。(2009.9)A)chara=a;B)chara=n;C)chara=aa;D)chara
18、=x2d;C考点点拨考点点拨:运算符的分类、常用运算符的优先级和结合性运算符的分类、常用运算符的优先级和结合性 运算符按功能分有运算符按功能分有13类类(P56),按所需操作数目分可分为:单目运算符,按所需操作数目分可分为:单目运算符(右结合,优先级右结合,优先级2)、双目运算符、双目运算符(除赋值为右结合外,其余为左结合除赋值为右结合外,其余为左结合)、三目、三目运算符运算符(条件运算符,右结合条件运算符,右结合)。各运算符的优先级和结合性见教材。各运算符的优先级和结合性见教材P378。考点考点7运算符的种类、优先级和结合性运算符的种类、优先级和结合性考点点拨考点点拨:系统自动转换成同一类型
19、的方向和结果的类型系统自动转换成同一类型的方向和结果的类型 不同数据类型混合运算时系统自动转换的规则见下图,其中水平箭头为不同数据类型混合运算时系统自动转换的规则见下图,其中水平箭头为必然转换,垂直箭头为从低向高方向转换。运算结果类型为转换后的类型。必然转换,垂直箭头为从低向高方向转换。运算结果类型为转换后的类型。考点考点8不同类型数据间的混合运算不同类型数据间的混合运算doubledoublefloatfloatunsigned longunsigned longlonglongintintchar, shortchar, short高高低低真题举例:真题举例:(14)若有定义语句:inta
20、=10;doubleb=3.14;,则表达式A+a+b值的类型是()。(2011.9)A)charB)intC)doubleD)floatC考点点拨考点点拨:重点记算术运算符各自的运算特点重点记算术运算符各自的运算特点 基本算术运算符基本算术运算符+、-、*、/、%均为双目运算符。其中均为双目运算符。其中%(求余数求余数)运算符运算符要求两侧的操作数必须为整型;要求两侧的操作数必须为整型;/(除除)运算符两侧若均为整数,则结果为除以运算符两侧若均为整数,则结果为除以后的整数部分,否则为实型。后的整数部分,否则为实型。考点考点9算术运算符与表达式算术运算符与表达式真题举例:真题举例:(14)有以
21、下定义:inta;longb;doublex,y;则以下选项中正确的表达式是()。(2010.9)A)a%(int)(x-y)B)a=x!=y;C)(a*y)%bD)y=x+y=xA考点点拨考点点拨:重点记赋值表达式及复合赋值表达式的特点重点记赋值表达式及复合赋值表达式的特点 赋值表达式左侧必须是简单变量,不能是常量或表达式赋值表达式左侧必须是简单变量,不能是常量或表达式(包括赋值表达式包括赋值表达式),右边可以是常量、变量或表达式,右边可以是常量、变量或表达式(包括赋值表达式包括赋值表达式)。赋值运算符及复合赋。赋值运算符及复合赋值运算符右结合,优先级倒数第二级。当赋值表达式右边表达式值的类
22、型与值运算符右结合,优先级倒数第二级。当赋值表达式右边表达式值的类型与左边变量的类型不一致时,系统会自动将该值转换成左边变量的类型后再赋左边变量的类型不一致时,系统会自动将该值转换成左边变量的类型后再赋值。转换规则则教材值。转换规则则教材P62。考点考点10赋值运算符与表达式赋值运算符与表达式真题举例:真题举例:(16)表达式a+=a-=a=9的值是()(2010.9)A)9B)_9C)18D)0(15)若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是()(2011.3)A)a=(b=4)=3;B)a=b=c+1;C)a=(b=4)+c;D)a=1+(b=c=4);(
23、15)若有定义语句:intx=12,y=8,z;,在其后执行语句z=0.9+x/y;,则z的值为()。(2011.9)A)1.9B)1C)2D)2.4DAB考点点拨考点点拨:理解前置运算和后置运算的不同意义理解前置运算和后置运算的不同意义 自增自增(+) 、自减、自减(-)均为单目运算符,右结合,操作数可以是整型变量或均为单目运算符,右结合,操作数可以是整型变量或实型变量,但不能是常量或表达式。前置运算实型变量,但不能是常量或表达式。前置运算(如如+i、-)是先增减后运算,是先增减后运算,后置运算后置运算(如如i+、i-)是先运算后增减。是先运算后增减。考点考点11自增、自减运算及表达式自增、
24、自减运算及表达式真题举例:真题举例:(18)有以下程序main()intx=011;printf(%dn,+x);程序运行后的输出结果是()(2011.3)A)12B)11C)10D)9C考点点拨考点点拨:记逗号运算符的优先级、结合性及求值规则记逗号运算符的优先级、结合性及求值规则 逗号表达式是用逗号运算符逗号表达式是用逗号运算符(,)将两个或两个以上的表达式顺序连接起将两个或两个以上的表达式顺序连接起来的表达式,左结合,逗号运算符优先级最低。从左到右顺序求解各表达式,来的表达式,左结合,逗号运算符优先级最低。从左到右顺序求解各表达式,也称为顺序求值表达式,结果为最右边表达式的值。注意区分逗号
25、分隔符和也称为顺序求值表达式,结果为最右边表达式的值。注意区分逗号分隔符和逗号运算符。逗号运算符。考点考点12逗号运算及表达式逗号运算及表达式真题举例:真题举例:(6)执行以下程序后的输出结果是。(2007.4)main()inta=10;a=(3*5,a+4);printf(“a=%dn”,a);a=14考点点拨考点点拨:理解强制类型转换、自动类型转换理解强制类型转换、自动类型转换 (1)强制类型转换。格式为:强制类型转换。格式为:(类型类型) (表达式表达式),将表达式值的类型强制转,将表达式值的类型强制转换成指定的类型,对表达式中原有变量的类型无影响。换成指定的类型,对表达式中原有变量的
26、类型无影响。 (2)自动类型转换。自动类型转换。 a.赋值运算中的自动转换。赋值运算中的自动转换。 b.混合运算中的自动转换。混合运算中的自动转换。考点考点13类型转换类型转换真题举例:真题举例:(14)表达式:(int)(double)9/2)-(9)%2的值是()。(2009.9)A)0B)3C)4D)5B考点点拨考点点拨:掌握关系运算符及表达式的求值掌握关系运算符及表达式的求值 关系运算符有:关系运算符有: = k2)&(k2=k2k1)后,k1和k2的值分别为()。(2011.9)A)0和1B)0和20C)10和1D)10和20AB考点点拨考点点拨:理解条件表达式的求值方法理解条件表达
27、式的求值方法 条件运算符条件运算符( ? : )是是C语言里唯一的三目运算符,优先级倒数第三,右语言里唯一的三目运算符,优先级倒数第三,右结合。其一般形式是:结合。其一般形式是:表达式表达式1 ? 表达式表达式2 : 表达式表达式3。先求解表达式。先求解表达式1,取,取其逻辑值,若为真,求解表达其逻辑值,若为真,求解表达2作为整个表达式的值;若为假,求解表达式作为整个表达式的值;若为假,求解表达式3的值作为整个表达式的值。各表达式可以为任意类型的合法表达式。的值作为整个表达式的值。各表达式可以为任意类型的合法表达式。考点考点16条件运算符及表达式条件运算符及表达式真题举例:真题举例:19、有如
28、下嵌套的if语句if(ab)if(ac)k=a;elsek=c;elseif(bc)k=b;elsek=c;以下选项中与上述if语句等价的语句是()。(2010.3)A、k=(ab)?a:b;k=(bc)?b:c;B、k=(ab)?(bc)?a:b):(bc)?b:c);C、k=(ab)?(ac)?a:c):(bc)?b:c);D、k=(ab)?a:b;k=(ac)?a;cC考点点拨考点点拨:理解位运算符及其求值规则和优先级顺序理解位运算符及其求值规则和优先级顺序 位运算符有:位运算符有: (同优先级同优先级) & | (按优先级从高到低排列按优先级从高到低排列)。 位运算的操作数必须是整型或
29、字符型,计算时先将操作数转换成二进制,位运算的操作数必须是整型或字符型,计算时先将操作数转换成二进制,然后再低位对齐按运算规则进行计算。然后再低位对齐按运算规则进行计算。考点考点17位运算符及表达式位运算符及表达式真题举例:真题举例:(39)有以下程序#includemain()inta=2,b=2,c=2;printf(”%dn”,a|b&c);程序运行后的结果是()。(2010.3)A)0B)1C)2D)3C第3章顺序结构三、基本语句三、基本语句1.表达式语句,空语句,复合语句。表达式语句,空语句,复合语句。2.输入输出函数的调用,正确输入数据并正确设计输出格式。输入输出函数的调用,正确输
30、入数据并正确设计输出格式。大纲要求重点:大纲要求重点:考点点拨考点点拨:理解理解C语句的概念及分类语句的概念及分类 见教材见教材P57.图图3.14可知:可知:C语句是函数体里的基本构成单位。语句的作语句是函数体里的基本构成单位。语句的作用是向计算机系统发出操作指令,要求执行相应的操作。一个用是向计算机系统发出操作指令,要求执行相应的操作。一个C语句经过编语句经过编译后产生若干条机器指令。译后产生若干条机器指令。C语句可以分成语句可以分成5大类:大类: (1)控制语句控制语句; (2)函数调函数调用语句用语句;(3)表达式语句表达式语句;(4)空语句空语句;(5)复合语句复合语句;考点考点1C
31、语句的分类语句的分类考点点拨考点点拨:掌握字符数据的输入输出函数的用法掌握字符数据的输入输出函数的用法 putchar函数用于向显示器输出一个字符。一般格式是:函数用于向显示器输出一个字符。一般格式是:putchar(c);其其中中c可以是字符型或整型常量、变量或表达式,结果是向显示器输出其值对可以是字符型或整型常量、变量或表达式,结果是向显示器输出其值对应的应的ASCII码字符。码字符。 getchar函数用于从键盘输入缓冲区读取一个字符。一般格式是:函数用于从键盘输入缓冲区读取一个字符。一般格式是:getchar()。一般用法:。一般用法:ch=getchar(); 将从键盘输入的一个字符
32、值赋给变量将从键盘输入的一个字符值赋给变量ch。从。从键盘输入的空格、回车等控制字符也作为有效字符读取。键盘输入的空格、回车等控制字符也作为有效字符读取。考点考点2putchar函数和函数和getchar函数函数真题举例:真题举例:(10)下列程序运行时,若输入1abcedf2df输出结果为。#includemain()chara=0,ch;while(ch=getchar()!=n)if(a%2!=0&(ch=a&ch=z)ch=ch-a+A;a+;putchar(ch);printf(“n”);1AbCdEf2dF考点点拨考点点拨:掌握格式化输出、输入函数的用法及注意事项掌握格式化输出、输
33、入函数的用法及注意事项 printf(“格式控制字符串格式控制字符串”,输出表列输出表列); scanf(“格式控制字符串格式控制字符串”,输入地址表列输入地址表列);l“格式控制字符串格式控制字符串”中允许有两类字符:中允许有两类字符:u普通字符。在普通字符。在printf函数中会原样输出,在函数中会原样输出,在scanf函数中要求原样输入。函数中要求原样输入。u格式字符。由格式字符。由“%+格式字符格式字符”,用于指定输出、输入项的格式。,用于指定输出、输入项的格式。常用格常用格式字符有式字符有(教材教材P74:表表3.6、表、表3.7;P76:表表3.8、表、表3.9):整数类型整数类型
34、十进制有符号类型:十进制有符号类型:%d %md %-md %ld %mld %-mld十进制无符号类型:十进制无符号类型:%u八进制无符号类型:八进制无符号类型:%o十六进制无符号类型:十六进制无符号类型:%x %X实数类型实数类型小数格式:小数格式:%f %.nf %m.nf %-m.nf指数格式:指数格式:%e %E简洁格式:简洁格式:%g %G (根据输出数据大小自动选择小数或指数根据输出数据大小自动选择小数或指数格式,且不输出无意义的零格式,且不输出无意义的零)字符类型字符类型字符格式:字符格式:%c %mc字符串格式:字符串格式:%s %.ns %m.ns 考点考点3printf函
35、数和函数和scanf函数函数考点点拨考点点拨:掌握格式化输出、输入函数的用法及注意事项掌握格式化输出、输入函数的用法及注意事项lprintf函数中的函数中的“输出表列输出表列”可以没有。若有,可以是常量、变量或可以没有。若有,可以是常量、变量或表达式,将其值按对应的格式输出;若有多项,以逗号分开。其他说明表达式,将其值按对应的格式输出;若有多项,以逗号分开。其他说明见教材见教材P75。lscanf函数中的函数中的“地址表列地址表列”必须为变量的地址,多个地址之间以逗必须为变量的地址,多个地址之间以逗号分开。注意的问题见教材号分开。注意的问题见教材P7677。真题举例:真题举例:(15)程序段:
36、intx=12;doubley=3.141593;printf(“%d%8.6f”,x,y);的输出结果是()。(2009.3)A)123.141593B)123.141593C)12,3.141593D)123.1415930(16)若有定义语句:doublex,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是()。(2009.3)A)scanf(“%f%f”,x,y);B)scanf(“%f%f”,&x,&y);C)scanf(“%lf%le”,px,py);D)scanf(“%lf%lf”,x,y);CA考点考点3printf函数和函数和scanf函数函数第4章选
37、择结构四、选择结构程序设计四、选择结构程序设计1.用用if语句实现选择结构。语句实现选择结构。2.用用switch语句实现多分支选择结构。语句实现多分支选择结构。3.选择结构的嵌套。选择结构的嵌套。大纲要求重点:大纲要求重点:考点点拨考点点拨:掌握三种掌握三种if语句的执行过程语句的执行过程 if语句的功能是判断所给的条件,选择执行其中一个操作。语句的功能是判断所给的条件,选择执行其中一个操作。if语句的一般形语句的一般形式式 if(表达式表达式) 语句语句1 else 语句语句2 常用三种形式是单分支、双分支和多分支常用三种形式是单分支、双分支和多分支(祥见教材祥见教材P89) 。l 表达式
38、可以是任意类型的表达式,取其值的逻辑值表达式可以是任意类型的表达式,取其值的逻辑值(非零为真,零为假非零为真,零为假)l if或或else只能控制其后的一条语句,该语句可以是五大类语句中的任意只能控制其后的一条语句,该语句可以是五大类语句中的任意一种。一种。考点考点1if语句的三种形式及执行过程语句的三种形式及执行过程真题举例:真题举例:(18)有以下程序#includemain()inta=1,b=0;if(!a)b+;elseif(a=0)if(a)b+=2;elseb+=3;printf(”%dn”,b);程序运行后的输出结果是()。(2010.9)A)0B)1C)2D)3(18)有以下
39、程序#includemain()intx;scanf(“%d”,&x);if(x=3);elseif(x!=10)printf(“%dn”,x);程序运行时,输入的值在哪个范围才会有输出结果()。(2009.3)A)不等于10的整数B)大于3且不等10的整数C)大于3或等于10的整数D)小于3的整数CA考点点拨考点点拨:掌握嵌套掌握嵌套if语句的执行,及语句的执行,及else与与if的配对的配对 嵌套嵌套if指一般格式中指一般格式中if或或else的控制语句又是的控制语句又是if语句。注意语句。注意if可以单独使用,可以单独使用,而而else必须和必须和if配对使用,且配对使用,且else总是
40、和它上面的最近的未曾配对的总是和它上面的最近的未曾配对的if进行配进行配对,从而在配对的对,从而在配对的if后的条件为假时执行该后的条件为假时执行该else之后的语句。之后的语句。考点考点2嵌套的嵌套的if语句语句真题举例:真题举例:(27)有以下程序#includemain()intx=1,y=0;if(!x)y+;elseif(x=0)if(x)y+=2;elsey+=3;printf(%dn,y);程序运行后的输出结果是()。(2011.3)A)3B)2C)1D)0D考点点拨考点点拨:switch语句的格式及其执行、跳转的过程语句的格式及其执行、跳转的过程 switch语句又称开关语句,
41、一般用于实现多分支选择。语句又称开关语句,一般用于实现多分支选择。switch语句的一般语句的一般形式及执行见教材形式及执行见教材P103。注意:。注意:uswitch后的表达式值的类型一般为整型或字符型后的表达式值的类型一般为整型或字符型ucase子句后的常量必须为简单的整型或字符型常量子句后的常量必须为简单的整型或字符型常量u当执行完一个分支的执行语句后没有遇到当执行完一个分支的执行语句后没有遇到break,将继续执行下一分支的,将继续执行下一分支的执行语句执行语句uswitch语句可以嵌套,语句可以嵌套,break在在switch中的作用是跳出所在的中的作用是跳出所在的switch语句语
42、句考点考点3switch语句的形式及用法语句的形式及用法真题举例:真题举例:18、以下选项中与if(a=1)a=b;elsea+;语句功能不同的switch语句是:()(2010.3)A、switch(a)B、switch(a=1)case1:a=b;break;case0:a=b;break;default:a+;case1:a+;C、switch(a)D、switch(a=1)default:a+;break;case1:a=b;break;case1:a=b;case0:a+;B第5章循环结构五、循环结构程序设计五、循环结构程序设计1.for循环结构。循环结构。2.while和和do-w
43、hile循环结构。循环结构。3.continue语句和语句和break语句。语句。4.循环的嵌套。循环的嵌套。大纲要求重点:大纲要求重点:考点点拨考点点拨:理解理解while循环的执行过程及应用循环的执行过程及应用 while语句构成的循环称为语句构成的循环称为“当型当型”循环,其一般形式是:循环,其一般形式是: while(表达式表达式) 语句语句 表达式可以是表达式可以是C语言中任意类型的合法表达式,取其值的逻辑值。语句也语言中任意类型的合法表达式,取其值的逻辑值。语句也可以是五大类语句任意之一,但只能控制其后的一条语句。循环体有可能一可以是五大类语句任意之一,但只能控制其后的一条语句。循
44、环体有可能一次也不执行。次也不执行。考点考点1while语句的形式及执行过程语句的形式及执行过程真题举例:真题举例:(20)有以下程序#includemain()inta=1,b=2;while(a6)b+=a;a+=2;b=10;printf(”d,dn”,a,b);程序运行后的输出结果是()。(2010.9)A)5,11B)7,1C)7,11D)6,1(26)有以下程序段#includemain()while(getchar()!=n);以下叙述中正确的是()。(2011.3)A)此while语句将无限循环B)getchar()不可以出现在while语句的条件表达式中C)当执行此while
45、语句时,只有按回车键程序才能继续执行D)当执行此while语句时,按任意键程序就能继续执行BC考点点拨考点点拨:理解理解dowhile循环的执行过程及应用循环的执行过程及应用 dowhile语句构成的循环称为语句构成的循环称为“直到型直到型”循环,其一般形式是:循环,其一般形式是: do 语句语句 while(表达式表达式); 其特点是先执行循环体再判断循环条件,循环体至少执行一次。注意其特点是先执行循环体再判断循环条件,循环体至少执行一次。注意while之后的分号不能少。之后的分号不能少。考点考点2dowhile语句的形式及执行过程语句的形式及执行过程真题举例:真题举例:(9)以下程序运行后
46、的输出结果是【9】。#includemain()inta=1,b=7;dob=b/2;a+=b;while(b1);printf(%dn,a);5考点点拨考点点拨:理解理解for循环的执行过程及应用循环的执行过程及应用 for语句的一般形式是:语句的一般形式是: for(表达式表达式1;表达式表达式2;表达式表达式3) 语句语句 for中的三个表达式可以是任意合法的中的三个表达式可以是任意合法的C语言表达式,表达式语言表达式,表达式1在进入循环在进入循环的进修执行一次,一般是给循环变量赋初值;表达式的进修执行一次,一般是给循环变量赋初值;表达式2取其逻辑值作为循环条取其逻辑值作为循环条件;表达
47、式件;表达式3在执行循环体后才执行,一般是使循环条件趋于假的运算。三个在执行循环体后才执行,一般是使循环条件趋于假的运算。三个表达式均可以省略,但分号不能省。表达式均可以省略,但分号不能省。考点考点3for语句的形式及执行过程语句的形式及执行过程真题举例:真题举例:(21)有以下程序#includesmain()inta=1,b=2;for(;a8;a+)b+=a;a+=2;printf(”%d,%dn”,a,b);程序运行后的输出结果是()。(2010.3)A)9,18B)8,11C)7,11D)10,14D考点点拨考点点拨:理解循环嵌套的几种形式及执行过程理解循环嵌套的几种形式及执行过程
48、循环体内又完整地包含了另一个循环,称循环嵌套。前三种循环语句可以循环体内又完整地包含了另一个循环,称循环嵌套。前三种循环语句可以相互嵌套,可多层嵌套。嵌套循环在执行时外循环执行一次内循环要执行一相互嵌套,可多层嵌套。嵌套循环在执行时外循环执行一次内循环要执行一遍。书写上一般采用缩进形式,使程序层次分明,可读性强。遍。书写上一般采用缩进形式,使程序层次分明,可读性强。考点考点4循环嵌套的形式及执行过程循环嵌套的形式及执行过程真题举例:真题举例:(20)以下程序段中的变量已正确定义for(i=0;i4;i+,i+)for(k=l;k3;k+);printf(“*”);程序段的输出结果是()。(20
49、09.3)A)*B)*C)*D)*D考点点拨考点点拨:掌握掌握break和和continue语句在循环体中的应用语句在循环体中的应用 break语句的作用是退出所在的循环体,在循环体中使用可增加循环的出语句的作用是退出所在的循环体,在循环体中使用可增加循环的出口,使循环更灵活口,使循环更灵活 。break只能用于只能用于switch或循环语句中。或循环语句中。 continue语句的作用是结束本层本次的循环,转去执行下一次的循环处语句的作用是结束本层本次的循环,转去执行下一次的循环处理。理。continue语句只能用于循环体中。语句只能用于循环体中。考点考点5break语句和语句和contin
50、ue语句语句第6章数组六、数组的定义和引用六、数组的定义和引用1.一维数组和二维数组的定义、初始化和数组元素的引用。一维数组和二维数组的定义、初始化和数组元素的引用。2.字符串与字符数组。字符串与字符数组。大纲要求重点:大纲要求重点:考点点拨考点点拨:掌握一维数组的定义方式及初始化的定义形式掌握一维数组的定义方式及初始化的定义形式l一维数组的定义方式:一维数组的定义方式: 数据类型数据类型 数组名数组名常量表达式常量表达式; 常量表达式规定了数组元素的个数常量表达式规定了数组元素的个数(或长度或长度),整个数组,整个数组所占字节数所占字节数=类型类型长度长度数组长度数组长度;常量表达式中可以包
51、括整型常量和符号常量;在给全部元素;常量表达式中可以包括整型常量和符号常量;在给全部元素赋初值时可以省略定义时的数组长度说明。赋初值时可以省略定义时的数组长度说明。l一维数组初始化的一般形式:一维数组初始化的一般形式: 数据类型数据类型 数组名数组名常量表达式常量表达式=值值0,值值1,值值2,; 初值的个数不能超过数组的长度初值的个数不能超过数组的长度; 可以只给部分元素赋初值,未赋初值元可以只给部分元素赋初值,未赋初值元素默认值为素默认值为0; 考点考点1一维数组的定义和初始化一维数组的定义和初始化真题举例:真题举例:(28)若要定义一个具有5个元素的整型数组,以下错误的定义语句是()(2
52、010.9)A)inta5=0;B)intb=0,0,0,0,0;C)intc2+3;D)inti=5,di;D考点点拨考点点拨:掌握一维数组元素的引用形式掌握一维数组元素的引用形式l一维数组元素的引用形式:一维数组元素的引用形式: 数组名数组名下标表达式下标表达式 下标表达式可以是整型的常量、变量或表达式。数组名代表数组内存空下标表达式可以是整型的常量、变量或表达式。数组名代表数组内存空间的起始地址,不能企图用数组名引用全部数组元素。间的起始地址,不能企图用数组名引用全部数组元素。C语言规定,数组的语言规定,数组的下标从下标从0开始,因其开始,因其下标的有效范围为下标的有效范围为0 长度长度
53、-1。C系统不会对数组的下标进行越系统不会对数组的下标进行越界检查。在程序中一般用单重界检查。在程序中一般用单重for循环控制元素下标引用所有元素。循环控制元素下标引用所有元素。考点考点2一维数组元素的引用一维数组元素的引用真题举例:真题举例:(29)有以下程序#includemain()inta5=1,2,3,4,5,b5=0,2,1,3,0,i,s=0;for(i=0;i5;i+)s=s+abi;printf(%dn,s);程序运行后的输出结果是()。(2010.3)A)6B)10C)11D)15C考点点拨考点点拨:掌握二维数组的定义方式及初始化的定义形式掌握二维数组的定义方式及初始化的定
54、义形式l二维数组的定义方式:二维数组的定义方式: 数据类型数据类型 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2 ; 二维数组一般用于存储矩阵,常量表达式二维数组一般用于存储矩阵,常量表达式1为矩阵行数,常量表达式为矩阵行数,常量表达式2为为矩阵列数。二维数组元素在内存中是按行存放的,各元素在内存中所占的字矩阵列数。二维数组元素在内存中是按行存放的,各元素在内存中所占的字节数节数=行数行数列数列数类型长度类型长度l二维数组初始化的方法有:二维数组初始化的方法有:u按行赋初值按行赋初值u按元素排列顺序赋初值按元素排列顺序赋初值u部分元素赋值部分元素赋值u全部元素赋值可省略常量表达式
55、全部元素赋值可省略常量表达式1的说明,省略的长度由初始值个数确定的说明,省略的长度由初始值个数确定考点考点3二维数组的定义和初始化二维数组的定义和初始化真题举例:真题举例:(26)以下定义数组的语句中错误的是()。(2011.9)A)intnum=1,2,3,4,5,6;B)intnum3=1,2,3,4,5,6;C)intnum24=1,2,3,4,5,6;D)intnum4=1,2,3,4,5,6;C考点点拨考点点拨:掌握二维数组元素的引用形式掌握二维数组元素的引用形式l二维数组元素的引用形式:二维数组元素的引用形式: 数组名数组名下标表达式下标表达式1下标表达式下标表达式2 各维下标均从
56、各维下标均从0开始,且为整数类型,不得越界。在程序中一般用双重开始,且为整数类型,不得越界。在程序中一般用双重for循环控制两维下标访问元素。若外循环控制行下标、内循环控制列下标则按循环控制两维下标访问元素。若外循环控制行下标、内循环控制列下标则按行序访问元素;若外循环控制列下标、内循环控制行下标则按列序访问元素。行序访问元素;若外循环控制列下标、内循环控制行下标则按列序访问元素。考点考点4二维数组元素的引用二维数组元素的引用真题举例:真题举例:(11)有以下程序#includemain()inta33=1,2,3,4,5,6,7,8,9;intb3=0,i;for(i=0;i3;i+)bi=
57、ai2+a2i;for(i=0;i3;i+)printf(”%d”,bi);printf(”n”);程序运行后的结果是。(2010.3)101418考点点拨考点点拨:掌握字符数组的定义及初始化形式掌握字符数组的定义及初始化形式l在在C语言中只有字符变量,没有字符串变量,通常用字符数组来存储字符串。一维语言中只有字符变量,没有字符串变量,通常用字符数组来存储字符串。一维数组存储一个字符串,二维数组中的一行存储一个字符串。字符数组的定义:数组存储一个字符串,二维数组中的一行存储一个字符串。字符数组的定义:u char s180,s2580; u 字符数组的存储同数值数组,区别在于每个元素都是一个字
58、符变量,只分配一字符数组的存储同数值数组,区别在于每个元素都是一个字符变量,只分配一个字节存储空间,可以存储一个字符的个字节存储空间,可以存储一个字符的ASCII码值。码值。l字符数组的初始化有两种形式:字符数组的初始化有两种形式:u 逐个字符赋初值逐个字符赋初值,如:如:char s180=a,b,c,d,e;未赋初值元素默认未赋初值元素默认0值值u 用字符串赋初值用字符串赋初值,如:如:char s180=“abcde”,s2 =“abcde”; 数组数组s1占占80B,数组数组s2占占6B(注意系统自动在字符串末尾加结束标记注意系统自动在字符串末尾加结束标记0)。l二维字符数组赋初值:二
59、维字符数组赋初值: char ss480=“abc”,”abcde”,”xyz”,”1234”;,一个字,一个字符串占一行。二维数组的定义中第一维大小决定了字符串的个数,第二维大小决定了符串占一行。二维数组的定义中第一维大小决定了字符串的个数,第二维大小决定了各字符串的最大长度。各字符串的最大长度。考点考点5字符数组的定义及初始化字符数组的定义及初始化真题举例:真题举例:(23)有以下程序#include#includemain()charx”STRING”;x0=0;x10;x20;printf(”%d%dn”,sizeof(x),strlen(x);程序运行后的输出结果是()。(2010.
60、9)A)61B)70C)63D)71B考点点拨考点点拨:掌握字符数组掌握字符数组(字符串字符串)的输入输出方法的输入输出方法l字符数组字符数组(字符串字符串)的输入的输入/输出一般有以下三种方法:输出一般有以下三种方法:u%c字符格式字符格式:在:在printf或或scanf函数中使用,其函数中使用,其I/O对象是单个元素,一般结合对象是单个元素,一般结合循环使用。循环使用。u%s字符串格式字符串格式:在:在printf或或scanf函数中使用,其函数中使用,其I/O对象是数组名所代表的地对象是数组名所代表的地址址(一维数组名字代表它的存储空间的首地址,二维数组名带第一维下标代表所一维数组名字
61、代表它的存储空间的首地址,二维数组名带第一维下标代表所在行的首地址在行的首地址),可以整体输入,可以整体输入/输出字符串。输出字符串。在在scanf函数中接收以空格或回车结函数中接收以空格或回车结束的字符串束的字符串。u字符串处理函数字符串处理函数gets或或puts:gets接收以回车结束的字符串接收以回车结束的字符串;puts输出一个以输出一个以0结束的字符串,且回车换行。其参数均为字符数组的名字。结束的字符串,且回车换行。其参数均为字符数组的名字。考点考点6字符数组字符数组(字符串字符串)的输入和输出的输入和输出真题举例:真题举例:(34)有以下程序(二维字符数组)#includemai
62、n()charch35=AAAA“,BBB“,CC);printf(sn,ch1);程序运行后的输出结果是()。(2011.9)A)AAAAB)CCC)BBBCCD)BBBD考点点拨考点点拨:掌握各常用的字符串处理函数的应用掌握各常用的字符串处理函数的应用l常用的字符串处理函数有常用的字符串处理函数有(需包含需包含string.h头文件头文件):(教材教材P162-164)ustrcpy(s1,s2)字符串拷贝函数字符串拷贝函数:将:将s2中的内容复制到字符数组中的内容复制到字符数组s1中去中去ustrncpy(s1,s2,n)拷贝子串函数拷贝子串函数:将:将s2中的前中的前n个字符拷贝到个字
63、符拷贝到s1中中ustrcat(s1,s2)字符串连接函数字符串连接函数:将:将s2连接在连接在s1的末尾的末尾ustrcmp(s1,s2)字符串比较函数字符串比较函数:从左到右逐个字符比较两个字符串的大小:从左到右逐个字符比较两个字符串的大小ustrlen(str)求字符函数串长度求字符函数串长度:求字符数组:求字符数组str中第一个中第一个0字符之前的字字符之前的字符个数符个数考点考点7字符串处理函数字符串处理函数真题举例:真题举例:(31)下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST要求的是()(2010.9)A)if(strcmp(s2,s1)=0)ST;B)if(*s
64、l=s2)ST;C)if(strcpy(sl,s2)=1)ST;D)if(sl-s2=0)ST;A第7章函数七、函数七、函数1.库函数的正确调用。库函数的正确调用。2.函数的定义方法。函数的定义方法。3.函数的类型和返回值。函数的类型和返回值。4.形式参数与实在参数,参数值传递。形式参数与实在参数,参数值传递。5.函数的正确调用,嵌套调用,递归调用。函数的正确调用,嵌套调用,递归调用。6.局部变量和全局变量。局部变量和全局变量。7.变量的存储类别变量的存储类别(自动,静态,寄存器,外部自动,静态,寄存器,外部),变量的作用域和生,变量的作用域和生存期。存期。大纲要求重点:大纲要求重点:考点点拨
65、考点点拨:理解函数在理解函数在C语言中的功能,掌握如何调用库函数语言中的功能,掌握如何调用库函数l一个一个C程序有且仅有一个程序有且仅有一个main函数,和若干个其他函数构成。主函数可以函数,和若干个其他函数构成。主函数可以调用其他函数,其他函数可以相互调用。这些函数可以是库函数,也可以是调用其他函数,其他函数可以相互调用。这些函数可以是库函数,也可以是用户自定义函数。用户自定义函数。l函数之间可以相互调用,但各函数必须是相互独立的,一个函数并不属于函数之间可以相互调用,但各函数必须是相互独立的,一个函数并不属于其他函数。其他函数不能调用其他函数。其他函数不能调用main函数。函数。C系统提供
66、了丰富的库函数,编程系统提供了丰富的库函数,编程时可直接调用,时可直接调用,使用库函数应注意:使用库函数应注意:(教材教材P384-389) 1、函数功能、函数功能 2、函数参数的数目和顺序,及各参数意义和类型、函数参数的数目和顺序,及各参数意义和类型 3、函数返回值意义和类型、函数返回值意义和类型 4、需要使用的包含文件、需要使用的包含文件考点考点1函数的基本概念及标准库函数的调用函数的基本概念及标准库函数的调用考点点拨考点点拨:掌握函数定义的一般形式及注意事项掌握函数定义的一般形式及注意事项l函数定义的一般形式:函数定义的一般形式: 返回值类型返回值类型 函数名函数名(类型类型1 形参形参
67、1,类型,类型2 形参形参2,) 说明部分说明部分 执行部分执行部分 u 函数名和形参名必须是合法的标识符函数名和形参名必须是合法的标识符u函数可以没有返回值,可以定义为函数可以没有返回值,可以定义为void类型。返回值若省略不写则默认类型。返回值若省略不写则默认为为int型型u函数可以没有参数,即为无参函数函数可以没有参数,即为无参函数 u函数可以没有函数体,即为空函数函数可以没有函数体,即为空函数u不能在函数体中定义另外一个函数,各函数之间是相互独立的不能在函数体中定义另外一个函数,各函数之间是相互独立的考点考点2函数的定义函数的定义考点点拨考点点拨:掌握函数声明的方法和声明时应该注意的问
68、题掌握函数声明的方法和声明时应该注意的问题l在在C语言中,用户自定义函数必须语言中,用户自定义函数必须“先定义,后使用先定义,后使用”。如果调用在前定义。如果调用在前定义在后,就必须在调用之前对函数进行声明,将该函数的有关信息通知编译器。在后,就必须在调用之前对函数进行声明,将该函数的有关信息通知编译器。函数声明的形式如下函数声明的形式如下 :u返回值类型返回值类型 函数名函数名(类型类型1,类型,类型2,);u返回值类型返回值类型 函数名函数名(类型类型1 形参形参1,类型,类型2 形参形参2,);l函数定义在前,调用在后则不必对自定义函数进行声明函数定义在前,调用在后则不必对自定义函数进行
69、声明考点考点3函数的声明函数的声明真题举例:真题举例:(12)请将以下程序中的函数声明语句补充完整。#includeint【12】;main()intx,y,(*p)();scanf(“%d%d”,&x,&y);p=max;printf(“%dn”,(*p)(x,y);intmax(inta,intb)return(ab?a:b);max(int a,int b)考点点拨考点点拨:掌握形参和实参的概念及作用掌握形参和实参的概念及作用l定义函数时,函数名后的参数称为形参;调用函数时,函数名后的参数称定义函数时,函数名后的参数称为形参;调用函数时,函数名后的参数称为实参。当在一个函数中调用另一个函
70、数时,前者称主调函数,后者称被调为实参。当在一个函数中调用另一个函数时,前者称主调函数,后者称被调函数。主调函数通过实参向被调函数的形参传递数据。说明:函数。主调函数通过实参向被调函数的形参传递数据。说明:u实参可以是常量、变量、表达式或函数,形参只能是变量实参可以是常量、变量、表达式或函数,形参只能是变量u实参和形参的类型一致或赋值兼容,个数必须相同,按顺序一一对应实参和形参的类型一致或赋值兼容,个数必须相同,按顺序一一对应u当函数被调用时,形参才分配内存空间,调用结束时,形参所占内存空当函数被调用时,形参才分配内存空间,调用结束时,形参所占内存空间被释放间被释放u实参对形参的数据传递是单向
71、值传递。且在内存中,形参与实参占用的实参对形参的数据传递是单向值传递。且在内存中,形参与实参占用的是不同的内存单元,因此形参的改变并不影响实参。是不同的内存单元,因此形参的改变并不影响实参。考点考点4形式参数和实际参数形式参数和实际参数真题举例:真题举例:(24)有以下程序#includevoidfun(intp)intd=2;p=d+;printf(%d,p);main()inta=1;fun(a);printf(%dn,a);程序运行后的输出结果是()。(2009.9)A)32B)12C)21D)22C考点点拨考点点拨:理解在函数调用时理解在函数调用时return语句的作用语句的作用l被调
72、函数可以用被调函数可以用return语句将函数值传递给主调函数。语句将函数值传递给主调函数。return语句形式:语句形式:return 表达式表达式; 或或 return(表达式表达式);l说明:说明:u当函数执行到当函数执行到return语句时,返回到它的主调函数的调用位置,并带回语句时,返回到它的主调函数的调用位置,并带回返回值。返回值。ureturn后的表达式可以是常量、变量或表达式后的表达式可以是常量、变量或表达式u表达的类型若和函数定义中的返回值类型不相同,则系统自动转换为定表达的类型若和函数定义中的返回值类型不相同,则系统自动转换为定义的类型;若无法转换,则赋值不兼容。义的类型;
73、若无法转换,则赋值不兼容。u若函数定义为若函数定义为void类型,则不能用类型,则不能用return带回返回值。函数最后一个带回返回值。函数最后一个起返回作用。起返回作用。u函数中可以有多条函数中可以有多条return语句,但只执行其中一条,或都不执行。语句,但只执行其中一条,或都不执行。考点考点5函数的返回值函数的返回值真题举例:真题举例:(24)以下关于return语句的叙述中正确的是()。(2010.3)A)一个自定义函数中必须有一条return语句B)一个自定义函数中可以根据不同情况设置多条return语句C)定义成void类型的函数中可以有带返回值的return语句D)没有retur
74、n语句的自定义函数在执行结束时不能返回到调用处B考点点拨考点点拨:掌握函数调用的基本形式及其语法要求掌握函数调用的基本形式及其语法要求l函数调用的形式如下函数调用的形式如下 : 函数名函数名(实参表实参表)l说明:说明:u调用函数时,函数名必须与被调用的函数名完全相同。调用函数时,函数名必须与被调用的函数名完全相同。u函数调用可以出现在允许表达式出现的任何地方函数调用可以出现在允许表达式出现的任何地方u函数调用可以作为一条独立的语句,此时最后的分号不能少。函数调用可以作为一条独立的语句,此时最后的分号不能少。考点考点6函数调用函数调用考点点拨考点点拨:掌握函数嵌套调用与递归调用的方法及注意事项
75、掌握函数嵌套调用与递归调用的方法及注意事项l在被调用的函数中又调用另外一个函数,称在被调用的函数中又调用另外一个函数,称“嵌套调用嵌套调用”l函数直接或间接地调用自身,称函数直接或间接地调用自身,称“递归调用递归调用”。可以将递归调用看做是嵌。可以将递归调用看做是嵌套调用的特殊形式套调用的特殊形式l采用递归方法求解一个问题时,该问题必须满足以下条件:采用递归方法求解一个问题时,该问题必须满足以下条件:u可以把要求解的问题转化为新的问题,而且新问题的解法与原问题相同可以把要求解的问题转化为新的问题,而且新问题的解法与原问题相同u必须有一个明确的结束递归的条件必须有一个明确的结束递归的条件l函数递
76、归调用时,系统利用堆栈将当前函数中的变量和形参暂时保存起来,函数递归调用时,系统利用堆栈将当前函数中的变量和形参暂时保存起来,再为新一轮函数调用中的形参和变量分配内存空间。再为新一轮函数调用中的形参和变量分配内存空间。l嵌套或递归调用的返回原则是:先调用,后返回。嵌套或递归调用的返回原则是:先调用,后返回。考点考点7函数的嵌套调用各递归调用函数的嵌套调用各递归调用真题举例:真题举例:(24)有以下程序#includeintf(intx);main()intn=1,m;m=f(f(f(n);printf(”%dn”,m);intf(intx)returnx*2;程序运行后的输出结果是()。(20
77、10.9)A)1B)2C)4D)8(35)有以下程序#includevoidfun(intx)if(x/21)fun(x/2);printf(”d”,x);main()fun(7);printf(”n”);程序运行后的输出结果是()(2010.9)A)137B)731C)73D)37DD考点点拨考点点拨:掌握局部变量和全局变量的作用范围及特点掌握局部变量和全局变量的作用范围及特点l在函数体内部或复合语句内部定义的变量称局部变量,其作用范围只在定在函数体内部或复合语句内部定义的变量称局部变量,其作用范围只在定义它的函数体或复合语句中。说明:义它的函数体或复合语句中。说明:u形参也属于局部变量,作
78、用域仅限于它所在的函数体。形参也属于局部变量,作用域仅限于它所在的函数体。u不同函数之间可以使用同名的局部变量。因其占用的内存空间不同,所不同函数之间可以使用同名的局部变量。因其占用的内存空间不同,所以互不影响。以互不影响。l在函数体外部定义的变量称为全局变量,其作用范围是从定义位置到源文在函数体外部定义的变量称为全局变量,其作用范围是从定义位置到源文件结束。说明:件结束。说明:u全局变量在整个程序执行期间占用固定的存储空间全局变量在整个程序执行期间占用固定的存储空间u当全局变量和局部变量同名时,在局部变量的作用范围内同名的全局变当全局变量和局部变量同名时,在局部变量的作用范围内同名的全局变量
79、不起作用量不起作用考点考点8变量的作用域变量的作用域考点点拨考点点拨:掌握变量四种存储类型的声明和应用掌握变量四种存储类型的声明和应用l从变量生存期的角度,可以将变量分为静态存储和动态存储。静态存储是从变量生存期的角度,可以将变量分为静态存储和动态存储。静态存储是指在程序运行期间给变量分配固定的内存空间。动态存储是指在程序运行期指在程序运行期间给变量分配固定的内存空间。动态存储是指在程序运行期间根据需要动态地进行内存空间分配。间根据需要动态地进行内存空间分配。l变量在程序运行过程中可以使用的存储位置有:动态存储区、静态存储区、变量在程序运行过程中可以使用的存储位置有:动态存储区、静态存储区、C
80、PU寄存器存储区。变量的存储类型指定变量的存储位置,共有四种存储类寄存器存储区。变量的存储类型指定变量的存储位置,共有四种存储类型:型:uauto(自动型自动型):在函数体内部使用,为该类型的变量分配在在函数体内部使用,为该类型的变量分配在动态存储区动态存储区。其特点是进入其作用范围时分配存储空间,退出其作用范围时释放为其分其特点是进入其作用范围时分配存储空间,退出其作用范围时释放为其分配的存储空间。在函数体内部未指定变量存储类型时默认为配的存储空间。在函数体内部未指定变量存储类型时默认为auto型。该类型。该类型变量若赋初值,则每次使用时重新赋初值;型变量若赋初值,则每次使用时重新赋初值;若
81、不赋初值,则为随机值若不赋初值,则为随机值。ustatic(静态型静态型):可以在函数体内部或外部使用,为该类型的变量分配在可以在函数体内部或外部使用,为该类型的变量分配在静态存储区静态存储区。其特点是在整个程序运行期间占用固定的存储空间。若赋初。其特点是在整个程序运行期间占用固定的存储空间。若赋初值则只在第一次使用的时候赋初值一次;值则只在第一次使用的时候赋初值一次;若不赋初值,则默认为若不赋初值,则默认为0。在函数内部定义称静态局部变量,其生存期全局,作用域局部。该类在函数内部定义称静态局部变量,其生存期全局,作用域局部。该类型变量型变量具有继承性具有继承性,即多次使用时后一次继承前一次使
82、用的结果值。,即多次使用时后一次继承前一次使用的结果值。在函数外部定义称静态全局变量,其特点同全局变量,区别在于仅限在函数外部定义称静态全局变量,其特点同全局变量,区别在于仅限本文件使用。本文件使用。考点考点9变量生存期和存储类别变量生存期和存储类别考点点拨考点点拨:掌握变量四种存储类型的声明和应用掌握变量四种存储类型的声明和应用uregister(寄存器型寄存器型):其特点同:其特点同auto型变量,区别是在型变量,区别是在CPU寄存器中分配寄存器中分配存储空间,仅限数据类型为整型、字符型或指针类型且使用频繁的变量存储空间,仅限数据类型为整型、字符型或指针类型且使用频繁的变量uextern(
83、外部型外部型):引用性声明。此种类型只针对全局变量且不分配存储:引用性声明。此种类型只针对全局变量且不分配存储空间,作用是扩展已经在其他位置定义过的全局变量的作用范围到声明位空间,作用是扩展已经在其他位置定义过的全局变量的作用范围到声明位置置考点考点9变量生存期和存储类别变量生存期和存储类别真题举例:真题举例:(36)有以下程序#includeintfun()staticintx=1;x+=1;returnx;main()inti,s=1;for(i=1;i=5;i+)s+=fun();printf(”%dn”,s);程序运行后的输出结果是()(2010.9)A)11B)21C)6D)120B
84、第8章编译预处理八、编译预处理八、编译预处理1.宏定义和调用宏定义和调用(不带参数的宏,带参数的宏不带参数的宏,带参数的宏)。2.“文件包含文件包含”处理。处理。大纲要求重点:大纲要求重点:考点点拨考点点拨:掌握不带参数宏的替换形式和特点掌握不带参数宏的替换形式和特点l不带参数宏的定义形式:不带参数宏的定义形式: # define 宏名宏名 宏体宏体l说明:说明:u宏名为合法标识符,为和普通变量区分,常用大写字母表示。宏名为合法标识符,为和普通变量区分,常用大写字母表示。u在定义新宏时,可以引用已经定义过的宏,替换时层层替换。在定义新宏时,可以引用已经定义过的宏,替换时层层替换。u在字符串中若
85、有与宏名相同的内容,不进行替换。在字符串中若有与宏名相同的内容,不进行替换。u宏替换时,只是将宏体简单替换掉宏名,不得随意增、减任何内容。宏宏替换时,只是将宏体简单替换掉宏名,不得随意增、减任何内容。宏计算的原则是:计算的原则是:“先替换,再计算先替换,再计算”!考点考点1不带参数的宏定义不带参数的宏定义考点点拨考点点拨:掌握带参数宏定义的替换形式及特点掌握带参数宏定义的替换形式及特点l带参数宏的定义形式:带参数宏的定义形式: #define 宏名宏名(参数表参数表) 宏体宏体l说明:说明:u宏名与参数表的宏名与参数表的(之间不能有空格之间不能有空格u宏的参数表无类型,多个参数之间以逗号分隔宏
86、的参数表无类型,多个参数之间以逗号分隔u引用带参宏时,实参可以是常量、变量或表达式,都以原样替换宏体引用带参宏时,实参可以是常量、变量或表达式,都以原样替换宏体中对应的形参,宏体中的其他内容原样书写,最后再计算替换后的表达中对应的形参,宏体中的其他内容原样书写,最后再计算替换后的表达式。千万不能将实参表达式计算后再替换。式。千万不能将实参表达式计算后再替换。考点考点2带参数的宏定义带参数的宏定义真题举例:真题举例:(35)以下程序#include#defineSUB(a)(a)-(a)main()inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf(”%dn”,d);程序运
87、行后的结果是()。(2010.3)A)0B)-12C)-20D)10C(35)有以下程序#include#definef(x)x*x*xmain()inta=3,s,t;s=f(a+1);t=f(a+1);printf(%d,%dn,s,t);程序运行后的输出结果是()。(2009.3)A)10,64B)10,10C)64,10D)64,64A考点点拨考点点拨:理解文件包含的作用、形式及特点理解文件包含的作用、形式及特点l文件包含是指在一个文件中包含另一个文件的全部内容。文件包含有两种文件包含是指在一个文件中包含另一个文件的全部内容。文件包含有两种形式:形式:l # include :在系统所
88、在的标准目录中查找要包含的文件:在系统所在的标准目录中查找要包含的文件l # include “文件名文件名” :在用户当前目录中查找要包含的文件,若没:在用户当前目录中查找要包含的文件,若没有再到标准目录中查找有再到标准目录中查找考点考点3文件包含文件包含第9章指针九、指针九、指针1.地址与指针变量的概念,地址运算符与间址运算符。地址与指针变量的概念,地址运算符与间址运算符。2.一维、二维数组和字符串的地址以及指向变量、数组、字符串、一维、二维数组和字符串的地址以及指向变量、数组、字符串、函数、结构体的指针变量的定义。通过指针引用以上各类型数据。函数、结构体的指针变量的定义。通过指针引用以上
89、各类型数据。3.用指针作函数参数。用指针作函数参数。4.返回地址值的函数。返回地址值的函数。5.指针数组,指向指针的指针。指针数组,指向指针的指针。大纲要求重点:大纲要求重点:考点点拨考点点拨:理解变量的地址和指针的概念,掌握指针变量的定理解变量的地址和指针的概念,掌握指针变量的定义和赋值义和赋值l地址是内存空间某一字节的编号,变量的地址是指给变量在内存中分配的地址是内存空间某一字节的编号,变量的地址是指给变量在内存中分配的空间的起始地址编号。空间的起始地址编号。l指针变量是专门存放变量地址的一种特殊变量。指针变量是专门存放变量地址的一种特殊变量。lC语言允许可以用变量名语言允许可以用变量名直
90、接访问直接访问所分配的内存空间,也可以通过指针变量所分配的内存空间,也可以通过指针变量间接访问间接访问所指向变量的内存空间。所指向变量的内存空间。l指针变量的定义形式:指针变量的定义形式: 类型名类型名 *指针名指针名1,*指针名指针名2, ; 其中,其中,(1)类型名是指针变量可以指向的目标变量的类型。类型名是指针变量可以指向的目标变量的类型。 (2)定义形式中的定义形式中的*仅为说明符,指针变量是其后的标识符。仅为说明符,指针变量是其后的标识符。 (3)不管指针变量指向何种类型的变量,均给其分配一个存放地址不管指针变量指向何种类型的变量,均给其分配一个存放地址的空间,一般为的空间,一般为4
91、B。l指针变量只能存放地址,不能存放其他数据。如指针变量只能存放地址,不能存放其他数据。如int i; int *p=&i; 表示指针表示指针变量变量p指向普通变量指向普通变量i。l可以给指针变量赋空值,即可以给指针变量赋空值,即 int *p=NULL; 让指针变量指向地址编号为让指针变量指向地址编号为0的的单元,该单元不存放任何有意义的数据。单元,该单元不存放任何有意义的数据。考点考点1变量地址和指针变量的基本概念及赋值和赋值变量地址和指针变量的基本概念及赋值和赋值考点点拨考点点拨:掌握如何通过指针变量间接访问所指地址空间掌握如何通过指针变量间接访问所指地址空间l指针变量在运算时常用两个运
92、算符指针变量在运算时常用两个运算符u&:取地址运算符:取地址运算符,可取变量的地址,数组元素的地址,如,可取变量的地址,数组元素的地址,如&i,&aiu*:间接访问运算符:间接访问运算符,*右边的运算对象可以是指针变量或变量的地址。右边的运算对象可以是指针变量或变量的地址。如有如有: int i,*p; p=&i; ,则,则 *pi 、 p&i 。考点考点2通过指针变量引用存储单元通过指针变量引用存储单元真题举例:真题举例:(25)以下程序段完全正确的是()(2010.9)A)int*p;scanf(“%d”,&p);B)int*p;scanf(“%d”,p);C)intk,*p=&k;sca
93、nf(%d,p);D)intk,*p;*p=&k;scanf(“%d”,p);(32)以下不能将s所指字符串正确复制到t所指存储空间的是()(2010.9)A)while(*t=*s)t+;s+;B)for(i=0;ti=si;i+);C)do*t+=*s+;while(*s);D)for(i=0,j=0;ti+=sj+;);Cc考点点拨考点点拨:掌握指针变量作函数参数传递和返回值的意义掌握指针变量作函数参数传递和返回值的意义l指针可以作为函数的形参。这样,函数调用时实际是将实参的地址传递给指针可以作为函数的形参。这样,函数调用时实际是将实参的地址传递给形参,即形参指针变量指向实参,这种传递方
94、式叫地址值传递形参,即形参指针变量指向实参,这种传递方式叫地址值传递。地址值传递。地址值传递方式的特点是可以通过对形参指针变量的间接访问引用、改变实参变量的值。方式的特点是可以通过对形参指针变量的间接访问引用、改变实参变量的值。这样调用函数可以实现不用这样调用函数可以实现不用return而得到多个函数处理结果。在程序中广泛而得到多个函数处理结果。在程序中广泛使用。使用。考点考点3指针变量作函数参数指针变量作函数参数真题举例:真题举例:(26)有以下程序#includevoidfun(char*c,intd)*c=*c+1;d=d+1;printf(”%c,%c,”,*c,d);main()ch
95、arb=a,a=A;fun(&b,a);printf(”%c,%cn”,b,a);程序运行后的输出结果是()。(2010.3)A)b,B,b,AB)b,B,B,AC)a,B,B,aD)a,B,a,BA考点点拨考点点拨:掌握指向一维数组、二维数组和字符数组的指针的应用掌握指向一维数组、二维数组和字符数组的指针的应用l一维数组的名字即是数组存储空间的首地址一维数组的名字即是数组存储空间的首地址(或首元素地址或首元素地址)常量,可以用指常量,可以用指针指向一维数组:如有针指向一维数组:如有 int a10,*p; p=a; 则则uai*(a+i)*(p+i)piu&aia+ip+i&piup+&a1
96、up=a+5; p+&a6 (注意注意p是地址变量,是地址变量,a是地址常量是地址常量)l二维数组的名字是二维数组首行的地址,是二级地址;二维数组名带一个二维数组的名字是二维数组首行的地址,是二级地址;二维数组名带一个下标是下标所在行首元素的地址,是一级地址。因此在二维数组中可以使用下标是下标所在行首元素的地址,是一级地址。因此在二维数组中可以使用两类指针变量:两类指针变量:u列列(元素元素)指针变量:如有指针变量:如有 int a34,*p; p=a0; 则则p+&a01,指,指向下一个元素向下一个元素u行指针变量:如有行指针变量:如有 int a34,(*p)4; p=a; 则则p+&a1
97、,指向下一,指向下一行行l可以用字符数组存储一个字符串,也可以用字符指针指向一个字符串,此可以用字符数组存储一个字符串,也可以用字符指针指向一个字符串,此时,字符指针等同于字符数组名使用,但前者是地址变量,后者是地址常量。时,字符指针等同于字符数组名使用,但前者是地址变量,后者是地址常量。u如如 char str80=“abcde”,*t; t = str; 则则puts(str)puts(t)u可以可以char *s; s=“abcde”; 不可以不可以char str80; str=“abcde”; 考点考点4指向数组的指针指向数组的指针考点点拨考点点拨:掌握数组的指针作函数参数特点和应用
98、掌握数组的指针作函数参数特点和应用l数组作函数参数有以下情况:数组作函数参数有以下情况:l数组元素作函数参数:数组元素作函数参数:同普通变量作函数参数,此时形参为普通变量,同普通变量作函数参数,此时形参为普通变量,是单向普通值传递,最多由是单向普通值传递,最多由return带回一个返回值。带回一个返回值。l一维数组名作函数参数:一维数组名作函数参数:传递的是一维数组的首地址,此时形参为一级传递的是一维数组的首地址,此时形参为一级指针变量或同类型的一维数组。可以在被调函数中通过形参变量或数组指针变量或同类型的一维数组。可以在被调函数中通过形参变量或数组名间接访问、改变所有的实参数组元素值。名间接
99、访问、改变所有的实参数组元素值。l二维数组名作函数参数:二维数组名作函数参数:传递的是二维数组的首行地址,此时形参为二传递的是二维数组的首行地址,此时形参为二级行指针变量或同类型二维数组。级行指针变量或同类型二维数组。考点考点5数组的指针作函数参数数组的指针作函数参数真题举例:真题举例:(23)下列语句中,正确的是()(2010.3)A)char*s;s=”Olympic”;B)chars7;s=”Olympic”;C)char*s;s=”Olympic”;D)chars7;s=”Olympic”;(27)若有定义int(*pt)3;,则下列说法正确的是()(2010.3)A)定义了基类型为i
100、nt的三个指针变量B)定义了基类型为int的具有三个元素的指针数组pt。C)定义了一个名为*pt、具有三个元素的整型数组D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组(28)设有定义doublea10,*s=a;,一下能够代表数组元素a3的是()(2010.3)A)(*s)3B)*(s+3)C)*s3D)*s+3ADB考点点拨考点点拨:掌握指针数组的定义及其应用掌握指针数组的定义及其应用l指针数组即数组中的每个元素均为指针的数组。其定义形式如下:指针数组即数组中的每个元素均为指针的数组。其定义形式如下:类型名类型名 *数组名数组名数组长度数组长度l通常用指针数组处理二
101、维数组或字符串数组通常用指针数组处理二维数组或字符串数组考点考点6指针数组指针数组真题举例:真题举例:(26)有定义语句:int*p4;以下选项中与此语句等价的是()(2010.9)A)intp4;B)int*p;C)int*(p4);D)int(*p)4;C考点点拨考点点拨:掌握命令行参数的个数、类型及意义掌握命令行参数的个数、类型及意义l主函数带参数称为命令行参数,因为没有函数能调用主函数带参数称为命令行参数,因为没有函数能调用main函数,所以要从函数,所以要从操作系统的命令行给其传参数。操作系统的命令行给其传参数。main函数带参数的形式:函数带参数的形式:lvoid main(int
102、 argc,char *argv )l其中其中:largc接收命令行中参数的个数,包括命令名接收命令行中参数的个数,包括命令名(即可执行文件名即可执行文件名)本身本身largv接收命令行中各参数字符串的首行地址,接收命令行中各参数字符串的首行地址,*argv *argvl两个参数的名字可以变,但类型不能变两个参数的名字可以变,但类型不能变考点考点7命令行参数命令行参数考点点拨考点点拨:掌握指向函数的指针的定义及应用掌握指向函数的指针的定义及应用l函数的指针及函数的入口地址,用函数名表示。指向函数的指针定义形式:函数的指针及函数的入口地址,用函数名表示。指向函数的指针定义形式:返回值类型返回值类
103、型 (*指针变量名指针变量名)(参数类型参数类型1,参数类型,参数类型2,);l只要函数的类型、参数个数和类型与指针变量定义中一致,就可以将函数只要函数的类型、参数个数和类型与指针变量定义中一致,就可以将函数的入口地址赋给该指针变量,如下:的入口地址赋给该指针变量,如下:指针变量名指针变量名=函数名函数名;l此时,可以通过指针变量间接调用所指向的函数:此时,可以通过指针变量间接调用所指向的函数:u(*指针变量名指针变量名)(实参列表实参列表)u指针变量名指针变量名(实参列表实参列表)考点考点8指向函数的指针指向函数的指针真题举例:真题举例:(33)设有以下函数:voidfun(intn,cha
104、r*s)则下面对函数指针的定义和赋值均正确的是()。(2009.9)A)void(*pf)();pf=fun;B)void*pf();pf=fun;C)void*pf();*pf=fun;D)void(*pf)(int,char);pf=&fun;A考点点拨考点点拨:掌握返回指针值的函数头定义形式及返回值表示掌握返回指针值的函数头定义形式及返回值表示l返回指针值函数的函数头定义形式是:返回指针值函数的函数头定义形式是: 类型类型 *函数名函数名(形参列表形参列表)l在这样的函数体中,用在这样的函数体中,用return带回的是一个和函数头上指定类型相同的指针带回的是一个和函数头上指定类型相同的指
105、针考点考点9返回指针值的函数返回指针值的函数考点点拨考点点拨:理解二级指针的定义、意义及使用理解二级指针的定义、意义及使用l一级指针变量存放普通变量的地址,二级指针变量存放一级指针变量的地一级指针变量存放普通变量的地址,二级指针变量存放一级指针变量的地址,以此类推。二级指针变量即为指向指针的指针,其定义形式如下:址,以此类推。二级指针变量即为指向指针的指针,其定义形式如下: 数据类型数据类型 *指针变量名指针变量名;若有若有 int i,*p,*q; p=&i; q=&p; 则则i*p*q &ip*q考点考点10指向指针的指针指向指针的指针考点点拨考点点拨:理解理解malloc函数和函数和fr
106、ee函数的作用函数的作用l库函数库函数malloc是在程序运行过程中向内存申请存储空间,其调用形式是是在程序运行过程中向内存申请存储空间,其调用形式是 malloc(size) 其中,其中,size必须是一个正整数。申请成功,函数的返回值是申请到存储必须是一个正整数。申请成功,函数的返回值是申请到存储空间的首地址,一般先强制类型转换后用程序中的某个指针变量接收。如:空间的首地址,一般先强制类型转换后用程序中的某个指针变量接收。如: int *p; p=(int *)malloc(sizeof(int )*10);l由由malloc函数申请到的存储空间不会因为函数执行结束而释放,若确定不函数申请
107、到的存储空间不会因为函数执行结束而释放,若确定不用,可以使用用,可以使用free函数来释放。如函数来释放。如 free(p);l使用这两个库函数需要包含头文件:使用这两个库函数需要包含头文件:stdlib.h或或malloc.h考点考点11malloc函数和函数和free函数函数真题举例:真题举例:(37)有以下程序#inctude#includemain()int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int);*a=1;*b=2;*c=3;a=b;printf(“%d,%d,%dn”,*a,*b,*c);程序运行后的输出结果是()。(2010.9)A)3,3,
108、3B)2,2,3C)1,2,3D)1,1,3A第10章结构体和共用体十、结构体十、结构体(即即“结构结构”)与共同体与共同体(即即“联合联合”)1.用用typedef说明一个新类型。说明一个新类型。2.结构体和共用体类型数据的定义和成员的引用。结构体和共用体类型数据的定义和成员的引用。3.通过结构体构成链表,单向链表的建立,结点数据的输出、删除通过结构体构成链表,单向链表的建立,结点数据的输出、删除与插入。与插入。大纲要求重点:大纲要求重点:考点点拨考点点拨:理解结构体类型的声明及变量的定义理解结构体类型的声明及变量的定义l声明结构体类型用关键字声明结构体类型用关键字struct,形式如下:,
109、形式如下:struct 结构体名结构体名 成员列表成员列表 ;其中,其中,“结构体名结构体名”是合法标识符,可以省略。是合法标识符,可以省略。“成员列表成员列表”定义该类型中定义该类型中各成员的类型和名字。结构体类型定义只描述结构中各成员的组织形式,各各成员的类型和名字。结构体类型定义只描述结构中各成员的组织形式,各成员并不占用内存空间。可以嵌套定义结构体类型。新定义的结构体类型为:成员并不占用内存空间。可以嵌套定义结构体类型。新定义的结构体类型为:“struct 结构体名结构体名” 。l用已经定义的结构体类型定义变量,其形式为:用已经定义的结构体类型定义变量,其形式为: struct 结构体
110、名结构体名 变量名列表变量名列表;也可以定义类型的同时定义变量或定义无名结构体变量,系统会在编译时为也可以定义类型的同时定义变量或定义无名结构体变量,系统会在编译时为结构体变量分配内存空间,结构体变量分配内存空间,其字节数其字节数=类型中各成员所占字节数的总和。类型中各成员所占字节数的总和。考点考点1结构体类型及变量的定义结构体类型及变量的定义真题举例:真题举例:(36)下面结构体的定义语句中,错误的是()。(2009.9)A)structordintx;inty;intz;structorda;B)structordintx;inty;intz;structorda;C)structordi
111、ntx;inty;intz;n;D)structintx;inty;intz;a;B考点点拨考点点拨:掌握结构体变量的赋值和引用掌握结构体变量的赋值和引用l可以在定义结构体变量时按成员顺序给其赋初值,如:可以在定义结构体变量时按成员顺序给其赋初值,如: struct 结构体名结构体名 变量名变量名=初值初值1,初值初值2,;l除了同类型结构体变量可以整体赋值外,其余只能通过成员运算符除了同类型结构体变量可以整体赋值外,其余只能通过成员运算符(.)逐个逐个引用其成员,其形式为:引用其成员,其形式为: 结构体变量名结构体变量名.成员名成员名l结构体类型也可以定义数组或指针,如:结构体类型也可以定义
112、数组或指针,如: struct student stu,stud3,*p; p=&stu; 或或p=stud; 因此,也可以通过结构体指针引用其指向变量的成员:因此,也可以通过结构体指针引用其指向变量的成员: stu.age (*p).age p-age考点考点2结构体变量的赋值和引用结构体变量的赋值和引用真题举例:真题举例:37、设有以下程序段structMP3charname20;charcolor;floatprice;std,*ptr;ptr=&std;若要引用结构体变量std中的color成员,写法错误的是()。(2012.3)A)std.colorB)ptr-colorC)std-
113、colorD)(*ptr).colorC考点点拨考点点拨:理解链表的结构特点及链表的建立、输出、插入、删除理解链表的结构特点及链表的建立、输出、插入、删除l链表是一种动态存储结构,其基本构成单位称链表是一种动态存储结构,其基本构成单位称结点结点,其特点是通过结点中,其特点是通过结点中的指针来体现结点间的先后关系。结点中一般包含两部分数据:的指针来体现结点间的先后关系。结点中一般包含两部分数据:数据域数据域和和指指针域针域。因其类型不同,所以用结构体类型组织,一般形式如下。因其类型不同,所以用结构体类型组织,一般形式如下 : struct NODE int data; struct NODE *
114、next; ;其中,数据域或指针域根据需要可以是多项成员。在单向链表中,指针成员其中,数据域或指针域根据需要可以是多项成员。在单向链表中,指针成员next通常用来存放下一个结点的地址。通常用来存放下一个结点的地址。l 链表的处理在机试题中有所涉及,近几次笔试题中没有考。链表的处理在机试题中有所涉及,近几次笔试题中没有考。考点考点3用结构体处理链表用结构体处理链表考点点拨考点点拨:了解共用体类型和变量的定义及引用方法了解共用体类型和变量的定义及引用方法l共用体类型用关键字共用体类型用关键字union定义,其形式同结构体类型定义,其形式同结构体类型l共用体变量的定义和引用同结构体变量,区别在于:共
115、用体变量的定义和引用同结构体变量,区别在于:u共用体变量分配的字节数共用体变量分配的字节数=各成员所占字节数的最大值各成员所占字节数的最大值u共用体变量不能在定义的时候赋初值共用体变量不能在定义的时候赋初值u共用体变量中各成员不能同时存在,某一时刻只能有一个成员起作用共用体变量中各成员不能同时存在,某一时刻只能有一个成员起作用且是最后一次赋值的成员且是最后一次赋值的成员考点考点4共用体共用体考点点拨考点点拨:了解了解typedef声明新类型的方法声明新类型的方法ltypedef声明新类型的形式如下:声明新类型的形式如下:typedef 类型名类型名 标识符标识符l 其中,类型名是一种已经存在的
116、类型,标识符是用户定义用作新类型的名其中,类型名是一种已经存在的类型,标识符是用户定义用作新类型的名称。定义后,使用新的称。定义后,使用新的“标识符标识符”等价于原类型名。等价于原类型名。考点考点5用用typedef声明新类型声明新类型真题举例:真题举例:(39)若有以下语句typedefstructSintg;charh;T;以下叙述中正确的是()。(2010.9)A)可用S定义结构体变量B)可用T定义结构体变量C)S是struct类型的变量D)T是structS类型的变量B第11章文件十二、文件操作十二、文件操作只要求缓冲文件系统只要求缓冲文件系统(即高级磁盘即高级磁盘I/O系统系统),对
117、非标准缓冲文件系统,对非标准缓冲文件系统(即低级磁盘即低级磁盘I/O系统系统)不要求。不要求。1.文件类型指针文件类型指针(FILE类型指针类型指针)。2.文件的打开与关闭文件的打开与关闭(fopen,fclose)。3.文件的读写文件的读写(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函数的应用函数的应用),文件的定位,文件的定位(rewind,fseek函数的应用函数的应用)。大纲要求重点:大纲要求重点:考点点拨考点点拨:了解了解C程序处理文件的分类程序处理文件的分类l在在C程序中处理的文件通常为提供原始数据或存放结果数据,因其存放
118、在外程序中处理的文件通常为提供原始数据或存放结果数据,因其存放在外存上便于长期保存和与程序分及数据共享。存上便于长期保存和与程序分及数据共享。C处理的文件分为两种:处理的文件分为两种:文本文文本文件和二进制文件件和二进制文件。考点考点1文件的基本概念及分类文件的基本概念及分类真题举例:真题举例:(40)下列关于C语言文件的叙述中正确的是()。(2009.9)A)文件由一系列数据一次排列组成,只能构成二进制文件B)文件由结构序列组成,可以构成二进制文件或文本文件C)文件由数据序列组成,可以构成二进制文件或文本文件D)文件由字符序列组成,只能是文本文件C考点点拨考点点拨:掌握文件类型及文件打开、关
119、闭函数的使用掌握文件类型及文件打开、关闭函数的使用l文件类型是在文件类型是在stdo.h文件中定义的文件中定义的FILE结构体类型,通常使用结构体类型,通常使用FILE定义文定义文件类型指针,用该指针保存文件打开的返回值,并通过该指针完成对文件的件类型指针,用该指针保存文件打开的返回值,并通过该指针完成对文件的读写和其他操作。文件指针的定义为:读写和其他操作。文件指针的定义为: FILE *指针变量名指针变量名; 如如 FILE *fp;l文件的操作顺序是:文件的操作顺序是:打开打开 - 读写读写 - 关闭关闭l 打开文件用打开文件用fopen函数,一般用法是:函数,一般用法是:fp=fope
120、n(“文件名文件名”,“打开方式打开方式”); 打开成功建立文件指针打开成功建立文件指针fp和所打开文件的指向关系,打开失败返回和所打开文件的指向关系,打开失败返回NULLl 文件的打开方式有基本的三种:文件的打开方式有基本的三种:r(只读只读)、w(只写只写)、a(追加追加),扩展后共,扩展后共12种,根据操作需要选择合适的打开方式。种,根据操作需要选择合适的打开方式。l 文件关闭用文件关闭用fclose函数,一般用法是:函数,一般用法是:fclose(fp);考点考点2文件类型和打开、关闭方法文件类型和打开、关闭方法真题举例:真题举例:(15)以下程序打开新文件f.txt,并调用字符输出函
121、数将a数组中的字符写入其中,请填空。(2010.9)#includemain()【15】*fp;chara5=1,2,3,4,5,I;fp=fopen(”f.txt”,”w”);for(i=0;i5;i+)fputc(ai,fp);fclose(fp);FILE考点点拨考点点拨:了解文件的字符输入输出函数的使用了解文件的字符输入输出函数的使用l 从文件读取一个字符函数的用法一般是:从文件读取一个字符函数的用法一般是: ch = fgetc(fp) ; 函数调用成功返回从文件读取到的一个字符,读取失败返回函数调用成功返回从文件读取到的一个字符,读取失败返回EOF(-1)。l输出一个字符到文件函数
122、的一般用法是:输出一个字符到文件函数的一般用法是: fputc(ch,fp) ;l该函数通常针对以文本方式打开的文件。该函数通常针对以文本方式打开的文件。考点考点3文件的字符输入输出文件的字符输入输出考点点拨考点点拨:了解文件的字符串输入输出函数的使用了解文件的字符串输入输出函数的使用l 从文件读取一个字符串函数的用法一般是:从文件读取一个字符串函数的用法一般是: fgets(str,N,fp) ; l输出一个字符到文件函数的一般用法是:输出一个字符到文件函数的一般用法是: fputs(str,fp) ;l该函数通常针对以文本方式打开的文件。该函数通常针对以文本方式打开的文件。考点考点4文件的
123、字符串输入输出文件的字符串输入输出考点点拨考点点拨:了解文件的格式化输入输出函数的使用了解文件的格式化输入输出函数的使用l 从文件读取指定格式数据函数的用法一般是:从文件读取指定格式数据函数的用法一般是: fscanf(fp, “格式控制字符串格式控制字符串”, 地址表列地址表列 ) ;l 输出指定格式的数据到文件函数的一般用法是:输出指定格式的数据到文件函数的一般用法是: fprintf(fp, “格式控制字符串格式控制字符串”, 输出表列输出表列 ) ;l该函数操作的可以是文本文件或二进制文件。该函数操作的可以是文本文件或二进制文件。考点考点5文件的格式化输入输出文件的格式化输入输出考点点
124、拨考点点拨:了解文件块式数据的输入输出函数的使用了解文件块式数据的输入输出函数的使用l 从文件读取一个数据块函数的用法一般是:从文件读取一个数据块函数的用法一般是: fread(str,size,count,fp) ; l输出一个字符到文件函数的一般用法是:输出一个字符到文件函数的一般用法是: fwrite(str,size,count,fp) ;l该函数通常针对以二进制方式打开的文件。该函数通常针对以二进制方式打开的文件。考点考点6文件的块式数据的输入输出文件的块式数据的输入输出考点点拨考点点拨:理解理解fseek函数的应用及参数的意义函数的应用及参数的意义l fseek函数将文件的读写位置
125、指针移到指定的位置,从而实现随机读写文件,函数将文件的读写位置指针移到指定的位置,从而实现随机读写文件,其一般形式为:其一般形式为: fseek(fp,位移量位移量,起始点起始点);l其中,位移量为正数位置指针向文件结尾方向移动,为负数则向文件开头其中,位移量为正数位置指针向文件结尾方向移动,为负数则向文件开头方向移动。起始点有三种情况:方向移动。起始点有三种情况:u文件开始文件开始 : SEEK_SET 或或 0u文件当前位置:文件当前位置: SEEK_CUR 或或 1u文件末尾文件末尾 : SEEK_END 或或 2考点考点7文件定位文件定位考点点拨考点点拨:了解了解rewind函数和函数和feof函数的使用函数的使用l rewind 函数的功能是重置文件的位置指针到文件开头,其用法是:函数的功能是重置文件的位置指针到文件开头,其用法是: rewind(fp);lfeof 函数的功能是测试文件的位置指针是否指向文件的末尾,若指向文件函数的功能是测试文件的位置指针是否指向文件的末尾,若指向文件末尾,函数返回末尾,函数返回1,否则返回,否则返回0。其一般用法是:。其一般用法是: feof(fp)考点考点8其他文件处理函数其他文件处理函数