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

下载本文档

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

文档简介

数组下标的下限是0。土心I异0L——

公共基础知识

一、数据结构与算法

1、完全二叉树是属于非线性结构,但其最佳存储方式是顺序存储方式

2、顺序存储结构中也许根节点不唯一,故也许不是线性结构

3、算法的有穷性是指,算法中的操作环节为有限个,且每个环节都能在

有限时间内完毕

4、法复杂度涉及算法的时间复杂度和算法的空间复杂度。算法设计必

须考虑执行算法所需要的资源,即时间与空间复杂度

5、算法的优劣取决于算法复杂度,与程序的环境无关,当算法被编程实

现之后,程序的运营受到计算机系统运营环境的限制

6、循环队列中,由于指针超过队列地址最大值时会移动到队列最小地

址处,所以队头指针可以大于也可以小于队尾指针

7、链式存储结构中每个结点都由数据域与指针域两部分组成,增长

了存储空间

8、循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中

的队尾元素,用排头指针front指向排头元素的前一个位置

9、设循环队列为Q(1:m),其初始状态为front=rear=m0

通过一系列入队与退队运算后,front=X,rear=Y。现要在该

循环队列中寻找最大值的元素,最坏情况下需要比较的次数为

(1)若X>Y,则次数为m—(Y-X)-l

(2)若XVY,则次数为丫一XT

10、循环队列中的元素个数与队头指针和队尾指针的变化而变化

11、队列的修改是依先进先出的原则进行的

12、设计算法时不仅要考虑对数据对象的运算和操作,还要考虑算法的

控制结构

13、顺序表具有以下两个基本特性:(1)线性表中所有元素所占的存储

空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依

次存放的。(3)在顺序表中,每个元素占有相同的存储单元

14、设栈的顺序存储空间为S(0:49),栈底指针bottom=X,栈顶指针

top=Y(指向栈顶元素)。则栈中的元素个数为X-Y+1

15、设栈的顺序存储空间为S(1:m),初始状态为top=m+l(X)o

现通过一系列入栈与退栈运算后,top=20(Y),则当前栈中的元素个数

为m+l-20=mT9(X-Y)

16、设栈的顺序存储空间为S(l:50),初始状态为top=0。现通过一

系列入栈与退栈运算后,top=20(X),则当前栈中的元素个数为

20(X)

二、程序设计基础

1、结构化程序设计的思想涉及:自顶向下、逐步求精、模块化、限制

使用goto语句

2、结构化程序涉及的基本控制结构只有三种,即顺序结构、选择结构

与循环结构

3、在软件设计中使用的工具PAD图,不使用的工具数据流图(DFD

图)

4、对象有如下一些基本特点:标记唯一性、分类性、多态性、封装

性、模块独立性好

5、多态性是指同一个操作可以是不同对象的行为

6、整数类实例涉及:十进制常量用0~9表达,不能以0开头;八进制常

量用0~7表达,必须用0开头;十六进制常量用0~9和A〜F(a〜f)表

达,必须以Ox或0X开头。

7、字符实例的一般形式是用一对单引号括起来的一个字符。此外

ASCH码中尚有一些控制字符,C语言中用转义字符的形式来书写这些

常,转义字符一反斜杠(\)开始,后面跟1个字符或字符序列

8、继承是面向对象的方法的一个重要特性,是使用已有的类的定义作

为基础建立新类的定义技术。广义的说,继承是指可以直接获得已有

的性质和特性,而不必反复定义它们,所以说继承是指类之间共享属

性和操作的机制

三、软件工程基础

1、软件指的是计算机系统中与硬件互相依赖的另一部分,涉及程序、

数据和有关的文档

2、软件具有以下特点:(1)软件是一种逻辑实体,具有抽象性;(2)软件

没有明显的制作过程;(3)软件在使用期间不存在磨损、老化问题;

(4)对硬件和环境具有依赖性;(5)软件复杂性高,成本昂贵;(6)

软件开发涉及诸多的社会因素,如知识产权等

3、软件生命周期可以分为软件定义、软件开发与软件运营维护三个阶

段。重要活动阶段是:可行性研究与计划阶段,需求分析,软件设计,

软件实现,软件测试,运营和维护(同9)

