全国计算机等级考试《二级C语言程序设计》真题题库汇总(含答案详解)_第1页
全国计算机等级考试《二级C语言程序设计》真题题库汇总(含答案详解)_第2页
全国计算机等级考试《二级C语言程序设计》真题题库汇总(含答案详解)_第3页
全国计算机等级考试《二级C语言程序设计》真题题库汇总(含答案详解)_第4页
全国计算机等级考试《二级C语言程序设计》真题题库汇总(含答案详解)_第5页
已阅读5页,还剩160页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1全国计算机等级考试《二级C语言程序设计》真题题库汇总(含答案详解)一、单选题1.待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。A、2B、3C、4D、5答案:B解析:简单选择排序的算法可以描述为:将整个待排序序列分为有序和无序两部分,初始时有序部分为空;每一趟排序时扫描无序序列,找到最小的元素,将它与无序序列的首元素交换位置,直到无序序列为空。所以第一趟排序后,将选出的最小元素9与15交换,15被放在第3个位置。答案选择B选项。2.有如下程序:

#include<stdio.h>main()

{

inti;for(i=0;i<5;i++)putchar('9'-i);

printf("\n");

}

程序运行后的输出结果是()。A、54321B、98765C、'9''8''7''6''5'D、'43210'答案:B解析:本题执行过程为:i=0,输出字符9,在i<5的情况下,依次输出字符8、7、6、5。在i=5时,退出for循环。最后显示在命令窗口结果为98765。答案选择B选项。3.下列关系表达式中,结果为“假”的是()。A、(3+4)>6B、(3!=4)>2C、3<=4ǁ3D、(3<4)==1答案:B解析:A项,先执行3+4=7,7>6,结果为真;B项,先执行3!=4为真,即为

1,1>2结果为假;C项,先执行3<=4结果为真,即1,再逻辑或运算只要左边值为1,就不在执行右边运算,结果为真;D项,先执行3<4结果为真,即为1,再执行1==1,结果为真。答案选择B选项。4.以下程序:

#include<stdio.h>

Voidfun(intx)

{if(x/2>1)fun(x/2);printf("%d",x);

}

Main()

{

fun(7);

printf("\n");

}

程序运行后的结果是()。A、137B、731C、73D、37答案:D解析:函数fun是递归函数,递归终止条件是x小于等于3,当大于3时递归调用fun(x/2)。第一次循环x/2=3,调用fun(3),x/2=1,跳出if循环,执行输出x=3,然后回到第一次循环,执行if循环的语句,输出x=7。答案选择D选项。5.下列叙述中正确的是()。A、可以用关系运算符比较字符串的大小B、空字符串不占用内存,其内存空间大小是0C、两个连续的单引号是合法的字符常量D、两个连续的双引号是合法的字符串常量答案:D解析:A项错误,关系运算符不能比较字符串大小,可以用函数库中的字符串比较函数来比较字符串的大小;B项错误,空字符串占用一个字节的内存;C项错误,字符常量是用单引号把一个字符括起来;D项正确,两个连续的双引号是一个字符串常量,称为空串。答案选择D选项。6.下列不属于软件工程3个要素的是()。A、工具B、过程C、方法D、环境答案:D解析:软件工程是指用工程化的原则和方法来构建和维护软件,其要素包括:①方法,用于完成软件工程项目的技术手段;②工具,用于支持软件的开发、管理、文档生成;③过程,用于支持软件开发的各个环节的控制、管理。答案选择D选项。7.在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。A、uto和registerB、extern和registerC、auto和staticD、static和register答案:A解析:C语言中,动态存储区域中存放的变量在使用时才分配内存空间。auto变量的存储单元是分配在内存的动态存储区中,每当进入函数体时自动分配存储单元。register变量也是自动类变量。static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储单元,直至程序运行结束。extern说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。答案选择A选项。8.有以下程序:

#include<stdio.h>voidfun(int*p,int*q)

Main(){

intm=1,n=2,*r=&m;f(r,&n);

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

}

Voidf(int*p,int*q)

{p=p+1;*q=*q+1;

}

程序运行后的输出结果是()。A、1,3B、2,3C、1,4D、1,2答案:A解析:语句p=p+1;只改变指针p的地址,与p的内容无关,所以m值没有改变,而语句*q=*q+1;是改变该指针所指地址中的内容,所以n变为3,m不变,仍为1,答案选择A选项。9.下列叙述中正确的是()。A、所有数据结构必须有根结点B、所有数据结构必须有终端结点(即叶子结点)C、只有一个根结点,且只有一个叶子结点的数据结构一定是线性结构D、没有根结点或没有叶子结点的数据结构一定是非线性结构答案:D解析:D项正确,线性结构的特点是:①集合中必存在“第一个元素”且惟一;②集合中必存在“最后一个元素”且惟一;③除最后一个元素外,其他数据元素均有惟一的“后继”;④除第一个元素外,其他数据元素均有惟一的“前驱”。所以没有根结点或没有叶子结点的数据结构一定是非线性结构。AB两项错误,不是所有数据结构都必须有根结点和叶子结点;C项错误,数据结构中若有中间结点不满足只有一个前件或者后件的条件,就不是线性结构。答案选择D选项。10.设二叉树如下:

则后序序列为()。A、BDEGCFHB、DBGEAFHCC、DGEBHFCAD、ABCDEFGH答案:C解析:后序遍历,先访问左子树,再访问右子树,最后访问根结点。法一:本题中,树不为空,所以先后序遍历左子树,得DGEB,再后序遍历右子树,得HFC,最后访问根结点。所以该二叉树的后序序列为

DGEBHFCA。法二:由后序遍历的过程知,树的根结点一定是最后遍历到,即A结点一定在遍历序列的最后,答案选择C选项。11.以下函数按每行8个输出数组中的数据:

Voidfun(int*w,intn)

{inti;

for(i=0;i<n;i++)

{

______

printf("%d",w[i]);

}

printf("\n");

}下划线处应填入的语句是()。A、if(i/8==0)printf("\n");B、if(i/8==0)continue;C、if(i%8==0)printf("\n");D、if(i%8==0)continue;答案:C解析:每行输出8个数组数据后输入一个换行,所以应该采取对8取余的方法,余数循环一次便换行一次,所以语句为if(i%8==0)printf("\n");答案选择C选项。12.有以下程序:

#include<stdio.h>main(){

while(getchar()!='\n');

}

以下叙述中正确的是()。A、此while语句将无限循环B、getchar()不可以出现在while语句的条件表达式中C、当执行此while语句时,只有按回车键程序才能继续执行D、当执行此while语句时,按任意键程序就能继续执行答案:C解析:本题中while循环条件为getchar()!='\n',表示只要不输入回车键,getchar()!='\n'语句一直为真,则while循环会出现空循环,当按下回车键后跳出while循环执行下一条语句。答案选择C选项。13.有以下函数:

#include<stdio.h>

Voidfunc(intn)

{inti;for(i=0;i<=n;i++)printf("*");printf("#");

}main(){func(3);printf("????");func(4);

printf("\n");

}

程序运行后的输出结果是()。A、****#????***#B、***#????*****#C、**#????*****#D、****#????*****#答案:D解析:从main函数开始,执行func(3)函数,for循环执行4次,连续输出四个

