全国计算机二级C语言知识点_第1页
全国计算机二级C语言知识点_第2页
全国计算机二级C语言知识点_第3页
全国计算机二级C语言知识点_第4页
全国计算机二级C语言知识点_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数组下标白下限是0。 全国计算机二级C吾言公共基础知识一、数据结构与算法1、完全二叉树是属于非线性结构,但其最佳存储方式是 顺序存储方式2、顺序存储结构中可能根节点不唯一,故可能不是线性结构3、算法的有穷性是指,算法中的操作步骤为有限个,且每个步骤都能在有限时间内完成4、法复杂度包括算法的时间复杂度和算法的空间复杂度。算法设计必须考虑执行算法所需要 的资源,即时间与空间复杂度5、算法的优劣取决于算法复杂度,与程序的环境无关,当算法被编程实现之后,程序的运行 受到计算机系统运行环境的限制6、循环队列中,由于指针超过队列地址最大值时会移动到队列最小地址处,所以 队头指针可 以大于也可以小于队尾指针

2、7、链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间8、循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指车+front指向排头元素的前一个位置9、设循环队列为Q(1: m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=X, rear= Y。现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为(1)若*丫,则次数为 m-(Y-X)-1(2)若XY,则次数为Y-X-110、循环队列中的元素个数与队头指针和队尾指针的变化而变化11、队列的修改是依先进先出的原则进行的12、设计算法时不仅要考虑对数据对象的运

3、算和操作,还要考虑算法的 控制结构13、顺序表具有以下两个基本特征:(1)线性表中所有元素所占的 存储空间是连续 的;(2)线性表中各数据元素在存储空间中是按 逻辑顺序依次存放的。(3)在顺序表中,每个元素占 有相同的存储单元14、设栈的顺序存储空间为S(0:49),栈底指针bottom=X,栈顶指针top=Y (指向栈顶元素)。 则栈中的元素个数为X-Y+115、设栈的顺序存储空间为S(1: m),初始状态为top=m+1 (X)。现经过一系列入栈与退栈运算后,top=20 (Y),则当前栈中的元素个数为 m+1-20=m-19 (X-Y)16、设栈的顺序存储空间为S(1: 50),初始状态

4、为top=0。现经过一系列入栈与退栈运算后,top=20 (X),则当前栈中的元素个数为20 (X)二、程序设计基础1、结构化程序设计 的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句2、结构化程序包括的基本控制结构只有三种,即 顺序结构、选择结构与循环结构3、在软件设计中使用的工具PAEH,不使用的工具数据流图(DFtH) 4、对象有如下一些基本 特点:标识唯一性、分类性、多态性、封装性、模块独立性好5、多态性是指同一个操作可以是不同对象的行为6、整数类实例包括:十进制常量用0眼示,不能以0开头;八进制常量用07表示,必须用0 开头;十六进制常量用09和AF(af)表示,必须以0

5、 x或0X开头。7、字符实例的一般形式是用一对单引号括起来的一个字符。另外ASCII码中还有一些控制字符,C语言中用转义字符的形式来书写这些常,转义字符一反斜杠()开始,后面跟1个字符或字符序列8、继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义 技术。广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继 承是指类之间共享属性和操作的机制三、软件工程基础1、软件指的是计算机系统中与硬件相互依赖的另一部分,包括 程序、数据和有关的文档2、软件具有以下特点:(1)软件是一种逻辑实体,具有 抽象性;(2)软件没有明显的制作 过程;(3)软件在使用

6、期间 不存在磨损、老化 问题;(4)对硬件和环境具有依赖性;(5) 软件复杂性高,成本昂贵;(6)软件开发涉及诸多的 社会因素,如知识产权等3、软件生命周期 可以分为软件定义、软件开发与软件运行维护三个阶段。主要活动阶段是:可行性研究与计划阶段,需求分析,软件设计,软件实现,软件测试,运行和维护(同9)4、计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。系统软件是管理计 算机的资源,提高计算机的使用效率,为用户提供各种服务的软件,如操作系统、数据库管理 系统、编译程序、汇编程序和网络软件等5、数据定义语言:负责数据的 模式定义与数据的物理存取构建;数据操纵语言:负责数据的 操纵

7、,包括查询及增、删、改等操作;数据控制语言:负责数据完整性、安全性的定义与检查 以及并发控制、故障恢复等功能。6、软件工程包含3个要素:方法、工具和过程7、软件产品从考虑其概念开始,到该软件产品 不能使用为止的整个时期都属于软件生命周期8、数据库系统的三级模式是 概念模式、外模式和内模式。概念模式是数据库系统中全局数据 逻辑结构的描述,是全体用户公共数据视图。外模式也称子模式或用户模式,它是用户的数据 视图,给出了每个用户的局部数据描述。内模式又称物理模式,它给出了数据库物理存储结构 与物理存取方法9、软件生命周期分为3个时期共8个阶段:软件定义期,包括问题定义、可行性研究、需求分 析;软件开

8、发期,包括概要设计、详细设计、实现、测试;运行维护期,即运行维护阶段。可 行性研究属于软件定义期任务(同3)10、可行性分析阶段:可行性分析报告。需求分析阶段:软件规格说明书,初步的用户手册。 软件设计阶段:概要设计说明书,详细设计说明书,测试计划初稿。软件实践阶段:用户手册, 操作手册等面向用户的文档和单元测试计划。软件测试阶段:测试分析报告。11、概要设计说明书 是总体设计阶段产生的文档。集成测试计划 是在概要设计阶段编写的文档需求规格说明书 是后续工作如设计、编码等需要的 重要参考文档12、需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审,包括确定软件

9、系统的功能13、(1)在测试之前制定测试计划,并严格执行,测试用例的 选择不可随意,应选择有代表 性的,尽可能发现迄今为止尚未发现的错误。(2)测试根本目的是尽可能多地发现并排除软 件中隐藏的错误(3)软件测试是保证软件质量、可靠性的关键步骤。14、在需求分析阶段 可以使用的工具有 数据流图DFIB,数据字典DD判定树与判定表15、数据流图中带箭头的线段表示的是数据流16、数据字典(DD)所定义的对象都包含于 数据流图(DFDB)17、软件需求规格说明书有以下几个方面的作用。便于用户、开发人员进行理解和交流; 反映出用户问题的结构,可以作为软件开发工作的基础和依据; 作为确认测试和验收的依据1

10、8、软件设计中模块划分应遵循的准则是 高内聚低偶合、模块大小规模适当、模块的依赖关系 适当19、从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。20、降低耦合性提高内聚性有利于提高模块的独立性(高内聚低耦合)21、扇入指的是调用一个给定模块的模块个数 22、扇出指的是由一个模块直接调用的其他模块数23、结构化程序的三种基本控制结构:顺序、选择和循环(重复)24、在数据流图中,用标有名字的箭头表示 数据流。在程序流程图中,用标有名字的箭头表示 控制流。25、软件测试的目的是为了发现错误而执行程序的过程。 程序调试的基本步骤有:错误定位、 修改设计和代码,以排除错误、进行回

11、归测试,防止引进新的错误。程序调试通常称为Debug 即排错。软件测试的基本准则有:所有测试都应追溯到需求、严格执行测试计划,排除测试的 随意性、充分注意测试中的群集现象、程序员应避免检查自己的程序、穷举测试不可能、妥善 保存测试计划等文件。26、白盒测试又称为结构测试或逻辑驱动测试,对程序所有的逻辑路径进行测试27、黑盒测试只是根据程序的功能说明来设计测试用例。在使用黑盒测试法时,手头只需要有程序功能说明就可以了。黑盒测试法:等价类划分法、边界值分析法和错误推测法四、数据库设计基础1、数据库管理系统是数据库的机构,是一种在 操作系统之上的系统软件。2、数据管理技术的发展经历了 3个阶段:人工

12、管理阶段、文件系统阶段和数据库系统阶段。特点人工管理阶段文件系统阶段数据库系统阶段管理者人文件系统数据库管理系统面向对某个应用程序某个应用程序现实世界象共享程度无共享,冗余度大共享性差,冗余度大共学性大,冗余度小独立性不独立,完全依赖于程序独立性差具后高度的物理独立性和一定的逻辑独立性结构化无结构记录内后结构,整体无结构整体结构化,用数据模型描述控制能力由应用程序控制由应用程序控制由DBMS供数据安全性、完整性、并发控制和恢复3、数据库应用系统中的核心问题是数据库的设计4、数据库中反映用户对数据要求的模式为外模式5、数据模型通常由数据结构、数据操作及数据约束3部分组成6、数据模型按照不同的应用

13、层次分为3种类型:概念数据模型、逻辑数据模型、物理数据模型7、数据模型成熟并大量使用的数据模型有 层次模型、网状模型、关系模型和面向对象模型等8、关系模型实体间的联系采用 二维表来表示,简称表:网状结构为网状模型实体间的联系; 树状结构为层次模型实体间的联系;属性刻画了实体。9、在E F0中实体集用矩形,属性用椭圆,联系用菱形10、二维表中的一行称为 元组。候选键(码)是二维表中能唯一标识元组的 最小属性集。若一 个二维表有多个候选码,则选定其中一个作为主键(码)供用户使用。表Mfr的某属性集是表N的候选键或者主键,则称该属性集为表M的 外键(码)。11、1966年BoehnffiJacopi

14、ni证明了程序设计语言仅仅使用 顺序、选择和重复(循环)三种基 本控制结构就足以表达出各种其他形式结构的程序设计方法12、关系模型中可以有3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整 性约束。实体完整性约束 是指,若属性M是关系的主键,则属性M仲的属性值不能为空值。参照 完整性约束是指,若属性(或属性组)A是关系M勺外键,它与关系M勺主码相对应,则对于关 系Mfr的每个元组在A上的值必须为:要么 取空值;要么等于关系Mfr某个元组的主码值。13、用于查询的3个操作无法用传统的集合运算表示,引入的运算为 投影运算、选择运算、笛 卡尔积。常用的扩充运算有交、除、连接及自然连接等。

15、 并:R男将S中的记录追加到R后面。 交:R斯果是既属于RdS于S的记录组成的集合。上述两种操作中,关系叫S要求有相同的结 构,故A、D选项错误。自然连接:去掉重复属性的等值连接。自然连接要求两个关系中进行, 比较的是相同的属性,并且进行等值连接。除运算可以近似地看作笛卡尔积的逆运算。 当S X T = R时,则必有R+S=T, T称为R除以S的商。设关系R有属性Mi, M2,关系 S 有属性 M n s+l, Mn s + 2,,Mn,止匕时有:R+S = Tt Ml, M2,,Mn s (R) 九mi, M2 ,M n-s (九mi, M2 ,M n-s (R) X S) )o由S中有属性

