还剩35页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
计算机二级选择题答案考点答案数据构造与算法1
(1)B)【解析】算法的时间复杂度是指算法在计算机内执行时所需时间的度量;与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量因此,选项B)的说法是对的的
(2)D)【解析】时间复杂度是指一种算法执行时间的相对度量;空间复杂度是指算法在运行过程中临时占用所需存储空间大小的度量人们都但愿选择一种既省存储空间、又省执行时间的算法然而,有时为了加紧算法的运行速度,不得不增长空间开销;有时为了能有效地存储算法和数据,又不得不牺牲运行时间时间和空间的效率往往是一对矛盾体,很难做到两全不过,这不合用于所有的状况,也就是说时间复杂度和空间复杂度之间虽然常常矛盾,不过两者不存在必然的联络因此,选项A)、B)、C)的说法都是错误的故本题的对的答案是D)
(3)C)【解析】数据处理的最小单位是数据项;由若干数据项构成数据元素;数据是指可以被计算机识别、存储和加工处理的信息载体;数据构造是指数据之间的互相关系和数据运算
(4)D)【解析】一般来说,一种数据的逻辑构造根据需要可以表到达多种存储构造,常用的存储构造有次序、链接、索引等而采用不一样的存储构造,其数据处理的效率是不一样的故本题答案为D)
(5)C)【解析】数据构造概念一般包括数据的逻辑构造、存储构造及数据上的运算集合等数据的逻辑构造只抽象地反应数据元素之间的逻辑关系,而不管它在计算机中的存储形式
(6)A)【解析】数据构造作为计算机的一门学科,重要研究和讨论如下三个方面的问题
①数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑构造;
②在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储构造;
③对多种数据构造进行的运算
(7)A)【解析】根据数据构造中各数据元素之间前后件关系的复杂程度,一般将数据构造分为两大类型线性构造与非线性构造假如一种非空的数据构造满足下列两个条件
①有且只有一种根结点;
②每一种结点最多有一种前件,也最多有一种后件则称该数据构造为线性构造,又称线性表因此线性表、栈与队列、线性链表都是线性构造,而二叉树是非线性构造
(8)D)【解析】线性表可认为空表;第一种元素没有直接前件,最终一种元素没有直接后件;线性表的定义中,元素的排列并没有规定大小次序
(9)A)【解析】假如一种非空的数据构造满足下列两个条件第一,有且只有一种根结点;第二,每一种结点最多有一种前件,也最多有一种后件,则称该数据构造为线性构造线性构造又称线性表
(10)B)【解析】次序存储构造中,数据元素寄存在一组地址持续的存储单元中,每个数据元素地址可通过公式L0C()=1;(a)+(正1)1,计算得到,从而实现了随机存取对于链式存储构造,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种次序存取的存储构造(ID D)【解析】栈是限定在一端进行插入与删除的线性表栈是按照“先进后出”的或“后进先出”的原则组织数据的,因此,栈也被称为“先进后出”表或“后进先出”表
(12)B)【解析】本题考察的是栈栈是一种特殊的线性表,线性表可以次序存储,也可以链式存储,而栈是一种线性表,也可以采用链式存储构造故本题答案为B)
(13)B)【解析】本题重要考察对于栈的理解栈是限定在一端进行插入与删除的线性表在栈中,容许插入与删除的一端称为栈顶,而不容许插入与删除的另一端称为栈底栈顶元素总是最终被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最终才能被删除的元素,即栈是按照“先进后出”或“后进先出”的原则组织数据的
(14)A)【解析】和线性表类似,栈也有两种存储措施,一是次序栈,二是链式栈栈的次序存储构达十进制整数以正号(+)或负号(-)开头,由首位非的一串十进制数字构成,正负号也可省略,表达正整数;八进制整数以数字0开头,背面接若干个八进制数字(0~7);十六进制整数以数字0和字母X(大、小写均可)开头,背面接若干个十六进制数字(数字9和字母A~F,大、小写均可)故本题是以无符号整数形式输出一种十六进制整数FFFF,将其转换为十进制就是65535,故本题应当选择B)
(7)C)【解析】本题考核的知识点是输出函数printf()的应用本题中,printf(〃%2d,%2d\n〃,x,y)表达输出形式是十进制整数,域宽是2,而在C语言中规定当域宽不不小于实际宽度时域宽不起作用,按实际宽度输出,因此最终的输出值为102和10,因此选项C)符合题意
(8)B)【解析】本题考核的知识点是printf()函数的简朴应用程序中的printf()函数的输出格式部分只阐明了一种刎,而输出组员列表却有@和田两个组员,在这里将只输出第一种组员a值为666,因此,4个选项中选项B)符合题意
(9)C)【解析】本题考察的知识点是格式化输出的应用printf函数的调用形式printf(格式控制,输出项1,输出项2,…),该题的输出项为一种逗号体现式,该体现式的值为b的值,因此输出成果为888,故本题选C)
(10)C)【解析】本题考察的知识点是原则输入函数scanfOscanf()函数规定,除了第1个参数为格式化字符串以外,其他参数均为对应变量的地址值本题中,只有p是地址值,故应当选择C)
(11)B)【解析】考察格式输入函数scanf的使用scanf函数的一般格式是scanf(格式控制,地址表列),该格式中,地址表列中应是变量地址,而不是变量名
(12)A)【解析】本题的考察点是格式输入函数格式输入函数的一般形式scanf(格式控制,地址表列)需要注意的是假如在“格式控制”字符串中除了格式阐明以外尚有其他字符,则在输入数据时应输入与这些字符相似的字符因此输入的两个数字之间的逗号是不可少的故本题答案为A)
(13)B)【解析】本题考察的是输入函数scanf()基本使用方法使用该语句时,规定除格式控制符以外的字符都要原样输入,”为非格式符,要原样输入选项B)中没有输入非格式符“,”,因此是不对的的
(14)B)【解析】本题考察了格式输入函数scanf()的运用scanf()函数的一般形式为scanf(格式控制,地址表列)其中,“格式控制”是用双引号括起来的字符串,也称“转换控制字符串”,它包括两种信息
①格式阐明,由“%”和格式字符构成;
②一般字符,即需要原样输入的字符“地址表列”是需要接受输入数据的一系列变量的地址本题中的“格式控制”是“胆d96f”,其中%2d的意思是要输入一种整数,但该整数最宽只占2个字符,而%f是要输入一种浮点数而题目规定输入的是
876543.0,因此scanf()函数将87赋给a,6赋给b
(15)B)【解析】本题考察通过scanf函数输入数据时的格式控制问题变量j的格式控制为“%2d”,即只接受输入数据的前两位,从第三位开始直到空格之间的输入都会被保留到变量y中,由于y为浮点型数据,因此输出成果为选项B)
(16)D)【解析】若在scanf的格式化控制串中插入了其他字符,则在输入时规定按一一对应的位置原样输入这些字符格式化输入函数必须严格按照双引号里面的格式进行输入在格式化输出函数中,格式控制串中除了合法的格式阐明外,可以包括任意的合法字符
(17)D)【解析】选项D)为两条语句考点答案选择构造7
(1)D)【解析】由于x的值为不小于1的奇数,因此x除以2的余数等于1,因此,选项A)、C)中体现式的成果为真,不为0;对于选项B)来说,x除以2的商不会等于0;选项D)中体现式的成果为假,即等于0
(2)D)【解析】本题考察的是判断奇偶数选项A)、B)和C)中都是当k是奇数时体现式的值为1,否则为0而选项D)中由于逻辑非!运算符的优先级最高,因此当k为0的时候!k的值为1,整个体现式的值也就是1,而当k为非0的时候!k的值为0,整个体现式的值为0因此本题应当选择D)
(3)B)【解析】本题重要考察的是C语言中的整除、求余以及逻辑值的概念在C语言中,/号的两边假如都是整数的话,返回的成果也是整数,假如除不净则舍去小数部分%是求余运算,它的运算对象只能是整型,运算成果是两数相除后所得的余数,当运算量为负数时,成果的符号与被除数相似因此,执行语句“a=d/10%9;”后,a=25/10%9=2%9=2o C语言中没有专门的逻辑值,而是用整型值来替代当整型值作逻辑值使用时,非零即表达“真”,零表达假而逻辑值当整型值使用时,“真”等于1,“假”等于0o因此,执行语句“b=a(-1)后输出成果为2,1
(4)C)【解析】本题考察的知识点是逻辑体现式C语言编译系统在给出逻辑运算成果时,以数值1代表“真”,以0代表“假”,但在判断一种量与否为“真”时,以0代表“假”,以非0代表“真”即将一种非零的数值认作为“真”要让本题中的条件体现式(x-y)的成果为真,也就是要使(x-y)的值非零,即不小于0或者不不小于0,故等价的体现式应当是选项C)
(5)D)【解析】本题考察的是逻辑运算符C语言中,逻辑运算符的两个运算分量可以是任意合法的体现式故本题应当选择D)
(6)B)【解析】本题重要考察的是逻辑体现式选项A)中的体现式的意思是kk不小于等于A且不不小于等于‘Z,因此只有当kk是一种大写字母的时候,该体现式才能被满足,因此选项A)可以判断出kk中的值为大写字母我们懂得(kk+32)=a等价于kk为土-32,又由于相似的大小写字母的ASCII值,小写字母的要比大写字母大32因此a-32等于A故选项C)和选项A)是等价的isalpha()函数的功能是判断一种参数与否为字母又由于小写字母的ASCH值范围是97122,大写字母的ASCH值范围是
65、90,当〜判断是字母且值不不小于91时一定是大写字母,因此选项D)可以判断出kk中的值为大写字母
(7)C)【解析】本题考察的是逻辑体现式在C语言中,整型值可以转换为逻辑值,规则是当整型值为0时,它表达逻辑假;当整型值不为0时,它表达逻辑真因此题目中的while(E)循环是当E等于0时,循环结束,E不等于0时,继续循环选项C)中,当E等于0时,体现式“E=0”为真继续循环,而E不等于0时,体现式为假则循环结束,这与题目中的条件不等价,故应当选择C)
(8)B)【解析】本题重要考察的是逻辑体现式选项A)中体现式的意思是当c等于2或4或6时,体现式的值为真,否则为假因此不满足题意选项C)中体现式的意思是当c不小于等于2且不不小于等于6,并且c不是奇数时,体现式的值为真,否则为假这样,满足该体现式的c,只能取值为
2、
4、6了,因此也不满足题意选项D)中背面一种子体现式(c%2!二1)和选项C)中的!(c%2)是等价的都是判断c不是奇数因此也不满足题意故本题对的答案为B)
(9)B)【解析】本题中a的值为6,b的值为8,最终s的值为8,s*=s等价于s=s*s
(10)A)【解析】本题考察的是if语句本题是一道陷阱题,语句if(ab)a=b,b=c;c=a;看上去仿佛a二b,b=c;c=a;都是if的子句,其实只有第1个分号及其之前的语句a=b,b=c;是if的子句,c=a;是紧接着的语句,跟if的条件无关,一直会被运行的题目中,a=10,b=50,因此ab条件为假,那么a=b,b=c;不会被执行,而c二a;会被执行因此最终输出成果是a=10b=50c=10,应当选择A)
(11)B)【解析】本题是一种陷阱题,以书写格式来考察考生对if语句的理解if语句只对紧跟其后的一条语句或语句块产生作用因此,题目中两条if语句只有a二b;和c二b;是if的子句第1条if语句中ab为假,因此跳过语句a=b;,执行c=a;后,a=
3、b=
5、c=3第2条if语句的判断条件c!二a为假,因此o跳过语句c=b;故最终输出的成果是3,5,3,应当选择B)
(12)0【解析】本题考察简朴的if…else语句先执行条件if(水b),显然不成立,再执行else语句
(13)C)【解析】考察if语句的使用整个语句都是以a〈b为假设的,在水b的状况下,假如c二d,则尸0;否则尸1因此答案为选项C)
(14)D)【解析】本题考核的知识点是if语句的使用方法选项A)、选项B)和选项C)都是在a的值为0的时候输出y,a不为0的时候输出X,而选项D)是在a为的时候输出x,a不为0的时候输出y因此,4个选项中选项D)符合题意
(15)C)【解析】本题考察的知识点是if与else的配对原则else语句总是与前面近来的不带else的if相结合,故本题选C)
(16)D)【解析】if…else语句的执行过程如下,首先计算if背面一对圆括号内体现式的值,若体现式的值为非0,执行if子句,然后跳过else子句,去执行if语句后的下一条语句;若体现式的值为0,跳过if子句,去执行else子句,接着去执行if语句后的下一条语句C语言的语法规定,else子句总是与前面近来的不带else的if匹配,与书写格式无关,本题目的后一种if…else相称于嵌套在第一种if子句里,相称于xyy0时,z=0;当x〈yy=0时,z=z+lo
(17)D)【解析】本题考察的是if…else语句C语言规定else总是与近来的if搭配,因此程序中else与第二个if搭配程序首先判断(xy),为假,因此跳过背面的整个if…else语句执行到输出语句时,x的值仍为1,x++返回x增1之前的成果1,故应当选择D)
(18)C)【解析】本题考察了if语句的嵌套在嵌套的if语句中,else总是与它上面近来的且不带else的if配对因此本题的对的答案为选项C)
(19)C)【解析】该题目测验考生对if…else if构造的理解,比较简朴x的值满足x
10.0的关系,因此程序将执行尸
1.0/x;语句,y的值应当等于
0.5最终,用printf函数输出时,%f的输出格式为小数点后保留6位
(20)A)【解析】本题考察的是条件体现式的嵌套由于条件运算符的结合方向为“自右至左”,因此体现式a〈ba:c〈dc:d相称于a〈ba:(c〈dc:d)由于a=l,b=4,因此a〈b的成果为真,因此整个体现式的值为a的值1因此,4个选项中选项A)符合题意
(21)B)【解析】本题考察的知识点是条件体现式条件运算符?:是C语言中唯一的三目运算符,它的规则是先计算左边运算分量,假如为“真”(非0),则返回中间运算分量的值,否则返回右边运算分量的值本题中由于ab为“真”,因此第1个条件体现式的值为b的值2,因此k=2然后又由于k〉c为“假”,因此第2个体现式的值为k的值2因此本题应当选择B)
(22)A)【解析】本题考核的知识点是三目运算符“?”的运用三目运算体现式的规则为假如“?”前面的体现式的值为真,则取“”前的体现式的值,否则,取“”背面体现式的值分析题目中给出的体现式可知,假如a式可知同步成立,k=l,否则k=0因此,4个选项中选项A)符合题意
(23)C)【解析】C语言中,switch语句专用于实现多分支构造程序,其特点是各分支清晰且直观switch背面括号中可以是任何体现式,取其整数部分与各常量体现式进行比较常量体现式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量体现式各不相似
(24)A)【解析】考察switch语句的使用switch语句的执行过程为:进入switch构造后,对条件体现式进行运算,然后从上至下去找与条件体现式值相匹配的case,以此作为入口,执行switch构造中背面的各语句,直到碰到break语句,则跳出switch语句,假如各case都不匹配时,则执行default背面的语句
(25)D)【解析】本题重要考察的是switch语句的嵌套首先看外层switch,由于x初始时为1,进入外层case1分支,这里又是一种switch语句由于y初始时为0,进入内层case0分支,执行a++;break;,由于碰到break,因此此时应当跳出内层switch语句,跳出来后由于没有碰到break;语句,因此应执行外层case2分支,a++;b++;break;,此时又碰到break;因此跳出外层switch语句由此可见,整个switch语句中,a被增1两次,b增1一次,因此执行最终一条printf语句输出a=2,句1
(26)A)【解析】考察switch语句的使用switch语句的条件是“a%3=15%3=0”,因此执行case0背面的语句,n)++;m=l,然后就执行break,跳出switch语句,因此最终输出m的值为1
(27)D)【解析】本题重要考察switch语句的概念break语句除了能用于switch语句外,还可以用于循环语句中,因此选项A)不对的在switch语句中,可以使用default来执行所有case均失配时的分支,也可以不使用default,此时若所有case均失配则跳出switch,因此选项B)不对的在switch语句中,每个case的作用就是标出一种执行的起点,当符合某个case时,程序就从该case所标出的起点处开始执行,若没有break语句中断执行的话,程序会一直执行到switch的最终一条语句,而不是碰到下一种break才停止执行,因此C)不对的考点答案循环构造8(DB)【解析】是将t赋值为1,因此循环控制体现式的值为1判断t与否等于1时,应用仅二1,注意“二”与“二二”的使用方法
(2)B)【解析】该题目应当根据循环体第一次和最终一次执行时的输出成果来决定哪一项是对的的第一次进入循环时,n的值是9,循环体内,先通过n一运算,n的值变为8,因此第一次的输出值是8,由此可以排除选项A)和D)由循环条件n6可以懂得,最终一次循环开始时,n的值应当为7,因此最终一次执行循环时,输出为6,由此可以排除选项C)
(3)B)【解析】本题中,、”表达逻辑非运算符,”!二“表达不等于运算符,逻辑非运算符比不等于运算符的优先级高
(4)D)【解析】本题考察的是switch语句switch语句中的case或default只是一种入口标号,它并不形成一种子句的概念当满足其中某个标号的条件而进入switch语句中时,假如没碰到break语句,将一直执行到switch语句的结尾题目中使用了一种while循环使k从5递减到1,当k=5或4的时候从default标号进入switch,碰到break;语句立即跳出,没有变化n;当k=3时,执行了一次n+二k;;当k=2时,也执行了一次n+=k;;当k=l时,执行了两次n+=k;因此最终n的值为3+2+1+1=7
(5)C)【解析】本题中,首先将0赋给k,体现式变为0,跳出循环,没有执行循环体语句解答本题的关键是掌握while语句
(6)A)【解析】本题考察的是while循环和一运算符由于在while循环的循环条件中,一运算符是前缀形式,因此体现式一k的值是k自减之后的值程序开始时,将k的值初始化为5,然后进入while循环,由于一k的值为4(非零),因此执行循环体输出k-=3的值1,止匕时k的值也变为1第2次执行循环条件,--k的值为0,因此循环结束因此最终输出的成果是1,故应当选择A)
(7)D)【解析】本题考察switch语句的掌握必须掌握如下内容:首先应当明白switch语句的语法格式switch语句的语法格式为switch(体现式)(case常量体现式1:语句组1;case常量体现式2:语句组2;•••case常量体现式n:语句组n;default:语句组n+1;}止匕外,如下几点有关switch语句的重点:
①系统在执行时计算开关体现式的值;
②根据所得的值在各个case标号体现式中寻找匹配,直到发现与体现式匹配的标号(本例中匹配的是caseA:);
③找到匹配后执行背面对应的语句表,次序往下执行;
④假如无相匹配的标号,若存在default标号,则执行该语句标号背面的语句表;
⑤当不存在default标号时,不执行switch中的任何一种语句表一般而言,在多分支构造中总会出现“意外”的状况,这时均可归入default程序段,作统一处理default标号是可选性的,不必每次均有,视需要而定switch语句中还可以包括switch语句,形成switch的嵌套
(8)A)【解析】本题重要考察的知识点是switch语句由于变量的初始值分别为“k=5,n=0,因此程序第一次进入循环时,执行default语句,这时k=4,执行“case4:这个分支,成果是“n=2,k=3”,打印出2;程序然后进行第二次循环,这时“n=2,k=3,执行“case3:这个分支,成果是“n=3,k=2”,打印出3;程序进行第三次循环,这时“n=3,k=2,执行“case2:case4:这两个分支,成果是“n=5,k=l,打印出5,这时由于n=5不满足n5的循环条件,因此退出循环,程序运行结束,故输出成果为235
(9)D)【解析】本题是计算50之内的自然数相加之和,题中if语句括号中的条件体现式!(i%5)!(i%3)表明只有能同步被5和3整除的数才符合相加的条件,1~49之间满足这个条件的只有
15、30和45,由于s的初始值为1,因此s=l+15+30+45=91
(10)C)【解析】本题考察的知识点是for循环语句的应用本题首先要看出for循环条件的基本形式(;;)当循环执行4次时,x++使x变为4,此时不满足判断条件,结束循环故C)为对的答案
(11)C)【解析】本题考核的知识点是for循环语句和switch语句嵌套使用switch语句的执行过程是在switch背面的体现式的值和case背面常量体现式的值吻合时,就执行背面的语句假如在该语句的背面没有break语句,则继续执行下一种case,直到碰到break语句或switch多分支的结束;,在switch语句中,break语句的作用是使流程跳出switch构造,终止switch语句的执行本题中在for循环中嵌套了switch语句,每循环一次通过scanf()函数从键盘上输入一种k值,然后执行switch语句
(12)D)【解析】本题考察的知识点是switch语句的功能程序先执行case0,输出同步i变为1,接着执行default输出i为1,此时便可得出答案为D)
(13)C)【解析】本题考察的知识点是for循环、%运算符本题首先令y为9,然后通过一种for循环,当y还不小于0则循环,每次循环让y递减1循环体中是一条if语句,通过%运算符计算每当y能被3整除的时候,输出一y的值,即先将y减1,然后输出y的值故当y等于
9、
6、3时会输出,输出值分别为
8、
5、2因此应当选择C)
(14)A)【解析】本题考察用于多分支选择的switch语句,其一般形式为swi tch(体现式){case常量体现式1:语句1;case常量体现式2:语句2;•••case常量体现式n:语句n;default:语句n+1;)其语义是:计算体现式的值,并逐一与其后的常量体现式值进行比较,当体现式的值与某个常量体现式的值相等时,即执行其后的语句,然后不再进行判断,继续执行背面所有case后的语句;如体现式的值与所有case后的常量体现式均不相等时,则执行default后的语句
(15)C)【解析】本题考核的知识点是for循环和switch语句的混合应用程序中for循环了三次,第一次1=0,执行switch语句中case0分支,直到碰到default语句,退出switch,这里共执行了三个输出语句分别输出0,0,0,第二次循环i=l,switch语句中没有匹配的分支,故只执行default语句输出1,退出switch语句;第三次循环i=2,从switch语句中的case2开始执行,共执行了两个输出语句输出
2、2最终输出的成果为000122因此,4个选项中选项C)符合题意
(16)D)【解析】本题考核的知识点是for循环语句和复合赋值十工运算符的应用本题中,i赋初值为1,并对其每次进行加2操作,即i每次均为「10之间的奇数,s+=i+1,即s=s+i+1,相称于s等于本来的s每次加上110之间的偶数,直到上10不成立当i-l时,s-0+1+1-2;当「3时,s-2+3+12+4;当L5时,〜s=2+4+5+l=2+4+6;当i=7时,s=2+4+6+7+l=2+4+6+8;当i=9时,s=2+4+6+8+9+l=2+4+6+8+10;当寸,i10不成立,结束循环
(17)D)【解析】本题考察的是for循环的应用n!表达l*2*3*3*n因此,for循环应当遍历1(或者2)n的范围,而f的初始值应当为1,然后让f累乘每次循环的循环变量即可选项A)让f初始化为0不〜对的,由于0乘以任何数都为0,最终成果肯定是0;选项B)的循环变量是从1%-1,也不对;选项C)的for循环是一种死循环;选项D)的循环从n递减到2故满足规定,因此选D)
(18)C)【解析】本题考察了自增运算符自增运算符“++”分为前缀和后缀两种形式两种形式的作用效果是同样的,都是使运算分量的值加1,不过它们的体现式的值不一样样,前缀形式体现式的值为运算分量加1之后的值,而后缀形式体现式的值为运算分量加1之前的值题目中使用了一种for循环,循环变量i从1递增到40在循环体中有两条嵌套的if语句,首先判断i++%5=0,即判断i++的值(i加1之前的值)与否能被5整除(判断后i被加1),然后再判断++i的值(i加1之后的值)与否能被8整除(判断后i被加1),若两个条件都满足了,就输出i的值,只有i=30时,满足i++%5=0,此时i=31,++i%8=0成立,此时i=32
(19)B)【解析】本题考核的知识点是C语言在生活中的简朴应用选项B)中for循环了5次,而每次循环的时候,都将p的值重新赋值为1后,再乘以目前数字i,最终的成果为5,显然不是5!的值,同样的分析可知选项A)、选项C)和选项D)计算的都是5!因此,4个选项中选项B)符合题意
(20)C)【解析】当for循环执行到第30次时,i的值为30能被5整除,然后继续执行两次if语句,i通过两次自加1运算,值变为32,能被8整除,故此时第一次执行“printf(〃%d〃,i);”语句,即输出32
(21)C)【解析】本题考察变量的自加“++”和自减“一”问题当y的值为
9、6或3时,if语句的条件成立,执行输出语句,输出体现式一y的值,y的自减要先于输出语句执行,故输出成果为852
(22)B)【解析】本题考核的知识点是break语句的应用本题中for循环到i=3而执行break语句跳出循环,最终只输出12
(23)A)【解析】本题考察的是break语句do…while循环是“先执行,后判断”,因此无论条件怎样,它都至少会执行一遍程序首先初始化变量i为5,然后进入do…while循环体,首先判断(i%3=l),由于5%3二2,因此if条件不满足,跳过下面的if语句,执行i++,i变为6第1遍循环结束,判断(i!=0)为真,继续循环目前i%3=6%3=0,因此if语句还是不被执行,继续i++,i变为7,仍然满足(i!二0),继续循环第3遍循环i%3=7%3=l,满足条件(i963=l),继续判断条件说5=2成立,即输出*7,然后执行break语句跳出循环
(24)C)【解析】本题重要考察的知识点是break和continue语句break语句可以用于switch或循环体内,作用是跳出switch或循环体continue语句只能用于循环体内,作用是结束目前循环,进入下次循环故本题中只有选项C)是对的的
(25)B)【解析】本题考察的是for循环的嵌套外循环的循环变量i从0递增到1会循环2次,内循环的循环变量j从0递增到3会循环4次不过内循环中有一条if语句,每当j%2为真,即j为奇数时会跳过下面的x++;语句,因此4次内循环只有2次执行到x++;语句,再加上外循环中包括的2条x++;语句,因此每次外循环会使x自增4次,2次外循环下来x的值为8故应当选择B)考点答案字符型数据9
(26))【解析】本题考察的是字符常量的概念在C语言中,一种字符常量常常被当作一种整型常量来参与运算,它所代表的值为该字符的ASCH码值在ASCH码中,字符串结束符\0的ASCH码为0,字符0的ASCH码的值为48,字符1的ASCH码的值为49由此可见,选项A)的值为-47;选项B)的值为1;选项C)的值为49;选项D)的值为-48故应当选择B)
(27)A)【解析】C语言的字符常量是用单引号(即撇号)括起来的一种字符除此之外,在C语言中还容许用一种“V’开头的字符序列来表达字符常量其中,形式“\ddd”表达「3位八进制数所代表的字符;形式“\xhh”表达广2位十六进制数所代表的字符在本题中,\xl3表达回车符,是一种字符常量;’wr用八进制数所代表的字符,但形式不对的,由于八进制数所代表的字符中不会出现数字“8;’65不是一种字符,而是一种十进制数字;“\n”是用双引号括起来的一种字符,表达一种字符串,而不是字符常量
(28)B)【解析】本题重要考察的是字符常量字符常量是用单引号括起来的一种字符,而以双引号括起来的任意多种字符是字符串常量,因此本题中B)不属于字符常量注意,选项C)和D)虽然用单引号括起来的并不止一种字符,但它们都是以开头的,都是代表一种字符的转义字符
(29)A)【解析】C语言的字符型常量中,容许用一种特殊形式的字符常量,就是以一种“\”开头的字符其中,“\cldd”表达用ASCII码(八进制数)表达一种字符,本题中的chare二\72即表达占一种字符的变量c的ASCH码值
(30)A)【解析】C语言中,一种字符常量代表ASCII字符集中的一种字符,在程序中用单引号括起来作为字符常量,字符常量的的范围是0127由于字符常量用单引号括起来,因此选项B)、C)错误,选项D)〜超过了字符常量的表达范围
(31)A)【解析】本题考察的知识点是字符常量中的转义字符转义字符是以一种开头的字符序列,它只代表一种字符在选项A)中,后跟着三个数字,是表达一种ASCH码值等于这三位数字所构成的八进制数数值的字符,不过八进制数只能是由0~7这八个数字表达,而选项A)中出现了数字8,因此是不合法的选项B)是表达一种双引号的转义字符表达措施;选项C)表达的是一种反斜杆;选项D)表达一种ASCH值为十六进制值cc的字符故应当选择A)
(32)B)【解析】字符串常量是由双引号括起来的一串字符,其中的双引号不可缺乏由此可知,选项A)、C)、D)都是合法的字符串常量,而选项B)是一种字符常量
(33)A)【解析】本题考察的是C语言的常量
0.1e+6是实型常量的指数形式,代表
0.1X10的6次方,因此选项B)是合法的;〃\a〃是合法的字符串常量,\a是一种非打印的转义字符表达响铃,因此选项C)是合法的;\011是一种字符常量,\011是一种用3位八进制表达的转义字符,因此选项D)也是合法的在C语言中,字符常量是用单引号括起来的一种字符,选项A)中的‘cd包括了2个字符,因此是不对的的
(34)C)【解析】在C语言中,字符型数据在内存中的存储形式是ASCH码值当需要以整型格式输出字符时,输出的也是ASCH码值字符A,和的ASCII码值分别为65和68
(35)B)【解析】在本题中,选项B)实际是先计算关系体现式“‘A Cc”的值是0还是1,再比较该值与字符Z之间的大小关系,显然不能实现题目所规定的功能,而选项A)、C)、D)都可以
(36)A)【解析】本题重要考察的知识点是大写字母比它对应的小写字母ASCH码值小32,并且字符可以看作整数进行算术运算等操作
(37)A)【解析】本题考核的知识点是运算符++的使用方法程序中的第一种输出语句输出体现式++a的值,该++a是在使用a之前,先使a的值加1,即为a加1为字符b,此时a的值为b,因此第一种输出语句输出的值为b,第二个输出语句中输出的b的值,这时b的值为体现式a++的值,a++是在使用a之后(此时a的值为b,因此赋给b的值为b),使a的值加1,因此第二个输出的值也为b因此,4个选项中选项A)符合题意
(38)C)【解析】本题考察了字符型变量的运算及输出在C语言中,字符型变量可以看做整型变量来看待,与整型所不一样的是字符型变量在内存中只占1个字节,而整型是2个字节字符型变量中所存的数值是它所示字符的ASCH码值ASCII码中的某些有关字符是次序排列的,如’0的ASCH码值为48,1为49,以此类推,一直到‘9;A的ASCII码值为65,B为66,以此类推,一直到‘Z本题程序一开始就定义了两个字符型变量a和b,并初始化为字符‘1‘和2,由于题目已经告知’0,的ASCII值为48,因此变量a、b中所存
1、2的ASCH值为49和50
(39)D)【解析】本题考察的知识点是数据输入scanf函数是C语言提供的原则输入函数,作用是在终端设备(或系统隐含指定的输入设备)上输入数据scanf()函数的一般形式为scanf(格式控制,输入项表);本题中的格式控制字符串是“%d%c%d枇,其中刎表达要输入的是整数;%则表达输入的是字符,且各控制符之间无任何分隔字符,故规定输入的数据之间也不能分开(若规定持续输入的都是数据类型,则必须以空格等空白字符分隔每个数据,由于系统不懂得应当怎样去分隔这一系列数据)而选项A)、B)、C)在10和X之间均插入空格,因此不对的
(40)D)【解析】本题考察的是输入输出函数scanf()是格式化输入函数;getchar函数从键盘缓冲区读入下一种字符;putcharO输出一种字符;printfO函数是格式化输出函数在题目中,程序执行到scanf()函数时,会暂停等待顾客输入4个字符,按题意输入123〈回车》后,字符广3被分别赋值到cl~c3中,而c4会得到一种换行符‘\n然后执行第1个getcharO函数,由于前面的scanf()函数读完了缓冲区中的所有字符,因此此时程序会又暂停等待顾客输入,按题意输入45678〈回车)后,缓冲区第一种字符4赋值到c5,第二个字符5赋值到c6,因此本题应当选择D)
(41)D)【解析】在格式输入中,规定给出的是变量的地址,而D)答案中给出的s[l]是一种值的体现式
(42)C)【解析】本题的考察点是C语言字符数据的输入和输出程序定义了四个字符型变量a、b、c、d,字符型变量只能寄存一种字符getcharO函数的值就是从输入设备得到的字符,在输入时,空格、回车符将作为字符读入,请注意,getcharO只能接受一种字符因此变量a被赋予1,变量b被赋予2,变量c被赋予回车符,变量d被赋予3,因此选项C)对的故本题答案为C)
(43)B)【解析】本题考察了C语言的某些基本概念printfO函数可以只有控制项而没有输出项,例如,printfCHello!);,因此选项A)不对的C语言中不支持整数以十二进制输出,因此选项C)不对的getcharO函数从键盘读入一种字符,而不管该字符为数字还是字母,因此输入ASCH码的话,只能读到第1个数字字符,因此选项D)不对的故应当选择B),putchar是C语言中的库函数,使用时必须包括stdio.ho
(44)C)【解析】本题重要对switch语句进行了考察switch语句的执行过程为:进入switch构造后,对条件体现式进行运算,然后从上至下去找与条件体现式值相匹配的case,以此作为入口,执行switch构造中背面的各语句,直到碰到break语句,则跳出switch语句,假如各case都不匹配时,则执行default背面的语句本题中ch为字符H,因此case H条件中的语句将被执行,由于没有break语句,因此case,G后的语句也被执行,由于同样的缺乏break语句,因此default后的语句也被执行了
(45)D)【解析】本题考察的知识点是getchar函数、putchar函数和逻辑体现式的鉴定题目规定“当读入回车符时结束循环”,因此A)、B)选项不对,又由于回车符在字符输入时表达为\n,故本题选D)
(46)A)【解析】本题考察的是getcharO函数getchar()函数执行时将从键盘缓冲区中读取顾客的输入,而不管输入的与否为可打印字符因此当输入水回车〉后,键盘缓冲区被输入的实际上是两个字符a,和’\n,o故选项A)的说法是对的的
(47)A)【解析】本题重要考察了字符输入输出函数getchar和putchar的使用getchar函数用来从原则输入设备上读入一种字符,putchar(c)函数是将字符变量c中的字符输出到原则输出设备上,并且字符可以看作整数参与运算考点答案函数10
(1)C)【解析】不管main函数在整个过程中的位置怎样,一种C程序总是从main函数开始执行的
(2)A)【解析】一种C程序可以有一种或多种程序文献,也可以有一种或多种函数,因此一种C语言程序可以实现多种算法
(3)B)【解析】本题考察的知识点是大写字母的判断大写字母从A~Z的ASCH码是持续的,因此假如当一种字符不小于等于A且不不小于等于Z时,那这个字符就一定是一种大写字母,故选项C)对的C语言中的库函数isupperO的作用也正是判断一种字符与否为大写字母的,故选项A)对的在ASCH码中,小写字母的编码也是持续的,对应的小写字符比大写字符的ASCH码值大32,因此选项D)通过小写字符-32后,换算成了对应的大写字母Z和A,所得到成果和选项C)是一致的,故也是对的的选项B)中,C语言的逻辑体现式不能用于判断c中的字符与否为大写字母
(4)B)【解析】本题考察函数的某些概念main()函数是一种程序的主函数,它由系统调用,因此选项A)不对的一种C语言源程序文献可以只包括一种函数,每个源文献都可以被单独编译成.obj文献,最终链接成可执行文献因此每个函数都可以被单独编译,选项E)对的一种C程序必须从主函数main()开始运行,其他函数只能是直接或间接被main()函数调用才能得以运行,因此选项C)错误C语言不支持函数的嵌套定义,所有函数只能是全局函数,因此选项D错误故应当选择B
(5)B【解析】本题考察的是return语句顾客定义的函数有两种一种是没有返回值的函数,函数类型必须为void;另一种是有返回值的函数在没有返回值的函数中可以没有return语句,因此选项A和C是对的的;在没有返回值的函数中假如有return语句,该语句必须不带任何体现式,因此选项D也是对的的;顾客定义的函数可以有多种return语句,不过只能返回一种函数值,因此应当选择B
(6)A【解析】本题考察的知识点是函数返回类型有返回值函数的定义形式为〈返回类型〉函数名〉〈参数列表》〈语句序列》其中,〈返回类型》决定了最终函数返回值的类型故本题应当选择A
(7)C【解析】本题考察的知识点是逗号体现式由于整个逗号体现式的值为其最右边一种子体现式的值,因此程序中传递给fun函数的第1个实参a++,b++,a+b的值为a+b的值不过,在计算a+b之前,已经先让a和b各自加1了,因此第1个实参值为1+1+2+1=5第2个实参C++的值为变量c自增之前的值3因此,函数返回的值为5+3=8故应当选择C
(8)D【解析】本题考察了函数的定义题目中定义的函数fun有两个参数,一种是字符型变量ch,另一种是浮点型变量x,函数类型是void即无返回值选项A调用fun的第1个参数是字符串常量与字符变量不匹配,因此不对的选项B是有返回值函数的调用形式,不对的选项C的第1个参数是错误的字符常量,字符常量是用单引号括起来的一种字符是转义字符也许有多种字符,故C也不对的选项D使用两个整型常量调用fun这在C语言中是容许的由于整型到字符型可以自动转换,整型到浮点型也可以自动转换故应当选择D
(9)D【解析】本题考察的是函数的申明函数申明的一般形式为函数类型函数名参数类型1[,参数名1],参数类型2[,参数名2]……;其中,参数名也可以省略本题中的fun函数有两个参数,一种类型是double型一维数组,另一种是int型指针而在C语言中,一维数组用作函数参数和该数组元素的指针类型是等价的因此本题的对的答案是选项D
(10)A【解析】本题考核的知识点是函数申明的应用函数申明是对所用到的函数的特性进行必要的申明,编译系统以函数申明中给出的信息为根据,对调用体现式进行检测,以保证调用体现式与函数之间的参数对的传递函数申明的一般格式为类型标识符函数名类型标识符形参,…;这些信息就是函数定义中的第一行的内容这里形参的名字是不重要的,重要的是类型标识符,函数申明中也可以不写形参名只写该形参的申明类型,但不能只写形参名而不写该形参的类型本题中,选项A中doublemyadddouble a,b,没写出形参b的类型ID D【解析】本题考核的知识点是函数的返回值以及返回值作为函数的参数通过度析得出函数fun的功能是比较形参x和形参y的大小,返回较小的一种函数fun有两个参数本题中,首先定义了三个整型变量a、b和c,分别赋初值为
9、8和7然后执行函数fun fun a,b,fun b,c在该函数中分别将fun a,b和fun b,c函数的返回值作为该函数的两个实参在函数fun a,b中,由于ab,故返回较小值b即8,在函数funb,c中,由于b〈c,故返回较小值c即7,因此调用函数fun funa,b,fun b,c返回
8、7中较小者7
(12)B【解析】由于在main函数中,变量i=4,因此就调用fun4,则输出“m=4k=4然后变量k增1等于5,变量i增1等于5,因此main函数的p量ntf i=%d k=%d\n〃,i,k;”语句输出“i=5k=5
(13)A【解析】本题考察的是函数的综合应用程序开头定义了两个函数fl
0、f2,每个函数都只有一条语句,在门中是“假如xy则返回x否则返回y,即返回两个参数中较大的那一种,f2则恰好相反,返回较小的主函数的语句e=f2(fl(a,b),fl(c,d));是使用两次调用fl()函数的返回值作为f2()函数的参数,并将f2()的返回值赋给变量ea、b中较大的数是a为4,c、d中较大的数是c为5,4和5中较小的数是4,因此成果e=4同理可以推出f=3,那么g=a+b+c+d-e-f=4+3+5+2-4-3=7故本题应当选择A)
(14)C)【解析】本题考察的是函数的嵌套调用在funl()函数中只有一条return语句,返回的是体现式a*=a的值,该值等于a*a不过,由于funl()函数的返回值类型被定义为int,因此返回值被取整,即funl()函数实现的是求一种双精度数平方的整数部分在fun2()函数中,分别对两个参数调用funl()函数,然后将两个返回值相加、取整后返回因此,程序执行后,w中的值是+=
1.21+
4.0=
5.21(int代表截尾取整)又由于w被定义为double型,因此变量w中的值应当为一种双精度值
5.0
(15)D)【解析】本题考察的知识点是函数的形参和实参在定义函数时函数名背面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一种函数时,函数名背面括弧中的参数(可以是一种体现式)称为“实际参数”(简称实参)C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参在内存中,实参单元与形参单元是不一样的单元故本题应当选择D)
(16)C)【解析】本题考核的知识点是函数参数的传递由于调用函数时是进行值传递的,即将实参x、y、z传给形参v和w,后来形参和实参再无联络,故通过if语句调用f()函数后,x、y和z的值并没有变化故最终输出的x、y和z的值为
1、3和2
(17)A)【解析】本题考察的是函数的实参函数在被调用时,传入的实参以逗号分隔,实参可以是一种变量,也可以是一种体现式在本题中,funcO函数传入的参数是被逗号分隔的3个体现式,它们分别是f2(vl,v2)、(v3,是,v5)和(v6,max(v7,v8)),因此它的实参个数是3其中,是(vl,v2)是一种函数调用;(v3,v4,v5)是一种逗号体现式;(v6,max(v7,v8))也是一种逗号体现式,它里面甚至还包括了一种函数调用,但这并不影响它只代表1个实参这个事实故本题应当选择A)
(18)A)【解析】本题考察的是函数参数的传递在C语言中,参数传递默认为传值,即变化函数中的形参不会影响调用函数时传递给函数的实参因此,题目中的fun()函数,看起来仿佛作用是互换两个参数的值,其实它并不影响传递给它的任何实参,即调不调用它对程序一点也没有影响因此主函数一开始初始化了c
[10]为{1,2,3,4,5,6,7,8,9,0},通过第1个for循环后,什么变化都没有,再通过第2个for循环原样输出,故应当选择A)
(19)A)【解析】函数调用相称于f(2,3),程序运算应得成果为考点答案地址和指针11
(1)D)【解析】是求址运算符,是指变量阐明符选项A)、B)应改为scanf(〃%d〃,p);选项C)中指针变量p未指向一确定的内存单元,不能为其赋值,并且这样做很危险,提议不使用
(2)D)【解析】本题考察的知识点是指针的申明及赋值可以赋给一种指针的必须是一种和该指针同类型的指针因此,本题中选项A)赋给指针一种整数1024是错误的;选项B)赋给指针一种浮点型变量也是错误的又由于,指针申明的一般形式为〈数据类型〉球变量名>;因此,选项C)中申明的p不是一种指针,因此也是错误的故本题应当选择D)
(3)B)【解析】本题考察的是指针的运用语句intx=0,*p=x;定义了一种int型变量x并初始化为0,同步还定义了一种int型指针p指向变量X语句printf(级d\n〃,*p);是按十进制整数格式输出指针p所指向的内容,即x的值0故本题应当选择B)
(4)C)【解析】本题考察的知识点是函数、指针在C语言中,指针变量是不能直接赋给一种整数作为地址值的因此选项C)是错误的故应当选择C)
(5)C)【解析】本题考察复合的赋值体现式指针变量m和z分别指向整型变量y和i,因此这两个指针变量中存储的地址是不一样的变量x接受的是一种关系运算的成果,由于两个地址是不一样的,因此的判断成果为0故本题应选C)造是运用一组地址持续的存储单元一次存储自栈底到栈顶的数据元素,同步附设指针top指示栈顶元素的位置,由于栈的操作是线性表操作的特例,相对而言,链式栈的操作更易于实现
(15)B)【解析】由栈“后进先出”的特点可知A)中el不也许比e2先出,C)中el不也许比e2先出,D)中栈是先进后出的,因此不也许是任意次序B)中出栈过程如下图所示
(16)B)【解析】栈操作原则上“后进先出”,栈底至栈顶依次寄存元素A、B、C、D,则表明这4个元素中D是最终进栈,B、C处在中间,A最早进栈,因此出栈时一定是先出D,再出C,最终出A
(17)C)【解析】队列是一种操作受限的线性表它只容许在线性表的一端进行插入操作,另一端进行删除操作其中,容许插入的一端称为队尾(rear),容许删除的一端称为队首(front)队列具有先进先出的特点,它是按“先进先出”的原则组织数据的
(18)C)【解析】考察栈和队列概念的掌握栈和队列都是一种特殊的操作受限的线性表,只容许在端点处进行插入和删除两者的区别是栈只容许在表的一端进行插入或删除操作,是一种“后进先出”的线性表;而队列只容许在表的一端进行插入操作,在另一端进行删除操作,是一种“先进先出”的线性表
(19)A)【解析】本题考察的是线性单链表、双向链表与循环链表的构造及其基本运算在链式存储构造中,存储数据构造的存储空间可以不持续,各数据结点的存储次序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的故本题答案为A)
(20)A)【解析】链式存储构造克服了次序存储构造的缺陷它的结点空间可以动态申请和释放;它的数据元素的逻辑次序靠结点的指针来指示,不需要移动数据元素故链式存储构造下的线性表便于插入和删除操作本题答案为A)
(21)A)【解析】将题中所述的树用图形表达即可得到叶子结点的数目,此外还可用公式n0=ln2+2n3+3n4+-+1来表达度为2的结点此题中度为1的结点有4个;度为2的结点有2个;度为3的结点有1计算,其中n0表达叶了结点;皿中伽2个;度为4的结点有1个,计算过程如下1Flo-1n2+2n3+3n4+,*+n=lX2+2Xl+3Xl+l0n=80
(22)D)【解析】具有3个结点的二叉树有如下的几种形态23D【解析】本题考察了二叉树的基本概念在二叉树中,叶子节点的度是1;当该二叉树为空树时,根节点的度为0;为非空树时,根节点的度最大为2
(24)B)【解析】本题考察二叉树的遍历所谓二叉树的前序遍历(DLR)是指在访问根结点、遍历左子树与遍历右子树这3者中,首先访问根结点,然后遍历左子树,最终遍历右子树,并且,在遍历左右子树时,上述规则同样合用,即“根一左一右”,故该二叉树的前序遍历成果为“ATBZXCYP”
(25)D)【解析】前序遍历的第一种结点a为树的根结点;中序遍历中a的左边的结点为a的左子树,a右边的结点为a的右子树;再分别对a的左右子树进行上述两步处理,直到每个结点都找到对的的位置
(26)B)【解析】对有序线性表进行次序查找,首先用被查找的数据和线性表的第一种数据元素进行
(6)A)【解析】本题考察的是指针的运算题目中定义了两个变量nl和n2,又定义了两个指针p和q分别指向变量n2和nl要通过指针实现n2二nl,就是要将q所指内容赋给p所指内容,即*p二*q因此应当选择A)
(7)C)【解析】本题考核的知识点是指针变量的基本应用程序中定义了两个变量a和b,并分别赋初值为7和8,定义了三个指针变量p、q、r,并让指针p指向变量a,让q指向变量b,然后通过一种中间指针变量r,使指针变量p和q互换,互换后p指向q所指的内容即b,q指向开始p所指向的内容即a,因此最终输出的*p、*q的值为
8、
7、a、b的值没有变化仍为
7、8因此,4个选项中选项C)符合题意
(8)D)【解析】本题考察的是指针的运算和scanf()函数由于a表达变量a的地址值,因此应当直接赋给指针变量P而不是它所指向的内容,故选项A)和B)可以排除而scanf()函数除了第1个参数为输入项列表外,其他参数规定为对应变量的地址值,从前一条语句可以看出,指针P中寄存的为变量a的地址值,因此直接传给scanf()函数指针变量p就可以了故应当选择D)
(9)A)【解析】本题考核的知识点是scanf()函数和指针类型变量的简朴应用scanf()函数的功能是进行输入数据,它是按格式参数的规定从终端上把数据传送到地址参数所指定的内存空间中,C语言容许程序员间接地使用内存地址,这个地址是通过对变量名“求地址”运算得到的,求地址的运算符是,得到的地址是一种符号地址本题中定义了整型变量a和一种指向整型数据的指针变量pa,并定义pa是一种寄存a的地址的变量选项B)中应当将a改为a,故选项B)不对的;选项C)应当将pa改为pa,由于pa已经表达寄存a的地址,故选项C)不对的;选项D)中*pa=a,而不是表达a的地址,因此选项D)不对的
(10)B)【解析1本题考察的是指针的概念在C语言中,指针是一种特殊的变量,它寄存的值是一种内存地址因此一种指针变量波及三个值指针变量所指内容的值、指针变量中寄存的值、指针变量的地址值它们可以分别用体现式*P、P、P来表达题目中fun()函数的返回体现式是*p,因此选项C)、D)不为所选,而应当是形参P所指内容的值,由于P为int型指针,因此该值是一种整数故应当选择B)(U)B)【解析】考察格式输入语句scanf的使用本题通过定义语句和赋值后,p表达的是变量a的地址,*p表达的是变量a的值
(12)D)【解析】本题考察的是在链表中删除结点的操作在本题中指针p指向结点a,q指向结点b要把结点b删除,就应当首先让结点a的指针域指向结点c,即p-next=q-next,也可以写成(*p).next=(*q).next,然后释放结点b,即free(q)因此,4个选项中,只有D)满足题意
(13)A)【解析】本题考察的知识点是while循环的简朴应用aaa()函数中,首先定义了一种字符指针t指向形参s,然后通过一种while循环让指针t不停递增,直到t指向字符串结束标志处当t指向结束标志处时,由于后缀++运算符的原因,它还会被再递增1,因此接下来的t--;语句让它回到结束标志处最终返回t-s,由于s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值
(14)C)【解析】本题重要考察的是函数参数的传递在C语言中,函数参数的传递是“传值”的,即复制一份实参给形参,形参和实参是完全没有关系的两个变量因此在函数内部变化形参变量,并不会影响到函数外部的实参要实现“传址”调用,必须通过指针由于将实参指针内容复制给了形参指针后,两个指针变量虽然没有任何关系,但它们指向的却是同一种内存地址,当变化形参指针所指向的那个内存地址的内容时,实参指针所指向的内容也就同步被变化了,从而实现了“传址”调用不过,并不是说只要函数参数是指针,那肯定就是“传址”调用故选择C)考点答案数组12
(1)B)【解析】选项A)中,定义的初值个数不小于数组的长度;选项C)中,数组名后少了中括号;选项D)中,整型数组不能赋予字符串
(2)D)【解析】本题考察的是一维数组的定义C语言规定,在定义数组时数组名后的方括号中必须是常量体现式,不能包括变量因此,选项D)中用变量n来定义数组的大小是错误的故应当选择D)
(3)A)【解析】C语言中[]比*优先级高,因此line先与[5]结合,形成line[5]形式,这是数组形式,它有5个元素,然后再与line前面的结合,表达此数组是一种指针数组,每个数组元素都是一种基类型为char的指针变量
(4)C)【解析】本题考察的是数组的基本概念在C语言中,除字符数组外,一种数组不能通过数组名对数组进行整体引用,因此选项A)是对的数组名中寄存的是一种地址常量,它代表整个数组的首地址,因此选项B)是对的C语言程序在运行过程中,系统不自动检查数组元素的下标与否越界,因此选项C)是错误的C语言规定可以通过赋初值来定义数组的大小,这时数组阐明符的一对方括号中可以不指定数组的大小,因此选项D)也是对的的因此,4个选项中选项C)符合题意
(5)A)【解析】函数func的功能是将第一种参数所指向的内容与6的和赋给第二个参数数组中的第一种值
(6)C)【解析】本题重要考察的是一维数组的定义和引用前一种for循环,每次执行c[s[i]]++;,它的功能就是,以数组s中的12个元素为下标,对数组c中的元素进行增1操作s的数值中,共有4个
1、3个
2、3个3和2个4因此,循环结束后,数组c的内容是{0,4,3,3,2}后一种for循环,从数组c下标为1的元素开始,循环输出背面的4个元素因此,最终输出成果是4332,应当选择C)
(7)D)【解析】在C语言中,定义一维数组的语句一般形式如下:类型名数组名[常量体现式];一维数组的引用形式为:数组名[下标体现式]count表达能被2整除或被5整除的个数,i则计算有多少个数组元素
(8)A)【解析】本题考核的知识点是数组的定义、赋初值以及函数调用的组合应用本题中函数sum(int*a)的作用是将形参a所指的数组中的第二个元素的值a[l]赋给第一种元素a
[0]主函数中定义一种长度为10的整型数组并赋初值,接着执行一种for循环,该循环共执行了3次当i=2时,调用函数sum(aa
[2]),主函数中将aa
[2]作为实参传给形参a,因此此时形参a所指的数组的第一种元素和第二个元素分别为aa
[2]和aa
[3],故执行完该函数后将aa
[3]的值赋给aa
[2],BPaa
[2]=aa
[3]=4,当i=l时,同理aa
[2]的值赋给aa[l],即aa[l]为4,i=0时,将aa[l]的值赋给aa
[0],因此应选A)
(9)A)【解析】本题考核的知识点是一维数组的定义,初始化和数组中元素的引用函数f()的作用是形参a为偶数的时候返回0,主函数中首先定义了一种长度为8的一维数组,然后给它赋初值使得s
[0]=l、s[l]二
3、sE2]=5s
[3]=
2、s
[4]=
4、s
[5]=6其他没有赋值的数组元素将自动赋值为0for循环中,当s[i]不o为偶数时,将s[i]相加,即当i=3时,s[i]=2为偶数,退出循环,此时d的值为d=s
[0]+s[l]+即2]=1+3+5=9,因此最终输出的d的值为9因此,4个选项中选项A)符合题意
(10)D)【解析】重要考察了一维数组的定义、初始化及元素的引用措施第5行代码中scanf输入数据时,规定输入项为地址,而数组名即为数组的首地址,因此不应当再在前面加取地址符号(ID B)【解析】在一维数组中要注意的是作为下标体现式的常量体现式的值必须不小于等于0,选项B)中定义有5个元素,但赋值时有6个元素,因此是错误的
(12)D)【解析】通过赋初值的方式给一维数组赋字符串,可以用给一般数组赋初值的相似方式给一维字符数组赋字符串,也可以在赋值时直接赋字符串常量选项B)和C)背面的‘\0是多出的,在C语言中,系统会自动在字符串的结尾处加上一种字符\0作为串的结束标识
(13)B)【解析】本题首先定义了一种数组a并初始化然后用数组名a作为实参调用函数f()在f()中,只有一种for循环,循环变量i从0递增至4,共循环5次,而每次执行的语句是(*q)++;,即让形参q所指内容持续增1了5次因此调用结束后,数组a的第1个元素被加5,故输出的成果为6,2,3,4,5,o应当选择B)
(14)C)【解析】本题重要考察的是函数在fun函数中,首先将形参nl和n2分别赋给局部变量i和j,然后使用while循环,互换和s[j]的内容,并使i增
1、j减1,直至H不不不小于j为止因此该函数实现的功能是对形参指针s所指的一系列元素,从第nl位到第n2位进行逆序主函数中,持续调用了3次fun函数,依次对数组a的第0~3位、第49位和第0~9位进行了逆序对
0、3位逆序后,数组a的内容是{4,〜3,2,1,5,6,7,8,9,0);再对4~9位逆序后是{4,3,2,1,0,9,8,7,6,5);最终对0~9位逆序后是{5,6,7,8,9,0,1,2,3,4}o
(15)B)【解析】本题考察的是一维数组的定义及初始化定义并初始化一维数组的一般形式如下类型名数组名[常量体现式]二{初始化列表};当使用初始化列表初始化数组时,需要注意如下几点初始化列表项的个数必须不不小于等于常量体现式的值,因此选项A是错误的;常量体现式可以省略,但不能省略其外面的中括号,因此选项C是错误的;当类型名为char时,{初始化列表}可以用一种字符串常量来替代,由于字符串常量必须以‘\0结尾,因此此时的初始化列表项的个数是字符串常量的长度加1,选项D的类型是int,不能使用字符串常量初始化,因此D错误16C【解析】函数fun的功能是求数组的n个元素之和funa,5=15由于sum是静态局部变量,O因此保持15不变,funb,4=45,因此肝化11%5+八1164=6017C【解析】本题考察的是数组在C语言中,数组的下标是从0开始的,因此它的上限是数组元素个数减1假如超过这个范围来引用数据元素就会溢出,导致运行时错误本题的数组m有5个元素,因此它的下标范围是0~4选项A--i的值为3,在范围内,不会出错;选项B2*2的值为4,在范围内,不会出错;选项C等于5,超过范围,因此错误的是C;选项D m[i]的值,也就是成4]的值为1,在范围内不会出错故本题应当选择C18B【解析】本题考察的是原则输入函数scanf的运用scanf函数的第一种参数是格式控制字符串,该字符串中所出现的格式控制符必须与scanf函数的第二个及其背面的参数一一对应本题中4个选项的格式控制字符串都是“刎%s”,其中包括两个格式控制符%1和%$,它们分别表达输入一种十进制整数和输入一种字符串,其对应的参数应当分别为一种整型变量的地址和一种字符型数组的首地址变量的地址可以通过对变量做取地址运算来得到,而字符型数组的首地址则可以直接通过数组名来得到因此,4个选项中选项B符合题意19D【解析】本题考察了数组名的概念在C语言中,数组名类似于一种指向数组首地址的指针常量,一旦定义就不能修改其内容因此本题中的s+=2;语句让数组名s的内容加2是错误的,编译无法通过故应当选择D20D【解析】本题考核的知识点是指针变量的赋值本题中定义了一种整型数组a和一种整型指针变量P选项A中将一种整型数赋值给一种指针变量,C语言规定,只能将地址赋给指针变量,故选项A不对的;选项B中a
[5]为一数组元素,同样不是一种地址,故选项B不对的;选项C中a
[2]为一数组元素,同样是一种整型数据,不是个地址,故选项C不对的选项D中数组名a代表数组首地址加2,代表第三个元素的地址,故选项D对的,因此,4个选项中选项D符合题意21B【解析】本题考察的是通过指针引用数组元素本题首先定义了一种包括5个double元素的数组x,并定义了一种double指针p指向了该数组*p表达取p所指地址的内容,即x
[0]的内容,因此选项A对的;*3+1表达取P+1所指地址的内容,即x[l]的内容,因此选项C对的;*x表达取x所指地址的内容,在C语言中,数组名其实也是一种指针,只不过它所指向的地方不能被变化,因此*x等价于x
[0],因此选项D也是对的的由于x数组包括5个元素,因此它的下标范围是0~4,故选项B的x
[5]溢出了,应当选择B22C【解析】记录广9九个数中的奇数和,此题考察指向数组的指针C语言规定数组名代表数组的首地址,也就是第一种元素的地址因此*t+i代表数组的第i+1个元素程序运行的成果是1+3+5+7+9=2523D【解析】在本题中,主函数在调用fun函数进行排序时,传递的参数是c+4和6,fun函数实现的功能是将数组c的第5个元素开始的6个元素依次进行从大到小的次序排列排序之后,数组c的内容变为{1,2,3,4,9,8,7,6,5,0}24C【解析】该题稍微难一点重要要弄清晰如下几点定义了一种指针数组char*p
[2]后,程序中第一种循环fori=0;i2;i++p[i]=ch[i];的作用,是使指针数组的p
[0]元素它自身是一种指针指向了二维数组ch的第一行字符串,并使指针数组的p[l]元素指向二维数组ch的第二行字符串,这样,就使指针数组P和二维数组ch建立起了一种对应关系,后来对二维数组ch的某个元素的引用就有两种等价的形式ch[i][j]或对二维数组ch的初始化,使其第一行ch
[0]中存入了字符串“6937”,第二行ch[l]中的内容为字符串“8254”程序中第二个循环中的循环体s=s*10+p[i][j]-;的功能是这样的,每执行一次,将S中的值乘以10(也即将S中的数值整体向左移动一位,并在空出来的个位上添一种0),再将目前中的字符量转换为对应的数字,然后把这个数字加到s的个位上注意到内层循环的循环条件p[i][j]\0是指p[i][j]中的字符只要不是字符串结束标志0就继续循环,语句j+=2;是使下标j每次增长2,也即一种隔一种地从p[i]所指向的字符串中取出字符通过上述解析后,不难看出,该程序首先从p
[0]所指向的字符串“6937”中一种隔一种地取出字符,分别是6和3,然后从p[l]所指向的字符串“8254”中一种隔一种地取出字符,分别是‘8和5,同步通过转换和相加运算后,成果s中的值应当是638525C)【解析】本题考察的是指针的运用题目首先申请了一种整型数组a,并让一种指针变量p指向数组的元素然后使用一种for循环,循环变量x从1递增到2,即循环两次在循环体中每次让y累加p[x]的值,而p[x]写成指针形式就是*(p+x)因此两次y加的值分别是a
[2]和a
[3]的值,故最终输出6+8=14应当选择C)o26B)【解析】本题考核的知识点是函数调用中值传递和地址传递函数间的参数的传递有两种状况,第1种状况变量作为形参时的参数传递,变量作为形参时,规定对应的实参应为变量或体现式,变量作为函数的参数其传递方式是“值传递”,该种状况下,形参被赋值为实参的值,然后实参与形参再无联络,也就是说对形参的变化将不再影响实参;第2种状况是地址或数组名作为形参时的参数传递,该种状况下对形参的变化将对实参产生影响本题中函数swapl()是传递的地址因此对该形参c的变化将影响实参,分析可知该函数的作用,是使数组c的第一种元素和第二个元素的值互换,swap2()传递的是值,形参互换后不会影响实参,因此输出成果为5335o27A)【解析】本题考察的是数组和函数sum()函数接受一种int型数组作参数,也可以把它看做是一种int型指针,语句a
[0]=a[T]+a[l];的意思就是将参数指针指向内容的前一种元素和后一种元素的值相加放到指针所指的位置因此,主函数中调用sum(a
[2]);的意思就是让a
[2]=a[l]+a
[3];,因此最终输出的成果是6应当选择A)
(28)0【解析】本题考察的是数组名的概念当数组名出目前体现式中时,它类似于一种指针常量,该指针一直指向该数组第1个元素的位置,它的指向不能被变化但它又与一般的指针常量有所区别对数组名使用sizeof运算符时,得到整个数组所占内存的大小;而对于指针常量,在TC中返回的一直是2(TC中,一种指针占2个字节的内存)因此,要获得数组t的第i个元素的内容,既可以使用常规的t[i]体现式,也可以将数组名t看作一种指针常量,使用体现式*(t+i)来获取数组t的第i个元素的内容在本题中,for循环会循环5次,循环变量i从0开始每次增长2,因此s=t[O]+t
[2]+t
[4]+t
[6]+t
[8]=25o29B)【解析】本题重要考察的是数组名用作函数参数数组名用作函数参数的状况类似于指针,属于传地址,故对形参数组元素的修改会同步修改实参本题中,f()函数通过一种for循环语句,将传入数组的元素从下标2到下标5每个各自乘以2因此,调用结束时,数组a中的内容为(1,2,6,8,10,12,7,8,9,10),故本题应当选择B)30C)【解析】本题考察的是考生的代码阅读能力先看sort函数,它没有返回值,有两个参数,一种int型数组和一种int型变量在函数中是一种二重循环,外循环变量i从0递增到n-2,内循环变量j从i+1递增到n-l内循环体是一条if语句“假如就把两个值互换”这是一种经典的从大到小选择排序算法,排序的范围是a[0ra[nT],一共n个数排序主函数中定义了一种数组aa
[10],然后调用sort(aa+2,5);的意思是将aa[2paa
[6]范围的5个数据从大到小排序31B)【解析】本题考核的知识点是二维数组的定义选项A)中省略了第一维的长度,在C语言中是不容许的,故选项A)错误;选项C)也是省略第一维的长度;选项D)中定义了一种2行3列的数组,而在赋值的时候却赋了一种3行的值给它,显然不对的,故选项D)错误,因此,4个选项中选项B)符合题意32A)【解析】题目中首先定义了一种二维数组a,并初始化为|1432||8657|3725||4861然后通过三重循环对数组a实行按列排序从if(a[j][i]a[k][ij)”目前面的元素不小于背面的”则互换可以看出,排序是从小到大的,因此排序结束后,数组a的内容应当是114211小|3632|||4755|I|8867|大最终通过一种for循环,依次输出a
[0]
[0],a[l][l],a
[2]
[2],a
[3]
[3]的值,即输出1,6,5,733D)【解析】本题重要考察的是二维数组的运用本题定义的二维数组a
[2]
[3],其下标范围分别是01和因此,选项A)、B)和C)都不对的选项D)中,体现式1〉1的值是“假”,可以被看做整数“0”,体现式!1的值也是“假”,因此整个就是a
[0]
[0],这是对a数组元素的对的引用,故应当选择D)o34D)【解析】C语言中数组下标是从0开始的,因此二维数组a
[2]
[3]的第一维下标取值为
0、1;第二维的下标取值为
0、
1、2,因而选项A)、B)、C)都是错误的,选项D)表达数组元素35B)【解析】本题考察的是for循环与二维数组的定义和引用当定义二维数组的初始化列表只使用一重花括号时,其中的每个值依次代表从第1行的第1个元素起,直到第1行满,接着代表第2行、第3行……的每一种元素程序中的循环将循环3次,循环变量i的值分别是
0、
1、2,因此3次循环中输出的数分别是t[2-0]
[0]、t[2-2]
[2],即t
[2]
[0]、t
[0]
[2],因此最终输出的成果为357o故应当选择B)36B)【解析】本题重要考察的是scanf()函数的输入原理scanf()函数执行时,先从键盘缓冲区中读取顾客输入的数据,若缓冲区为空或输入数据少于所需数据,则暂停程序等待顾客的输入,直到顾客输入回车符,scanf()将继续到键盘缓冲区中读取输入,如此反复直到满足scanf()函数所需数据,程序才继续执行下面的语句,而scanf()没有取完的数据仍然会保留在键盘缓冲区内,到程序结束时还没取完就会被释放掉,不会影响其他的程序运行止匕外,scanf()函数将取到的数据匹配给第2个及其背面的指针参数所指的内存地址中37B)【解析】本题考核的知识点是二维数组的定义及初始化在定义一种二维数组同步初始化时,其第一维的长度可以省略二维数组的初始化列表可以只使用一重花括号,其中的每个值依次代表从第1行的第1个元素起,直到第1行满,接着代表第2行、第3行……的每一种元素,若第1维长度没有省略,则这些值总个数不得超过两个维度的乘积故选项A)和D)是对的的二维数组的初始化列表还可以使用二重花括号括起来,其中每一种内花括号代表一行的值,在内花括号中值的个数不得超过数组第二维的长度,若局限性第2维长度,则该行多出部分值被初始化为0,若第一维省略,花括号的个数代表行数B)选项第一维为2,故只有两行,但有三个花括号超过了行的规定,因此B)错误38C)【解析】本题重要考察的是二维数组的定义和初始化在定义多维数组时,假如有初始化列表,则可以省略最左边的维数,而其他维数不能被省略,二维数组也不例外因此选项C)是错误的39B)【解析】本题考核的知识点是二维数组的定义、初始化和指针的应用本题中首先定义了一种字符串数组并初始化,初始化后使得str
[0]=〃China〃,str[l]^Beijing\然后定义一种指针变量p并让其指向str,而在该二维数组中定义每个字符串的长度为10因此p+10将指向str
[1],因此最终输出*(p+10)的值为Beijing因此,4个选项中选项B)符合题意40B)【解析】本题考察的是二维数组的定义、赋初值和对二维数组元素的引用分析程序可知,函数fun()中的for循环作用,是将数组前4行中的对角线上的元素,即a
[0]
[0]、a[l]⑴、a⑵⑵和a
[3]
[3]分别赋到b
[0]、b[l]、b
[2]、b
[3]中在主函数中首先定义了一种4行4列的二维数组x,并初始化为{{1,2,3},{4},{5,6,7,8},{9,10}}然后调用fun()函数,将x的对角线元素赋给一维数组y接着通过循环输出o数组y中的值从数组x的初始化列表中我们可以看出,这4个值依次为1,0,7,0o41C)【解析】本题重要考察的是用二维数组首地址和下标来引用二维数组元素的措施通过度析可知,程序中的双重循环定义了一种如下的二维数组012234456由于数组的下标是从0开始的,因此二维数组元素表达的是二维数组a的第i+1行、第j+1列对应位置的元素42C【解析】本题考察的知识点是二维数组和指针数组无论一种数组有多少维或者与否含指针类型,该数组最终都可以被看做一种比较特殊的一维数组例如本题中的int a
[2]
[3]可以看作元素为int
[3]即包括3个int型元素的一维数组,包括2个这样元素的一维数组;而int*p
[3]则可以看作元素为int*,包括3个这样元素的一维数组选项A中,p为数组名,其值是不能被变化的,故非法;选项B中,p
[0]的类型是int*,而a是二维数组名类型为int[]
[3],两者无法赋值,故非法;选项C中,p
[0]为int型指针,为元素的地址,因此选项C符合题意43B【解析】本题考察的是指针数组的运用pk是指针数组名,是一种常量,不能被赋值,因此选项A和C都不对的pk中的元素是int型指针,而二维数组名是指向一维数组的指针常量,即行指针,两者之间不可隐式转换,因此选项D的赋值是错误的故应当选择B44C【解析】本题考核的知识点是二维数组的定义和指针数组的基本概念本题中首先定义了一种3行2列的数组a,一种长度为3的指针数组p,接着把地址a⑴赋给p
[0]此时p
[0]为的地址,p[O]+l为的地址,故*p[O]+l代表的元素为因此,4个选项中选项C符合题意45B【解析】本题考察的是通过指针引用二维数组元素通过一维数组名或指向一维数组元素的指针来引用数组元素有两种写法a[i]和*a+i,它们是等价的这是一种运算符之间的等价转换,就仿佛a-b-c等价于a-b+c同样懂得了这种转换,我们可以将之扩展到二维数组甚至任意维数组上来由于口运算符的结合性是从左至右的,因此等价于此时可以先将任意一种口运算符转换为指针形式为*w+i[j]或*w[i]+j,或者同步转换**w+i+j上述几种形式都完全等价于w[i][j]46D【解析】本题考核的知识点是数组指针的应用本题中定义了一种二维数组c和一种数组指针P并初始化让它指向c,显然此时p中的各元素为地址,选项A中p+1,此时的1代表的长度是整个二维数组c的长度,p+1将让p指向c数组背面的元素,故不能引用c数组中的组员,故选项A错误;同理,选项B和选项C都不对的,选项D中p
[0]+2代表的是第一行第三个元素的地址,而*p
[0]+2将代表第一行第三个元素的值47B【解析】本题中,
[2]是二维数组中的第6个元素,对应for循环中i的值为5,p
[5]=5+148B【解析】若有如下定义inta
[3]
[4],i,j;且0=i3,07j4,则可以有如下几种方式来引用数组中的第i行、第j列的元素:a[i]中],*a[i]+j,**a+i+j,*a+i[j],*a
[0]
[0]+4*i+j49C【解析】本题考察的是二维数组的定义、赋初值和对二维数组元素的引用在fun函数中,首先将s
[0][k]的值赋给m,然后通过for循环,遍历5
[1][白飞[11-1]小]之中的数,将碰至U的比m大的数保留到m中很显然,这是搜索最大值的算法,搜索的是s
[0][kPs[nT][k]之间的最大值因此,主函数中funa,4,0的功能就是搜索a
[0][0pa
[3]
[0]之间的最大值,这4个值分别是
1、
11、
21、31,因此最终输出成果是31,应当选择C考点答案字符串131B【解析】\0作为标志占用存储空间,不过不计入串的实际长度当给一种字符型指针赋值时,赋给这个指针的是这个字符串的地址50C【解析】本题考察的是字符型一维数组的初始化对字符型一维数组在定义时初始化,既可以使用初始化列表,也可以使用字符串常量不过由于字符串常量会自动在结尾添加‘\0字符做结束标志,因此用字符串常量的初始化列表项个数是字符串的长度加1因此题目中的char a[]二〃xyz〃;等价于chara[]={x,y,z,\O};,因此a数组长度不小于b数组长度,应当选C)51B)【解析】在内存中,字符数据以ASCH码存储,它的存储形式与整数的存储形式类似C语言中,字符型数据和整型数据之间可以通用,也可以对字符型数据进行算术运算,此时相称于对它们的ASCII码进行算术运算,在本题中,s++相称于s=s+L即让s指向数组中的下一种元素在函数SS(char*s,char t)中,当*s=t时,*s通过运算变为大写,因此答案选择B)
(4)C)【解析】考察函数的调用函数调用的一般形式为函数名(实参列表)首先调用函数funcl
(0),输出st
[0]=hi值变为2,并调用函数func2
(2),输出st
[2]=1i值此时变为4,又调用函数funcl
(4),输出st
[4]=o此时i值不小于等于3,执行完毕,因此,输出成果为hlo
(5)B)【解析】本题考察的知识点是指针程序首先定义了一种字符数组s,然后让字符指针ps指向该数组的首地址最终按字符形式输出*ps+4的值,即s
[0]+4的值,a+4二e故应当选择B)
(6)D)【解析】本题考核的知识点是指针的应用本题中首先定义一种字符数组s,并将字符串“ABCD”存到数组s中,定义了一种字符指针变量p,在接下来for循环中,循环体共执行了三次,第一次p指向s[l],因此此时输出的P所指的字符串的值为BCD;第二次循环p指向s
[2],因此此时输出的p所指的字符串的值为CD;第三次循环p指向s
[3],因此此时输出的p所指的字符串的值为D因此,4个选项中选项D)符合题意
(7)C)【解析】选项A)和B)定义的数组空间太小,至少应当为6个字符的长度才可以选项D)中的指针s未赋初值,因此指向一种不确定的地址,因而不能用scanf输入数据到这一指针所指向的地址中
(8)C)【解析】本题考察的是指针的运用首先看swap函数,函数中定义了一种临时字符变量t,然后将形参指针x所指内容存入t,再将形参指针y所指内容存入到x所指内容中,最终将临时变量t的内容存入到y所指内容中因此该函数实现的是互换两个字符指针所指向的内容在主函数中,首先定义了两个字符指针si和s2,同步用字符串“abc”和“123”来初始化它们,此时它们指向的是两个字符串的第1个字符因此,在调用完swap函数后,彼此互换了两个字符串的第1个字符,最终输出成果为Ibc,a23o故应当选择C)
(9)A)【解析】本题重要考察的是字符数组、字符串和字符指针的某些概念数组元素个数,是在定义数组的时候确定的,本题的s数组元素个数是20而字符串长度,是从该字符串的第1个字符开始,一直到‘\0字符为止,所历经的字符个数,\0不算在内因此本题p所指字符串(〃801汽明〃)的长度为7因此选项B)的论述不对的s是数组名,而不是指针变量,因此选项C)不对的数组s中除了包括字符串“Beijing”外,还包括其后的20个以内字节的内容,而指针变量p中包括的只是数组s的首地址因此选项D)的说法也不对的
(10)B)【解析】本题考察用字符指针引用字符数组中的字符及对字符的操作函数」23()的for语句执行过程是从字符指针str所指向的字符数组的第一种元素开始,逐一判断字符与否为c’,若不是,就执行一次数组元素的赋值过程,若字符为c就不执行
(11)C)【解析】考察怎样用scanf函数输入字符串scanf输入字符串有一点要注意的是格式控制串必须用%5
(12)B)【解析】本题考核的知识点是函数gets的应用函数gets的调用形式为gets(str_adr);stjadr是寄存字符串的起始地址可以是字符数组名、字符指针或字符数组元素的地址gets函数用来从终端键盘读入字符串(包括空格符),直到读入一种换行符为止换行符读入后,不作为字符串的内容本题中定义一种长度为10的字符数组和一种指针变量b,并且通过赋值让它指向数组a选项A)、选项B)、选项C)和选项D)中只有选项B)中gets函数的参数a
[0]不能表达数组a的首地址,故选项B)不对的因此,4个选项中选项B)符合题意
(13)C)【解析】本题考察的知识点是输入函数C语言提供了许多输入函数,其中有getchar(输入字符)、scanf(格式输入)和gets(输入字符串)等题目规定输入的是字符串,因此可以排除getchar,并且规定输入的字符串中包括空格,而scanf函数默认将输入的空格字符作为分隔符,因此空格不会被输入,故可排除scanfgetc的作用是从文献中输入一种字符,故也不可取gets函数可以输入一整行作为一种字符串,其中也包括空格字符,故应当选择C)14D【解析】本题重要考察的是输入函数scanf和getsgets函数的原型是char*getschar*s;功能是通过键盘读入一种字符串,并放到指针参数s所指的内存地址中选项A给gets传入的实参是s
[0],也就是数组s的第1个元素的地址,这是合法的选项C传入的是数组名s,它出目前体现式中表达的是数组的首地址,因此也是合法的scanf函数规定输入的参数均为地址形式选项B中体现式s+1,表达的是数组首地址往后移动一位的地址,因此是合法的选项D直接引用数组中下标为1的元素,这是不合法的15A【解析】本题题意规定删除所有空格,即除了空格以外的其他所有字符都要留下由于C语言中没有直接删除字符的操作,因此我们对于删除字符的操作都是采用留下字符的算法,此前的题目亦是如此用str[i]从串头到串尾逐一走动,每走到一种字符都判断其与否为空格,若不是空格注意在if的单引号之间有一种空格,则将其保留str[j]中注意j的下标变化、初值及最终加串结束符\016C【解析】本题考察了一维字符数组的定义和初始化选项C中str
[10]初始化为空,可以不必进行类似〃〃的空赋值,字符数组若没有进行初始化赋值,默认的字符为空,并且定义完str数组后,应当用”分隔而不是”,因此选项C对的17A【解析】本题综合考察字符数组的赋值和strcpy函数的使用方法C语言不容许用赋值体现式对字符数组赋值,如下面的语句就是非法的strl二China,假如想把“China”这5个字符放到数组strl中,除了逐一输入外,还能使用strcpy函数,该函数的功能是将一种字符串复制到一字符数组中例如,strcpystrl,China或strcpy strl,str2;注意,不能企图用如下语句来实行赋值将str2的值传给strlstrl=str2;不能用赋值语句将一种字符串常量或字符数组直接给一种字符数组strcpy函数的构造是:strcpy字符数组1,字符串2其中,需要注意的是,字符数组1的长度不应不不小于字符串2的长度,字符数组1”必须写成数组名形式,如strl,“字符串2”可以是字符数组名,也可以是字符串常量,不能用赋值语句将一种字符串常量或字符数组直接给一种字符数组18A【解析】此题考察了字符串输入函数gets和字符串比较函数strcmp,此外尚有字符输出函数putchargets从原则输入设备中读入所有字符,包括空格,直到碰到回车符为止,strcmp是字符串比较函数,即strcmp字符串1,字符串2,假如字符串1二字符串2,则函数值为0;假如字符串1>字符串2,则函数值为一正整数;假如字符串k字符串2,则函数值为一负整数putcharc函数将字符c输出到原则输出设备上19D【解析】考察通过赋值的方式给一维数组赋初值字符串复制函数strcpy调用形式为:strcpysl,s2,此函数用来把s2所指字符串的内容复制到数所指存储空间中,函数返回si的值,即目的串的首地址;求字符串长度函数strlen的调用形式如下strlens,此函数计算出以s为起始地址的字符串长度,并作为函数值返回注意这一长度不包括串的结束标志20A【解析】本题考察的是字符串的长度字符数组中可以寄存字符串,但字符数组的长度并不是字符串的长度,字符串的长度是指字符数组中寄存的有效字符个数,即‘\0之前的字符数字符数组s中依次寄存的字符是1234567和2个字符串结束标识‘\0,故字符串的长度是7,因此应当选择A21A【解析】本题考核的知识点是指针数组的定义和strlenO函数的应用本题中首先定义了一种长度为10的指针数组,并赋初值,因此执行strlenp
[4]后的返回值为字符串“cd”的长度为2因此,4个选项中选项A符合题意22C【解析】本题考察两个知识点strlen函数的功能是求字符串的长度,并返回字符个数,不计最终的‘\0,strcpy函数的功能是把背面的字符串复制到前面字符串所指向的空间230【解析】题目中已告知函数f的作用是将字符串从小到大排序,因此主函数中调用完fp,5;后,二维数组p中的内容为{〃aabdfg〃,〃abbd〃,〃abc〃,〃cd〃,〃dcdbe〃}输出的成果是strlenp
[0],即p中第1个字符串的长度,因此成果是6故本题应当选择C240【解析】考察了测字符串长度函数strlen假如一种字符数组中寄存一种字符串,则函数strlen的值为“\0”之前的所有字符个数,也包括空格在内25D【解析】本题考核的知识点是字符串的比较在C语言中字符串的比较用strcmpO函数,该函数有两个参数,分别为被比较的两个字符串假如第一种字符串不小于第二个字符串返回值不小于0,若不不小于返回值不不小于0,相等返回值为0字符串比较大小的原则是从第一种字符开始依次向右比较,碰到某一种字符大,该字符所在的字符串就是较大的字符串,假如碰到某一种字符小,该字符所在的字符串就是较小的字符串本题中规定当S1所指字符串不小于s2所指串时,执行语句S,因此应当为strcmpsl,s20或者strcmps2,si0,因此,4个选项中D符合题意26B【解析】本题首先定义了3个字符数组p、q、r,并分别被初始化数组p指定的大小为20,初始化列表为{a,即只指定了前4个元素的内容,根据C语言的规定,初始化列表局限性时,其他元素均自动初始化为0然后通过strcat函数,将字符串r连接到字符串p之后,即执行后p中的内容为“123dl23de”由于“strlenq”表达求字符串q的长度,很明显为3,因此语句strcpyp+strlenq,q;w的作用就是:将字符串q复制到数组p的第4个元素位置处27C【解析】本题重要考察的是C语言中的数组长度和字符串长度数组长度指的是一种数组所占内存空间的字节数,数组长度可以通过sizeof〈数组名〉来求得;字符串长度是指从指定内存地址开始直到碰到第一种‘\0字符为止所通过的字符数不包括‘\0字符,字符串长度可以通过字符串函数strlen〈字符串首地址值》来求得因此本题程序运行后,变量i中是数组a的长度7,变量j中是数组a中第一种‘\0字符之前的字符数2选项C符合题意28B【解析】p数组内有3个元素,没有字符串结束标志因此长度不确定,q字符数组只对部分元素赋值,其他元素则自动赋值为0,因此长度为3290【解析】本题考察的重点是复制字符串一一使用strcpyO函数,该函数的调用方式是strcpy字符数组,字符串,其中“字符串”可以是字符串常量,也可以是字符数组函数的功能是:将“字符串”完整地复制到“字符数组”中,字符数组中原有的内容被覆盖使用该函数时注意字符数组必须定义得足够大,以便容纳复制过来的字符串复制时,连同结束标志‘\0一起复制;不能用赋值运算符“二”将一种字符串直接赋值给一种字符数组,只能用strcpyO函数处理此外,本题还考察连接字符串的strcat函数,其调用方式是:strcat字符数组,字符串功能是把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中“字符数组”中本来的结束标志,被“字符串”的第一种字符覆盖,而“字符串”在操作中未被修改使用该函数时注意由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目的字符串;否则,会因长度不够而产生问题;连接前两个字符串均有结束标志‘\0,连接后“字符数组”中存储的字符串的结束标志‘\0被舍弃,只在目的串的最终保留一种‘\030B【解析】字符串连接函数strcat的调用形式如下strcat si,s2此函数将s2所指字符串的内容连接到si所指的字符串背面,并自动覆盖si串末尾的尾标,函数返回si的地址值考点答案对函数的深入讨论141C【解析】由于funint X是一种递归函数,因此主函数中fun7通过三次递归调用,其过程可以描述为afun7=7-fun5=可5-fun为=7-5-3-funl=7-5-3-3=7-5可”,因此最终的输出成果为22B【解析】本题考核的知识点是函数递归调用的基本概念在C语言中所谓函数的递归是指在调用一种函数的过程中,又出现了直接或间接地调用该函数自身,直接调用该函数自身的称为函数递归,而间接调用该函数称为函数的间接递归调用显然题目中所说得函数调用为函数的间接递归调用因此,4个选项中选项B符合题意3B【解析】考察函数的递归调用n=0或n=l是递归的终止条件,然后运用已知值逐渐递推求出未知值通过传送地址值,在被调用函数中直接变化调用函数中的变量的值4A【解析】本题考察的是递归算法的分析一种直接或间接地调用自身的算法称为递归算法在一种递归算法中,至少要包括一种初始值和一种递归关系本题的fun函数在n等于1时返回1,而在其他状况下返回n+funn-l,因此本题的递归算法可以这样来表达funn=l n=1初始值funn=n+funn-l nWl递归关系此时不难看出,该递归算法实现的是计算1+2+3+…+n,并且n必须不小于0,否则会陷入死循环故题目输出的成果是1+2+3+…+10=55,应当选择A5A【解析】本题重要考察了函数参数的传递方式和递归函数参数的传递方式有两种传值和传地址它们的区别重要在于在函数体内对形参的变化,会不会同步也变化实参本题的f函数,第1个参数是传值不会变化实参;第2个参数传递的是指针,即传地址会变化实参主函数中调用f时一口为7,由于7既不能被3整除,也不能被5整除,因此执行最终一条else子句再次调用f函数,此时吊被减1,传入的第1个参数值为6,6能被3整除,故rl=6/3=2函数返回,并使第2个参数所指内容为2,故本题输出的成果是2,应当选择A6A【解析】该题考察的是递归函数的调用,题中fun函数进行了递归调用,第1次调用时:fun3n=3s=3-fun2;第2次调用时fun2n=2s=2,返回第一次调用后,s=3-2=17C【解析1本题考察的是递归算法的分析一种直接或间接地调用自身的算法称为递归算法在一种递归算法中,至少要包括一种初始值和一种递归关系本题的fun函数在x等于0或1时返回3,而在其他状况下返回x-fun x-2,因此本题的递归算法可以这样表达funx=3x=0或x=l初始值funx=x-funx-2xNO且xWl递归关系在主函数中输出的成果是fun7,而fun7=7-fun5=7-5-fun3=7-5-3-funlo8B【解析】本题考察的是递归函数题目中给出的fun函数直接调用了自身,因此是一种递归函数其功能是,当参数b为时,返回参数a的值;否则返回fun—a,—b的值从这里可以看出,当b不停递减时,a也不停递减,直到b为0时返回a的值,那么a递减的总值就是b本来的值因此,整个递归函数的作用其实是返回a-b的值,故应当选择B9C【解析】本题重要考察的是递归函数题目中的f函数直接调用了自身,是一种递归函数主函数中调用f函数时传入的参数是3,因此会跳过用语句,执行y=x*x-fx-2;,也就是y=3*3-Ol;,再次调用f函数,传入参数1,此时满足if语句的条件,返回3所此前面的y=3*3-fl;就等价于y二3*3-3;,成果是6,因此返回给主函数的成果是6故本题应当选择C10B【解析】在main函数中,对f1和f2的值进行了累加fl=1,f2=f1+1=2最终,j的值为1+2=3考点答案顾客标识符的作用域和储存151A【解析】在C语言中只有自动变量和寄存器变量在使用时才占用内存单元2D【解析】在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久的存储单元,虽然退出函数后来,下次再进入该函数时,静态局部变量仍使用本来的存储单元,静态局部变量的初值是在编译的时候赋予的,在程序执行期间不再赋予初值本题由于持续三次调用函数fun,三次对静态变量x进行操作,x的值应依次为6,7,83D【解析】函数的静态局部变量在编译时就赋初值,即只赋初值一次,在程序运行时它已经有初值,后来每次调用函数时不再重新赋值,而只是保留上次函数调用结束时的值4B【解析】本题重要考察的知识点是静态局部变量的运用假如在定义一种局部变量时使用了static关键字,则这个局部变量就被定义成了一种静态局部变量一般的局部变量伴随函数被调用而诞生,在函数返回时被销毁而静态局部变量在函数调用结束后不会被销毁,在下一次该函数被调用时,还会保留上一次函数调用结束时的值本题的fun函数中定义的变量m和i就是静态局部变量,第1次调用fun函数时m=
0、i=2,执行i+=m+1后,i的值变为3,再执行m=i+x+y后,m的值变为5,因此第1次输出的整数是5第2次调用fun函数时口二
5、i=3,执行i+=m+l后,i的值变为9,再执行m=i+x+y后,m的值变为11,因此第2比较,若相等,则查找成功;否则,继续进行比较,即和线性表的第二个数据元素进行比较同样,若相等,则查找成功;否则,继续进行比较依次类推,直到在线性表中查找到该数据或查找到线性表的最终一种元素,算法才结束因此,在长度为64的有序线性表中进行次序查找,最坏的状况下需要比较64次
(27)A)【解析】二分法查找只合用于次序存储的有序表在此所说的有序表是指线性表中的元素按值非递减排列(即从小到大,但容许相邻元素值相等)的选项A)对的
(28)A)【解析】从平均时间性能而言,迅速排序最佳,其所需时间至少,但迅速排序在最坏状况下的时间性能不如堆排序和归并排序当序列中的记录基本有序或元素个数较少时,冒泡排序和简朴选择排序为最佳排序措施考点答案程序设计基础2
(1)D)【解析】构造化程序设计措施的重要原则是自顶向下,逐渐求精,模块化,限制使用got语句可复用性是指软件元素不加修改和稍加修改可在不一样的软件开发过程中反复使用的性质软件可复用性是软件工程追求的目的之一,是提高软件生产效率的最重要措施面向对象的程序设计具有可复用性的长处
(2)D)【解析】滥用goto语句将使程序流程无规律,可读性差,因此A)不选;注解行有助于对程序的理解,不应减少或取消,B)也不选;程序的长短要根据实际状况而论,而不是越短越好,C)也不选
(3)B)【解析】本题考察了程序的基本构造程序由某些基本构造构成任何一种大型的程序都由3种基本构造构成,由这些基本构造构成一种构造化的程序这3种基本构造为次序构造、选择构造和循环构造
(4)D)【解析】构造化程序设计措施的重要原则可以概括为自顶向下、逐渐求精、模块化及限制使用goto语句,总的来说可使程序构造良好、易读、易理解、易维护
(5)C)【解析】面向对象的设计措施与老式的面向过程的措施有本质不一样,它的基本原理是,使用现实世界的概念抽象地思索问题从而自然地处理问题它强调模拟现实世界中的概念而不强调算法,它鼓励开发者在软件开发的绝大部分中都用应用领域的概念去思索本题答案为C)
(6)D)【解析】面向对象的世界是通过对象与对象间彼此的互相合作来推进的,对象间的这种互相合作需要一种机制协助进行,这样的机制称为消息消息是一种实例与另一种实例之间传递的信息,它祈求对象执行某一处理或回答某一规定的信息,它统一了数据流和控制流本题答案为D)
(7)D)【解析】面向对象程序设计措施并不强调自顶向下的构造程序,而常常是自底向上的,而自顶向下、逐渐求精是构造化程序设计的特点
(8)D)【解析】面向对象思想中的三个重要特性是封装性、继承性和多态性
(9)A)【解析】面向对象程序由若干个对象构成;构造化程序由数据和对应算法构成
(10)A)【解析】对象是由数据和容许的操作构成的封装体,与客观实体有直接的对应关系,对象之间通过传递消息互相联络,从而模拟现实世界中不一样事物彼此之间的联络,B)、C)、D)是对的的,对象的思想广泛应用于C++、Java等语言中,因此A)错误(ID O【解析】对象的基本特点标识唯一性、分类性、多态性、封装性和模块独立性
(12)0【解析】在面向对象程序设计中所使用的对象,其数据和操作是作为平等伙伴出现的因此,对象具有很强的自含性,此外,对象所固有的封装性,使得对象之间不互相影响
(13)D)【解析】面向对象措施是一种运用对象、类、封装、继承、多态和消息等概念来构造、测试、重构软件的措施面向对象措施从对象出发,发展出对象、类、消息、、继承等概念考点答案软件工程基础3
(1)D)【解析】本题考察软件的定义软件是计算机系统中与硬件互相依存的另一部分,它包括程次输出的整数是11
(5)C)【解析】本题重要考察的知识点是静态局部变量的运用假如在定义一种局部变量时使用了static关键字,则这个局部变量就被定义成了一种静态局部变量一般的局部变量伴随函数被调用而诞生,在函数返回时被销毁而静态局部变量在函数调用结束后不会被销毁,在下一次该函数被调用时,还会保留上一次函数调用结束时的值本题中fun()函数通过一种for循环来合计形参数组x的前n个元素之和在主函数中,第1次调用fun(a,5)时,返回的值应当是数组a的前5个元素的和,而第2次调用fun(b,4)时,返回的值除了本次合计的数组b前4个元素和之外,尚有上次合计的数组a的前5个元素的和,因此累加成果为60o
(6)A)【解析】本题考核的知识点是变量的生成期与作用域静态局部变量在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元由此可知静态局部变量的生存期将一直延长到程序运行结束故选项A对的;而全局变量的只有一种静态存储类别,故全局变量阐明为static存储类,和没有阐明为static存储类其生存期都是一直延长到程序运行结束,故选项B)不对的;未赋初值的auto型变量的初值是随机的,未赋初值的static型变量的初值是0(故选项C)和选项D)不对的)因此,4个选项中选项A)符合题意
(7)D)【解析】本题考察的知识点是全局变量的作用域全局变量的有效范围是从定义变量的位置开始到本源文献结束假如需要在其他源文献中使用该全局变量,则可以在其他源文献中使用extern关键字来申明该全局变量,这样该全局变量的作用域就被扩展到以extern申明了该全局变量的位置开始到此源文献结束故本题的对的答案为D)
(8)B)【解析】本题考察的知识点是局部变量的作用域static阐明全局变量时,此变量可称为静态全局变量,静态全局变量只限于本编译单位使用,不能被其他单位所引用,静态局部变量在编译时赋初值,在程序执行期间不能赋初值,而非不能更改,故本题选B)
(9)C)【解析】本题考核的知识点是局部变量和全局变量的区别若在函数中定义与全局变量名字相似的局部变量,则全局变量在该函数中将不起作用本题中定义了一种全局变量a和局部变量a在主函数中定义一种整型变量s并赋初值为0,接着定义了一种局部变量a并赋值为5,由于该局部变量a和全局变量a同名,故全局变量在复合语句中将不起作用,然后调用函数f(a)(该函数的作用是返回存储变量a的空间中的值,并让该值加1,分析程序可知返回值为5,并让a值加1变为6),并将返回值加到s中此时s的值为5,然后执行该复合语句外的其他语句,同样调用函数f(a)(该函数的作用是返回存储变量a的空间中的值,并让该值加1,分析程序此时的a是全局变量a,可知返回值为2,并让a值加1变为3)并将返回值加到s中此时s的值为7
(10)A)【解析】auto变量:无static申明的局部变量用auto作存储类别的申明时,可以不写auto,存储类别隐含确定为auto(自动存储类别),是动态存储方式大多数变量是自动变量用static申明的局部变量是静态局部变量函数调用结束后静态局部变量占据的内存存储单元空间不释放,局部变量保留原值,下次调用时可以继续使用该值用extern申明外部变量,外部变量即全局变量,可以用extem申明来变化全局变量的作用域,实际上,关键字“auto”可以省略,auto不写则隐含确定为“自动存储类别”,属于动态存储方式考点答案编译预处理和动态储存分类16
(1)C)【解析】带参数的宏定义命令行形式如下:#dcfinc宏名(形参表)替代文本在编译的时候编译预处理程序用“替代文本”来替代宏,即M(n,m)被替代为n%m,之后计算,将计算的成果赋给a注意,宏替代是在编译时由预处理程序完毕的,函数调用是在程序运行时进行的,在函数的调用过程中需要占用一系列的处理时间
(10)C)【解析】考察带参数的宏替代宏替代不像函数调用要进行参数值的计算、传递等,而只是简朴按照原格式进行字符串的替代3B【解析】根据宏替代的替代规则,我们可知,f2=2*N+l=2*5+l=ll,fl+l=1+1*N+1=1+1*5+1=74C【解析】本题考察的是带参数的宏宏替代与函数调用不一样,前者是字面上的,在编译期间完毕,后者是内容上的,在运行期间才进行题目中第1条要替代的语句il=f8/f4;展开后是il=8*8/4*4;,成果使il=4而第2条语句i2=f4+4/f2+2;展开后为i2=4+4*4+4/2+2*2+2;,成果使i2=24/8=3故应当选择C5A【解析】本题考核的知识点是宏定义的简朴应用本题中首先将所有的宏替代掉,则体现式为i=4+4*4+4/2+2*2+2,故最终输出的i的值为28因此,4个选项中选项A符合题意6B【解析】本题考察的是带参数的宏在此处需要直接替代整个式子,2*N+Y5即为2*2+2+1*5,可得成果为347A【解析】带参数的宏定义命令行形式如下:#define宏名形参表替代文本首先进行M的宏替代,之后再进行N的宏替代,替代后的体现式为a*b/co8B【解析】考察宏替代的使用宏替代用“#define宏名宏体”的形式来定义在进行编译预处理时,将把程序中宏定义之后的所有宏名用宏体替代宏虽然可以带参数,但宏替代过程中不像函数那样要进行参数值的计算、传递及成果返回等操作;宏替代只是简朴的字符替代,不进行计算,因而本题中的Sa+b进行宏替代后为PT*l+2*l+2=
5.5*1+2*1+2=
9.59D【解析】本题考察了二维数组元素引用的措施题中用动态存储分派函数malloc分派了一种int型数据长度大小的内存,然后指针p指向了这段内存,函数f中对p所指向的数据进行了赋值,为二维数组第二行第二列的元素,对应于实参a的元素5,因此输出成果为510C【解析】本题考察的是动态内存分派题目中的fun函数,首先定义了一种int型指针变量P,然后动态分派一种int型大小的内存空间给它,并将它初始化为参数n的值,然后返回这个值虽然看起来很复杂,但其实它仅仅就是将传递给它的参数保留了一份然后返回这个值因此在主函数中,a=fun10令a变为10,然后调用printfO函数输出a+fun10的值,也就是10+10=20,因此应当选择C考点答案构造体共用体和顾客自定义171B【解析】本题中,typedef申明新的类型名PER来替代已经有的类型名,PER代表上面指定的一种构造体类型,此时,也可以用PER来定义变量2B【解析】本题中,struct ex是构造体类型名,example是构造体变量名3C【解析】本题考察的是构造体的定义与typcdcf的使用方法将题目中的定义语句去掉前面的typedef和背面的OLD分号保留,就是一条完整的构造体定义语句,其中struct是阐明符,NODE是构造体名,大括号里面的是构造体组员的定义此时要申明该构造体变量时需要使用struct加构造体名一起来申明,struct NODE一起构成一种构造体类型,就仿佛字符类型char若只去掉前面的typedef,就是一条构造体定义同步申明一种构造体变量OLD的语句,由于OLD的前面部分是struct NODE的完整写法,可以看作是定义了一种新的构造体类型名4D【解析】构造体变量所占用内存的字节数是其所有组员所占用内存字节数之和本题中整型变量i所占用的内存是2字节,字符型变量ch所占用的内存是1字节,双精度型变量f所占用的内存是8字节,三者相加即可5B【解析】本题的考察点是构造体变量的定义定义一种构造体类型的变量,可采用3种措施
①先定义构造体类型再定义变量名;
②在定义类型的同步定义变量;
③直接定义构造体类型变量,即不出现构造体名;选项B符合第三种定义措施故本题答案为B6B【解析】构造体类型的变量在程序运行期间要作为一种整体占用持续的内存单元7C【解析】本题考察的是构造体的定义与typedef的使用方法将题目中的定义语句去掉前面的typedef和背面的NEW分号保留,就是一条完整的构造体定义语句,其中struct是阐明符,ST是构造体名,大括号里面的是构造体组员的定义此时要申明该构造体变量时需要使用struct加构造体名一起来申明,struct ST一起构成一种构造体类型,就仿佛字符类型char若只去掉前面的typedef,就是一条构造体定义同步申明一种构造体变量NEW的语句,由于NEW的前面部分是struct ST的完整写法,可以看作是struct STNEW,申明一种变量8B)【解析】本题考核的知识点是构造体类型定义和构造体的基本概念构造体类型的定义格式为strcut构造体名{组员阐明列表};构造体变量的定义有3种形式:第一种定义构造体型的同步定义构造体变量,如strcut构造体名{组员阐明列表}变量;第二种先定义一种构造体类型,然后使用该类型来定义构造体变量,如strcut student{组员阐明列表};student变量;第三种定义一种无名称的构造体类型的同步定义构造体变量,如strcut student{组员阐明列表}变量9B)【解析】考察构造体数组对构造体组员的引用构造体数组中对构造体组员的引用要先引用到数组元素,然后像看待一般的构造体变量同样来看待构造体数组元素10D)【解析】考察构造体组员变量的引用措施可用构造体变量名.数据组员名或者构造体指针一数据组员名两种措施来引用(1DC)【解析】本题重要考察了构造体变量引用组员数据的措施,重要有如下几种构造体变量名.组员名或构造体指针-》组员名的措施来引用构造体组员
(12)C)【解析】考察构造体组员数据的引用措施通过指针来引用构造体组员的措施是(指针变量)一构造体组员名
(13)C)【解析】本题考察的是*、-和++运算符的混合运算要计算一种复杂的体现式时,首先要弄明白体现式中所有运算符的优先级与结合性,本题中所波及的运算符中,-的优先级最高,*和++的优先级相似,但其结合性为从右至左因此选项A)等价于*(pt-y)也就是pt所指向的构造体的组员指针变量y所指向的内容从前面的程序段不难看出,pt指向构造体数组c的首地址,也就是指向它的第1个元素,在它的第1个元素中,指针变量y又被初始化为指向整型数组a的首地址,即指向数组a的第1个元素故选项A)中的体现式的值为a
[0],也就是1pt-x的值为10而D)选项(pt++)-x的值为20,也不对的只有C)选项符合题意
(14)B)【解析】本题的考察点是构造体变量的初始化该题是一种对外部存储类型的构造体变量进行的初始化初始化后,x的值为10,y的值为100++(pf x)中首先pf x是把p指向构造体变量s中的x组员,此++(p-x)就相称于++x,这时x先自增,再使用,因此此时x的值为11故本题答案为B)
(15)C)【解析】本题考察的是构造体指针题目一开始定义了一种构造体st,并同步申明了一种包括两个st构造的构造体数组data,且初始化为{1,10,2,20}主函数中,首先定义了一种指向构造体st的指针P,并初始指向data数组的首地址然后输出pf y和(++p)f x,其实等价于输出data
[0].y和data[l].x从初始化列表中可以看出,这两个值分别是10和2,故应当选择C)
(16)0)【解析】考察对构造体组员的引用措施构造体组员的引用可以用“构造体变量名.组员名”或者“构造体变量指针-组员名”两种方式来引用
(17)D)【解析】本题考察的是构造体变量赋值在C语言中,相似类型的构造体变量可以通过等号直接赋值,它会将对应组员一一对应赋值因此,本题申明并初始化了两个STU构造体变量a和b,然后将a赋给b,最终逐一输出b的各个组员,其实就是初始化a的内容,故本题应当选择D)
(18)A)【解析[本题考核的知识点是构造体类型的综合应用本题中首先定义了一种构造体类型STU,它由一种字符数组和一种整型变量num构成然后定义两个函数fl和f2其中fl是值传递的,f2是地址传递的主函数中定义两个构造体变量a和b并分别赋初值,接着调用函数fl(a),由于函数fl是值传递,故执行该函数后并没有变化a的值,在接着调用函数f2(b),由于该函数是地址传递,执行该函数后将使变量b的值为{〃SunDan〃,2044),故函数最终输出的a.num和b.num的值为2041和2044因此,4个选项中选项A)对的
(19)D)【解析】本题重要考察的是构造体用作函数参数构造体变量用作函数参数时,是将实参复制给被调用函数的形参,即传值因此,本题中的f()函数对传入参数的修改不会影响到外面的实参,即a的内容还是{1,2},故本题应当选择D)
(20)A)【解析】本题考察的是构造体变量用作函数参数构造体变量用作函数参数时是传值调用,即在函数内部无论怎样修改形参构造体变量的内容,都不会影响到调用函数时传递给函数的实参构造体变量因此,本题的f()函数没有任何实际作用,它变化不了什么内容故本题的成果是定义构造体c时给出的初始值,应当选择A)
(21)D)【解析】本题考察的是指针的应用解本题的关键是理解题目中的规定“将q和r所指结点互换前后位置,同步要保持链表的持续”我们不妨先想想互换后的样子,应当如下例data nextdata nextdata next…f Af Cf B-*••••t pt rt q然后比较一下互换前的样子,我们会发现,其中需要变化的指针只有3个
(22)D)【解析】本题考察的是C语言中构造体与链表本题中是一种具有两个结点的循环链表C语言中构造体的定义为struct构造体类型名(组员项表;);
(23)A)【解析】本题的考察点是指向构造体变量的指针以及用指针处理链表一种构造体变量的指针就是该变量所占据的内存字段的起始地址可以设一种指针变量,用来指向一种构造体变量,此时该指针变量的值是构造体变量的起始地址指针变量也可以用来指向构造体数组的元素在C语言中,q-next相称于(*q).next即q所指向的是构造体变量中的next组员链表是一种常见的重要的数据构造它是动态地进行存储分派的一种构造它根据需要开辟内存单元链表中的各元素在内存中可以不是持续寄存的因此必须运用指针变量才能实现即一种结点中应包括一种指针变量,用它寄存下一结点的地址r-next=q表达让q指向新开辟的结点,r指向链表中最终一种结点,把「所指的结点连接在q所指的结点背面同样,P一next=r表达让r指向新开辟的结点,p指向链表中最终一种结点,把p所指的结点连接在r所指的结点背面那么在A中,执行rf next二q后,rf next指向了q此时第2句相称于q—next=q;,因此q的下一种结点指向了自己,而不是指向本来r的下一种结点故本题答案为A)
(24)D)【解析】选项A),共用体的每个组员的起始地址都相似;选项B),共用体变量所占的内存长度等于最长的组员的长度;选项C)由于每个组员的起始地址相似,因此整型数5以浮点型输出时为
5.000000;选项D)C语言规定,不能把共用体变量作为函数的参数
(25)B)【解析】本题对共用体的使用进行了考察由于共用体所有组员共同占据一段存储空间,因此对组员变量的赋值,背面的赋值会覆盖掉前面的赋值,由于s.income=1000;是最终一次组员变量赋值,变量age与变量income共同占据一段存储空间,因此age的值也为1000考点答案位运算18
(1)o【解析】考察位运算的运算原理〈为左移运算符,运算符的左边是移位对象;右边是整型体现式,代表左移的位数,左移时,右端(低位)补0;左端(高位)移出的部分舍弃
(2)C)【解析】本题考察的是左移运算由于计算机中的数据都是以二进制形式寄存,而位移运算其实质就是将这些二进制左移或右移若干位,假如不考虑溢出的话,每左移1位其实就等价于对原数乘以2,右移1位就等价于对原数除以2这就仿佛在现实的十进制中,假如我们将100左移1位,成果是1000,是不是大了10倍?将100右移1位,成果是10,成果等于1/10了因此,本题中的成果是4*2=8,由于8不会超过char类型的表达范围,因此输出成果为8,应当选择C)
(3)D)【解析】本题考察的是位运算由于任何数在计算机中都是以二进制的形式存在的,而位运算就是直接针对一种数的二进制位来进行的某些操作题中的体现式b2意思是将b的二进制位往左移动2位,b的原值为2,即二进制的0000000000000010往左移动2位后应当变为0000000000001000,即十进制8不难看出每往左移动1位,就相称于在原值的基础上乘以1个2,但这也不一定精确,由于还要考虑往左移出去的那些位接下来是丁8,人是按位异或运算符,简朴来说就是比较参与运算的两个数对应的二进制位,若两个位相似则成果为0,否则其成果为1
(4)B)【解析】本题考察的知识点是右移运算根据右移运算的原理,右移一位相称于操作数缩小为本来的1/2,故本题选B)
(5)0【解析】本题考察的是对位与运算符的理解位与运算是将两个运算分量看作两个二进制数,然后对两个二进制数的对应位进行与运算,若同步为1则成果对应位为1,否则成果对应位为0因此,当两个运算分量相似时,它们的对应位肯定也相似,即不一样为1就同为0因此得到的成果和运算分量也相似因此,4个选项中选项C)符合题意
(6)B)【解析】本题考察的是对位与运算符的理解0x13的二进制数是00010011,0x17的二进制数是00010111,由位与运算规则,得到成果为00010011,即0x13
(7)B)【解析】本题考察的是位与运算,运算符的作用是当两个运算分量的对应二进制位假如都是1,则成果对应二进制位为1,否则为0计算23的成果为2
(8)B)【解析】本题考察两个位运算符按位异或运算符”一是双目运算符,其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,成果为1左移运算符“6”是双目运算符,其功能是把左边的运算数的各二进位所有左移若干位,由右边的数指定移动的位数,高位丢弃,低位补0,并且运算符的优先级高于
(9)A)【解析】本题考察的是位运算是按位异或运算,当对应位上的二进制数值相似时,异或的成果为0,对应位上的二进制数值不一样步,异或的成果为1,由于cl、c2的值相似,因此异或的成果为0,因此A)为对的答案
(10)A)【解析】本题重要考察的是位运算选项A)中运算符的作用是按位异或即两个运算分量的对应二进制位假如相异,则成果对应二进制位为1,否则为0因此,二000的成果是lOlOHOlo选项B)中,”运算符的作用是按位或即两个运算分量的对应二进制位假如有一种是1,则成果对应二进制位为1,否则为0因此,的成果是11111101选项C)中运算符的作用是按位与即两个运算分量的对应二进制位假如都是1,则成果对应二进制位为1,否则为0因此,01011101U11000的成果为01010000,选项D)中“6”运算符的作用是左移运算符,将a左移4位,显然不符合题意考点答案文献19
(1)0【解析】本题考察了C语言中文献的某些基本概念定义文献类型指针变量的一般形式为FILE*指针变量名;因此选项C)是错误的,应当选择C)
(2)D)【解析】此题考察文献打开方式对文献操作的影响由于打开文献进行修改,可见选项A)是错误的,由于此种方式打开时,只能读,不能写,当然无法修改;选项B)是以追加方式“ab+”打开文献读写,以这种方式打开时,新写入的数据只能追加在文献原有内容之后,但可以对此前的数据读出换言之,“ab+”或“a+”方式打文献后,对于写操作,文献指针只能定位在文献的原有内容之后,但对于读操作,文献指针可以定位在全文献范围内,可见,按此种方式打开文献不能实现文献内容的修改;选项C)以“w+”方式打开文献,此时,原文献中已存在的内容都被清除,但新写入文献的数据可以被再次读出或再次写入,故也不能实现对文献的修改只有以“r+”方式打开文献时,才容许将文献本来数据读出,也容许在某些位置上再写入,从而实现对文献的修改
(3)B)【解析】以“wt”方式写入的是字符文献,转义字符\n被看做两个字符来处理而“wb”方式写入的是二进制文献,转义字符‘\n是一种字符
(4)C)【解析】本题考察的是文献指针feof的运用当文献读到结尾时,feof(fp)为非零值,否则为0
(5)D)【解析】将有6个元素的整型数组分两行输出到一种文献中,由于输出的都是数字并且每行都没有分隔符,因此当再对其进行读取操作时,每一行都会被认为是一种完整的数,而换行符则作为它们的分隔符
(6)B)【解析】本题重要考察的是文献的操作程序一开始定义了一种文献指针FILE*fp;,然后通过fopen函数以只写方式打开dl.dat文献,使用一种for循环往dl.dat文献里面依次写入数组a的三个值,再写入一种换行符,最终通过fclose函数关闭dl.dat文献此时,dl.dat中的内容应当是“123”接下来又通过fopen函数以只读方式打开dl.dat文献,使用fscanf函数读取1个整数,考生也许会认为读取的只是第1次写入的整数1,其实它将整个123当成1个整数给读进来了,因此读取后n的值为123
(7)B)【解析】本题重要考察的是输入输出函数从终端输入的函数有scanf.getchar.gets输出到屏幕的函数有printf、putchar、puts从磁盘文献输入的函数有fscanf fgetcfgets、fread getCoo输出到磁盘文献的函数有fprintf、fputc fputsfwrite、putc由此可见,选项B)的说法是错误的o
(8)B)【解析】本题考察的是文献操作题中“fopen(fn,〃w〃)”的作用是打开fn所指向的文献,使用文献方式为“写入;fputs(str,fp)的作用是将字符str的值输出到fp所指向的文献中去在程序中,两次使用“写入”的方式打开同一种文献,在第二次打开时,文献指针指向文献头,因此本次写入的数据覆盖了文献原有的数据,故本题中tl.dat的内容为end故本题答案为B)
(9)B)【解析】本题考察的是文献操作程序首先定义了一种文献指针pf,并使用fopen()函数以“wb+”方式新建一种可读写的二进制文献“
123.dat”然后使用fwriteO函数写入字符串s2的前7*1个字符目前文献中的内容应当为“Beijing”接下来程序使用rewind函数,将文献的读写指针调回起始位置并又调用fwriteO函数写入字符串si的前5*1个字符因此文献原内容“Beijing”的前5个字符被覆盖,成果为果为nang”,故本题应当选择B)序、有关数据及其阐明文档的总和因此,本题的对的答案是选项D)
(2)C)【解析】软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科所谓软件工程是指采用工程的概念、原理、技术和措施指导软件的开发与维护软件工程学的重要研究对象包括软件开发与维护的技术、措施、工具和管理等方面由此可见,选项A)、选项B)和选项D)的说法均不对的,选项C)对的
(3)D)【解析】软件工程包括3个要素,即措施、工具和过程
(4)C)【解析】软件工程概念的出现源自于软件危机为了消除软件危机,通过认真研究处理软件危机的措施,认识到软件工程是使计算机软件走向工程科学的途径,逐渐形成了软件工程的概念
(5)A)【解析】本题考核软件维护的概念维护是软件生命周期的最终一种阶段,也是持续时间最长、付出代价最大的阶段在软件交付使用后,还需要进行维护软件维护一般有如下四类为纠正使用中出现的错误而进行的改正性维护;为适应环境变化而进行的适应性维护;为改善原有软件而进行的完善性维护;为未来的可维护和可靠而进行的防止性维护软件维护不仅包括程序代码的维护,还包括文档的维护综上所述,本题的对的答案是选项A),其他选项的说法错误
(6)D)【解析】软件生命周期分为软件定义、软件开发及软件运行维护3个阶段本题中,详细设计、软件编码和软件测试都属于软件开发阶段;维护是软件生命周期的最终一种阶段,也是持续时间最长、花费代价最大的一种阶段,软件工程学的一种目的就是提高软件的可维护性,减少维护的代价
(7)A)【解析】一般将软件产品从提出、实现、使用维护到停止使用的过程称为软件生命周期它可以分为软件定义、软件开发及软件运行维护3个阶段
(8)C)【解析】软件生命周期由软件定义、软件开发和软件维护3个时期构成软件开发时期是详细设计和实目前前一时期定义的软件,它一般由下面五个阶段构成概要设计、详细设计、编写代码、组装测试和确认测试
(9)D)【解析】一般,将软件产品从提出、实现、使用维护到停止使用退伍的过程称为软件生命周期也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期软件生命周期的重要活动阶段为
①可行性研究和计划制定确定待开发软件系统的开发目的和总的规定,给出它的功能、性能、可靠性以及接口等方面的也许方案,制定完毕开发任务的实行计划
②需求分析看待开发软件提出的需求进行分析并给出详细定义,即精确地确定软件系统的功能编写软件规格阐明书及初步的顾客手册,提交评审
③软件设计系统设计人员和程序设计人员应当在反复理解软件需求的基础上,给出软件的构造、模块的划分、功能的分派以及处理流程
④软件实现把软件设计转换成计算机可以接受的程序代码即完毕源程序的编码,编写顾客手册、操作手册等面向顾客的文档,编写单元测试计划
⑤软件测试在设计测试用例的基础上,检查软件的各个构成部分编写测试分析汇报
⑥运行和维护将已交付的软件投入运行,并在运行使用中不停地维护,根据新提出的需求进行必要并且也许的扩充和删改
(10)D)【解析】需求分析是软件定义时期的最终一种阶段,它的基本任务就是详细调查现实世界要处理的对象(组织、部门、企业等),充足理解原系统的工作概况,明确顾客的多种需求,然后在此基础上确定新系统的功能选项A)软件开发措施是在总体设计阶段需完毕的任务;选项B)软件开发工具是在实现阶段需完毕的任务;选项C)软件开发费用是在可行性研究阶段需完毕的任务(ID O【解析】常见的需求分析措施有构造化分析措施和面向对象的分析措施构造化分析就是使用数据流图(DFD)、数据字典(DD)、构造化语言、鉴定表和鉴定树等工具,来建立一种新的、称为构造化规格阐明的目的文档
(12)B)【解析】软件开发阶段包括需求分析、总体设计、详细设计、编码和测试5个阶段其中需求分析阶段常用的工具是数据流图和数据字典本题答案为B)
(13)A)【解析】数据流图中的重要图形元素有加工、数据流、存储文献、源和潭
(14)D)【解析】软件需求规格阐明书(Software RequirementSpecification,SRS)是需求分析阶段的最终成果,是软件开发中的重要文档之一它具有如下几种方面的作用
①便于顾客、开发人员进行理解和交流;
②反应出顾客问题的构造,可以作为软件开发工作的基础和根据;
③作为确认测试和验收的根据
(15)B)【解析】软件设计包括软件构造设计、数据设计、接口设计和过程设计其中,构造设计是定义软件系统各重要部件之间的关系;数据设计是将分析时创立的模型转化为数据构造的定义;接口设计是描述软件内部、软件和操作系统之间及软件与人之间怎样通信;过程设计则是把系统构造部件转换成软件的过程性描述
(16)D)【解析】在构造化程序设计中,一般较优秀的软件设计尽量做到高内聚、低耦合,这样有助于提高软件模块的独立性,也是模块划分的原则
(17)C)【解析】软件设计遵照软件工程的基本目的和原则,建立了合用于在软件设计中应当遵照的基本原理和与软件设计有关的概念,它们具有抽象、模块化、信息隐蔽和数据独立性自底向上是集成测试中增量测试的一种
(18)C)【解析】模块的独立程序是评价设计好坏的重要度量原则衡量软件的模块独立性使用耦合性和内聚性两个定性的度量原则一般较优秀的软件设计,应尽量做到高内聚,低耦合
(19)B)【解析】系统设计的质量重要反应在模块的独立性上评价模块独立性的重要原则有两个一是模块之间的耦合,它表明两个模块之间互相独立的程度;二是模块内部之间的关系与否紧密,称为内聚一般来说,规定模块之间的耦合尽量地弱,即模块尽量独立,而规定模块的内聚程度尽量地高综上所述,选项B)的答案对的
(20)B)【解析】运用信息隐蔽,可以保证每一种模块的独立性
(21)C)【解析】模块之间的耦合程度反应了模块的独立性,也反应了系统分解后的复杂程度按照耦合程度从强到弱分别是内容耦合、公共耦合、外部耦合、控制耦合、标识耦合、数据耦合和非直接耦合,没有异构耦合这种方式
(22)C)【解析】总体设计过程一般由两个重要阶段构成系统设计,确定系统的详细实现方案;构造设计,确定软件构造为确定软件构造,首先需要从实现角度把复杂的功能深入分解分析员结合算法描述仔细分析数据流图中的每个处理,假如一种处理的功能过度复杂,必须把它的功能合适地分解成一系列比较简朴的功能
(23)C)【解析】程序流程图是人们对处理问题的措施、思绪或算法的一种图形方式的描述其中,图框表达多种操作的类型,图框中的文字和符号表达操作的内容;流程线表达操作的先后次序带箭头的线段在数据流程图中表达数据流;带箭头的线段在程序流程图中表达控制流题中给出的选项中,在图元之间用带有箭头的线段表达图元关系在模块之间用带有箭头的线段表达调用关系
(24)B)【解析】N-S图是由Nassi和Shneiderman提出的一种符合程序化构造设计原则的图形描述工具它的提出是为了改善流程图在描述程序逻辑时的不灵活性
(25)D)【解析】数据流图DFD是构造化分析措施最重要的一种图形工具,不属于过程设计工具
(26)C)【解析】软件测试是为了发现错误而执行程序的过程,且为了到达好的测试效果,应当由独立的第三方来构造测试,程序员应尽量防止检查自己的程序
(27)D)【解析】使用人工或自动手段来运行或测定某个系统的过程,目的在于检查它与否满足规定的需求或是弄清预期成果与实际成果之间的差异软件测试是为了发现错误而执行程序的过程测试以查找错误为目的,而不是为了演示软件的对的功能
(28)D)【解析】软件测试过程中,辅助资源包括测试用例(测试数据)、测试计划、出错记录和最终分析汇报等
(29)A)【解析】确认测试的任务是验证软件的功能和性能,以及其他特性与否满足需求规格阐明中确定的多种需求;集成测试的重要目的是发现与接口有关的错误
(30)D)【解析】由于测试的目的在于发现错误,从心理学角度讲,由程序的编写者自己进行测试是不合适的,为了到达最佳的测试效果,应当由独立的第三方进行测试工作,因此选项A)错误;程序调试,修改一种错误的同步也许引入了新的错误,处理的措施是在修改了错误之后,必须进行回归测试,因此选项B)错误;所谓软件维护,就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程,可见选项C)也是错误的
(31)B)【解析】本题考察软件工程调试调试与测试是两个不一样的过程,有着主线的区别调试是一种随机的、不可反复的过程,它用于隔离和确认问题发生的原因,然后修改软件来纠正问题;测试是一种有计划的、可以反复的过程,它的目的是为了发现软件中的问题因此,软件调试的目的是为了改正软件中的错误本题的对的答案是选项B)考点答案数据库设计基础4
(1)C)【解析】数据库(DataBase,DB)是数据的集合,它具有统一的构造形式并寄存于统一的存储介质内,是多种应用数据的集成,可以被各个应用程序所共享数据库中的数据具有“集成”、“共享”的特点
(2)B)【解析】由于数据的集成性使得数据可被多种应用程序共享,尤其是在网络发达的今天,数据库与网络的结合扩大了数据库的应用范围,因此数据库技术的主线问题是处理数据的共享问题
(3)B)【解析】数据库管理系统(Database ManagementSystem,DBMS)是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,数据库管理系统是数据库系统的关键
(4)C)【解析】数据库管理系统DBMS是数据库系统中实现多种数据管理功能的关键软件它负责数据库中所有数据的存储、检索、修改以及安全保护等,数据库内的所有活动都是在其控制下进行的因此,DBMS包括数据库DB操作系统、数据库管理系统与应用程序在一定的硬件支持下就构成了数据库系统因此,DBS包括DBMS,也就包括DB综上所述,选项C)对的
(5)D)【解析】文献系统所管理的数据文献基本上是分散的、互相独立的,因此相对于数据库系统,文献系统数据处理存在3个缺陷,即数据冗余大、数据的不一致性、程序与数据的互相依赖(简称为数据依赖)
(6)C)【解析】数据库技术的重要目的是有效地管理和存取数据资源,包括提供数据的共享性,使多种顾客可以同步访问数据库中的数据;减少数据的冗余度,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价
(7)A)【解析】数据库系统的数据具有高共享性和低冗余性,但不能完全防止数据冗余;数据的一致性是指在系统中同一数据的不一样出现应保持相似的值
(8)D)【解析】数据具有两方面的独立性一是物理独立性,即由于数据的存储构造与逻辑构造之间由系统提供映象,使得当数据的存储构造变化时,其逻辑构造可以不变,因此,基于逻辑构造的应用程序不必修改;二是逻辑独立性,即由于数据的局部逻辑构造(它是总体逻辑构造的一种子集,由详细的应用程序所确定,并且根据详细的需要可以作一定的修改)与总体逻辑构造之间也由系统提供映象,使得当总体逻辑构造变化时,其局部逻辑构造可以不变,从而根据局部逻辑构造编写的应用程序也可以不必修改综上所述,本题的对的答案是D)
(9)A)【解析】选项A)对的,外模式是顾客的数据视图,也就是顾客所见到的数据模式;选项B)不对的,全局数据视图的描述称为概念模式,即数据库中所有数据的整体逻辑构造的描述;选项C)不对的,物理存储数据视图的描述称为内模式,即数据库在物理存储方面的描述;选项D)不对的,存储模式即为内模式
(10)C)【解析】数据模型所描述的内容有3个部分,它们是数据构造、数据操作和数据约束其中,数据模型中的数据构造重要描述数据的类型、内容、性质,以及数据库的联络等;数据操作重要是描述在对应数据构造上的操作类型与操作方式本题答案为C)(IDA)【解析】两个实体之间的联络实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联络、一对多(或多对一)的联络和多对多的联络;概念模型便于向多种模型转换由于概念模型不依赖于详细的数据库管理系统,因此,轻易向关系模型、网状模型和层次模型等多种模型转换
(12)A)【解析】属性(Attribute)实体所具有的某一特性称为属性一种实体可以由若干个属性来刻画
(13)D)【解析】两个实体间的联络可以归纳为3种类型一对一联络一对一的联络体现为主表中的每一条记录只与有关表中的一条记录有关联一对多联络或多对一联络一对多的联络体现为主表中的每一条记录与有关表中的多条记录有关联多对多联络多对多的联络体现为一种表中的多种记录在有关表中同样有多种记录与其匹配一种教师可讲授多门课程,一门课程可由多种教师讲授,因此实体教师和课程间的联络是多对多的联络
(14)B)【解析】实体之间的联络类型重要有一对
一、一对多、多对多,按题意可知部门与职工之间的联络类型是一对多因此本题应选B)
(15)A)【解析】在E-R图中,用矩形框表达实体,框内标明实体名;用椭圆框表达实体的属性,框内标明属性名;用菱形框表达实体间的联络,框内标明联络名
(16)B)【解析】层次模型是最早发展出来的数据库模型它的基本构造是树形构造,这种构造方式在现实世界中很普遍,如家族构造、行政组织机构,它们自顶向下、层次分明
(17)C)【解析】关系模型较之格式化模型(网状模型和层次模型)有如下几方面的长处,即数据构造比较简朴、具有很高的数据独立性、可以直接处理多对多的联络,以及有坚实的理论基础
(18)C)【解析】在关系模型数据库中,基本构造是二维表,这种二维表称为关系关系的列称为属性,一种具有N个属性的关系称为N元关系
(19)A)【解析】关系表中,每一行称为一种元组,对应表中的一条记录;每一列称为一种属性,对应表中的一种字段;在二维表中能唯一标识元组的最小属性集称为该表的键或码
(20)A)【解析】在关系数据库中,一种表就是一种关系,关系数据库管理系统管理的关系就是多种二维表
(21)D)【解析】数据模型用来表达实体间的联络,但不一样的数据库管理系统支持不一样的数据模型常用的数据模型有层次模型、网状模型和关系模型,层次模型不能表达多对多联络,网状模型和关系模型都能表达任意一种联络
(22)C)【解析】软件开发模型包括瀑布模型、迅速原型法模型和螺旋模型
(23)A)【解析】关系运算中的选择运算是从关系中找出满足给定条件的元组的操作;投影运算是从关系中选择若干个属性构成新的关系的操作;连接运算是关系的横向结合
(24)B)【解析】两个相似构造关系的“并”是由属于这两个关系的元组构成的集合
(25)C)【解析】选择运算是一种一元运算,关系R通过选择运算(并由该运算给出所选择的逻辑条件)后仍为一种关系这个关系是由R中那些满足逻辑条件的元组所构成假如关系的逻辑条件为f,则R满足f的选择运算可以写成Of(R)本题答案为C)°
(26)C)【解析】关系运算分为
①老式的关系运算(集合运算)进行并、差、交集合运算的两个关系必须具有相似的关系模式,即相似构造在Access中没有提供老式的集合运算,可以通过其他操作或编写程序来实现
②专门的关系运算选择从关系中找出满足给定条件的元组的操作称为选择投影从关系模式中指定若干个属性构成新的关系称为投影连接连接是关系的横向结合连接运算将两个关系模式拼接成一种更宽的关系模式,生成的新关系中包括满足连接条件的元组
(27)A)【解析】本题考察集合运算在关系数据库理论中,两个关系的并是由属于这两个关系的元组构成的集合,故选项A)对的两个关系的交是由既属于一种关系又属于另一种关系的元素构成的集合,两个集合的差运算是由从一种集合中去掉另一种集合中有的元素构成两个集合的交运算是由既属于前一种集合又属于后一种集合的元素构成
(28)B)【解析】本题考察数据库的关系运算两个关系的并运算是指将第一种关系的元组加到第二个关系中,生成新的关系因此,并运算不变化关系表中的属性个数,也不能减少元组个数两个关系的交运算是包括同步出目前第一种和第二个关系中的元组的新关系因此,交运算不变化关系表中的属性个数,但能减少元组个数投影是一元关系操作投影操作选用关系的某些属性,这个操作是对一种关系进行垂直分割,消去某些属性,并重新安排属性的次序,再删除反复的元组因此,投影运算既可以减少关系表中的属性个数,也可以减少元组个数两个关系的笛卡儿积会增长属性个数
(29)B)【解析】关系数据库管理系统能实现的专门关系运算,包括选择运算、投影运算、连接运算
(30)A)【解析】R-S表达属于R但不属于S,k3-$)表达既属于1<又属于5,即相称于RGS
(31)D)【解析】关系R与S经交运算后所得到的关系T是由那些既在R内又在S内的有序元组所构成
(32)C)【解析】对于两个关系的合并操作可以用笛卡儿积表达设有n元关系R和ni元关系S,它们分别有P和q个元组,则R与S的笛卡儿积记为RXS,它是一种m+n元关系,元组个数是pXq,由题意可得,关系T是由关系R与关系S进行笛卡儿积运算得到的
(33)D)【解析】数据库的生命周期可以分为两个阶段一是数据库设计阶段;二是数据库实现阶段数据库的设计阶段又分为4个子阶段即需求分析、概念设计、逻辑设计和物理设计因此,本题的对的答案是D)°
(34)A)【解析】本题考察数据库系统的基本概念和知识数据的逻辑构造,是数据间关系的描述,它只抽象地反应数据元素之间的逻辑关系,而不管其在计算机中的存储方式数据的存储构造,又叫物理构造,是逻辑构造在计算机存储器里的实现这两者之间没有必然的联络因此,选项A)的说法是错误的数据库可以当作是长期存储在计算机内的、大量的、有构造的和可共享的数据集合因此,数据库具有为多种顾客所共享的特点不一样的顾客可以使用同一种数据库,可以取出它们所需要的子集,并且容许子集任意重叠数据库的主线目的是要处理数据的共享问题因此,选项B)的说法对的
(35)C)【解析】E-R图向关系模型的转换原则
①一种实体型转换为一种关系模型,实体的属性就是关系的属性,实体的键就是关系的键;
②一种联络转换为一种关系模式,与该联络相连的每个实体型的键以及联络的属性都转换为关系的属性这个关系的键分为如下三种不一样的状况若联络为1:1,则相连的每个实体型的键均是该关系模式的候选键若联络为l n,则联络对应的关系模式的键取n端实体型的键若联络为m:n,则联络对应的关系模式的键为参与联络的诸实体型的键的组合考点答案程序设计基本概念5
(1)B)【解析】本题考核的知识点是C程序的基本概念C语言一种高级语言,C语言源程序通过C语言编译程序编译之后,生成一种后缀为.obj的二进制文献(称为目的文献),最终还要由称为“连接程序”(Link)的软件,把此.obj文献与C语言提供的多种库函数连接在一起,生成一种后缀,exc的可执行文献显然C语言不能立即执行,故选项A)错误根据以上定义,选项C)和选项D)错误,因此,4个选项中选项B)符合题意
(2)D)【解析】本题考察的是C程序的基本概念C语言是一种高级语言,C语言源程序通过C语言编译程序编译之后,生成一种后缀为.obj的二进制文献(称为目的程序),最终还要由称为“连接程序”(Link)的软件,把此.obj文献与C语言提供的多种库函数连接在一起,生成一种后缀.exe的可执行程序显然C语言源程序不能立即执行,故选项A)错误根据以上定义,选项B)和选项C)错误故本题应当选择D)
(3)D)【解析】一种C语言的源程序(后缀名为.c)在通过编译器编译后,先生成一种汇编语言程序,然后由编译程序再将汇编语言程序翻译成机器指令程序,即目的程序(后缀为.obj),目的程序不可以直接运行,它要和库函数或其他目的程序连接成可执行文献(后缀名为.exe)后方可运行
(4)B)【解析】本题考察的是算法的特性一种算法应当具有如下5个特性有穷性;确定性;可行性;有零个或多种输入;有一种或多种输出简洁性不属于这5个特性,因此本题应当选择B)
(5)B)【解析】本题考核的知识点是算法的性质算法是为处理某个特定问题而采用确实定的且有限的环节,一种算法应当具有如下5个基本特性
①有穷性,就是指一种算法应当包具有限个操作环节
②确定性,就是说算法中每一条指令必须有确切的含义,不能有二义性,对于相似的输入必能得出相似的执行成果
③有零个或多种输入
④可行性,就是说算法中指定的操作,都可以通过已经实现的基本运算执行有限次实现,
⑤有一种或多种输出由此可知选项B)不对的,因此,4个选项中选项B)符合题意
(6)C)【解析】一种算法应当具有5个特性,即有穷性、确定性、可行性、有零个或多种输入以及有一种或多种输出算法确实定性是指算法中每一条指令必须有确切的含义,读者理解时不会产生二义性并且在任何条件下,算法只有唯一的一条执行途径,即对于相似的输入只能得出相似的执行成果
(7)C)【解析】算法具有的5个特性是有穷性;确定性;可行性;有0个或多种输入;有一种或多种输出因此说,用C程序实现的算法可以没有输入但必须要有输出
(8)A)【解析】本题考核的知识点是C程序的3种基本构造C程序由3种基本的构造构成,分别为次序构造、选择构造和循环构造,这3种构造可以构成任何复杂的C程序,即可以完毕任何复杂的任务,故选项B)、选项C)和选项D)都不对的因此,4个选项中选项A)符合题意
(9)答案程序设计的初步知识C
(1)D)【解析】在C语言所有的运算符中,逗号运算符的优先级最低C语言中辨别大小写,因此APH和aph是两个不一样的变量赋值体现式a二b表达将b的值赋给a,而b自身的值保持不变,通过键盘可以向计算机输入容许的任何类型的数据选项D)中当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数值和整型数值等
(2)0【解析】本题重要考察的知识点是运算符的优先级和结合性解本题的关键在于体现式z=x++、y++、++y的计算,其中有三种运算符“二”、”和“++”,它们的优先级从高到低依次是“++”、“二”和“,”,因此原体现式就相称于(z=(x++)),(y++),(++y)自增运算符“++”是单目运算符,即它只对一种运算分量起作用,根据其在运算分量的前面或背面分为前缀和后缀两种形式两种形式的作用效果是同样的,都是使运算分量的值加1,不过它们的体现式的值不一样样,前缀形式体现式的值为运算分量加1之后的值,后缀形式体现式的值为运算分量加1之前的值
(3)C)【解析】求余运算符“犷两边的运算对象必须是整型,而选项B)和D)中“犷两边的运算对象有浮点数据,因此选项B)和D)是错误的体现式在选项A)中赋值体现式左侧要为“左值”,也是错误的选项C)是一种逗号体现式,因此对的答案为C)
(4)D)【解析】考察printf函数的有关知识输出格式控制符%c表达将变量以字符的形式输出;输出格式控制符知表达将变量以带符号的十进制整型数输出,因此第一种输出语句输出的成果为a,97;第二个输出语句输出的成果为k=12因此选项D)为对的答案
(5)D)【解析】本题重要考察的是原则输出函数printfprintf函数在进行参数匹配时,并不会检查参数类型与否一一匹配,也不会检查参数个数与否一致,而是从它认为应当是第1个参数地址的内存位置开始,依次将内存中的内容逐一匹配给格式化字符串内所给定的各个类型因此,前一种printf调用,两个ch分别匹配给%c和%d,而参数k多出,被抛弃因此会输出“a,97,(字符a的ASCII值为97)°后一种printf很正常,这里就不解释了故应当选择D)
(6)B)【解析】本题重要考察的知识点是整型常量整型常量有十进制、八进制和十六进制3种表。
个人认证
优秀文档
获得点赞 0