计算机二级串讲资料.doc_第1页
计算机二级串讲资料.doc_第2页
计算机二级串讲资料.doc_第3页
计算机二级串讲资料.doc_第4页
计算机二级串讲资料.doc_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

第一部分 考纲的基本知识结构及其考纲和考试重点分析第一部分 考试大纲分析公共基础考试内容 一、基本数据结构与算法 1.算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。 2.数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。 3.线性表的定义;线性表的顺序存储结构及其插入与删除运算。 4.栈和队列的定义;栈和队列的顺序存储结构及其基本运算。 5.线性单链表、双向链表与循环链表的结构及其基本运算。 6.树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。 7.顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。 二、程序设计基础 1.程序设计方法与风格 2.结构化程序设计。 3.面向对象的程序设计方法,对象,方法,属性及继承与多态性。 三、软件工程基础 1.软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。 2.结构化分析方法,数据流图,数据字典,软件需求规格说明书。 3.结构化设计方法,总体设计与详细设计。 4.软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。 5.程序的调试,静态调试与动态调试。 四、数据库设计基础 1.数据库的基本概念:数据库,数据库管理系统,数据库系统。 2.数据模型,实体联系模型及ER图,从ER图导出关系数据模型。 3.关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。 4.数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。 考试方式 1.公共基础知识的考试方式为笔试,与C语言程序设计的笔试部分合为一张试卷,公共基础知识部分占全卷的30分。 2.公共基础知识有l0道选择题和5道填空题。 C语言程序设计基本要求 1.熟悉TURBO C集成环境。 2.熟练掌握结构化程序设计的方法,具有良好的程序设计风格。 3.掌握程序设计中简单的数据结构和算法。 4.TURBO C的集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力。C语言程序设考试内容 一、C语言的结构 1.程序的构成,MAIN函数和其他函数。 2.头文件,数据说明,函数的开始和结束标志。 3.源程序的书写格式。 4.C语言的风格。 二、数据类型及其运算 1.C的数据类型(基本类型,构造类型,指针类型,空类型)及其定义方法。 2.C运算符的种类、运算优先级和结合性。 3.不同类型数据间的转换与运算。 4.C表达式类型(赋值表达式,算术表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式)和求值规则。 三、基本语句 1.表达式语句,空语句,复合语句。 2.数据的输入与输出,输入输出函数的调用。 3.复合语句。 4.GOTO语句和语句标号的使用。 四、选择结构程序设计 1.用IF语句实现选择结构。 2.用SWITCH语句实现多分支选择结构。 3.选择结构的嵌套。 五、循环结构程序设计 1.FOR循环结构。 2.WHILE和DO WHILE循环结构。 3.CONTINUE语句和BREAK语句。 4.循环的嵌套。 六、数组的定义和引用 1.一维数组和多维数组的定义、初始化和引用 2.字符串与字符数组。 七、函数 1.库函数的正确调用。 2.函数的定义方法。 3.函数的类型和返回值。 4.形式参数与实在参数,参数值的传递。 5.函数的正确调用,嵌套调用,递归调用。 6.局部变量和全局变量。 7.变量的存储类别(自动,静态,寄存器,外部),变量的作用域和生存期。 8.内部函数与外部函数。 八、编译预处理 1.宏定义:不带参数的宏定义;带参数的宏定义。 2.“文件包含”处理。 九、指针 1.指针与指针变量的概念,指针与地址运算符。 2.变量、数组、字符串、函数、结构体的指针以及指向变量、数组、字符串、函数、结构体的指针变量。通过指针引用以上各类型数据。 3.用指针作函数参数。 4.返回指针值的指针函数。 5.指针数组,指向指针的指针,MAIN函数的命令行参数。 十、结构体(即“结构”)与共用体(即“联合”) 1.结构体和共用体类型数据的定义方法和引用方法。 2.用指针和结构体构成链表,单向链表的建立、输出、删除与插入。 十一、位运算 1.位运算符的含义及使用。 2.简单的位运算。 十二、文件操作 只要求缓冲文件系统(即高级磁盘I/O系统),对非标准缓冲文件系统(即低级磁盘I/O系统)不要求。 1.文件类型指针(FILE类型指针)。 2.文件的打开与关闭(FOPEN,FCLOSE)。3.文件的读写(FPUTC,FGETC,FPUTS,FGETS,FREAD,FWRITE,FPRINTF,FSCANF函数),文件的定位(REWIND,FSEEK函数)。 考试方式 1.笔试:120分钟,满分100分,其中含公共基础知识部分的30分。 2.上机:60分钟,满分100分。 上机操作包括:(1)填空; (2)改错; (3)编程。第二部分 公共基础知识和C语言基本知识的重点分析重点难点知识讲解C语言之指针、数组和函数 基本解释1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。2、数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。3、当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。 问题:指针与数组听说char a 与char *a是一致的,是不是这样呢?答案与分析:指针和数组存在着一些本质的区别。当然,在某种情况下,比如数组作为函数的参数进行传递时,由于该数组自动退化为同类型的指针,所以在函数内部,作为函数参数传递进来的指针与数组确实具有一定的一致性,但这只是一种比较特殊的情况而已,在本质上,两者是有区别的。请看以下的例子:char a = Hi, pig!;char *p = Hi, pig!;上述两个变量的内存布局分别如下:数组a需要在内存中占用8个字节的空间,这段内存区通过名字a来标志。指针p则需要4个字节的空间来存放地址,这4个字节用名字p来标志。其中存放的地址几乎可以指向任何地方,也可以哪里都不指,即空指针。目前这个p指向某地连续的8个字节,即字符串“Hi, pig!”。另外,例如:对于a2和p2,二者都返回字符i,但是编译器产生的执行代码却不一样。对于a2,执行代码是从a的位置开始,向后移 动2两个字节,然后取出其中的字符。对于p2,执行代码是从p的位置取出一个地址,在其上加2,然后取出对应内存中的字符。问题:数组指针为什么在有些时候我们需要定义指向数组而不是指向数组元素的指针?如何定义?答案与分析:使用指针,目的是用来保存某个元素的地址,从而来利用指针独有的优点,那么在元素需要是数组的情况下,就理所当然要用到指向数组的指针,比如在高维需要动态生成情况下的多维数组。定义例子如下: int (*pElement)2。下面是一个例子: int array23 = 1,2,3,4,5,6;int (*pa)3; /定义一个指向数组的指针 pa = &array0; / &符号能够体现pa的含义,表示是指向数组的指针printf (%d, (*pa)0); /将打印array00,即1 pa+; / 猜一猜,它指向谁?array1?对了!printf (%d, (*pa)0); / 将打印array10,即4上述这个例子充分说明了数组指针一种指向整个数组的指针的定义和使用。需要说明的是,按照我们在第四篇讨论过的,指针的步进是参照其所指对象的大小的,因此,pa+将整个向后移 动一个数组的尺寸,而不是仅仅向后移 动一个数组元素的尺寸。问题:指针数组有如下定义:struct UT_TEST_STRUCT *pTo2MAX_NUM;请分析这个定义的意义,并尝试说明这样的定义可能有哪些好处?答案与分析:前面我们谈了数组指针,现在又提到了指针数组,两者形式很相似,那么,如何区分两者的定义呢?分析如下:数组指针是:指向数组的指针,比如 int (*pA)5。指针数组是:指针构成的数组,比如int *pA5。至于上述指针数组的好处,大致有如下两个很普遍的原因:a)、各个指针内容可以按需要动态生成,避免了空间浪费。b)、各个指针呈数组形式排列,索引起来非常方便。在实际编程中,选择使用指针数组大多都是想要获得如上两个好处。 问题:指向指针的指针在做一个文本处理程序的时候,有这样一个问题:什么样的数据结构适合于按行存储文本?答案与分析:首先,我们来分析文本的特点,文本的主要特征是具有很强的动态性,一行文本的字符个数或多或少不确定,整个文本所拥有的文本行数也是不确定的。这样的特征决定了用固定的二维数组存放文本行必然限制多多,缺乏灵活性。这种场合,使用指向指针的指针有很大的优越性。现实中我们尝试用动态二维数组(本质就是指向指针的指针)来解决此问题:图示是一个指针数组。所谓动态性指横向(对应每行文本的字符个数)和纵向(对应整个文本的行数)两个方向都可以变化。就横向而言,因为指针的灵活性,它可以指向随意大小的字符数组,实现了横向动态性。就竖向而言,可以动态生成及扩展需要的指针数组的大小。下面的代码演示了这种动态数组的用途:/ 用于从文件中读取以 0结尾的字符串的函数extern char *getline(FILE *pFile);FILE *pFile;char *ppText = NULL; / 二维动态数组指针 char *pCurrText = NULL; / 指向当前输入字符串的指针ULONG ulCurrLines = 0;ULONG ulAllocedLines = 0; while (p = getline(pFile))if (ulCurrLines = ulAllocedLines)/ * 当前竖向空间已经不够了,通过realloc对其进行扩展。ulAllocedLines += 50; / 每次扩展50行。 ppText = realloc (ppText, ulAllocedLines * (char *);if (NULL = ppText)return; / 内存分配失败,返回 ppTextulCurrLines+ = p; / 横向“扩展”,指向不定长字符串 问题:指针数组与数组指针与指向指针的指针指针和数组分别有如下的特征:指针:动态分配,初始空间小数组:索引方便,初始空间大下面使用高维数组来说明指针数组、数组指针、指向指针的指针各自的适合场合。 多维静态数组:各维均确定,适用于整体空间需求不大的场合,此结构可方便索引,例a1040。 数组指针:低维确定,高维需要动态生成的场合,例ax40。 指针数组:高维确定,低维需要动态生成的场合,例a10y。 指向指针的指针:高、低维均需要动态生成的场合,例axy。问题:数组名相关问题假设有一个整数数组a,a和&a的区别是什么?答案与分析:a = &a = &a0,数组名a不占用存储空间。需要引用数组(非字符串)首地址的地方,我一般使用&a0,使用a容易和指针混淆,使用&a容易和非指针变量混淆。区别在于二者的类型。对数组a的直接引用将产生一个指向数组第一个元素的指针,而&a的结果则产生一个指向全部数组的指针。例如:int a2 = 1, 2;int *p = 0;p = a; /* p指向a0所在的地方 */x = *p; /* x = a0 = 1*/p = &a; /* 编译器会提示你错误,*/*显示整数指针与整数数组指针不一样 */问题:函数指针与指针函数请问:如下定义是什么意思:int *pF1();int (*pF2)();答案与分析:首先清楚它们的定义: 指针函数,返回一个指针的函数。 函数指针,指向一个函数的指针。可知: pF1是一个指针函数,它返回一个指向int型数据的指针。 pF2是一个函数指针,它指向一个参数为空的函数,这个函数返回一个整数。计算机二级C语言典型题解析例题1void f(int a, int i, int j) int t;if(ij) t=ai; ai=aj; aj=t;f(a,i+1,j-1);main() int i, aa5=1,2,3,4,5;f(aa,0,4);for(i=0; i5; i+) printf(%d,aai);printf(n);执行后输出结果是A)5,4,3,2,1, B)5,2,3,4,1, C)1,2,3,4,5, D)1,5,4,3,2,答案:A解析:f(aa,0,4)调用是地址双向传递.i=0,j=4,交换aa=0、aa4的值使aa5=5,4,3,2,1;接着递归调用f(a,i+1,j-1)即f(a,1,3),交换aa1、aa=3的值使aa5=5,4,3,2,1;接着递归调用f(a,i+1,j-1)即f(a,2,2),由于i=j=2,退出函数调用,依次输出aa5的数组元素为5,4,3,2,1,例题2struct STU char name10;int num;int Score;main() struct STU s5=YangSan, 20041, 703,LiSiGuo, 20042, 580,WangYin, 20043, 680,SunDan, 20044, 550,Penghua, 20045, 537, *p5, *t;int i,j;for(i=0; i5; i+) pi=&si;for(i=0; i4; i+)for(j=i+1; jScore pj-Score) t=pi; pi=pj; pj=t;printf(%d %dn, s1.Score, p1-Score);执行后输出结果是A)550 550 B)680 680 C)580 550 D)580 680答案:C解析:本题算法类似于冒泡排序,它是依次将p0、p1、p2、p3、p4分别指向s5中成员Score从低到高排列的数组单元,即537、550、580、680、703,而s5数组的值不变,因此,s1.Score=580,p1-Score=550.有以下程序(提示:程序中fseek(fp, -2L*sizeof(int), SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节)#include main() FILE *fp; int i, a4=1,2,3,4,b;fp=fopen(data.dat, wb);for(i=0;i1)层上至多有2i-1个结点。得到第8层的结点数最多是128。(4)下面描述中,不符合结构化程序设计风格的是_。A)使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B)自顶向下C)注重提高程序的执行效率D)限制使用goto语句(4)C知识点:结构化程序设计评 析:结构化程序设计方法的四条原则是:1自顶向下:2逐步求精;3模块化;4限制使用goto语句。“自顶向下”是说,程序设计时,应先考虑总体,后考虑细节,先考虑全局目标,后考虑局部目标;“逐步求精是说,对复杂问题,应设计一些子目标作过渡,逐步细节化;“模块化”是说,一个复杂问题肯定是由若干稍简单的问题构成,解决这个复杂问题的程序,也应对应若干稍简单的问题,分解成若干稍小的部分。(5)下面概念中,不属于面向对象方法的是_。A)对象、消息 B)继承、多态 C)类、封装 D)过程调用(5)D知识点:面向对象的程序设计方法、对象、方法、属性及继承与多态性评 析:面向对象方法是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,发展出对象、类、消息、继承等概念。(6)在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是_。A)可行性分析 B)需求分析 C)详细设计 D)程序编码(6)B知识点:结构化设计方法评 析:软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流程图和数据字典。(7)软件生命周期中所花费用最多的阶段是_。A)详细设计 B)软件编码 C)软件测试 D)软件维护(7)D知识点:软件工程基本概念,软件生命周期概念,软件工具与软件开发环境评 析:软件生命周期分为软件定义、软件开发及软件运行维护3个阶段。本题中详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最后一个阶段,也是持续时间最长,花费代价最大的一个阶段,软件工程学的一个目的就是提高软件的可维护性,降低维护的代价。(8)数据库系统的核心是_。A)数据模型 B)DBMS C)软件工具 D)数据库(8)B知识点:数据库的基本概念:数据库,数据库管理系统,数据库系统评 析:数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。DBMS建立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过DBMS。另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。(9)下列叙述中正确的是_。A)数据处理是将信息转化为数据的过程 B)数据库设计是指设计数据库管理系统C)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字D)关系中的每列称为元组,一个元组就是一个字段(9)C知识点:数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型评 析:数据处理是指将数据转换成信息的过程,故选项A叙述错误;设计数据库的目的实质上是设计出满足实际应用需求的实际关系模型,故选项B叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性。对应存储文件中的字段,故D选项叙述错误。(10)下列模式中,_是用户模式。A)内模式 B)外模式 C)概念模式 D)逻辑模式(10)B知识点:数据库的基本概念:数据库,数据库管理系统,数据库系统评 析:数据库管理系统的三级模式结构由外模式、模式和内模式组成。外模式,或称子模式,或称用户模式,是指数据库用户所看到的数据结构,是用户看到的数据视图。模式,或称逻辑模式,是数据库中对全体数据的逻辑结构和特性的描述,是所有用户所见到的数据视图的总和。外模式是模式的一部分。内模式,或称存储模式,或称物理模式,是指数据在数据库系统内的存储介质上的表示。即对数据的物理结构和存取方式的描述。(11)C语言规定,程序中各函数之间_。A)既允许直接递归调用也允许间接递归调用B)不允许直接递归调用也不允许间接递归调用C)允许直接递归调用不允许间接递归调用D)不允许直接递归调用允许间接递归调用(11)A知识点:函数的递归调用评 析:c语言规定,程序中各函数之间既允许直接递归调用也允许间接递归调用。(12)C语言中下列叙述正确的是_。A)不能使用do-while语句构成的循环B)do-while语句构成的循环,必须用break语句才能退出C)do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D)do-while语句构成的循环,当while语句中的表达式值为零时结束循环(12)D知识点:do-while语句评 析:选项A是错误的,c语言支持do-while语句;选项B是错误的,do-while构成的循环,当while语句中的表达式值为零时结束循环,而不是非零;选项C也是错误的。(13)以下选项中属于C语言的数据类型是_。A)复数型 B)逻辑型 C)双精度型 D)集合型(13)C知识点:c语言的数据类型评 析:c语言的数据类型分为基本类型、构造类型、指针类型、空类型四大类。其中,基本类型分为整型、字符型、实型三类。实型又称浮点型,包括单精度型和双精度型两种类型。(14)在C语言中,不正确的int类型的常数是_。A)32768 B)0 C)037 D)0xAF(14)A知识点:int类型的范围评 析: c语言中int类型的常数的范围是:-3276832767。c整常数可用三种形式表示:十进制整数,八进制整数,十六进制整数。选项A超出范围,不正确。(15)下列描述中不正确的是_。A)字符型数组中可以存放字符串B)可以对字符型数组进行整体输入、输出C)可以对整型数组进行整体输入、输出D)不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值(15)C知识点:对数组的理解评 析: c语言规定只能逐个引用数组元素而不能一次引用整个数组。字符数组的输入、输出可以将整个字符串一次输入或输出。所以,选项C的说法是不正确的。(16)以下程序的输出结果是_。main() int i,x33=9,8,7,6,5,4,3,2,1,*p。&x11;for(i=0;i=0l lb=0)&(a0I lb=0&b-0)&(a0&b0) (a+b0(19)D知识点:对逻辑表达式的判断评 析:逻辑表达式是指用逻辑运算符将关系表达式或逻辑量连接起来。选项A中,表达式表示的是a,b为异号;选项B中,表达式表示的是0,因为没有满足条件的值;选项C中,表达式表示的是0,因为没有满足条件的值;选项D表示的是a和b为同号。(20)若己定义:int a9,*p=a;并在以后的语句中未改变p的值,不能表示al地址的表达式是_。A)p+l B)a+l C)a+ D)+p(20)C知识点:数组地址的表示评 析:数组名是指针常量,是个固定的指针,不能对数组名赋予一个新的地址值,也不能使这个指针常量“移动”,指向数组的其他元素。(21)以下程序的输出结果是_。main() int a=-l,b=l,k;if(+a0)!(b-=0)printf(d dn,a,b);elseprintf(d dn”,b,a);A)-l l B)0 1C)1 0 D)0 0(21)C知识点:if条件的判断评析:逻辑运算符的优先次序如下:!(非)&(与)|(或),但本题需特别注意的是短路的概念:对于&运算符,其两边表达式的值只要有一边为假,则整个与运算表达式的值即为假,系统在执行时,先运算&左边的表达式,若为假,则系统不会再判断&运算符右边的表达式了,直接运用短路原理得整个与运算表达式的值为0。由于+a是先运算后使用,b-是先使用后运算。所以本题在执行+a后,a值为0,不满足条件,所以a为l,根据短路原理,b仍为0,接下去执行else语句,输出l 0。(22)以下选项中,能定义s为合法的结构体变量的是_。A) typedef struct abc double a;char b10;s;B ) struct double a;char b10;s;C) struct ABC double a;char b10;ABC s;D ) typedef ABC double a;char b10;ABC s:(22)B知识点:结构体变量的定义评析:定义一个结构体类型的变量,可采用三种方法:先定义结构体类型,再定义变量名;在定义类型的同时定义变量;直接定义结构类型变量,即不出现结构体名。选项B符合第三种定义方法。(23)请读程序:#include#includemain()char*sl=AbCdEf,*s2=aB;s1+;s2+;printf(dn,strcmp(s1,s2);上面程序的输出结果是_。A)正数 B)负数 C)零 D)不确定的值(23)A知识点:字符串比较函数strcmp()的应用评析:strcmp(X1,X2)是串比较函数,当X1X2时返回值为正数,当X1s2,返回值为正数。(24)请读程序:#includefunc(int a,int b)int c:c=a+b:return C:main()int x=6,y=7,z=8,r;r=func(x-,y+,x+y),z-);printf(dn,r);上面程序的输出结果是_。A)11 B)20 C)2l D)31(24)C知识点:自增、自减运算评析:函数func()的作用是返回两个形参的和,第一个形参是x、y分别自减和自增后的和,其中(x-,y+,x+y)是一个逗号表达式,它的值应该等于x+y,所以整个表达式(x-,y+,x+y)的值为13,而第二个形参的值为8(根据语法规则,应当先使用,后自增),所以fune()的返回值为13+8=21。(25)请读程序:#includemain()int a,b;for(a=1,b=l;a=20)break;if(b3=1)b+=3;continue;b_=5:printf(dn,a);上面程序的输出结果是_。A)7 B)8 C)9 D)10(25)B知识点:break语句和continue语句评析:break语句的作用是用于跳出循环体,继续执行循环体下面的语句;而continue语句的作用是用于跳出本次循环,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。“”是求余运算符,执行第一次循环时,条件(b3=1)为真,b=4,继续下一次循环,如此反复,当b=22时,条件(b=20)为假,跳出循环,此时共循环8次,即a=8。(26)请读程序片段(字符串内没有空格字符):printf(dn,strlen(ATSn0l2l);上面程序片段的输出结果是_。A)l1 B)10 C)9 D)8(26)C知识点:字符串的长度评析:这个语句的目的是输出“ATSn0121”这个串的长度,在串中“”代表一个“”,为了和printf()函数中的转义字符区分开来,在语法上使用了两个反斜杠代替了一个反斜杠,所以它仅仅为一个字符,而”l”代表数字l,也占一个字符,“n”是回车换行符,也占一个字符,加上A、T、s、0、1、2,一共是9个字符。(27)请选出可用作C语言用户标识符的一组标识符_。A)Void B)a3_b3 C)For D)2adefine _123 _abc DOWORD IF case sizeof(27)B知识点:C语言的标识符评析:c语言规定标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。选项A中的void和define都和c语言的关键字重名,不合法;选项C中的case和c语言的关键字重名,不合法;选项D中的2a是数字打头而且sizeof和c语言的关键字重名,不合法。(28)请选出以下程序的输出结果_。#includesub(int*s,int y) static int t=3;y=st;t-;main() int a=1,2,3,4,i,x=0;for(i=0;i4;i+)sub(a,x);printf(d,x);printf(n);A)1234 B)432l C)0000 D)4444(28)C知识点:函数的形参和实参的关系评析:x作为函数sub()的实参时,函数对x值的改变没有返回主函数,并不能使得x的值变化,所以在打印时,x的值是始终不变的,即为O。(29)若有以下说明和语句,请选出哪个是对c数组元素的正确引用_。int c45,(*cp)5;cp=c;A)cp+l B)*(cp+3) C)*(cp+1)+3 D)*(*cp+2)(29)D知识点:数组元素的引用评析:cp=c这个语句是将数组第0行的地址赋给了cp。cp+l使指针指向二维数组c的第一行;*(cp+3)是数组c的第三行的第0列的地址值;+(cp+1)+3是数组c的第一行第三列的地址值。(30)设有以下语句char a=3,b=6,c;c=ab2:则c的二进制值是_。A)00011011 B)00010100 C)000ll 100 D)00011000(30)A知识点:位运算评析:“”是c语言中规定的左移运算符,例如,a=a2,这个语句即是将a的二进制数左移两位,左移一位相当于该数乘以2,左移两位相当于该数乘以2的2次方;,是异或运算符,所以,c的二进制值应为0001101l。(31)设有static char str=Beijing;则执行printf(dn,strlen(strcpy(str, China);后的输出结果为_。A)5 B)7 C)12 D)14(31)A知识点:字符串的长度评析:在执行printf()函数前,数组str的长度是7,但是当使用strcpy()函数将新的值赋给str后,strlen()函数返回的应当是现在的str字符串的字符个数,即是5。(32)以下程序的输出结果是_。#includemain() int i;for(i=1;i5;i+)if(i2)printf(*);else continue;printf(#);print$n);A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$(32)C知识点:if语句的判断评析:当i不可以整除2时打印”*”,然后打印“#”,不能整除2则执行continue,跳过printf(“#”);语句,结束本次循环,返回到循环的起始点。当循环结束后,打印“$”。(33)有以下程序#includemain() int c;while(c=getchar()!=n)switch(C-2)case O:case 1:putchar(c+4);case 2:putchar(c+4);break;case 3:putchar(c+3);default:putchar(c十2);break;从第一列开始输入以下数据,代表一个回车符。2473程序的输出结果是_。A)668977 B)668966 C)66778777 D)6688766(33)A知识点:switch()语句评析:getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据表达式c-2的值进行分支选择:putchar()是在屏幕上打印一个字符,最后的结果应当为668977。(34)以下程序的输出结果是_。main() int w=5;fun(w);printf(n);fun(int k) if(kO) fun(k_1);printf(d,k);A)5 4 3 2 l B)0 1 2 3 4 5C)1 2 3 4 5 D)5 4 3 2 1 0(34)B知识点:函数的递归调用评析:函数的递归调用就是在调用一个函数的过程中又出现直接或间接地调用该函数本身。fun函数共被调用6次,即fun(5)、fun(4)、fun(3)、fun(2)、fun(1)、fun(O)。其中fun(5)是main函数调用的,其余是在fun函数中调用的。(35)若fp是指向某文件的指针,且已读到此文件的末尾,则函数feof(f1)的返回值是_ 。A)EOF B)0 C)非零值 D)NULL(35)C知识点:文件结束符的返回值评析:函数feof是用来判断文件是否已读到末尾,如果己读到末尾则返回非零值,否则返回O。(36)算法的时间复杂度是指_。A)执行算法程序所需要的时间B)算法程序的长度C)算法执行过程中所需要的基本运算次数D)算法程序中的指令条数(36)C知识点:算法复杂度的概念和意义(时问复杂度与空间复杂度)评析:所谓算法的时间复杂度,是指执行算法所需要的计算工作量。为了能够比较客观地反映出一个算法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。(37)下列叙述中正确的是_。A)线性表是线性结构 B)栈与队列是非线性结构C)线性链表是非线性结构 D)二叉树是线性结构(37)A 知识点:线性结构与非线性结构的概念评析:根据数据结构中各数据元素之间相关联关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件: (1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。(38)下面关于完全二叉树的叙述中,错误的是_。A)除了最后一层外,每一层上的结点数均达到最大值B)可能缺少若干个左右叶子结点C)完全二叉树一般不是满二叉树D)具有结点的完全二叉树的深度为log2n+l(38)B 知识点:二叉树的定义及其存储结构评析:这里考察完全二又树与满二叉树的定义及二叉树的性质。满二叉树指除最后一层外每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干子结点(叶子结点)的二叉树。因此选项A是正确的,而选项B是错误的。由定义可知,满二叉树肯定是完全二又树,而完全二又树一般不是满二叉树,因此选项c是正确的叙述。选项D即二又树性质(5),也是正确的。(39)结构化程序设计主要强调的是_。A)程序的规模 B)程序的易读性C)程序的执

温馨提示

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

评论

0/150

提交评论