16、所口A1, T中属性为B 和B1,在Rt组中找到对应于S中两个元组的T中元组为f 3与n 2。R中最后一个元组与S中无对 应关系,所以在T中也不会出现。投影,从关系模式中指定若干个属性组成新的关系。C语言概述1、结构化程序设计把一个复杂问题的求解过程分阶段进行,需要保证 自顶向下、逐步细化、 模块化设计、结构化编码2、函数体必须由开始。一个源程序文件可以包括预处理命令、全局声明、函数定义,程序总 是从main函数开始执行的3、算法不一定要包含所有三种基本结构,也可以只包含一种或两种4、算法的复杂程序不是由操作步骤多少决定的,而是按 时间复杂度与空间复杂度来衡量5、C编译程序把文件后缀为.c的源

17、程序文件编译成文件后缀为.obj的二进制文件,链接将一 个或多个目标文件与程序用到的库文件连接起来,形成一个可以在操作系统直接运行的执 行程序.exe6、一个算法应该具有以下五个重要的特征:有穷性,确定性,输入,输出以及可行性7、只有同时包含三种基本结构时,程序才是 结构化程序。一个结构化程序可以包含顺序?分 支?循环结构中的一种或多种8、文件中包含标准输入输出函数的函数说明,预处理指令#include是使程序可以去该文件中找到printf,scanf 等函数以便使用9、计算机能直接执行的程序是二进制的 可执行程序,扩展名为.exe10、算法的特征:有穷T4?一个算法(对任何合法的输入)在执行