“*”,然后输出一个“#”;输出“????”;再次调用func(4),for循环执行5

次,连续输出五个“*”,然后输出一个“#”;最后输出换行符。答案选择D选项。14.有以下程序:

#include<stdio.h>intb=2;

Intfun(int*k)

{

b=*k+b;

return(b);}main(){

inta[10]={1,2,3,4,5,6,7,8},i;

for(i=2;i<4;i++)

{

b=fun(&a[i])+b;

printf("%d",b);

}

printf("\n");

}

程序运行后的输出结果是()。A、1012B、810C、1028D、1016答案:C解析:因为int是全局变量,所以它的值在整个程序结束时才会消失。for循环第一次i=2,a[i]=3,所以fun(&a[i])=3+2=5,这时b为5,所以

B=fun(&a[i])+b=5+5=10。第二次循环时,b=10,然后fun(&a[i]),代入a[i]=4,这时fun(&a[i])=10+4=14,所以b=fun(&a[i])+b=14+14=28。答案选择C选项。15.以下叙述中错误的是()。A、当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULLB、函数可以返回地址值C、改变函数形参的值,不会改变对应实参的值D、可以给指针变量赋一个整数作为地址值答案:D解析:A项正确,NULL是在头文件stdio.h中定义的符号常量;B项正确,函数的返回值可以是地址,即指针;C项正确,函数调用中形参值的变化不会传递给实参;D项错误,不能将一个整数直接赋给指针变量作为地址,只能用取地址运算符“&”把该整型变量的地址赋值给该指针变量。答案选择D选项。16.有以下程序

#include<stdio.h>main()

{

intx,y,z;x=y=1;

z=x++,y++,++y;printf("%d,%d,%d\n",x,y,z);

}

程序运行后的输出结果是()。A、2,3,1B、2,3,2C、2,3,3D、2,2,1答案:A解析:注意区分,z=x++是先将x的值赋给z,在令x自增;z=++x是先将x自

增,再将自增后的值赋给z;而无论是++x还是x++,都会完成x自增的运算。对于表达式“z=x++,y++,++y;”,因为赋值运算符的优先级高于逗号运算符的优先级,所以可以将上式改成“(z=x++),(y++),(++y)”。然后从左向右先计算表达式z=x++,后缀自增运算先进行其他运算,再执行自增运算,所以z的值为1,x的值为2,再计算逗号表达式第二个表达式y++,此时y的值为1,y++的值为2,最后计算第三个表达式++y,y的值为3。答案选择A选项。17.若要实现total=1+2+3+4+5求和,以下程序段错误的是()。A、inti=1,total=1;while(i<5){total+=i;i+=1;}B、inti=1,total=0;while(i<=5){total+=i;i+=1;}C、inti=0,total=0;while(i<5){i+=1;total+=i;}D、inti=0,total=0;while(i<=5){total+=i;i+=1;}答案:A解析:A项执行过程为:i=1,total=1,判断while循环条件1<5成立,total=1+1,i=2;判断循环条件执行函数体,直到i=4,total=1+1+2+3+4,i=5;i=5循环条件不成立,退出循环,A项不能实现题目要求,错误。B项执行过程:i=1,total=0,1<=5成立,total=0+1=1,i=2;直到i=5,total=1+2+3+4+5,i=6;i=6条件不成立,退出循环,程序正确。C项执行过程:i=0,total=0,0<5成立,i=1,total=1;直到i=5,total=1+2+3+4+5;i=5条件不成立,退出循环,程序正确。D项执行过程:i=0,total=0,0<=5成立,total=0,i=1;直到i=5,total=1+2+3+4+5,i=6;i=6条件不成立,退出循环,程序正确。18.以下叙述中正确的是()。A、break语句不能用于提前结束for语句的本层循环B、使用break语句可以使流程跳出switch语句体C、ontinue语句使得整个循环终止D、在for语句中,continue与break的效果是一样的,可以互换答案:B解析:B项正确,break语句可以跳出switch语句和循环。A项错误,break语句在for循环内部的作用是跳出循环;C项错误,continue语句的作用是跳过本次循环体中余下尚未执行的语句,立刻进行下一次的循环条件判定,即仅结束本次循环,并没有使整个循环终止;D项错误,continue和break的效果完全不同。答案选择B选项。19.有以下程序段

#include<stdio.h>main(){int

A,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;

printf("a=%db=%dc=%d\n",a,b,c);

}

程序的输出结果是()。A、=10b=50c=30B、a=10b=50c=10C、a=10b=30c=10D、a=50b=30c=50答案:B解析:C语言中使用分号来作为语句的结束,所以a=b,b=c;是一条含有逗号运算符的语句,是if语句的执行体。因为题中a<b,if条件不满足,直接执行c=a。答案选择B选项。20.下列叙述中,不符合良好程序设计风格要求的是()。A、程序的效率第一,清晰第二B、程序的可读性好C、程序中要有必要的注释D、输入数据前要有提示信息答案:A解析:“清晰第一,效率第二”是当今主导的程序设计风格。对程序的要求不仅是能够运行正常,还要便于调试和维护,所以程序要具有良好的可读性,语句结构应该简单直接,这有利于程序的开发与维护。答案选择A选项。21.以下叙述中正确的是()。A、函数的形参类型不能是指针类型B、函数的类型不能是指针类型C、设有指针变量为double*p,则p+1将指针p移动8个字节D、基类型不同的指针变量可以相互混用答案:C解析:C项正确,一般情况下,double类型的变量长度为8个字节,对指针进行加、减运算时,数字“1”指1个存储单元长度。A项错误,函数的形参可以是数值类型,也可以是指针类型;B项错误,C语言中有指向函数的指针,称为函数指针;D项错误,int类型的指针只能指向int,不能指向double,基类型不同的指针变量不能混用。答案选择C选项。22.以下叙述中正确的是()。A、在C语言中,预处理命令行都以“#”开头B、预处理命令行必须位于C源程序的起始位置C、#include<stdio.h>必须放在C程序的开头D、C语言的预处理不能实现宏定义和条件编译的功能答案:A解析:“编译预处理”就是在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程。A项正确,在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。B项错误,预处理命令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾;C项错误,#include<stdio.h>可以出现在程序的任意一行的开始部位;D项错误,预处理可以实现宏定义、条件编译和文件包含。答案选择A选项。23.下列叙述中正确的是()。A、栈是“先进先出”的线性表B、队列是“先进后出”的线性表C、循环队列是非线性结构D、有序线性表既可以采用顺序存储结构,也可以采用链式存储结构答案:D解析:有序的线性表既可采用顺序存储结构,也可以采用链式存储结构。A项错误,栈是“先进后出”的线性表;B项错误,队列是“先进先出”的线性表;C项错误,循环队列是线性结构的,有序的线性表既可采用顺序存储结构,也可采用链式存储结构。答案选择D选项。24.有以下程序:

#include<stdio.h>main()

{inta=1,b=0;if(--a)b++;elseif(a==0)b+=2;elseb+=3;

printf("%d\n",b);

}

程序运行后的输出结果是()。A、0B、1C、2D、3答案:C解析:“++”和“--”运算,当以前缀形式出现时,则先进行加一或减一操作,再进行其他运算,当以后缀形式出现时,则先进行其他运算,再进行加一或减一操作。a初始定义为1,b为0,执行--a,a的值变为0,--a的