4、计算机软件按功能分为应用软件、系统软件、支撑软件(或工具软

件)o系统软件是管理计算机的资源,提高计算机的使用效率,为用户提

供各种服务的软件,如操作系统、数据库管理系统、编译程序、汇编

程序和网络软件等

5、数据定义语言:负责数据的模式定义与数据的物理存取构建;数据

操纵语言:负责数据的操纵,涉及查询及增、删、改等操作;数据控

制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢

复等功能。

6、软件工程包含3个要素:方法、工具和过程

7、软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时

期都属于软件生命周期

8、数据库系统的三级模式是概念模式、外模式和内模式。概念模式

是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视

图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个

用户的局部数据描述。内模式又称物理模式,它给出了数据库物理存

储结构与物理存取方法

9、软件生命周期分为3个时期共8个阶段:软件定义期,涉及问题定

义、可行性研究、需求分析;软件开发期,涉及概要设计、具体设

计、实现、测试;运营维护期,即运营维护阶段。可行性研究属于软件

定义期任务(同3)

10、可行性分析阶段:可行性分析报告。需求分析阶段:软件规格说

明书,初步的用户手册。软件设计阶段:概要设计说明书,具体设计说

明书,测试计划初稿。软件实践阶段:用户手册,操作手册等面向用户

的文档和单元测试计划。软件测试阶段:测试分析报告。

11、概要设计说明书是总体设计阶段产生的文档。集成测试计划是

在概要设计阶段编写的文档。需求规格说明书是后续工作如设计、编

码等需要的重要参考文档

12、需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编

写需求规格说明书和需求评审,涉及拟定软件系统的功能

13、(1)在测试之前制定测试计划,并严格执行,测试用例的选择不可

随意,应选择有代表性的,尽也许发现迄今为止尚未发现的错误。(2)

测试主线目的是尽也许多地发现并排除软件中隐藏的错误(3)软件测试

是保证软件质量、可靠性的关键环节。

14、在需求分析阶段可以使用的工具有数据流图DFD图,数据字典D

D,鉴定树与鉴定表

15、数据流图中带箭头的线段表达的是数据流

16、数据字典(DD)所定义的对象都包含于数据流图(DFD图)

17、软件需求规格说明书有以下几个方面的作用。①便于用户、开发

人员进行理解和交流;②反映出用户问题的结构,可以作为软件开发

工作的基础和依据;③作为确认测试和验收的依据

18、软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规

模适当、模块的依赖关系适当

19、从技术观点上看,软件设计涉及软件结构设计、数据设计、接口设

计、过程设计。

20、减少耦合性提高内聚性有助于提高模块的独立性(高内聚低耦合)

21、扇入指的是调用一个给定模块的模块个数

22、扇出指的是由一个模块直接调用的其他模块数

23、结构化程序的三种基本控制结构:顺序、选择和循环(反复)

24、在数据流图中,用标有名字的箭头表达数据流。在程序流程图

中,用标有名字的箭头表达控制流。

25、软件测试的目的是为了发现错误而执行程序的过程。程序调试的

基本环节有:错误定位、修改设计和代码,以排除错误、进行回归测

试,防止引进新的错误。程序调试通常称为Debug,即排错。软件测试

的基本准则有:所有测试都应追溯到需求、严格执行测试计划,排除测

试的随意性、充足注意测试中的群集现象、程序员应避免检查自己的

程序、穷举测试不也许、妥善保存测试计划等文献。

26、白盒测试又称为结构测试或逻辑驱动测试,对程序所有的逻辑途

径进行测试

27、黑盒测试只是根据程序的功能说明来设计测试用例。在使用黑盒

测试法时,手头只需要有程序功能说明就可以了。黑盒测试法:等价类

划分法、边界值分析法和错误推测法

四、数据库设计基础

1、数据库管理系统是数据库的机构,是一种在操作系统之上的系统

软件。

2、数据管理技术的发展经历了3个阶段:人工管理阶段、文献系统

阶段和数据库系统阶段。

特点人工管理阶段文献系统阶段数据库系统阶段

管理者人文献系统数据库管理系统

面向对某个应用程序某个应用程序现实世界

共享限无共享,冗余度共享性差,冗余共享性大,冗余度小