18、有穷步后能够结束,并且在有 限的时间内完成?确定性?算法中的每一步都有确切的含义?可行性?算法中的操作能够用 已经实现的基本运算执行有限次来实现 ?输入:一个算法有零个或者多个输入,零个输入就是 算法本身确定了初始条件?输出:一个算法有一个或者多个输出,以反映出数据加工的结果11、算法的描述有伪代码、流程图、N-翎构图等?E-R是实体联系模型12、C语言中的非执行语句不会被编译,不会生成二进制的机器指令。 C程序经过编译、连接步 骤之后才能形成一个真正可执行的二进制机器指令文件。 用C言编写的程序称为,它以ASCII 代码形式存放在一个文本文件中。C语言源程序经编译后生成后缀为.obj的目标程

19、序。13、C语言的数值常量中不能夹带空格。在C言中运算符两侧的运算数据类型可以不一致,且 结果与精度较高的保持一致,14、C语言程序是由函数组成的。可以单独进行编译。每个CS序中必须包含一个main函数,但 不一定是每个C序文件中必须有,用户单独编写的某个函数也可以存储为一个 CS序文件15、一个普通的C函数可以单方4作为一个C的程序文件存在被包含到其他程序中16、在复合语句中,不仅可以有执行语句,还可以有定义语句,定义语句应该出现在执行语句的前面17、C语言中的某些语句可以 不用分号,例如if语句18、关键字不可用做用户标识符19、C语言的标识符分为3类:关键字、预定义标识符和用户标识符?常