值也为0,即if判断为假,执行b+=2,输出b的值为2。答案选择C选项。25.以下叙述中正确的是()。A、简单递归不需要明确的结束递归的条件B、任何情况下都不能用函数名作为实参C、函数的递归调用不需要额外开销,所以效率很高D、函数既可以直接调用自己,也可以间接调用自己答案:D解析:D项正确,C语言中的函数可以直接或间接地自己调用自己,前者称简单递归,后者称间接递归。A项错误,递归必定要有一个明确的结束递归的条件;B项错误,递归就是把函数名作为实参的一种特殊情况;C项错误,函数的递归调用过程中,系统要为每一层调用中的变量开辟存储单元,记住每一层调用后的返回点,要增加许多额外的开销,通常会降低程序的运行效率。答案选择D选项。26.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数):

#include<stdio.h>

#include<string.h>main()

{chara[10]="abc",b[10]="012",c[10]="xyz";strcpy(a+1,b+2);

puts(strcat(a,c+1));

}

程序运行后的输出结果是()。A、12xyzB、12yzC、a2yzD、bc2yz答案:C解析:先执行strcpy,将b数组中第2个及之后位置上的字符复制到a数组中第1

个及之后的位置上的字符位置,即此时数组a中字符为a2,再执行strcat连接函数,将a中字符与c数组中第2个及之后位置上的字符连接,即为a2yz。注意,数组下标从0开始。答案选择C选项。27.有以下程序

#include<stdio.h>main()

{

inta=0,b=0;

/*给a赋值a=10;给b赋值b=20*/printf("a+b=%d\n",a+b);/*输出计算结果*/

}

程序运行后的输出结果是()。A、+b=0B、a+b=30C、a+b=10D、出错答案:A解析:注释/*和*/之间的代码不参与编译,所以a、b的值仍为0。答案选择A选项。28.以下结构体类型说明和变量定义中正确的是()。A、typedefstruct{intn;charc;}REC;RECt1,t2;B、structREC;{intn;charc;};RECt1,t2;C、typedefstructREC:{intn=0;charc='A';}t1,t2;RECt1,t2;D、struct{intn;charc;}REC;答案:A解析:A项,用typedef定义结构体类型名REC后,可以用REC定义变量。B项,“structREC;”后面不应加分号;C项,没有这样的书写形式;D

项,REC定义的是一个变量,不是结构体类型,因此不能用来定义结构体变量。答案选择A选项。29.有以下程序段:

Charch;intk;

Ch='a';k=12;printf("%c,%d,",ch,ch,k);

Printf("k=%d\n",k);

已知字符a的ASCII码十进制值为97,则执行上述程序段后输出的结果是()。A、因变量类型与格式描述符的类型不匹配输出无定值B、输出项与格式描述符个数不符,输出为零值或不定值C、a,97,12k=12D、a,97,k=12答案:D解析:字符变量的值是该字符的ASCII码值,可以参与整型变量所允许的任何运算。“ch='a'”,%c表示以字符格式输出ch的值,所以输出为a;%d表示以十进制代码的形式输出ch的值,为97;k没有对应的输出格式,不输出。在第二个语句中,首先输出“k=”,然后以十进制代码输出k的值,为12。答案选择D选项。30.以下关于C语言函数参数传递方式的叙述正确的是()。A、数据只能从实参单向传递给形参B、数据可以在实参和形参之间双向传递C、数据只能从形参单向传递给实参D、C语言的函数,参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用答案:A解析:数据只能由实参单向传递给形参称为“值传递”,而不能由形参传给实参,A项正确,B、C、D错误;数组名、指针等作参数,实参传递给形参的是地址值,这样形参和实参就指向同一段内存单元,在函数体内对形参数据的改变也将影响到实参。答案选择A选项。31.以下叙述正确的是()。A、在C语言中调用fopen函数就可把程序中要读、写的文件与磁盘上实际的数据文件联系起来B、fopen函数的调用形式为:fopen(文件名)C、fopen函数的返回值为NULL时,则成功打开指定的文件D、fopen函数的返回值必须赋给一个任意类型的指针变量答案:A解析:A项正确,C语言中打开一个文件通过系统函数fopen实现,通过这个函数把程序中要读、写的文件与磁盘上实际的数据文件联系起来;B项错误,函数调用中缺少参数“操作方法”,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式);;C项错误,fopen函数返回一个指向指定文件的文件指针,如果不能实现打开指定文件的操作,则返回一个空指针NULL;D项错误,fopen函数的返回值必须赋给一个文件类型的指针变量。答案选择A选项。

二、程序填空题32.设有以下定义:

Chars1[]="0123";

Chars2[]={'0','1','2','3'};

则以下叙述正确的是()。A、数组s1的长度小于s2的长度B、数组s1和s2的长度相同C、数组s1的长度大于s2的长度D、数组s1和s2完全等价答案:C解析:字符数组s1赋值字符串"0123",字符串中字符依次放入数组中,在最后一个字符后要添加一个结束字符'\0',数组s1长度为5。数组s2只需要

4个单元即可放下所有初始化值,故数组长度为4。所以数组s1的长度大于s2的长度,C项正确,AB错误。两个数组等价是指两个数组长度和类型以及对应每个元素值均相同,所以s1和s2不是完全等价,D项错误。答案选择C选项。33.以下叙述中错误的是()。A、C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令B、C程序经过编译、链接步骤之后才能形成一个真正可执行的二进制机器指令文件C、用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D、C语言源程序经编译后生成后缀为.obj的目标程序答案:A解析:A项错误,注释语句不会被翻译成二进制的机器指令。C源程序经过C编译程序编译之后生成后缀为.obj的二进制文件(称为目标文件),然后由“链接程序”(Link)的软件把.obj文件与各种库函数连接起来生成一个后缀为.exe的可执行文件。答案选择A选项。34.有以下程序(说明:字母A的ASCII码值是65):

#include<stdio.h>

Voidfun(char*s)

{

while(*s)

{

if(*s%2)printf("%c",*s);

s++;}

}main(){

chara[]="BYTE";fun(a);

printf("\n");

}

程序运行后的输出结果是()。A、BYB、TC、YTD、YE答案:D解析:函数只会输出ASCII码值为奇数的字母,执行fun(a)时,依次取出a[]中的字母,当取第一个字母B时,因为B的ASCII码值为66,所以不会输出B,字母Y的ASCII码值为89,字母T的ASCII码值为84,字母E的ASCII码值为69,所以最后输出字母YE。答案选择D选项。35.有以下程序:

#include<stdio.h>main()

{

char

A,b,c,d;

scanf("%c%c",&a,&b);c=getchar();d=getchar();printf("%c%c%c%c\n",a,b,c,d);

}

当执行程序时,按下列方式输入数据(从第一列开始,<CR>代表回车,注意:回车是一个字符)

12<CR>34<CR>

则输出结果是()。A、1234B、12C、12<CR>3D、12<CR>34答案:C解析:Scanf()函数的一般调用形式为:scanf(格式控制,输入地址列表);。其中,格式控制是用双引号括起来的字符串,包括格式字符和普通字