度大度大

独立性不独立,完全依独立性差具有高度的物理独立

赖于程序性和一定的逻辑独立

结构化无结构记录内有结构,整体结构化,用数据模

整体无结构型描述

控制能由应用程序控由应用程序控制由DBMS提供数据安

力制全性、完整性、并发

控制和恢复

3、数据库应用系统中的核心问题是数据库的设计。

4、数据库中反映用户对数据规定的模式为外模式

5、数据模型通常由数据结构、数据操作及数据约束3部分组成

6、数据模型按照不同的应用层次分为3种类型:概念数据模型、逻辑数

据模型、物理数据模型

7、数据模型成熟并大量使用的数据模型有层次模型、网状模型、关系

模型和面向对象模型等

8、关系模型实体间的联系采用二维表来表达,简称表:网状结构为网状

模型实体间的联系;树状结构为层次模型实体间的联系;属性刻画了实

体。

9、在E—R图中实体集用矩形,属性用椭圆,联系用菱形

10、二维表中的一行称为元组。候选键(码)是二维表中能唯一标记

元组的最小属性集。若一个二维表有多个候选码,则选定其中一个作为

主键(码)供用户使用。表M中的某属性集是表N的候选键或者主键,

则称该属性集为表M的外键(码)。

11、1966年Boehm和Jacopini证明了程序设计语言仅仅使用顺序、

选择和反复(循环)三种基本控制结构就足以表达出各种其他形式结构

的程序设计方法

12、关系模型中可以有3类完整性约束:实体完整性约束、参照完整

性约束和用户定义的完整性约束。实体完整性约束是指,若属性M是

关系的主键,则属性M中的属性值不能为空值。参照完整性约束是指,若

属性(或属性组)A是关系M的外键,它与关系M的主码相相应,则对于关

系M中的每个元组在A上的值必须为:要么取空值;要么等于关系M中某

个元组的主码值。

13、用于查询的3个操作无法用传统的集合运算表达,引入的运算为

投影运算、选择运算、笛卡尔积。常用的扩充运算有交、除、连接及

自然连接等。并:RS是将S中的记录追加到R后面。交:RS结果是既属

于R又属于S的记录组成的集合。上述两种操作中,关系R与S规定有相

同的结构,故A、D选项错误。自然连接:去掉反复属性的等值连接。

自然连接规定两个关系中进行,比较的是相同的属性,并且进行等值连

接。除运算可以近似地看作笛卡尔积的逆运算。当$*丁=区时,则必有

R+S=T,T称为R除以S的商。设关系R有属性此,M2,…,M”,关系S

有属性+Mn-s+2,…,M",此时有:1^+5=­皿2,3,乂-(区)

~Ml,M2,Mn-s((^Ml,M2,,,,»Mn-S(R)XS))o由S中有属性A

和Al,T中属性为B和Bl,在R元组中找到相应于S中两个元组的T中元

组为f3与n20R中最后一个元组与S中无相应关系,所以在T中也不

会出现。投影,从关系模式中指定若干个属性组成新的关系。

二级C语言

一、c语言概述

1、结构化程序设计把一个复杂问题的求解过程分阶段进行,需要保

证自顶向下、逐步细化、模块化设计、结构化编码