20、量不属于标识符 20、一条C句对应转换成一条机器指令二、运算符与表达式1、sizeof是C语言中的一个 操作符(operator)。其作用就是返回一个对象或者类型所占的 内存 字节数2、条件表达式:x =表达式1?表达式2:表达式3的含义是:先求解表达式1,若为非0(真), 则求解表达式2,将表达式2的值赋给x。若表达式1的值为0(假),则求解表达式3,将表达式3 的值赋给x3、C语言中没有 运算符a%=b表示a=a%(b) c语言中A”的意思是按位异或4、c语言中内的意思是按位异或,运算符号按位或|,把两个数化为二进制,异为1,同为0,如10的二进制为000010103 的二进制为 0000

21、001110 A3=99 的二进制为00001001&按位与运算,同为1,异为05、在平台中,整型int占有4个字节,double型数据占有8个字节。6、算术运算符+的优先级高于-=7、十进制- 二进制:十进制除以2,记录余数直到除尽到0,其二进制为这些余数倒着排列。10/2=5余0,5/2=2余1, 2/2=1余0,1/2=0余1,则10的二进制为1010,因为二进制有8个字节,则 10的二进制为00001010。8、二进制- 十进制:例:00001001 1*2A(4-1)+0*2A(3-1)+0*2A(2-1)+1*2A(1-1)=900001111 1*2A(4-1)+1*2A(3-1

22、)+1*2A(2-1)+1*2A(1-1)=159、exp1&exp2,规则为:对exp1求值,若为0,则表达式为0,且不计算exp2;若exp1非0,则 求exp2值,作为表达式值10、右移运算符,按位右移运算规则是将一个操作数先转换成二进制数,然后将二进制数各位右移若干位,移出的低位舍弃;并在高位补位,若为无符号数,右移时左边高位移入0。例:a=8=01000,执行 a2/t, a=00010=211、在Ci言中,乘除法优先级要高于加减法,其次,除法运算符/两边参加运算对象都是整数,运算结果要取整12、逗号表达式的值为其中最后一个表达式的值13、i+,先使用后自增自增和自减运算符的两种用法

