


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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假设X>Y,那么次数为m-(Y-X)-1(2)假设X<Y,那么次数为Y-X-110、循环队列中的元素个数与队头指针和队尾指针的变化而变化1 1
3、、队列的修改是依 先进先出的原那么进展的12、设计算法时不仅要考虑对数据对象的 运算和操作 ,还要考虑算法的 控制结构13、顺序表具有以下两个根本特征: 1 线性表中所有元素所占的 存 储空间是连续 的; 2线性表中各数据元素在存储空间中是按 逻辑顺 序依次存放的。 3在顺序表中,每个元素占有 一样 的存储单元14、设栈的顺序存储空间为S(0:49),栈底指针bottom二X,栈顶指针top二Y指向栈顶元素。那么栈中的元素个数为 X-Y+115、 设栈的顺序存储空间为S(1: m),初始状态为top=m+1X。现经 过一系列入栈与退栈运算后,top=20Y,那么当前栈中的元素个数 为 m+1-
4、20二m-19 X- Y16、设栈的顺序存储空间为S(1: 50),初始状态为top=0。现经过一系列 入栈与退栈运算后,top=20X,那么当前栈中的元素个数为20X二、程序设计根底1、结构化程序设计 的思想包括:自顶向下、逐步求精、模块化、 限制 使用goto语句2、结构化程序包括的根本控制结构只有三种,即 顺序结构、选择结构 与循环结构3、在软件设计中使用的工具PA«,不使用的工具数据流图DFf®4、对象 有如下一些根本 特点 :标识唯一性、 分类性、 多态性、 封装性、 模块独立性好5、多态性是指同一个操作可以是不同对象的行为6、整数类实例 包括:十进制常量用 09
5、表示,不能以 0开头;八进制常 量用07表示,必须用0开头;十六进制常量用09和AF(af)表示, 必须以0x或0X开头。7、字符实例的一般形式是用 一对单引号括起来的一个字符 。另外 ASCII 码中还有一些控制字符,C语言中用转义字符的形式来书写这些常,转 义字符一反斜杠 开场,后面跟 1个字符或字符序列8、继承是面向对象的方法的一个主要特征,是使用已有的类的定义作 为根底建立新类的定义技术。广义的说,继承是指能够直接获得已有的 性质和特征,而不必重复定义它们,所以说继承是 指类之间共享属性和 操作的机制三、软件工程根底1、软件指的是计算机系统中与硬件相互依赖的另一局部,包括 程序、 数据
6、和有关的文档2、软件具有以下 特点:1软件是一种逻辑实体,具有 抽象性;2 软件没有明显的制作过程; 3软件在使用期间 不存在磨损、老化 问 题; 4对硬件和环境 具有依赖性; 5软件 复杂性高,本钱昂贵 ; 6软件开发涉与诸多的 社会因素 ,如知识产权等3、软件生命周期 可以分为软件 定义、软件 开发与软件运行维护 三个阶 段。 主要活动阶段 是:可行性研究与方案阶段,需求分析,软件设计, 软件实现,软件测试,运行和维护同 94、计算机软件按 功能 分为应用软件、系统软件、支撑软件 或工具软 件。系统软件是管理计算机的资源,提高计算机的使用效率,为用户 提供各种效劳的软件,如操作系统、数据库
7、管理系统、编译程序、汇编程序和网络软件等5、数据 定义 语言:负责数据的 模式定义 与数据的 物理存取构建 ;数据 操纵语言:负责数据的操纵,包括查询与增、删、改等 操作;数据 控制 语言:负责数据完整性、平安性的定义与检查以与并发控制、故障恢复 等功能。6、软件工程包含 3个要素:方法、工具 和过程7、软件产品从 考虑其概念 开场,到该软件产品 不能使用 为止的整个时 期都属于软件生命周期8、数据库系统的三级模式是 概念模式 、外模式 和模式 。概念模式是数 据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。 外模 式也称子模式或用户模式 ,它是用户的数据视图,给出了每个用户的局 部
8、数据描述。 模式又称物理模式 ,它给出了数据库物理存储结构与物理 存取方法9、软件生命周期分为 3个时期共 8个阶段:软件定义期, 包括问题定义、 可行性研究、需求分析;软件开发期,包括概要设计、 详细设计、实现、 测试;运行维护期,即运行维护阶段。可行性研究属于软件定义期任务 同310、可行性分析 阶段:可行性分析报告。 需求分析 阶段:软件规格说明 书,初步的用户手册。 软件设计 阶段:概要设计说明书,详细设计说明 书,测试方案初稿。 软件实践 阶段 :用户手册,操作手册等面向用户的 文档和单元测试方案。 软件测试 阶段:测试分析报告。11、概要设计说明书 是总体设计 阶段产生的文档。 集
9、成测试方案 是在 概 要设计阶段 编写的文档。 需求规格说明书 是后续工作如设计、编码等需 要的重要参考文档12、需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求规格说明书和需求评审,包括确定软件系统的功能13、 1在测试之前制定测试方案,并严格执行,测试用例的选择不可随意,应选择有代表性的,尽可能发现迄今为止尚未发现的错误。 2 测试根本目的是尽可能多地发现并排除软件中隐藏的错误3软件测试是保证软件质量、可靠性的关键步骤。14、在需求分析阶段 可以使用的工具有 数据流图DFf®,数据字典DD 判定树 与判定表15、数据流图中带箭头的线段表示的是数据流16、数据字典D
10、D)所定义的对象都包含于 数据流图DFEB)17、软件需求规格说明书 有以下几个方面的作用。便于用户、开发人 员进展理解和交流;反映出用户问题的结构,可以作为软件开发工作的根底和依据;作为确认测试和验收的依据18、软件设计中模块划分应遵循的准那么是 高聚低偶合 、模块大小规模 适当、模块的 依赖关系 适当19、从技术观点上看, 软件设计 包括软件 结构 设计、 数据 设计、 接口 设 计、 过程 设计。20、降低耦合性提高聚性有利于提高模块的独立性高聚低耦合21、扇入指的是调用一个给定模块的模块个数22、扇出 指的是由一个模块直接调用的其他模块数23、结构化程序 的三种 根本控制结构 :顺序、
11、选择和循环重复24、在数据流图 中,用标有名字的箭头表示 数据流。在程序流程图 中, 用标有名字的箭头表示 控制流。25、软件测试的目的 是为了发现错误而执行程序的过程。 程序调试的根 本步骤有:错误定位、修改设计和代码,以排除错误、进展回归测试,防止引进新的错误。程序调试通常称为 Debug即排错。软件测试的根本准那么 有:所有测试都应追溯到需求、严格执行测试方案,排除测试的随意性、充分注意测试中的群集现象、程序员应防止检查自己的程序、穷举测试不可能、妥善保存测试方案等文件。26、白盒测试又称为结构测试或逻辑驱动测试,对程序所有的 逻辑路径 进展测试27、黑盒测试只是根据程序的功能说明来设计
12、测试用例。在使用黑盒测 试法时,手头只需要有程序功能说明就可以了。黑盒测试法:等价类划 分法、边界值分析法和错误推测法四、数据库设计根底1、数据库管理系统 是数据库的机构,是一种在 操作系统之上的系统 软件。2、数据管理技术的开展经历了3个阶段:人工管理阶段、文件系统 阶段和数据库系统阶段。特点人工管理阶段文件系统阶段数据库系统阶段管理者人文件系统数据库管理系统面向对 象某个应用程序某个应用程序现实世界共享程度无共享,冗余度 大共享性差,冗余度 大共享性大,冗余度小独立性不独立,完全依 赖于程序独立性差具有咼度的物理独立 性和一定的逻辑独立 性结构化无结构记录有结构,整体 无结构整体结构化,用
13、数据模型描述控制能力由应用程序控 制由应用程序控制由DBM提供数据平安 性、完整性、并发控制 和恢复3、数据库应用系统中的核心问题是数据库的设计。4、数据库中反映用户对数据要求的模式为外模式5、数据模型通常由数据结构、数据操作与数据约束3局部组成6、数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数 据模型、物理数据模型7、数据模型成熟并大量使用的数据模型有 层次模型、网状模型、关系模型和面向对象 模型等8、关系模型 实体间的联系采用 二维表来表示,简称表: 网状结构 为网 状模型实体间的联系; 树状结构为层次模型实体间的联系; 属性刻画了 实体。9、在E R图中实体集用矩形,属性用
14、椭圆,联系用菱形10、二维表中的一行称为 元组。候选键码 是二维表中能唯一标识元 组的最小属性集 。假设一个二维表有多个候选码,那么选定其中一个作 为主键码供用户使用。表M中的某属性集是表N的候选键或者主键, 那么称该属性集为表M的 外键码。11、1966年Boehr和Jacopini证明了程序设计语言仅仅使用 顺序、选择 和重复循环 三种根本控制结构就足以表达出各种其他形式结构的程 序设计方法12、关系模型 中可以有3类完整性约束 :实体完整性约束、 参照完整性 约束和用户定义的完整性约束。实体完整性约束是指,假设属性M是关 系的主键,那么属性M中的属性值不能为空值。参照完整性约束 是指,
15、假设属性或属性组A是关系M的外键,它与关系M的主码相对应,那 么对于关系M中的每个元组在A上的值必须为:要么取空值;要么等于关 系M中某个元组的主码值。13、用于 查询的3个操作无法用传统的 集合运算表示,引入的运算为 投影运算、 选择运算、 笛卡尔积。常用的扩大运算有交、除、连接与自然 连接等。并:RS是将S中的记录追加到R后面。交:RS吉果是既属于R又 属于S的记录组成的集合。上述两种操作中,关系 R与 S要求有一样的结 构,故A D选项错误。自然连接:去掉重复属性的等值连接。自然连接 要求两个关系中进展,比较的是一样的属性,并且进展等值连接。 除运 算可以近似地看作笛卡尔积的逆运算。当S
16、XT = R时,那么必有R + S=T,T称为R除以S的商。设关系R有属性M i,M2,,M 关系S有属性M ns + 1 ,Mns + 2,Mn,此时有:R*S = n Ml, M2, M nsR一 n M1,M2,M n s n M1,M2,M nsRXS。由S中有属性A和A1, T中属性为B和B1,在F元组中找到对应于S中两个元 组的T中元组为f 3与n 2。R中最后一个元组与S中无对应关系,所以在T 中也不会出现。 投影,从关系模式中指定假设干个属性组成新的关系。二级C语言一、C语言概述1、结构化程序设计把一个复杂问题的求解过程分阶段进展, 需要保证自顶向下、逐步细化、模块化设计、结构
17、化编码2、函数体必须由开场。一个源程序文件可以包括预处理命令、全 局声明、函数定义,程序总是从 main函数开场执行的3、算法不一定要包含所有三种根本结构,也可以只包含一种或两种4、算法的复杂程序不是由操作步骤多少决定的,而是按时间复杂度 与空间复杂度来衡量5、C编译程序把文件后缀为.c的源程序文件编译成文件后缀为.obj的二进制文件,将一个或多个目标文件与程序用到的库文件连接起来,形成一个可以在操作系统直接运行的执行程序.exe6、一个算法应该具有以下五个重要的特征:有穷性,确定性,输入, 输出以与可行性7、只有同时包含三种根本结构时,程序才是 结构化程序。一个结构 化程序可以包含顺序?分支
18、?循环结构中的一种或多种8 stdio.h文件中包含标准输入输出函数的函数说明,预处理指令#in clude<stdio.h> 是使程序可以去该文件中找到 pri ntf,sca nf等函数以便使用9、计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe10、算法的特征:有穷性? 一个算法对任何合法的输入在执行有穷 步后能够完毕,并且在有限的时间完成?确定性?算法中的每一步都 有确切的含义?可行性?算法中的操作能够用已经实现的根本运算 执行有限次来实现?输入:一个算法有零个或者多个输入,零个输入 就是算法本身确定了初始条件?输出:一个算法有一个或者多个输出, 以反映出数据加
19、工的结果11、 算法的描述有伪代码、流程图、N-S吉构图等? E-R是实体联系模型12、 C语言中的非执行语句不会被编译,不会生成二进制的机器指令。C 程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指 令文件。用C语言编写的程序称为,它以ASCII代码形式存放在一个文本 文件中。C语言源程序经编译后生成后缀为.obj的目标程序。13、C语言的数值常量中不能夹带空格。在C语言中运算符两侧的运算数 据类型可以不一致,且结果与精度较高的保持一致,14、C语言程序是由函数组成的。可以单独进展编译。每个C程序中必须 包含一个main函数,但不一定是每个C程序文件中必须有,用户单独编写 的某
20、个函数也可以存储为一个Cg序文件15、一个普通的C函数可以单独作为一个C的程序文件存在被包含到其他 程序中16、 在复合语句中,不仅可以有执行语句,还可以有定义语句,定义语 句应该出现在执行语句的前面17、C涪言中的某些语句可以 不用分号,例如if语句18、关键字不可用做用户标识符19、 C涪言的标识符分为3类:关键字、预定义标识符和用户标识符?常 量不属于标识符20、一条C语句对应转换成一条机器指令二、运算符与表达式1、sizeof是C语言中的一个 操作符(operator)。其作用就是返回一个对 象或者类型所占的存字节数2、条件表达式:x=表达式1?表达式2:表达式3的含义是:先求解表 达
21、式1,假设为非0(真),那么求解表达式2,将表达式2的值赋给X。假 设表达式1的值为0(假),那么求解表达式3,将表达式3的值赋给x3、C语言中没有 <>运算符a%=b表示a=a%(b)c语言中"A"的意思是按位 异或4、c语言中"A"的意思是按位异或,运算符号按位或"|",把两个数化为 二进制,异为1,同为0,如10的二进制为000010103 的二进制为 0000001110A3=99 的二进制为00001001"&"按位与运算,同为1,异为05、在VC6.0平台中,整型int占有4个字节,
22、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。& 二进制->> 十进制:例:00001001 1*2八(4-1)+0*2八(3-1)+0*2八(2-1)+1*2八(1-1)=9000011111*2A(4-1)+1*2A(3-1)+1*2A(2-1)+1*2A(1-1)=159、exp1 &
23、&exp2,规那么为:对exp1求值,假设为0,那么表达式为0, 且不计算exp2;假设exp1非0,那么求exp2值,作为表达式值10、">>"右移运算符,按位右移运算规那么是将一个操作数先转换成二 进制数,然后将二进制数各位右移假设干位,移出的低位舍弃;并在高位补位,假设为无符号数,右移时左边高位移入0。例:a=8=01000,执仃 a>>2后,a=00010=211、 在C语言中,乘除法优先级要高于加减法,其次,除法运算符"/"两 边参加运算对象都是整数,运算结果要取整12、逗号表达式的值为其中最后一个表达式的值13
24、、 i+,先使用后自增自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规那么是先使变量的值增或减1,然后以变化后表达式的值参与其他运算:后置运算,运算符放在变量之后,规那 么是变量先参与其他运算,然后再使变量的值增或减1例: sum = pad = 5; pAd = sum+, pAd+, +pAd;得:当(*str)='O'时,完毕循环,返回字符'0'的ascii码osum=5,pad=5;pAd=5,sum=6,pAd=6, pAd=714、计算5/2,结果取整数值2? "%"运算符的两个操作值必须为整型数据15、在C语言中,逻
25、辑真值对应非0。,分支结构的流程走向是根据表达 式的值,并不仅仅是算数表达式的值16、rand()产生随机整数三、根本语句1、复合语句可以包含多条语句,在其中可以定义局部变量2、花括号对不仅用来表示函数的开头和结尾,也可以用于表示复合语 句3、C语言中的语句必须 以分号""完毕,所以空语句表示为"",不是空行4、定义语句应该出现在执行语句的前面,在printf和scanf函数中都可 以指定数据的宽度,scanf()的格式控制串可以使用其他非空白字符,如 逗号,但在输入时必须输入这些字符,以保证匹配,?复合语句可以由 任意多条语句构成,可以使一条也可以没有
26、5、当(*str)='0' 时,完毕循环,返回字符'0 '的ASCII码06、while循环语句一般形式为:while(表达式)循环体,执行过程为, 首先判断表达式,成立非0那么执行循环体,不成立0那么退出 循环7、gets函数,getchar是用于从终端读入字符。fputs函数用于把字符 串输出到文件。fwrite函数用于以二进制形式输出数据到文件& scanf ()语句中用空格间隔不同的字符串。getchar()函数从终 端读入一个字符作为函数值,把读入的字符赋给变量 ch。在输入时,空 格、回车符都将作为字符读入,而且只有在用户敲入回车键时,读入才
27、 开场执行。gets()函数的调用形式为:gets(str_adr),其中str_adr是 存放输入字符串的 起始地址 ,可以是字符数组 名、字符数组 元素的地址 或字符指针变量。gets函数用来从终端键盘读入字符串包括空格符, 直到读入一个换行符为止。 getc() 函数的调用形式为: ch=getc(pf) 其 中pf是文件指针,函数的功能是从pf指定的文件中读入一个字符,并把 它作为函数值返回9、scanf函数中的格式控制字符串 是为了输入数据用的,无论其中有什 么字符 , 也不会输出到屏幕上。 scanf() 的格式控制串 可以使用其他非空 白字符 , 如逗号 , 但在输入时必须输入这
28、些字符 , 以保证匹配就可以。 ? Printf函数可以输出常量也可以输出变量,Prinf函数可以用"%"来输 出百分号 %10、 数组第一个数为0。由printf输出的数据都隐含右对齐。Printf输 出数据所占的 宽度由系统决定11、条件运算符组成条件表达式的一般形式为: 表达式 1? 表达式2: 表达式 3其求值规那么为:如果表达式 1的值为真,那么以表达式 2 的值作为条 件表达式的值,否那么以表达式 2的值作为整个条件表达式的值四、选择结构1、在C语言中,逻辑真值对应非0。2、逻辑"非"即运算符 ! 的运算级别是 最高的;算术运算符优先级较 高
29、,关系和逻辑运算符优先级较低。3、for 语句的一般形式为 :for( 表达式 1;表达式 2;表达式 3) 语句其循环中的 " 表达式 1 循环变量赋初值 " 、 " 表达式 2( 循环条件 )" 和" 表达式3(循环变量增量 )" 都是选择项 , 即可以缺省 , 但";"不能缺省。 该题目中省略了 "表达式1循环变量赋初值 "和"表达式3(循环变量增 量 )" 。4、 &&只有运算对象均非零结果才为真。逻辑与只有在 "&&&quo
30、t;符号两边操 作均为真时,逻辑与为真。 | 只要有一个对象非零结果就是真。逻辑或 当且只当 "|" 符号两边操作至少有一个为真时,逻辑或结果为真5、a!=b表示a不等于b时,运算结果为1,或者为06、逻辑与运算符遵循 "短路求值 "策略,即只有在仅靠左操作数的值无 法确定该逻辑表达式的结果时,才会求解右操作数例:假设有定义:int a=0,b=0,c=0,d=0;,有C语言表达式(a+ &&b+) ? c+ : d+, 以下关于其执行顺序的表达正确是先执行a+,表达式a+的值为0,由此即可确定a+&&b+的值为0,因此执
31、行 d+7、if 语句中 表达式为 1直接执行。为 0执行 else五、循环结构1、条件表达式的执行次数总是比循环体的执行次数多一次2、设有以下代码 do while 条件表达式 1循环体 A; while 条件表达式 2;while 条件表达式 1do while 条件表达式 2;假设表达式1与表达式2成立次数为n1与n2。假设n1>n2,那么循环体A执 行次数为n2+1, B执行次数n2+1;假设n1<n2,那么循环体A执行次数为 n1, B执行次数n13、while 循环语句一般形式为: while 表达式 循环体,执行过程为: 首先判断表达式,成立非 0那么执行循环体,不成
32、立 0那么退出 循环。dowhile循环语句一般形式为:do循环体while表达式,执 行过程为:首先执行循环体,之后判断表达式,成立非 0那么再一 次执行循环体,不成立 0那么退出循环。4、 在条件一样的情况下,dowhile循环比whiledo多执行一次函数 体 两种循环都是在表达式为 0时完毕循环。 do-while 循环由表达式真假 判断是否退出循环,也可以用 break 语句退出循环5、 , while 语句的语义是:计算表达式的值,当值为真 非0时,执行循 环体语句 int k=0;while k=1 k+;whilek=1 = while1 ,是死循环,执行无限次。6、只要适当地
33、修改代码,就可以将 do-while与while相互转换。for语 句使用最为灵活 ,它完全可以取代 while 语句;7、s k - 'O' 为是s数组的k所对应的字符串长度。8在C语言中等于号用"="表示,一个"="表示赋值六、数组1、 *与&放在一起作用抵消,*(pt+i)表示引用指针pt所指元素后的第i个元素2、#inelude <stdio.h>main () int c6=10,20,30,40,50,60, *p,*s;p = c; s = & c5;prin tf("%dn"
34、, s-p );语句p = c;指将c0元素的地址赋给指针变量p;语句s = &c;指将c5元素的地址赋给指针变量s3、#in clude <stdio.h>main () int a5=2,4,6,8,10, *p,*k;p = a; k = &p;prin tf("%d ", *( p+ );prin tf("%dn", *k );首先通过p=a使p指向数组的第1个元素,所以输出2;在输出2以后,由于p+,即p就指向数组的 第2个元素,*k就是取出p所指向元素的值,而p指向的是数组的第2个元素,即输出44、通过一条语句可以
35、定义多个数组;数组说明符的一对方括号中可以是整型常量,可以是整型常量表达式;在引用数组元素时,下标表达式必须是整型的。数组下标的下限是0。5、char a2 = "A", "B"不合法,应为char a2 = 'A', 'B'用字符串方式 赋值比用字符逐个赋值要 多占1个字节6、数组下标的下限是 0。7、数组名后面括号的值必须是整形常量,不可以是变量8、 static部静态变量是始终存在的,当函数被调用退出后,部静态变量会保存数据,再次调 用该函数时,以前调用时的数值仍然保存着9、 void fun(int *a, int
36、 n) /* fun函数的功能是将a所指数组元素从大到小排序*/fun(c+4, 6);即指排序从第5个元素开场进展从大到小排序。10、数组说明的一般形式为:类型说明符数组名常量表达式。11、指针的赋值首先基类型必须一致,s二维数组名,是二维数组的首地址,其基类型是一个具有10个元素的字符数组。p是一个字符指针变量,其基类型是一个字符,k是一个行指针,其基类型是具有3个元素的字符型数组。七、函数1、 C程序中主函数 不能被其他函数调用? main函数可以放在程序开场,也可以放在中间,也可以 放在最后,位置不固定,但程序执行时必须从 main函数开场?在C程序的函数中 不能定义 另一个 函数,可
37、以声明或调用 另一个函数?每个C程序中必须包含一个 main函数,但不一定是每个C程序 文件中必须有,用户单独编写的某个函数也可以存储为一个C程序文件2、 数学库中定义了函数的 名称、参数个数与类型、返回值类型与具体的函数体。编译预处理时, 预处理程序将查找指定的被包含文件,并将其复制到#include命令出现的位置上,不引用math.h文件,文件编译时,编译器无法识别没有被定义的sin函数。假设要使用C数学库中的sin函数,需要在源程序的头部加上#include <math.h>通过引用math.h文件,说明sin函数的参数个数和类型,以与函数返回值类型3、函数调用时,函数名称是
38、需要区分大小写的;函数名不允许以数字开头;在函数中允许有多个 return 语句,但每次调用只能有一个 return 语句被执行4、 用户自己定义的函数能调用库函数也可以调用自定义函数;对于不同函数的形式参数可以使 用一样名称的标识符;关于 函数的定义 不可以嵌套 , 但函数的调用 可以嵌套。5、不能将一个整数直接赋给指针变量作为地址。函数的返回值可以是地址,即指针。函数调用 中形参值的变化不会传递给实参。6、C语言规定,实参变量对形参变量的数据传递是 值传递,即单向传递,只由实参传给形参, 而不能由形参传回来给实参。在存中,实参单元与形参单元是不同的单元。7、 C程序必须由一个或一个以上的函
39、数组成 ;函数调用可以作为一个独立的语句存在;假设函数 有返回值,必须通过 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中m的地址传递给形参s,s指向m那么k赋值给m m=5, p 依然指向m故输出5,510、函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值 反向地传送给实参。因此在函数
40、调用过程中,形参的值发生改变,而实参中的值不会变化八、指针1、 在计算机存中, 用一个字节表示一个存单元并为每一个存储单元编号,这个编号就是存储单 元的"地址"。一个变量的地址称为该变量的 "指针"。专门用来存放变量地址的变量, 称为"指针 变量 "。常量存储在编译文件中,不能取地址。 一个指针变量的地址只能赋给指向这种类型的指 针变量,与其本身类型不同,不能赋值,未赋初值的指针变量自动赋任意地址值2、所有地址值所占字节都是一样的,故指针变量所占存大小一样;不能随意把一个地址存放到 任何一个指针变量中去,只能把具有一样类型的变量的地址
41、,存放到这个指针变量中,结构体 变量与某个成员类型不同,不能用同样的指针指向它们3、#include <stdio.h>void f(int *p,int *q);main()int m=1,n=2,*r=&m;f(r, &n);printf("%d,%d",m,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,所以m的得知所对应的值没有变,而 n的值那么为3了。4、 如果p是指针变量,
42、那么*p表示变量p所指向的地址的值;如果 p是指针变量,那么&p表示变 量p的地址;如果p是指针变量,*p+1表示将p所指的值加上1,而*(p+1)表示的是先将指针右移一位再取所指向变量的值。5、虽然不同基类型的指针变量占用字节数是一样的, 但是不能混用。6、 float a10, x; 表达式a+1不是非法的;语句 a = &x; 是非法的7、 a = (*ptr) +表示把指针ptr对应地址单元里的值赋给 a,再将ptr对应地址单元里的值加18定义指针p后,必须指针p进展初始化就进展赋值9、 int x=2,*p=&x;float y=3.0; char z=
43、9;c'由于x是一个整形变量,将 x地址赋值给p指针后,对p 进展加一运算,p指针的值相当于加4整型变量的地址占4个字节,此时p指向了未知的存地址, 对未知存地址进展操作具有平安隐患10、把一个指针变量的值赋给另一个指针变量,但一定要确保这两个指针变量的基类型是一样 的; 只要两个 指针变量基类型一样,可以指向同一个对象11、函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。不能将一个整数直接赋给指针变量作为地址;函数可以返回地址值;改变函数形参的值,不会改变对应实参的值 ;当在程序的开头包含头文件 stdio.h 时,可以给指针变量赋 NULL12、 指针是用来存
44、放地址的变量,用( 类型名 * 指针变量名 )的形式定义。赋值时应将某个变量 地址即 &x 赋给指针变量 ) 。13、 ,p=NULL和p=0;或p='0'等价;语句p=NULL;执行后,指针p并不是指向地址为0的存储 单元,而是具有一个确定的值 -" 空"。14、 指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否那么将引起错误;p=NULL; 和p=0;是等价的;指向同一数组的两指针变量进展关系运算可表示它们所值数组元素之间的关 系。如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息15、不可以取一个常数或表达式的地址赋值给同类型
45、的指针变量;通过强制类型转换可以将一种类型的指针变 量赋值给另一种类型的指针变量16、假设有定义语句:int a23,*p3;那么以下语句中正确的选项是A)p=a;B)p0=a;C)p0=&a12;D)p1=&a;参考答案: C【解析】A选项错误,因为p是指向一个指针数组,作为数组名,不能指向别的地方。B选项错误,因为p0是一个int指针,也就是int* ;而a是一个指向指针的指针int* 。C选项正确,因为p0 是一个int*,a12是int,&a12是int*,类型吻合。D选项错误,因为a作为数组名,不 能取地址。即使能取,p1是int* ,&a是int*,
46、类型不对。因此 C选项正确。17、int *p; scanf("%d", p);没有对指针进展初始化,无效指针18、 不允许把一个数赋予指针变量,被赋值的指针变量前不能再加"*" 说明符19、 假设有定义语句:int a10=0,1,2,3,4,5,6,7,8,9,*p=a;,以下选项中错误引用a数组元素的是(其中0 < i<10)A) *(*(a+i)B) a p-a C) piD) *( &ai )*p=a,将数组a的首地址赋给指针p°a+i表示数组a中第i个元素的地址,引用其中元素为a+i, A选项引用错误。p-a=0
47、,B选项引用的元素为a0 。C选项中pi表示p后i个地址的元素ai 。D 选项中&ai取ai地址,*(&ai)取这个地址的元素,即为ai。此题选择A选项20、malloc 函数的原型为: malloc size ;, 函数的作用是在存的动态存储区分配一个长度为 size 的连续空间。九、编译预处理和动态储存分配1预处理命令是以#号开头的命令,它们不是C语言的可执行命令,这些命令应该在函数之外 书写,一般在源文件的最前面书写,但不是必须在起始位置书写,所以B),C)错误。C)语言的预处理能够实现宏定义和条件编译等功能2、宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的
48、最开头。宏定义必须位于源程序中所有语句之前是错误的。宏名一般用大写,但不是必须用大写,宏展开不占运行时 间,只占编译时间,函数调用占运行时间( 分配存、保存现场、值传递、返回值) 。宏替换没有数据类型限制3、 #define N 100 在编译程序对C源程序进展预处理时用 100替换标识符N4、 不带参数的宏定义是用一个指定的标识符来代表一个字符串,其一般形式如下: #define 宏名替换文本。需要注意:1在#define、宏名和替换文本之间用空格隔开,2在C程序中,宏定义的定义位置一般写在程序的开头; 3宏名一般用大写字母表示,便于与变量名区别; 4宏定义是用宏名来表示一个字符串,在宏展开
49、时以该字符串取代宏名,这只是一种简单的代换,预处理程序对它不做任何检查; 5宏定义不是语句,在行末不加分号,如加上分号那么连分号也一起替换: 6宏定义必须写在函数之外,其作用域为从宏定义命令起到源程序完毕,如要终止其作用域可使用 #undef命令。B选项define前多了一个#,缺少替换文本宏名 替换文本 "位置反了,不能将一个自定义标识符宏定义为关键字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*x f(a+1)=a+1*a+1*a+1=3*a+1=10,f(a+1)=(a+1)*(
50、a+1)*(a+1)=647、 在一个程序中,允许使用任意数量的#include 命令行 包含文件被修改了,包含该文件的源程序必须重新进展编译和连接。8、考察预处理命令行,预处理是在程序编译之前进展的。预处理命令行的最后不能以分号表示完毕;#define MAX是合法的宏定义命令行;在程序中但凡以"#"开场的语句行都是预处理命令行十、结构体与共用体1、typedef 类型名 新类型名表示为一个已有定义的类型标识符重新定义一个类型名2、 关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型;可以用typedef将已存在的类型用一个新的名字来代表;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电工电子技术 课件全套 潘学海 1 手电筒电路的连接与测试 -16.流水灯电路的整体安装与调试
- 计算机安全技术-4操作系统安全
- SCI论文写作与投稿 第2版-课件汇 0-课程介绍 -7 SCI论文摘要写作
- 妇产科围手术期护理讲课
- 家具店长培训
- 2025届上海崇明区高考二模高考数学试卷试题(含答案详解)
- 广东省韶关市乐昌市2025届高三下学期2月模拟演练测验语文试题(含答案)
- 内科病房住院制度管理
- 基层管理者品质培训
- 护理人才培养工程申请汇报
- 虚拟现实技术在医疗领域的应用
- 铁路客运段QC小组运用PDCA循环减少旅客列车乘降问题发生次数现场型成果汇报
- 会计信息系统(本) · 网络考试备考资料
- 红外测温培训课件
- 四百字作文格子稿纸(可打印编辑)
- 私募股权投资PE
- 模型的制作工具与材料
- 稀土功能材料及应用
- 算24点教学讲解课件
- 人教版五年级上册科学第五单元《太阳能热水器》单元试题(含答案)
- 【骨科-关节资料】髌股关节置换
评论
0/150
提交评论