符,格式是由“%”和格式字符组成。getchar()函数的功能是从标准输入设备上读入一个字符。根据程序中的格式控制可知,接收输入时分别把1赋给了a,2赋给了b,然后getchar()函数提取一个换行符赋给c,再提取一个字符3赋给了d。所以程序的输出结果为:12<CR>3。答案选择C选项。36.C语言主要是借助以下()功能来实现程序模块化的。A、定义函数B、定义常量和外部变量C、三种基本结构语句D、丰富的数据类型答案:A解析:C程序的模块化主要通过函数来实现。C语言允许对函数单独进行编译,从而可以实现模块化。答案选择A选项。37.下列二叉树描述中,正确的是()。A、任何一棵二叉树必须有一个度为2的结点B、二叉树的度可以小于2C、非空二叉树有0个或1个根结点D、至少有2个根结点答案:B解析:空树度为0,斜二叉树度为1,故A项错误,B项正确。空二叉树没有结点,非空二叉树的定义中要求有且只有一个结点是该树的根结点,故

C和D项错误。答案选择B选项。38.有三个关系R、S和T如下:

则下列操作中正确的是()。A、T=R∩SB、T=RSC、T=R×SD、T=R-S答案:D解析:图中关系R比关系S多一行T中的元组,故由关系R和S得到关系T的操作是差。答案选择D选项。39.下面不属于黑盒测试方法的是()。A、边界值分析法B、基本路径测试C、等价类划分法D、错误推测法答案:B解析:常见的黑盒测试方法有:等价类划分法、边界值分析法、错误推测法以及因果图等;常见的白盒测试方法有:逻辑覆盖测试和基本路径测试。答案选择B选项。40.下列选项中,不属于数据管理员(DBA)职责的是()。A、数据库维护B、数据库设计C、改善系统性能,提高系统效率D、数据类型转换答案:D解析:数据库管理员对数据库进行规划、设计、维护、监视等,其主要工作有:①数据库设计,主要是对数据模式进行设计;②数据库维护,对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护;③改善系统性能,不断调整内部结构,提高系统效率。答案选择D选项。41.有以下程序(其中的strstr()函数头部格式为:char*strstr(char

*p1,char*p2)确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址):

#include<stdio.h>#include<string.h>char*a="you";

Char*b="WeleyoutoBeijing!";main(){char*p;p=strstr(b,a)+strlen(a)+1;printf("%s\n",p);

}

程序的运行结果是()。A、toBeijing!B、youtoBeijing!C、WeleyoutoBeijing!D、Beijing!答案:A解析:调用strstr函数,返回值为a指向的字符串在b指向的字符串中第一次出现的位置,并将此地址赋给指针p。strlen()函数求字符串的实际长度(不包含结束标志)。strstr函数返回的地址下标值为8,加上a长度3,再加1,指针P指向的地址下标值为12,输出:toBeijing!,答案选择A选项。42.某二叉树的中序序列为DCBAEFG,后序序列为DCBGFEA,则该二叉树的深度(根结点在第1层)为()。A、5B、4C、3D、2答案:B解析:二叉树的后序序列为DCBGFEA,则A为根结点。中序序列为

DCBAEFG,则DCB为左子树结点,EFG为右子树结点。同理B为C父结点,C为D父结点。根据分析,可画出左子树,同理E为F父结点,F为G父结点。根据分析,可画出右子树,故二叉树深度为4层。答案选择B选项。43.在源程序的开始处加上“#include<stdio.h>”进行文件引用的原因,以下叙述正确的是()。A、stdio.h文件中包含标准输入输出函数的函数说明,通过引用此文件以便能正确使用prinff、scanf等函数B、将stdio.h中标准输入输出函数链接到编译生成的可执行文件中,以便能正确运行C、将stdio.h中标准输入输出函数的源程序插入到引用处,以便进行编译链接D、将stdio.h中标准输入输出函数的二进制代码插入到引用处,以便进行编译链接答案:A解析:“stdio.h”文件中包含标准输入输出函数的函数说明,预处理指令

#include<stdio.h>是指程序可以在该文件中找到printf,scanf等函数,答案选择A选项。44.下面描述不属于软件特点的是()。A、软件是一种逻辑实体,具有抽象性B、软件在使用中不存在磨损、老化问题C、软件复杂性高D、软件使用不涉及知识产权答案:D解析:软件具有以下特点:①软件是一种逻辑实体,具有抽象性;②软件没有明显的制作过程;③软件在使用期间不存在磨损、老化问题;④软件对硬件和环境具有依赖性;⑤软件复杂性高,成本昂贵;⑥软件开发涉及诸多的社会因素,如知识产权等。答案选择D选项。45.设序列长度为n,在坏情况下,时间复杂度为O(1og2n)的算法是()。A、二分法查找B、顺序查找C、分块查找D、哈希查找答案:A解析:对长度为n的线性表排序,坏情况下时间复杂度,二分法查找为

O(1og2n);顺序查找法为O(n);分块查找时间复杂度与分块规则有关;哈希查找时间复杂度为O(1),因其通过计算哈希函数来定位元素位置,所以只需一次即可。答案选择A选项。46.计算机软件包括()。A、算法和数据B、程序和数据C、程序和文档D、程序、数据及相关文档答案:D解析:计算机软件由两部分组成:①机器可执行的程序和数据;②机器不可执行的,与软件开发、运行、维护、使用等有关的文档。答案选择D选项。47.以下能正确输出字符a的语句是()。A、printf("%s","a");B、printf("%s",'a');C、printf("%c","a");D、printf("%d",'a');答案:A解析:输出函数printf()的一般形式为“printf("格式控制字符串",输出项1,输出项2,…)”,输出项的形式要和格式控制字符串中的格式控制符保持一

致,"%s"为输出字符串,"%c"为输出单个字符,"%d"为以十进制形式输出带符号整数,答案选择A选项。48.有以下程序:

#include<stdio.h>#defineS(x)x*xmain(){intk=5,j=2;printf("%d,%d\n",S(k+j+2),S(j+k+2));

}

程序的运行结果是()。A、21,18B、81,81C、21,21D、18,18答案:A解析:带参数的宏的替换过程是,用宏调用提供的实参字符串直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。S(k+j+2)被置换成k+j+2*k+j+2,计算时先计算2*k,结果为21;S(j+k+2)被置换成j+k+2*j+k+2,计算时先计算2*j,结果为18。程序的运行结果是

21,18。答案选择A选项。49.有如下程序:

#include<stdio.h>main(){

inti,data;scanf("%d",&data);

for(i=0;i<5;i++)

{

if(i<data)continue;

printf("%d,",i);

}

printf("\n");

}

程序运行时,从键盘输入:3<回车>后,程序输出结果为()。A、3,4,B、1,2,3,4,C、0,1,2,3,4,5,D、0,1,2,答案:A解析:Continue语句只能用在循环结构中,其作用是结束本次循环,即不再执行循环体中continue语句之后的语句,而是立即转入对循环条件的判断与执行。本题执行过程为:输入3,则data=3;执行for循环,i=0,if条件成立,结束本次循环,不输出i值,执行下一次循环;直到i>=3,if条件不成立,依次输出i值3,4,;直到i=5退出for循环。答案选择A选项。50.设有定义:struct{intn;floatx;}s[2],m[2]={{10,2.8},{0,0.0}};,则以下赋值语句中正确的是()。A、s[0]=m[1];B、s=m;C、s.n=m.n;D、s[2].x=m[2].x;答案:A解析:定义了结构体类型数组s,长度为2,结构体类型数组m,长度为2,并对数组m进行了初始化。同类型的结构体可以直接用变量名实现赋值,A项正确;数组名为数组首地址,地址常量之间不可以相互赋