2、函数体必须由{开始。一个源程序文献可以涉及预解决命令、全

局声明、函数定义,程序总是从main函数开始执行的

3、算法不一定要包含所有三种基本结构,也可以只包含一种或两种

4、算法的复杂程序不是由操作环节多少决定的,而是准时间复杂度

与空间复杂度来衡量

5、C编译程序把文献后缀为.c的源程序文献编译成文献后缀为.obj

的二进制文献,链接将一个或多个目的文献与程序用到的库文献连

接起来,形成一个可以在操作系统直接运营的执行程序.exe

6、一个算法应当具有以下五个重要的特性:有穷性,拟定性,输

入,输出以及可行性

7、只有同时包含三种基本结构时,程序才是结构化程序。一个结构

化程序可以包含顺序、分支、循环结构中的一种或多种

8、stdio.h文献中包含标准输入输出函数的函数说明,预解决指令

ttinclude<stdio.h>是使程序可以去该文献中找到printf,scanf

等函数以便使用

9、计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe

10、算法的特性:①有穷性。一个算法(对任何合法的输入)在执行有穷

步后可以结束,并且在有限的时间内完毕。②拟定性。算法中的每一步都

有确切的含义。③可行性。算法中的操作可以用已经实现的基本运算执

行有限次来实现。④输入:一个算法有零个或者多个输入,零个输入就

是算法自身拟定了初始条件。⑤输出:一个算法有一个或者多个输出,以

反映出数据加工的结果

11、算法的描述有伪代码、流程图、N-S结构图等。E—R是实体联系模

12、C语言中的非执行语句不会被编译,不会生成二进制的机器指令。C

程序通过编译、连接环节之后才干形成一个真正可执行的二进制机器

指令文献。用C语言编写的程序称为,它以ASCII代码形式存放在一

个文本文献中。C语言源程序经编译后生成后缀为.obj的目的程序。

13、C语言的数值常量中不能夹带空格。在C语言中运算符两侧的运

算数据类型可以不一致,且结果与精度较高的保持一致,

14、C语言程序是由函数组成的。可以单独进行编译。每个C程序中必

须包含一个main函数,但不一定是每个C程序文献中必须有,用户单独

编写的某个函数也可以存储为一个C程序文献

15、一个普通的C函数可以单独作为一个C的程序文献存在被包含到其

他程序中

16、在复合语句中,不仅可以有执行语句,还可以有定义语句,定义语

句应当出现在执行语句的前面

17、C语言中的某些语句可以不用分号,例如if语句

18、关键字不可用做用户标记符

19、C语言的标记符分为3类:关键字、预定义标记符和用户标记符。

常量不属于标记符

20、一条C语句相应转换成一条机器指令

二、运算符与表达式

1、sizeof是C语言中的一个操作符(operator)。其作用就是返回一

个对象或者类型所占的内存字节数

2、条件表达式:x=表达式1?表达式2:表达式3的含义是:先求解表

达式1,若为非0(真),则求解表达式2,将表达式2的值赋给X。若表达

式1的值为0(假),则求解表达式3,将表达式3的值赋给x

3、C语言中没有V>运算符a%=b表达a=a%(b)c语言中”

八”的意思是按位异或

4、c语言中"八”的意思是按位异或,运算符号按位或〃I",把两个数

化为二进制,异为1,同为0,

如10的二进制为00001010

3的二进制为0000001110八3=9

9的二进制为00001001

按位与运算,同为1,异为0

5、在VC6.0平台中,整型int占有Z个字节,doub1e型数据占有‘8个

字节。

6、算术运算符+的优先级高于-=

7、十进制----->>二进制:十进制除以2,记录余数直到除尽到0,其

二进制为这些余数倒着排列。10/2=5余0,5/2=2余1,2/2=1余0,

1/2=0余1,则10的二进制为10二,由于二进制有8个字节,则10的二

进制为00001010o

8、二进制---->>十进制:例:000010011*2X4-1)+0*21(3-

1)+0*2八(2-1)+1*2-(1-1)=9

000011111*2X4-1)

+1*2*(3-1)+1*2乂2-1)+1*2-(1-1)=15

9、expl&&exp2,规则为:对expl求值,若为0,则表达式为0,

且不计算exp2;若expl非0,则求exp2值,作为表达式值

10、">>"右移运算符,按位右移运算规则是将一个操作数先转换成二

进制数,然后将二进制数各位右移若干位,移出的低位舍弃;并在高

位补位,若为无符号数,右移时左边高位移入0。例:a=8=01000,执行

a>>2后,a—00010—2

11、在C语言中,乘除法优先级要高于加减法,另一方面,除法运算符

’7〃两边参与运算对象都是整数,运算结果要取整

12、逗号表达式的值为其中最后一个表达式的值

13、i++,先使用后自增自增和自减运算符的两种用法:前置运

算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变

化后表达式的值参与其他运算:后置运算,运算符放在变量之后,规则

是变量先参与其他运算,然后再使变量的值增(或减)1

例:sum=pad=5;pAd=sum++,pAd++,++pAd;