23、:前置运算,运算符放在变量之前,规则是先使变量白值增(或减)1,然后以变化后表达式的值参与其他运算:后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)1例:sum = pad = 5; pAd = sum+, pAd+, +pAd;得:当(*str)=0 时,结束循环,返回字符0的ASCII码0sum=5,pad=5;pAd=5,sum=6,pAd=6,pAd=714、计算5/2,结果取整数值2?%运算符的两个操作值必须为整型数据 15、在C言中,逻辑真值对应非0。,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值16、rand()产生随机整数三、基

24、本语句1、复合语句可以包含多条语句,在其中可以定义局部变量2、花括号对)不仅用来表示函数的开头和结尾,也可以用于表示复合语句3、C语言中的语句必须 以分号;结束,所以空语句表示为;,不是空行4、定义语句应该出现在 执行语句的前面,在printf和scanf函数中都可以 指定数据的宽度, scanf()的格式控制用可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保 证匹配,?复合语句可以由任意多条语句构成,可以使一条也可以没有5、当(*str尸0时,结束循环,返回字符0 的ASCII码06、while循环语句一般形式为:while(表达式)循环体,执行过程为,首先判断表达式,成立(

25、非0)则执行循环体,不成立(0)则退出循环7、gets函数,getchar是用于从终端读入字符。fputs函数用于把字符串输出到文件。fwrite 函数用于以二进制形式输出数据到文件8、scanf ()语句中用空格”间隔不同的字符串。getchar()函数从终端读入一个字符作为函 数值,把读入的字符赋给变量cho在输入时,空格、回车符都将作为字符读入,而且只有在用 户敲入回车键时,i入才开始执行。gets()函数的调用形式为:gets(str_adr),其中str_adr 是存放输入字符串的 起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量getsgetc()函数的调函数用来从终端

26、键盘读入字符串(包括空格符),直到读入一个换行符为止 用形式为:ch=getc(pf)其中pf是文件指针,函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回9、scanf函数中的格式控制字符串 是为了输入数据用的,无论其中有什么字符,也不会输出到屏 幕上。scanf()的格式控制用可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符, 以保证匹配就可以。?Printf函数可以输出常量也可以输出变量,Prinf函数可以用%来输出 百分号10、数组第一个数为00由printf输出的数据都隐含 右对齐。Printf输出数据所占的宽度由系 统决定11、条件运算符组成条件表达式的一般

27、形式为:表达式 1?表达式2:表达式3其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值四、选择结构1、在C言中,逻辑真值对应非002、逻辑非(即运算符!)的运算级别是最高的;算术运算符优先级较高,关系和逻辑运算符 优先级较低。3、for语句的一般形式为:for( 表达式1;表达式2;表达式3)语句 其循环中的表达式1 (循环变量赋初值)、表达式2(循环条件)”和表达式3(循环变量增量) 都是选择项,即可以缺省,但;不能缺省。该题目中省略了 表达式1 (循环变量赋初值) 和”表达式3(循环变量增量厂。4、&R有运算对象均非零结果才为

28、真。逻辑与只有在 &符号两边操作均为真时,逻辑与为 真。|只要有一个对象非零结果就是真。逻辑或当且只当|符号两边操作至少有一个为真时, 逻辑或结果为真5、a!=b表示a不等于b时,运算结果为1,或者为06、逻辑与运算符遵循“短路求值”策略,即只有在仅靠左操作数的值无法确定该逻辑表达式的结果时,才会求解右操作数例:若有定义:int a=0,b=0,c=0,d=0;,有圆言表达式(a+ & b+) ? c+ : d+, 以下关于其执行顺序的叙述正确是先执行a+,表达式a+的值为0,由此即可确定(a+&b+)勺值为0,因此执行d+7、if语句中表达式为1直接执行。为0执行else五、循环结构1、条件

29、表达式的执行次数总是比循环体的执行次数多一次2、设有以下代码 do while ( 条件表达式1)循环体A; while ( 条件表达式2);while (条件表达式1)(do while ( 条件表达式2);假设表达式1与表达式2成立次数为n1与n2。若n1n2,则循环体 驰行次数为n2+1,瞅行次数 n2+1;若n1n2,则循环体A现行次数为n1,时行次数n13、while循环语句一般形式为:while(表达式)循环体,执行过程为:首先判断表达式,成 立(非0)则执行循环体,不成立(0)则退出循环。dowhile循环语句一般形式为:do循环 体while(表达式),执行过程为:首先执行循环

30、体,之后判断表达式,成立(非 0)则再一次 执行循环体,不成立(0)则退出循环。4、在条件相同的情况下,do- -while循环比while do多执行一次函数体 两种循环都是在表达 式为0时结束循环。do-while循环由表达式真假判断是否退出循环,也可以用break语句退出循5、,while语句的语义是:计算表达式的值,当值为真 (非0)时,执行循环体语句.int k=0;while ( k=1 ) k+;while(k=1) = while(1),是死循环,执行无限次。6、只要适当地修改代码,就可以将do-while与while相互转换。for语句使用最为灵活,它完 全可以取代while

31、语句;7、s k - -0 为是s口数组的k所对应的字符串长度。8、在G言中等于号用=表示,一个=表示赋值六、数组1、*与&放在一起作用抵消,*(pt+i)表示引用指针pt所指元素后的第i个元素2、#include main() int c6=10,20,30,40,50,60, *p,*s;p = c; s = &c5;printf(%dn, s-p );语句p = c;指将c0元素的地址赋给指针变量p;语句s = &c5;指将c5元素的地址赋给指 针变量s3、 #include main() int a5=2,4,6,8,10, *p,*k;p = a; k = &p;printf(%d

32、”, *( p+ );printf(%dn, *k );首先通过p=affi p指向数组的第1个元素,所以输出2;在输出2以后,由于p+,即p就指向数组 的第2个元素,*k就是取出p所指向元素的值,而p指向的是数组的第2个元素,即输出44、通过一条语句可以定义多个数组;数组说明符的一对方括号中可以是整型常量,可以是整型常量表达式;在引用数组元素时,下标表达式必须是整型的。数组下标的下限是005、char a2 = A, B;不合法,应为char a2 = A, B;;用字符串方式 赋值比用字符逐个赋值要多占1个字节6、数组下标的下限是007、数组名后面括号的值必须是整形常量,不可以是变量8、

33、static内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着9、void fun(int *a, int n) /* fun函数的功能是将a所指数组元素从大到小排序*/fun(c+4, 6);即指排序从第5个元素开始进行从大到小排序。数组说明的一般形式为:类型说明符 数组名常量表达式。指针的赋值首先基类型必须一致,s二维数组名,是二维数组的首地址,其基类型是一个具有10个元素的字符数组。p是一个字符指针变量,具基类型是一个字符,k是一个行指针,具基类型是具有3个元素的字符型数组。七、函数1、C程序中主函数不能被其他函数调用?ma

34、in函数可以放在程序开始,也可以放在中间,也可以 放在最后,位置不固定,但程序执行时必须从main函数开始?在加序的函数中不能定义另一个 函数,可以声明或调用另一个函数?每个C序中必须包含一个main函数,但不一定是每个C程序 文件中必须有,用户单独编写的某个函数也可以存储为一个 C序文件2、数学库中定义了函数的名称、参数个数与类型、返回值类型与具体的函数体。编译预处理 时,预处理程序将查找指定的被包含文件, 并将其复制到#include命令出现的位置上,不引用 文件,文件编译时,编译器无法识别没有被定义的 sin函数。若要使用徵学库中的sin函数,需要在源程序的头部加上#include 通过

35、引用文件,说明sin函数的参数个数和类型,以及函数返回值类型3、函数调用时,函数名称是需要区分大小写的;函数名不允许以数字开头;在函数中允许有多个return语句,但每次调用只能有一个return语句被执行4、用户自己定义的函数能调用库函数也可以调用自定义函数;对于不同函数的形式参数可以使用相同名称的标识符;关于 函数的定义 不可以嵌套,但函数的调用可以嵌套。5、不能将一个整数直接赋给指针变量作为地址。函数的返回值可以是地址,即指针。函数调 用中形参值的变化不会传递给实参。6、C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参, 而不能由形参传回来给实参。在内存

36、中,实参单元与形参单元是不同的单元。7、C程序必须由一个或一个以上的函数组成;函数调用可以作为一个独立的语句存在;若函数有返回值,必须通过return语句返回8、语句f(&a2,5,0)的作用是对从a2开始的5个元素进行从大到小排序。9、void f(int *s) *s=k; main() int m=3,*p=&m;f(p);printf(%d,%d, m, *p);m=3 p指向m调用函数f,将实参p中mm勺地址传递给形参s, s指向m则k赋值给m m=5 p依然指向m,故输出5,510、函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此

37、在函数调用过程中,形参的值发生改变,而实参中的值不会变化八、指针1、在计算机内存中,用一个字节表示一个内存单元并为每一个存储单元编号,这个编号就是存储单元的地址。一个变量的地址称为该变量的指针。专门用来存放变量地址的变量,称为“指针变量。常量存储在编译文件中,不能取地址。一个指针变量的地址只能赋给指向这种 类型的指针变量,与其本身类型不同,不能赋值,未赋初值的指针变量自动赋任意地址值2、所有地址值所占字节都是一样的,故指针变量所占内存大小一样;不能随意把一个地址存放到任何一个指针变量中去,只能把具有相同类型的变量的地址,存放到这个指针变量中,结构体变量与某个成员类型不同,不能用同样的指针指向它

38、们3、#include void f(int *p,int *q);main()int m=1,n=2,*r=&m;f(r, &n);)void f(int *p,int *q)(p=p+1;*q=*q+1;)在f(int *p,int*q)函数中,执行p=p+1是将p所对应的地址加1,而*q=*q+1是将q所指向的n的地址所对应的值加1,所以Ml勺得知所对应的值没有变,而n的值则为3了。4、如果p是指针变量,则*p表示变量p所指向的地址的值;如果p是指针变量,则&限示变量p 的地址;如果p是指针变量,*p+1表示将p所指的值加上1,而*(p+1)表示的是先将指针右移一 位再取所指向变量的值。

39、5、虽然不同基类型的指针变量占用字节数是相同的,但是不能混用。6、float a10, x; 表达式a+1不是非法的;语句a = &x; 是非法的7、a = (*ptr) +然示把指针ptr对应地址单元里的值赋给a,再将ptr对应地址单元里的值加1 8、定义指针p后,必须指针p进行初始化就进行赋值9、int x=2,*p=&x;float y=; char z=c由于x是一个整形变量,将x地址赋值给p指针后,又tp进行加一运算,p指针的值相当于加4(整型变量的地址占4个字节),此时p指向了未知的内 存地址,对未知内存地址进行操作具有安全隐患10、把一个指针变量的值赋给另一个指针变量,但一定要确

40、保这两个指针变量的基类型是相同的;只要两个指针变量基类型相同,可以指向同一个对象11、函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。不能将一个整数直接赋给指针变量作为地址;函数可以返回地址值;改变函数形参的值,不会改变对应实参的值;当在程序的开头包含头文件时,可以给指针变量赋 NULL12、指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变 量地址即&x赋给指针变量)。13、,p=NULL和p=0; 或p=0;等价;语句p=NULL执行后,指针p并不是指向地址为0的存 储单元,而是具有一个确定的值-空。14、指针变量的赋值只能赋予地址,决不能

41、赋予任何其它数据,否则将引起错误;p=NULL和p=0;是等价的;指向同一数组的两指针变量进行关系运算可表示它们所值数组元素之间的 关系。如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息15、不可以取一个常数或表达式的地址赋值给同类型的指针变量;通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量16、若有定义语句:int a23,*p3;则以下语句中正确的是p=a;p0=a;p0=&a12;p1=&a;参考答案:C【解析】A选项错误,因为p是指向一个指针数组,作为数组名,不能指向别的地方。B选项错误,因为p0是一个int指针,也就是int* ;而a是一个指向指针的

42、指针int*。C项正确,因 为p0是一个int* , a12是int , &a12是int* ,类型吻合。选项错误,因为a作为数组 名,不能取地址。即使能取,p1是int* , &加int* ,类型不对。因此C4项正确。17、int *p; scanf(%d, p);没有对指针进行初始化,无效指针18、不允许把一个数赋予指针变量,被赋值的指针变量前不能再加 *说明符19、若有定义语句:int a10=0,1,2,3,4,5,6,7,8,9,*p=a;,以下选项中错误引用a数组元素的是(其中0 0i10)A) *(*(a+i)B) a p-a C) piD) *( &ai) *p=a,将数组a的