值,B项错误;数组名为地址常量不是结构体变量,不能引用成员,C项错误;s[2]与m[2]数组越界,D项错误。答案选择A选项。51.设循环队列为Q(1:m),其初始状态为front=rear=m。经过一系列入

队与退队运算后,front=20,rear=15。现要在该循环队列中寻找小值的元素,坏情况下需要比较的次数为()。A、5B、6C、m-5D、m-6答案:D解析:循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用队首指针指向队首元素的前一个位置,因此,从队首指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,队列初始状态为front=rear=m,当front=20,

Rear=15时,队列中有m-20+15=m-5个元素,坏情况下需要比较次数为m-6次。答案选择D选项。52.有以下程序:

#include<stdio.h>

Intfun(char*s)

{char*p=s;while(*p++!='\0');return(p-s);

}main(){char*p="01234";printf("%d\n",fun(p));

}

程序的运行结果是()。A、6B、5C、4D、3答案:A解析:程序执行过程为:定义字符串指针p并为其初始化为"01234",调用函数fun(p),将指针传入函数。fun函数功能即返回字符串首地址与结束符下一个地址之差,也即是字符串长度加1。输出地址差为6,答案选择A选项。53.以下针对全局变量的叙述错误的是()。A、全局变量的作用域是从定义位置开始至源文件结束B、全局变量是在函数外部任意位置上定义的变量C、用extern说明符可以限制全局变量的作用域D、全局变量的生存期贯穿于整个程序的运行期间答案:C解析:在不同编译单位内用extern说明符来扩展全局变量的作用域,extern可以将全局变量作用域扩展到其他文件,而不是限制全局变量的作用域。答案选择C选项。54.有以下程序:

#includemian(){charc;for(;(c=getchar())!='#';)putchar(++c);

}

执行时如输入为:abcdefgh#<回车>,则输出结果是()。A、bcdefgB、cdefgh$C、bcdefgh$$D、bcdefgh答案:D解析:For循环每次将函数getchar()的输入值赋给变量c,如果不等于#,则执行putchar(++c),即将当前变量c的ASCII码加1后,再输出改变后的变量c的值。当变量c的值等于#,则终止循环,所以输出应该是bcdefgh。答案选择D选项。55.设有定义

Intx=0,*p;

立即执行以下语句,正确的语句是()。A、p=x;B、*p=x;C、p=NULL;D、*p=NULL;答案:C解析:p没有初始化,不能用*p直接访问,但可以进行赋值操作。注意,p=NULL并不是指向地址为0的存储单元,而是具有一个确定的值——

“空”。答案选择C选项。56.关于地址和指针,以下说法正确的是()。A、通过强制类型转换可以将一种类型的指针变量赋值给另一种类型的指针变量B、可以取一个常数的地址赋值给同类型的指针变量C、可以取一个表达式的地址赋值给同类型的指针变量D、可以取一个指针变量的地址赋值给基类型相同的指针变量答案:A解析:常数的地址存储在内存的常量区,常量区存储的都是常量,值都是不可修改的,所以直接取常量的地址赋给指针变量没有任何意义,C语言也不允许这样做,编译会出错,B项错误;表达式的值存储在临时变量中,内存中存在专门用来存储临时变量的区域,对这块地址进行操作也是没有意义的,C语言不允许这样做,编译会出错,C项错误;可以取一个指针变量的地址,但是指针变量的地址属于指针,只能赋值给指针类型的指针变量,D项错误。答案选择A选项。57.以下叙述正确的是()。A、do-while语句构成的循环,当while语句中的表达式值为0时结束循环B、do-while语句和while-do构成的循环功能相同C、while-do语句构成的循环,当while语句中的表达式值为非0时结束循环D、o-while语句构成的循环,必须用break语句退出循环答案:A解析:B项错误,do-while语句先执行循环体,再判断循环条件语句,whiledo循环先判断循环条件语句,再执行循环体;C项错误,do-while语句构成的循环,while语句中的表达式值为0时结束循环;D项错误,do-

While语句除了可以使用break语句退出循环外,还可以使用循环条件语句,当不满足循环条件时退出循环。答案选择A选项。58.有以下程序:

#include<stdio.h>

Voidfun(int*x,ints,inte)

{

inti,j,t;for(i=s,j=e;i<j;i++,j--)

{

t=*(x+i);

*(x+i)=*(x+j);

*(x+j)=t;

}

}main(){

intm[]={0,1,2,3,4,5,6,7,8,9},k;

fun(m,0,3);fun(m+4,0,5);fun(m,0,9);for(k=0;k<10;k++)printf("%d",m[k]);}

程序的运行结果是()。A、4567890123B、3210987654C、9876543210D、0987651234答案:A解析:程序的执行过程为:定义数组m,并为其赋初值,数组长度为10。调用函数fun(m,0,3)将数组首地址传入函数,函数实现将数组下标值从0

到3的元素首尾倒置,for循环结束之后数组为m={3,2,1,0,4,5,6,7,8,9}。

调用函数fun(m+4,0,4)将数组下标值为4的元素地址传入函数,函数实现将数组下标值从4到9的元素首尾倒置,for循环结束之后数组为m=

{3,2,1,0,9,8,7,6,5,4}。调用函数fun(m,0,9)将数组首地址传入函数,函数实现将数组下标值从0到9的元素首尾倒置,for循环结束之后数组为m={4,5,6,7,8,9,0,1,2,3}。依次输出数组元素,结果为4567890123。答案选择A选项。

二、程序填空题59.设有定义:intx=11,y=12,z=0;

以下表达式值不等于12的是()。A、(z,x,y)B、(z=x,y)C、z=(x,y)D、z=(x==y)答案:D解析:逗号表达式的计算过程是从左到右逐个求每个表达式的值,取右边一个表达式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量或表达式,且左右两边数据类型相同才能实现赋值。成功实现赋值后以左值为返回值。逻辑表达式成立则返回1,不成立返回0。D选项逻辑表达式x==y不成立,则z=0,表达式值为0。B选项逗号表达式x,y取y值为表达式值,然后赋值给z=12,表达式值为12。C选项逗号表达式(x,y)取y值为表达式值,然后赋值给z=12,表达式值为12。A选项逗号表达式(z,x,y)取y值为表达式值12。答案选择D选项。60.以下程序段中的变量已定义为int类型,则

Sum=pAd=5;

PAd=sum++,++pAd,pAd++;

Printf("%d\n",pAd);

程序段的输出结果是()。A、6B、4C、5D、7答案:D解析:自增和自减运算符的两种用法:前置运算,运算符放在变量之前,规则是先使变量的值增(或减)1,然后以变化后表达式的值参与其他运算;后置运算,运算符放在变量之后,规则是变量先参与其他运算,然后再使变量的值增(或减)1。执行pAd=sum++,sum++是后置自