得:当依仃)='\0'时,结束循环,返回字符'\0'的八5门1码0511111=5邛2(1

=5;pAd=5,sum=6,pAd=6,pAd=7

14、计算5/2,结果取整数值2。"%"运算符的两个操作值必须为整型

数据

15、在C语言中,逻辑真值相应非0。,分支结构的流程走向是根据表

达式的值,并不仅仅是算数表达式的值

16、rand()产生随机整数

三、基本语句

1、复合语句可以包含多条语句,在其中可以定义局部变量

2、花括号对{}不仅用来表达函数的开头和结尾,也可以用于表达复合

语句

3、C语言中的语句必须以分号";"结束,所以空语句表达为";〃,不是

空行

4、定义语句应当出现在执行语句的前面,在printf和scanf函数

中都可以指定数据的宽度,scanf()的格式控制串可以使用其他非

空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配,。复合

语句可以由任意多条语句构成,可以使一条也可以没有

5、当(*str)='\0'时,结束循环,返回字符'\0'的ASCH码0

6、while循环语句一般形式为:while(表达式){循环体},执行过

程为,一方面判断表达式,成立(非0)则执行循环体,不成立(0)则退

出循环

7、gets函数,getchar是用于从终端读入字符。fputs函数用于把

字符串输出到文献。fwrite函数用于以二进制形式输出数据到文献

8、scanf()语句中用〃空格"间隔不同的字符串。getchar()函

数从终端读入一个字符作为函数值,把读入的字符赋给变量ch。在

输入时,空格、回车符都将作为字符读入,并且只有在用户敲入回车键

时,读入才开始执行。gets()函数的调用形式为:gets

(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字

符数组名、字符数组元素的地址或字符指针变量。gets函数用来从终

端键盘读入字符串(涉及空格符),直到读入一个换行符为止。getc()

函数的调用形式为:ch=getc(pf)其中pf是文献指针,函数的功能是

从pf指定的文献中读入一个字符,并把它作为函数值返回

9、scanf函数中的格式控制字符串是为了输入数据用的,无论其中有

什么字符,也不会输出到屏幕上。scanf()的格式控制串可以使用其他

非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配就可

以。。Printf函数可以输出常量也可以输出变量,Prinf函数可以

用"来输出百分号%

10、数组第一个数为0。由printf输出的数据都隐含右对齐。Printf

输出数据所占的宽度由系统决定

11、条件运算符组成条件表达式的一般形式为:表达式1?表达

式2:表达式3

其求值规则为:假如表达式1的值为真,则以表达式2的值作为条件

表达式的值,否则以表达式2的值作为整个条件表达式的值

四、选择结构

1、在C语言中,逻辑真值相应非0。

2、逻辑"非"(即运算符!)的运算级别是最高的;算术运算符优先级较

高,关系和逻辑运算符优先级较低。

3、for语句的一般形式为:

£。1'(表达式1;表达式2;表达式3)语句

其循环中的〃表达式1(循环变量赋初值)〃、"表达式2(循环条件)〃

和〃表达式3(循环变量增量)〃都是选择项,即可以缺省,但";"不能

缺省。该题目中省略了〃表达式1(循环变量赋初值)〃和"表达式3

(循环变量增量)

4、&&只有运算对象均非零结果才为真。逻辑与只有在〃&&〃符号两边

操作均为真时,逻辑与为真。”只要有一个对象非零结果就是真。逻辑

或当且只当〃I1〃符号两边操作至少有一个为真时,逻辑或结果为真

5、a!=b表达a不等于b时,运算结果为1,或者为0

6、逻辑与运算符遵循"短路求值"策略,即只有在仅靠左操作数的值无

法拟定该逻辑表达式的结果时,才会求解右操作数

例:若有定义:inta=O,b=0,c=0,d=0;,有C语言表达式

(a++&&b++)?c++:d++,以下关于其执行顺序的叙述对的

先执行a++,表达式a++的值为0,由此即可拟定(a++&&b++)的值为0,

因此执行d++

7、if语句中表达式为1直接执行。为0执行eIse

五、循环结构

1、条件表达式的执行次数总是比循环体的执行次数多一次

2、设有以下代码

do(

while(条件表达式1)

循环体A;

}while(条件表达式2);

while(条件表达式1)

do{

}while(条件表达式2);

假设表达式1与表达式2成立次数为nl与n2。若nl>n2,则循环体A

执行次数为n2+l,B执行次数n2+l;若nl<n2,则循环体A执行次数

为nl,B执行次数nl

3、while循环语句一般形式为:while(表达式){循环体},执行过

程为:一方面判断表达式,成立(非0)则执行循环体,不成立(0)则

退出循环。do…while循环语句一般形式为:d。{循环体}wh

ile(表达式),执行过程为:一方面执行循环体,之后判断表达式,成

立(非0)则再一次执行循环体,不成立(0)则退出循环。

4、在条件相同的情况下,do…whi1e循环比while…do多执行一次

函数体两种循环都是在表达式为0时结束循环。do-while循环由

表达式真假判断是否退出循环,也可以用break语句退出循环

5、,whi1e语句的语义是:计算表达式的值,当值为真(非0)时,

执行循环体语句.intk=0;

while(k=l)k++;while(k=l)=while(1),是死循环,

执行无限次。

6、只要适本地修改代码,就可以将do-while与whi1e互相转换。f

or语句使用最为灵活,它完全可以取代while语句;

7、s[k]-'0'为是s口数组的k所相应的字符串长度。

8、在C语言中档于号用〃=="表达,一个"="表达赋值

六、数组

1、*与&放在一起作用抵消,*(pt+i)表达引用指针pt所指元素后的第i个元素

2、#include<stdio.h>

main()

{intc⑹={10,20,30,40,50,60},*p,*s;

p=c;s=&c[5];

printf("%d\n",s-p);

)

语句P=c;指将c[0]元素的地址赋给指针变量p;语句s=&c[5];指将c⑸元素的地址赋给

指针变量S

3、#include<stdio.h>

main()

{inta[5]={2,4,6,8,10),*p,**k;

p=a;k=&p:

printf("%d",*(p++));

printf("%d\n",**k);

}

一方面通过P=a使p指向数组的第1个元素,所以输出2;在输出2以后,由于p++,即p就指向数

组的第2个元素,**1<就是取出p所指向元素的值,而p指向的是数组的第2个元素,即输出4

4、通过一条语句可以定义多个数组;数组说明符的一对方括号中可以是整型常量,可以是整型

常量表达式;在引用数组元素时,下标表达式必须是整型的。数组下标的下限是0。

5、chara[2]={"A","B");不合法,应为chara[2]={'A','B'};;用字符串方式赋

值比用字符逐个赋值要多占1个字节

6、数组下标的下限是0。

7、数组名后面括号的值必须是整形常量,不可以是变量

8、static内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,

再次调用该函数时,以前调用时的数值仍然保存着

9、voidfun(int*a,intn)/*fun函数的功能是将a所指数组元素从大到小排序*/

fun(c+4,6);即指排序从第5个元素开始进行从大到小排序。

10、数组说明的一般形式为:类型说明符数组名[常量表达式

11,指针的赋值一方面基类型必须一致,s二维数组名,是二维数组的首地址,其基类型是一

个具有10个元素的字符数组。P是一个字符指针变量,其基类型是一个字符,k是一个行指

针,其基类型是具有3个元素的字符型数组。

七、函数

1、C程序中主函数不能被其他函数调用。main函数可以放在程序开始,也可以放在中间,也可以放

在最后,位置不固定,但程序执行时必须从main函数开始。在C程序的函数中不能定义另一个函

数,可以声明或调用另一个函数。每个C程序中必须包含一个main函数,但不一定是每个C程序文

献中必须有,用户单独编写的某个函数也可以存储为一个C程序文献

2、数学库中定义了函数的名称、参数个数与类型、返回值类型与具体的函数体,编译预解决

时,预解决程序将查找指定的被包含文献,并将其复制到#inc1ude命令出现的位置上,不

引用math,h文献,文献编译时,编译器无法辨认没有被定义的sin函数。

若要使用C数学库中的sin函数,需要在源程序的头部加上

#include<math.h>

通过引用math,h文献,说明sin函数的参数个数和类型,以及函数返回值类型

3、函数调用时,函数名称是需要区分大小写的;函数名不允许以数字开头;在函数中允许有多

个return语句,但每次调用只能有一个return语句被执行

4、用户自己定义的函数能调用库函数也可以调用自定义函数;对于不同函数的形式参数可以

使用相同名称的标记符;关于函数的定义不可以嵌套,但函数的调用可以嵌套。

5、不能将一个整数直接赋给指针变量作为地址。函数的返回值可以是地址,即指针。函数调

用中形参值的变化不会传递给实参。

6、C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,

而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。

7、C程序必须由一个或一个以上的函数组成;函数调用可以作为一个独立的语句存在;若函

数有返回值,必须通过return语句返回

8、语句f(&a[2],5,0)的作用是对从a[2]开始的5个元素进行从大到小排序。

9、voidf(int*s)

{*s=k;}

main()

{intm=3,*p=&m;

f(p);

printf(*%d,%d*,m,*p);

m=3,p指向m,调用函数f,将实参p中m的地址传递给形参s,s指向rn,贝ijk赋值给叫m=5,p仍

然指向m,故输出5,5

10、函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值

反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化

A.指针

1、在计算机内存中,用一个字节表达一个内存单元并为每一个存储单元编号,这个编号就是存

储单元的"地址"。一个变量的地址称为该变量的"指针”。专门用来存放变量地址的变量,称为"

指针变量”。常量存储在编译文献中,不能取地址。一个指针变量的地址只能赋给指向这种类型

的指针变量,与其自身类型不同,不能赋值,未赋初值的指针变量自动赋任意地址值

2、所有地址值所占字节都是同样的,故指针变量所占内存大小同样;不能随意把一个地址存

放到任何一个指针变量中去,只能把具有相同类型的变量的地址,存放到这个指针变量中,结

构体变量与某个成员类型不同,不能用同样的指针指向它们

3、#include<stdio.h>

voidf(int*p,int*q);

main()

(

intm=l,n=2,*r=&m;

f(r,&n);

printf("%d,%d”,m,n);

)

voidf(int*pjnt*q)

(

P=P+1;

*q=*q+1;

)

在f(int*p,int*q)函数中,执行p=p+l是将p所相应的地址加1,而*q=*q+l是将q所指向的n的

地址所相应的值加1,所以m的得知所相应的值没有变,而n的值则为3了。

4、假如p是指针变量,则*P表达变量p所指向的地址的值;假如P是指针变量,则&P表达

变量p的地址;假如P是指针变量,*P+1表达将p所指的值加上L而*(P+1)表达的是先将

指针右移一位再取所指向变量的值。

5、虽然不同基类型的指针变量占用字节数是相同的,但是不能混用。

6、fIoata[10],x:表达式a+l不是非法的;语句a=&x;是非法的

7、a=(*ptr)++表达把指针ptr相应地址单元里的值赋给a,再将ptr相应地址单元里的值加1

8、定义指针P后,必须指针p进行初始化就进行赋值

9、intx=2,*p=&x;floaty=3.0:charz='c'由于X是一个整形变量,将X地址赋值

给p指针后,对P进行加一运算,p指针的值相称于加4(整型变量的地址占4个字节),此时p指

向了未知的内存地址,对未知内存地址进行操作具有安全隐患

10、把一个指针变量的值赋给另一个指针变量,但一定要保证这两个指针变量的基类型是相

同的;只要两个指针变量基类型相同,可以指向同一个对象

1k函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。不能将一

个整数直接赋给指针变量作为地址;函数可以返回地址值;改变函数形参的值,不会改变相应

实参的值:当在程序的开头包含头文献stdi。.h时,可以给指针变量赋NULL

12、指针是用来存放地址的变量,用(类型名*指针变量名)的形式定义。赋值时应将某个变量地

址即&x赋给指针变量)。

13,,p=NULL;和p=0;或p='\0';等价;语句p=NULL;执行后,指针p并不是指向地址为。的

存储单元,而是具有一个拟定的值-"空"。

14、指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误;p=NULL;和

p=0;是等价的;指向同一数组的两指针变量进行关系运算可表达它们所值数组元素之间的关

系。假如企图通过一个空指针来访问一个存储单元,将会得到一个犯错信息

15、不可以取一个常数或表达式的地址赋值给同类型的指针变量;通过强制类型转换可以将一•种类型的指针变

量赋值给另一种类型的指针变量

16、若有定义语句:

inta[2][3J,*p[3];

则以下语句中对的的是

A)p=a;

B)p[0]=a;

C)p[0]=&a[l][2];

D)p[1]=&a;

参考答案:C

【解析】A选项错误,由于p是指向一个指针数组,作为数组名,不能指向别的地方。B选项错

误,由于p[0]是一个int指针,也就是int*;而a是一个指向指针的指针int**。C选项对的,

由于p[0]是一个int*,a[1][2]是int,&a[l][2]是int*,类型吻合。D选项错误,由于a作为

数组名,不能取地址。即使能取,p[1]是int*,&a是int***,类型不对。因此C选项对的。

17、int*p;scanf("%d",p);没有对指针进行初始化,无效指针

18、不允许把一个数赋予指针变量,被赋值的指针变量前不能再加"*"说明符

19、若有定义语句:inta[10]={0,I,2,3,4,5,6,7,8,9},*p=a;,以下选项中错误引用a数组元素的是

(其中OWi<10)

A)*(*(a+i))