43、首地址赋给指针p。a+i表示数组a中第i个元素的地址,引用其中元素为*(a+i), A选项引用错误。p-a=0, E选项引用白元素为a0。C选项中pi表示p后i个地址的元素ai。 D选项中&ai取ai地址,*(&ai)取这个地址内的元素,即为ai。本题选择A选项20、malloc函数的原型为:malloc (size);,函数的作用是在内存的动态存储区分配一个长度 为size的连续空间。九、编译预处理和动态储存分配1、预处理命令是以毋号开头的命令,它们不是C言的可执行命令,这些命令应该在函数之外书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以B), C)错误。C)语言的预处理能够

44、实现宏定义和条件编译等功能2、宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头。宏定义必须位于源程序中所有语句之前是错误的。 宏名一般用大写,但不是必须用大写,宏展开不占运行 时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值)。宏替 换没有数据类型限制3、#define N 100在编译程序对C源程序进行预处理时用100#换标识符N4、不带参数的宏定义是用一个指定的标识符来代表一个字符串,其一般形式如下:#define宏名 替换文本。需要注意:(1)在#6巾ne、宏名和替换文本之间用空格隔开,(2)在C程序中,宏定义的定义位置一般写在程序的开头;(3

45、)宏名一般用大写字母表示,便于与变量名区别;(4)宏定义是用宏名来表示一个字符串,在宏展开时以该字符串取代宏名,这只是一种简单的代换,预处理程序对它不做任何检查;(5)宏定义不是语句,在行末不加分号,如加上分号 则连分号也一起替换:(6)宏定义必须写在函数之外,其作用域为从宏定义命令起到源程序结 束,如要终止其作用域可使用#undef命令。B选项de巾ne前多了一个#,缺少替换文本”宏名 替换文本”位置反了,不能将一个自定义标识符宏定义为关键字5、#define SUB(a) (a)-(a)d=SUB(a+b)*c;SUB(a+b)*c=(a+b)-(a+b)*c=6、f(x) x*x*xf(

46、a+1)=a+1*a+1*a+1=3*a+1=10,f(a+1)=(a+1)*(a+1)*(a+1)=647、在一个程序中,允许使用任意数量的 #include命令行包含文件被修改了,包含该文件的源程序必须重新进行编译和连接。8、考查预处理命令行,预处理是在程序编译之前进行的。预处理命令行的最后不能以分号表示结束;#define MAX是合法的宏定义命令行;在程序中凡是以恃”开始的语句行都是预处理命令行十、结构体与共用体1、typedef 类型名新类型名表示为一个已有定义的类型标识符重新定义一个类型名2、关键字typedef的作用只是将CS言中的已有的数据类型作了置换,并不是增加新的类型;可以用typedef将已存在的类型用一个新的名字来代表;用typedef定义新的类型名后,原有类型名仍有效

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论