增,执行完后,pAd=5,sum=6。++pAd和pAd++语句中没有其他运算,即效果相同,pAd分别加1,两句执行完后,pAd=7。答案选择D选项。61.在坏情况下()。A、快速排序的时间复杂度比冒泡排序的时间复杂度要小B、快速排序的时间复杂度比希尔排序的时间复杂度要小C、希尔排序的时间复杂度比直接插入排序的时间复杂度要小D、快速排序的时间复杂度与希尔排序的时间复杂度是一样的答案:C解析:坏情况下:快速排序与冒泡排序的时间复杂度均为O(n2),A项错误;快速排序比希尔排序的时间复杂度要大(O(n2)>O(n1.5)),B、D项错误;希尔排序的时间复杂度比直接插入排序的时间复杂度要小

(O(n1.5)<O(n2)),C项正确。答案选择C选项。62.以下关于宏的叙述错误的是()。A、宏替换不具有计算功能B、宏是一种预处理指令C、宏名必须用大写字母构成D、宏替换不占用运行时间答案:C解析:宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母,答案选择C选项。63.以下选项中,合法的C语言常量是()。A、1.234B、'C++'C、"\2.0D、2Kb答案:A解析:C语言中的常量:①整型常量,用不带小数点的数字表示;②实型常量,用带小数点的数字表示;③字符型常量,用带有单引号的一个字符表示;④字符串常量,用一对双引号括起来的一串字符。1.234为实型常量,A项正确;'C++'不合法,若改成"C++"则为字符串常量,B项错误;"\2.0不合法,不是任何类型常量,C项错误;2Kb不合法,若加上双引号"2Kb"为字符串常量,D项错误。答案选择A选项。64.关于C语言标识符,以下叙述错误的是()。A、标识符可全部由数字组成B、标识符可全部由下划线组成C、标识符可全部由小写字母组成D、标识符可全部由大写字母组成答案:A解析:C语言标识符只能由字母、数字、下划线构成,且只能以字母、下划线开头,故答案选择A选项。65.有以下程序:

#include

Main()

{

char*s="120119110";

intn0,n1,n2,nn,i;

n0=n1=n2=nn=i=0;do

{

switch(s[i++])

{

default:nn++;case'0':n0++;case'1':n1++;case'2':n2++;

}

}while(s[i]);printf("n0=%d,n1=%d,n2=%d,nn=%d\n",n0,n1,n2,nn);

}

程序的运行结果是()。A、n0=3,n1=8,n2=9,nn=1B、n0=2,n1=5,n2=1,nn=1C、n0=2,n1=7,n2=10,nn=1D、n0=4,n1=8,n2=9,nn=1答案:A解析:本题执行过程为:s[0]='1',匹配case'1',n1=1,n2=1;s[1]='2',匹配case'2',n2=2;s[2]='0',匹配case'0',n0=1,n1=2,n2=3;s[3]='1',匹配case'1',n1=3,n2=4;s[4]='1',匹配case'1',n1=4,n2=5;s[5]='9',匹配default,nn=1,n0=2,n1=5,n2=6;s[6]='1',匹配case'1',n1=6,n2=7;s[7]='1',匹配case'1',n1=7,n2=8;s[8]='0',匹配case'0',n0=3,n1=8,n2=9;s[9]='\0',对应ASCII码为0,退出循环。输出n0,n1,n2,nn为3,8,9,1。答案选择A选项。66.以下非法的字符常量是()。A、'\\n'B、'\101'C、'\x21'D、'\0'答案:A解析:C语言允许使用一些以特殊形式出现的字符常量,使用'\n'来表示换行,'\n'实际上是一个字符,它的ASCII码值为10,不存在'\\n'用法。答案选择A选项。67.下列叙述中正确的是()。A、存储空间连续的数据结构一定是线性结构B、存储空间不连续的数据结构一定是非线性结构C、没有根结点的非空数据结构一定是线性结构D、具有两个根结点的数据结构一定是非线性结构答案:D解析:A项错误,数据结构线性与否与存储空间是否连续没有直接关系,如二叉树可以用一片连续的空间来存储,但二叉树为非线性结构;B项错误,线性表的链式存储结构可以用不连续的空间来存储,但线性表为线性结构;C项错误,没有根结点的非空数据结构一定不是线性结构;D项正确,线性结构有且只有一个根结点,具有两个根结点的结构一定是非线性结构。答案选择D选项。68.有以下程序:

#include<stdio.h>main()

{

intx;

scanf("%d",&x);

if(x>10)printf("1");elseif(x>20)printf("2");elseif(x>30)printf("3");

}

若运行时输入:35<回车>,则输出结果是()。A、123B、2C、3D、1答案:D解析:程序执行过程为:输入35<回车>,scanf函数从键盘读入35赋值给x=35,对if条件进行判断,35>10,条件成立,输出1,不再执行下面的elseif语句,程序结束。答案选择D选项。69.将E-R图转换为关系模式时,E-R图中的实体和联系都可以表示为

()。A、属性B、键C、关系D、域答案:C解析:采用E-R方法得到的全局概念模型是对信息世界的描述,为了适合关系数据库系统的处理,必须将E-R图转换成关系模式。E-R图是由实体、属性和联系组成,而关系模式中只有一种元素——关系。答案选择C选项。70.以下选项中叙述正确的是()。A、函数体必须由{开始B、C程序必须由main语句开始C、程序中的注释可以嵌套D、C程序中的注释必须在一行完成答案:A解析:函数体是函数首部下面的花括号内的部分,所以函数体必须由{开始,A选项正确。一个源程序文件可以包括预处理命令、全局声明、函数

定义,程序总是从main函数开始执行的,不是main语句,B选项错误。函数可以嵌套,注释不能嵌套,C选项错误。C程序中允许两种注释,以//开头的单行注释;以/*开始,以*/结束的块式注释,D选项错误。

答案选择A选项。71.字符数组a和b中存储了两个字符串,判断字符串a和b是否相等,应当使用的是()。A、if(strcmp(a,b)==0)B、if(strcpy(a,b))C、if(a==b)D、if(a=b)答案:A解析:C语言中,判断字符串是否相等,使用字符串比较函数strcmp(),不能使用相等操作符“==”。strcmp(s1,s2)函数比较s1和s2所指字符串的大小时,若串s1>串s2,函数值大于0(正数);若串s1=串s2,函数值等于0;若串s1<串s2,函数值小于0(负数)。答案选择A选项。72.有如下程序:

#include<stdio.h>main()

{intx=0x13;if(x=0x18)printf("T");printf("F");printf("\n");

}

程序运行后的输出结果是()。A、TFB、TC、FD、TFT答案:A解析:X=0x18为赋值表达式,十六进制数0x18非0,故x非0,if条件成立输出T,之后再输出F与回车符。程序运行后的输出结果是TF。答案选择A选项。73.以下程序的功能是:通过调用calc函数,把所求得的两数之和值放入变量add中,并在主函数中输出。

#include<stdio.h>voidcalc(floatx,floaty,float*sum){

______=x+y;

}main(){floatx,y,add;scanf("%f%f",&x,&y);calc(x,y,&add);printf("x+y=%f\n",add);

}

Calc函数中下划线处应填入的是()。A、*sumB、sumC、&sumD、add答案:A解析:程序的执行过程为:从键盘读入两个float类型数据,分别赋给x,y,调用函数calc将x与y的值与add变量地址传入函数,地址赋给指针sum,函数体中将两数之和放入指针指向的地址,指针正确的引用形式为:*sum,这表示变量,可以被赋值。所以横线处填写*sum。答案选择A选项。74.有如下程序:

#include<stdio.h>

Voidchange(int*array,intlen)

{

for(;len>=0;len--)array[len]-=1;

}main(){

inti,array[5]={2,2};change(array,4);for(i=0;i<5;i++)printf("%d,",array[i]);

printf("\n");

}程序运行后的输出结果是()。A、1,1,-1,-1,-1,B、1,0,-1,1,-1,C、1,1,1,1,1,D、1,-1,1,-1,1,答案:A解析:在main()函数中,首先给一维数组array赋初值[2,2,0,0,0],再调用change函数,对array数组中的每一个数进行减1处理,后使用for循环语句输出数组元素的值,答案选择A选项。75.C语言中,基本的数据类型包括()。‘A、整型、实型、逻辑型B、整型、字符型、数组C、整型、实型、字符型D、整型、实型、结构体答案:C解析:C语言中,基本的数据类型包括整型、实型、字符型,答案选择C选项。76.有如下程序:

#include<stdio.h>main(){

inti,array[5]={3,5,10,4};for(i=0;i<5;i++)printf("%d,",array[i]&3);

printf("\n");

}