B)a[p-a]

C)p[i]

D)*(&a[i])

*P=a,将数组a的首地址赋给指针p。a+i表达数组a中第i个元素的地址,引用其中元素为

*(a+i),A选项引用错误。p-a=0,B选项引用的元素为a[0]。C选项中p[i]表达p后i个地

址的元素a[i]•D选项中&a[i]取a[i]地址,*(&a[i])取这个地址内的元素,即为a[i]。

本题选择A选项

20、malloc函数的原型为:mal1oc(size)函数的作用是在内存的动态存储区分派一个

长度为size的连续空间。

九、编译预解决和动态储存分派

1、预解决命令是以"#"号开头的命令,它们不是C语言的可执行命令,这些命令应当在函数之

外书写,一般在源文献的最前面书写,但不是必须在起始位置书写,所以B),C)错误。C)语

言的预解决可以实现宏定义和条件编译等功能

2、宏定义写在函数的花括号外边,作用域为其后的程序,通常在文献的最开头。宏定义必须位

于源程序中所有语句之前是错误的。宏名一般用大写,但不是必须用大写,宏展开不占运营时

间,只占编译时间,函数调用占运营时间(分派内存、保存现场、值传递、返回值)。宏替换

没有数据类型限制

3、ftdefineN100在编译程序对C源程序进行预解决时用100替换标记符N