程序运行后的输出结果是()。A、3,1,2,0,0,B、3,5,10,4,0,C、3,3,3,3,0,D、3,2,2,2,0,答案:A解析:在对数组进行初始化时,如果在声明数组时给出了长度,但没有给所

有的元素赋予初始值,那么C语言将自动对余下的元素赋初值0,则

Array={3,5,10,4,0}。按位与运算“&”,当参加运算的两个二进制数的对应位都为1,则该位的结果为1,否则为0。将数组元素与3按位与,即

3&3=3,5&3=1,10&3=2,4&3=0,0&3=0。for循环输出与运算结果:3,1,2,0,0,。答案选择A选项。77.下列叙述中错误的是()。A、算法的时间复杂度与算法所处理数据的存储结构有直接关系B、算法的空间复杂度与算法所处理数据的存储结构有直接关系C、算法的时间复杂度与空间复杂度有直接关系D、算法的时间复杂度与算法程序执行的具体时间是不一致的答案:C解析:算法的时间复杂度是指执行算法所需要的计算工作量。数据的存储结构直接决定数据输入,因此会影响算法所执行的基本运算次数,A项正确;算法的空间复杂度是指执行这个算法所需要的内存空间,其中包括输入数据所占的存储空间,B项正确;算法的时间复杂度与空间复杂度没有直接关系,C项错误;算法程序执行的具体时间受到所使用的计算机、程序设计语言以及算法实现过程中的许多细节影响,而算法的时间复杂度与这些因素无关,所以算法的时间复杂度与算法程序执行的具体时间是不一致的,D项正确。答案选择C选项。78.下面属于白盒测试方法的是()。A、边界值分析法B、基本路径测试C、等价类划分法D、错误推测法答案:B解析:白盒测试是把程序看成装在一只透明的白盒子里,测试者完全了解程序的结构和处理过程。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作。白盒测试的主要技术有逻辑覆盖测试、基本路径测试等,B选项正确。常用的黑盒测试方法和技术有:等价类划分法、边界值分析法、错误推测法和因果图等,ACD三项错误。答案选择B选项。79.以下选项中,合法的实数是()。A、4.5E2B、E1.3C、7.11ED、1.2E1.2答案:A解析:实型常量用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。十进制小数形式由数字和小数组成,必须有小数点,且小数点的位置不受限制。指数形式由十进制数加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成。4.5E2为指数形式

实数,A项正确。E1.3阶码标志前缺少十进制数,并且阶数不是整

数,B项错误。7.11E缺少阶数,C项错误。1.2E1.2阶数不是整数,D项错误。答案选择A选项。80.一名雇员就职于一家公司,一个公司有多名雇员,则实体公司和实体雇员之间的联系是()。A、1:1联系B、1:m联系C、m:1联系D、m:n联系答案:B解析:实体集之间的联系分为3类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。题目中一名雇员就职于一家公司,一个公司有多名雇员,公司与雇员之间的联系为一对多(1:m)联系。答案选择B选项。81.若有以下程序段:

Intr=8;

Printf("%d\n",r>>1);

输出结果是()。A、16B、8C、4D、2答案:C解析:C语言中,“>>”右移运算符是将变量转换成二进制,然后右移相应位数,将移出的位信息舍去,并在高位补0,将所得的结果再赋值给变量。本题十进制数8转换为二进制数为00001000,右移一位得到

00000100,再转换成十进制数就是4。所以答案选择C选项。82.软件设计中划分模块的一个准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合答案:B解析:耦合性和内聚性是模块独立性的两个定性标准。内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量,作为软件结构设计的设计原则,要求每个模块的内部都具有很强的内聚性;耦合性是指模块间相互连接的紧密程度的度量,一个模块与其他模块的耦合性越强则该模块的独立性越弱。一般优秀的软件设计应尽量做到高内聚、低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。答案选择B选项。83.有三个关系R、S和T如下:

其中关系T由关系R和S通过某种操作得到,该操作为()。A、选择B、投影C、交D、并答案:D解析:选择和投影操作对单个关系进行操作,选择运算是对行的操作,投影运算是对列的操作。交和并运算要求参与运算的表具有相同的属性,交运算的结果是两个表的公共部分,并运算的结果包含两个表的所有元素。观察三个关系的元组可知,关系T=RS。答案选择D选项。84.以下叙述中正确的是()。A、程序设计的任务就是编写程序代码并上机调试B、程序设计的任务就是确定所用数据结构C、程序设计的任务就是确定所用算法D、以上三种说法都不完整答案:D解析:程序设计是指设计、编程、调试程序的方法和过程,通常分为4个阶段:①问题建模;②算法设计;③编写代码;④编译调试。其工作内容涉及有关的基本概念、工具、方法及方法学,是目标明确的智力活动。答案选择D选项。85.在E-R图中,用来表示实体联系的图形是()。A、椭圆形B、矩形C、菱形D、三角形答案:C解析:在E-R图中,菱形表示联系,矩形表示实体,椭圆形表示属性。答案选择C选项。86.有以下程序:

#include<stdio.h>main(){intc=0,k;for(k=1;k<3;k++)

switch(k)

{

default:c+=k;case2:c++;break;

case4:c+=2;break;

}

printf("%d\n",c);

}

程序运行后的输出结果是()。A、3B、5C、7D、9答案:A解析:程序进入for循环后,首先k=1,执行default语句,c变为1。由于default语句之后没有break语句,因此继续执行case2,c变为2,之后执行

Break语句跳出本次循环。下次循环k=2,直接执行case2,c自增为3后跳出本次循环。k=3时for循环结束,后输出3。答案选择A选项。87.有以下程序:

#include<stdio.h>#include<string.h>

Main(){

charstr[][20]={"One*World","One*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s\n",p);

}

程序运行后的输出结果是()。A、9,One*WorldB、9,One*Dream!C、10,One*Dream!D、10,One*World答案:C解析:程序将两个字符串常量赋值给一个二维字符数组,然后p指向第二个字

符串。strlen统计字符串中有效字符的个数,可知"One*Dream!"中共有10个字符。所以答案选择C选项。88.表达式:(int)((double)9/2)-9%2的值是()。A、0B、3C、4D、5答案:B解析:运算符“/”、“%”的优先级高于“-”,所以先进行除法和求余运算,再

进行减法运算。强制类型转换表达式的形式:(类型名)(表达

式)。“9/2”结果为4,转换成double类型再转换成int类型结果依然为4,9%2的结果为1,后结果为4-1=3。答案选择B选项。89.以下程序段中,与语句:

K=a>b?(b>c?1:0):0;

功能相同的是()。A、if((a>b)&&(b>c))k=1;elsek=0;B、if((a>b)ǁ(b>c))k=1;elsek=0;C、if(a<=b)k=0;elseif(b<=c)k=1;D、if(a>b)k=1;elseif(b>c)k=1;elsek=0;答案:A解析:三元运算符表达式的形式为:表达式1?表达式2表达式3,当表达式1的值为真时,结果为表达式2的值;当表达式1的值为假时,结果为表达式3的值。首先判断a、b的关系:①如果a>b,执行语句(b>c?

1:0);判断b、c的关系,如果b>c,k=1,否则k=0;②如果a≤b,则k=0。综上所述:当a>b且b>c时,k=1,否则k=0,与A项语句功能相同。答案选择A选项。90.下列数据结构中,能够按照“先进后出”原则存取数据的是

()。A、循环队列B、栈C、队列D、二叉树答案:B解析:栈和队列都是操作受限的线性表:栈只能在栈顶插入和删除元素,按照“先进后出”的原则组织数据;队列只能在队头删除元素,在队尾插入元素,按照“先进先出”的原则组织数据。B项,栈,按照“先进后出”的原则组织数据。A项,循环队列是队列的一种特殊形式,按照“先进先出”的原则组织数据;C项,队列,按照“先进后出”的原则组织数据。D项,二叉树属于非线性结构。答案选择B选项。91.有以下程序:#include<stdio.h>main()

{

intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;

printf("%d,%d,%d,%d\n",m,n,*p,*q);

}

程序运行后的输出结果是()。A、1,2,1,2B、1,2,2,1C、2,1,2,1D、2,1,1,2答案:B解析:m和n的值不变,分别是1,2;指针*p和*q交换了指向的位置,即*p=&n,*q=&m,分别为2,1。答案选择B选项。92.有以下程序:

#include<stdio.h>#include<string.h>

Main(){

chara[10]="abcd";printf("%d,%d\n",strlen(a),sizeof(a));

}

程序运行后的输出结果是()。A、7,4B、4,10C、8,8D、10,10答案:B解析:在C语言中,strlen()用来统计字符串中字符的个数(不包含字符串结束标志'\0'),sizeof()用来求分配给数组的存储空间大小。题目中字符串a中字符个数为4,但由于数组a定义含有10个字符,所以所占空间大小为10。所以答案选择B选项。93.有以下程序:

#include<stdio.h>

Voidfun(intp)

{

intd=2;p=d++;

printf("%d",p);

}main(){inta=1;fun(a);printf("%d\n",a);

}

程序运行后的输出结果是()。A、32B、12C、21D、22答案:C解析:C语言中函数参数传递满足“单向传递”,实现传递值的功能,实参能传给形参,形参却不能传回给实参。fun函数体内输出p的值为2,并不影响到fun函数外a的值,a的值在main函数内依然为1。答案选择C选项。94.若有定义语句:inta[4][10],*P,*q[4];

且0≤i<4,则错误的赋值是()。A、p=aB、q[i]=a[i]C、p=a[i]D、p=&a[2][1]答案:A解析:二维数组名是指向指针的指针,所以a和q都为指向指针的指针,而p为指向int类型的指针,p和a不同类型,故A选项中p=a赋值语句错误。其余选项可以正确赋值,其中D项是用取地址符&返回整数的地址,然后赋值给p。所以答案选择A选项。95.有以下程序:

#include<stdio.h>main()

{charc1,c2;c1='A'+'8'-'4';c2='A'+'8'-'5';printf("%c,%d\n",c1,c2);

}

已知字母A的ASCII码为65,程序运行后的输出结果是()。A、E,68B、D,69C、E,DD、输出无定值答案:A解析:C语言中每个字符都对应一个ASCII码值,该值可以用来运算。本题中main函数将字符A经过加四和加三运算后分别赋值给c1、c2,则

C1='E',c2='D',然后将c1按字符格式输出,c2按整型格式输出。答案选择A选项。96.下面结构体的定义语句中,错误的是()。A、structord{intx;inty;intz;};structorda;B、structord{intx;inty;intz;}structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;答案:B解析:C语言中结构体变量的定义有三种方法:①定义结构体类型的同时定义结构体变量,如C项;②使用无名结构体类型定义结构体变量,如D项;③先定义结构体类型,后定义结构体变量,如A项,B项错在分别定义结构体类型与结构体变量时需要用“;”隔开。故答案选择B选项。97.下面是有关C语言字符数组的描述,其中错误的是()。A、不可以用赋值语句给字符数组名赋字符串B、可以用输入语句把字符串整体输入给字符数组C、字符数组中的内容不一定是字符串D、字符数组只能存放字符串答案:D解析:C语言中,字符数组可以用来存放单个的字符或者字符串。答案选择D选项。98.下列函数的功能是()。

Fun(char*

A,char*b)

{

while((*b=*a)!='\0')

{a++;b++;

}

}A、将a所指字符串赋给b所指空间B、使指针b指向a所指字符串C、将a所指字符串和b所指字符串进行比较D、检查a和b所指字符串中是否有'\0'答案:A解析:函数fun中a和b是两个字符型指针,在while语句的表达式中将指针a所指向的字符赋给指针b所指向的内存单元,再判断指针b所指向的字符是不是字符串中的结尾符,若不是,则字符指针a和b分别自增,再执行循环语句,直至b所指向的字符为字符串中的空字符。所以答案选择

A选项。99.有以下程序:

#include<stdio.h>main()

{inta=1,b=0;printf("%d,",b=a+b);printf("%d\n",a=2*b);

}

程序运行后的输出结果是()。A、0,0B、1,0C、3,2D、1,2答案:D解析:Main函数先为a、b赋值,然后做运算a+b结果赋值给b,此时b为1,并将b打印出来。接着做运算2*b结果为2*1=2赋值给a,将a打印出来,所以终的输出结果为1,2。答案选择D选项。100.设有定义:

Inta=1,b=2,c=3;以下语句中执行效果与其他三个不同的是()。A、if(a>b)c=a,a=b,b=c;B、if(a>b){c=a,a=b,b=c}C、if(a>b)c=a;a=b;b=c;D、if(a>b){c=a;a=b;b=c}答案:C解析:C语言中if语句后面只跟一条语句时,可以省略大括号。即if语句仅作用于紧随其后的那条语句或者是复合语句的内容,所以A项,执行三条语句组成的复合语句;BD两项执行大括号中的三条语句;而C项只执行c=a;。答案选择C选项。101.下列关于C语言文件的叙述中正确的是()。A、文件由一系列数据依次排列组成,只能构成二进制文件B、文件由结构序列组成,可以构成二进制文件或文本文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件答案:C解析:C语

温馨提示

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

评论

0/150

提交评论