4、不带参数的宏定义是用一个指定的标记符来代表一个字符串,其一般形式如下:#define

宏名替换文本。需要注意:(1)在#define、宏名和替换文本之间用空格隔开,(2)在C程

序中,宏定义的定义位置一般写在程序的开头;(3)宏名一般用大写字母表达,便于与变量名

区别;(4)宏定义是用宏名来表达一个字符串,在宏展开时以该字符串取代宏名,这只是一种简

朴的代换,预解决程序对它不做任何检查;(5)宏定义不是语句,在行末不加分号,如加上分号

则连分号也一起替换:(6)宏定义必须写在函数之外,其作用域为从宏定义命令起到源程序结

束,如要终止其作用域可使用#undef命令。B选项define前多了一个#,缺少"替换文本"

宏名”,,替换文本〃位置反了,不能将一个自定义标记符宏定义为关键字

5、#defineSUB(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+l*a+l*a+l=3^a+l=l0,f((a+l))=(a+l)*(a+l)*(a+1)=64

7、在一个程序中,允许使用任意数量的#5elude命令行

包含文献被修改了,包含该文献的源程序必须重新进行编译和连接。

8、考察预解决命令行,预解决是在程序编译之前进行的。预解决命令行的最后不能以分号表

达结束;#defineMAX是合法的宏定义命令行;在程序中凡是以"#"开始的语句行都是预

解决命令行

十、结构体与共用体

1.typedef类型名新类型名表达为一个已有定义的类型标记符重新定义一个类型名

2、关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增长新的类型;可

以用typedefW己存在的类型用一个新的名字来代表;用typedef定义新的类型名后,原有类型

名仍有效;用typede何认为各种类型

温馨提示

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

评论

0/150

提交评论