国家二级C语言机试(选择题)模拟试卷50(共245题)_第1页
国家二级C语言机试(选择题)模拟试卷50(共245题)_第2页
国家二级C语言机试(选择题)模拟试卷50(共245题)_第3页
国家二级C语言机试(选择题)模拟试卷50(共245题)_第4页
国家二级C语言机试(选择题)模拟试卷50(共245题)_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷50(共8套)(共245题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共25题,每题1.0分,共25分。)1、设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。如T=R×S,则T的元组的个数为()。A、6B、8C、9D、12标准答案:C知识点解析:R为n元关系,有p个元组S为m元关系,有q个元组。两个关系笛卡儿积是一个n+m元的关系,元组个数是q×p。所以T的元组的个数为9个。2、在快速排序法中,每经过一次数据交换(或移动)后()。A、只能消除一个逆序B、能消除多个逆序C、不会产生新的逆序D、消除的逆序个数一定比新产生的逆序个数多标准答案:B知识点解析:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。快速排序的思想是:从线性表中选取一个元素,设为T,将线性表中后面小于T的元素移到前面,而前面大于T的元素移到后面,结果就将线性表分成两部分(称两个子表),T插入到其分割线的位置处,这个过程称为线性表的分割,然后再用同样的方法对分割出的子表再进行同样的分割。快速排序不是对两个相邻元素进行比较,可以实线通过一次交换而消除多个逆序,但由于均与T(基准元素)比较,也可能会产生新的逆序。3、下面对“对象”概念描述正确的是()。A、属性就是对象B、操作是对象的动态属性C、任何对象都必须有继承性D、对象是对象名和方法的封装体标准答案:B知识点解析:对象是由描述该对象属性的数据以及可以对这些数据施加的所有操作封装在一起构成的统一体。对象可以做的操作表示它的动态行为,通常也称为方法或服务,属性即对象所包含的信息。对象名唯一标识一个对象。对象可以有继承性,但并不是任何对象都必须有继承性。4、有以下程序:#includevoidmain(){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知识点解析:本题定义了两个整型变量,然后用两个指针分别指向这两个整型变量,接着对指针进行交换,那么原来指向第一个整数的指针将指向第二个整数,原来指向第二个整数的指针将指向第一个整数。5、设二叉树共有375个结点,其中度为2的结点有187个。则度为1的结点个数是A、0B、1C、188D、不可能有这样的二叉树标准答案:A知识点解析:二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2i-1个结点;深度为k的二叉树至多有2k-1个结点;对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。本题中,度为2的结点有187个,叶子结点应该有187+1=188个,度为1的结点个数=375-187-188=0。6、在以下给出的表达式中,与while(E)中的(E)不等价的表达式是()。A、(E>0‖F<0)B、(E==0)C、(!E==0)D、(E!=0)标准答案:B知识点解析:while语句中条件表达式E的值不为0即为真,认为满足条件,所以与B选项中表达式的含义正好丰舀反,选择B选项。7、将E-R图转换为关系模式时,E-R图中的实体和联系都可以表示为()。A、属性B、键C、关系D、域标准答案:C知识点解析:从E-R图转换到关系模式时,实体和联系都可以表示成关系,本题答案选C。8、关于C语言的符号常量,以下叙述中正确的是A、符号常量的符号名是标识符,但必须大写B、符号常量在整个程序中其值都不能再被重新定义C、符号常量是指在程序中通过宏定义用一个符号名来代表一个常量D、符号常量的符号名必须是常量标准答案:C知识点解析:在C语言程序中,用一个符号名来代表一个常量,称为符号常量。注意:这个符号名必须在程序中进行特别的“指定”,并符合标识符的命名规则。一般在程序中都是利用宏定义来定义符号常量的,在代码中可以利用undef来结束符号常量的定义,然后进行重新定义,符号常量的大小写并没有特别的规定,一般时候为了和变量区分利用大写。9、结构化程序的三种基本结构是A、顺序、选择和循环B、过程、函数和子程序C、递归、迭代和回溯D、调用、返回和选择标准答案:A知识点解析:结构化程序的三种基本结构是顺序、选择和循环。故选择A。10、以下叙述中正确的是A、字符变量在定义时不能赋初值B、同一英文字母的大写和小写形式代表的是同一个字符常量C、字符常量可以参与任何整数运算D、转义字符用E、符号开头标准答案:C知识点解析:一个字符常量代表ASCII字符集中的一个字符,在C程序中,字符常量可参与任何整数运算,转义字符以一个反斜线开头后跟一个特定的字符。11、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A、自然连接B、交C、投影D、并标准答案:A知识点解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T中元组可以判断R和S做的是自然连接操作。12、有以下程序:#include<stdio.h>structS{intn;inta[20];};voidf(struetS*p){inti,i,t;for(i=0;i<p->n-1;i++)for(j=i+1;j<p->n;j++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}}main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};f(&sA、2,3,1,6,8,7,5,4,lO,9,B、10,9,8,7,6,5,4,3,2,1,C、1,2,3,4,5,6,7,8,9,10,D、10,9,8,7,6,1,2,3,4,5,标准答案:C知识点解析:本题中子函数f的功能是对结构体变量s中第二个成员数组中的所有数据进行从小到大的冒泡排序,所以结果是C选项。13、下面描述中,不属于软件危机表现的是()。A、软件过程不规范B、软件开发生产率低C、软件质量难以控制D、软件成本不断提高标准答案:A知识点解析:软件危机主要表现在:软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A)。14、以下叙述中正确的是A、对于逻辑表达式:a++&&b++,设a的值为0,则求解表达式的值后,b的值会发生改变B、对于逻辑表达式:a++‖b++,设a的值为1,则求解表达式的值后,b的值会发生改变C、关系运算符的结果有三种:0,1,-1D、else不是一条独立的语句,它只是if语句的一部分标准答案:D知识点解析:else不能单独使用,和if匹配使用,要注意逻辑与运算和逻辑或运算出现的短路现象,关系运算结果仅有0和1。15、以下选项中合法的实型常量是A、.914B、3.13e.2.1C、0D、2.0*10标准答案:A知识点解析:实型常量又称实数或浮点数,一般用小数形式或指数形式来表示。实型常量分为以下两种形式:①小数形式:小数形式是由数字和小数点组成的一种实数表示形式。例如0.345、.123、0.0等是合法的实数。这种表示形式必须要有小数点;②指数形式:在C语言中,用“e”或“E”后跟一个整数来表示以10为底的幂数。注意:字母“e”或“E”之前必须要有数字,后面的指数必须为整数。选项B中e后必须为整数,选项C没有小数点,而选项D则出现非法字符*。16、有以下程序main(){inta=2,c=5;printf("a=%%d,b=%%d\n",a,c);}程序的输出结果是A、a=%2,b=%5B、a=%d,b=%dC、a=2,b=5D、a=%%d,b=%%d标准答案:B知识点解析:输出“%”,可以在格式控制中用“%%”表示,将输出一个“%”,而没有%表示格式符的开始,%%d不能表示格式符,因此仅输出:a=%d.b=%d。17、设有定义语句int(*f)(int);则以下叙述正确的是A、f是基类型为int的指针变量B、f是指向int类型一维数组的指针变量C、f是指向函数的指针变量,该函数具有一个int类型的形参D、f是函数名,该函数的返回值是基类型为int类型的地址标准答案:C知识点解析:定义语句int(*f)(int)中f是指向函数的指针变量,该函数中也只有一个int型的形参。18、若有定义语句:inta[2][3],*p[3];则以下语句中正确的是A、p[0]=&a[1][2];B、p[0]=a;C、p=a;D、p[1]=&a;标准答案:A知识点解析:定义语句“inta[2][3],*p[3];”定义了整型二维数组a[2][3]和指针数组p[3]。在C语言中,二维数组名也是一个存放地址常量的指针,其值为二维数组中第一行的地址。所以选项A中,把整型数组a[0]的指针赋给p[0]。19、设文件指针fp已定义,执行语句fp=fopen(’’file’’,’’w’’);后,以下针对文本文件file操作叙述的选项中正确的是A、写操作结束后可以从头开始读B、可以在原有内容后追加写C、可以随意读和写D、只能写不能读标准答案:D知识点解析:在题目中函数fopen以”只写”方式打开文件fiIe。20、有以下程序#includemain(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=1;i<5;i++)printf("%d",c[i]);printf("\n");}程序的运行结果是()。A、4332B、2344C、1234D、1123标准答案:A知识点解析:第一个for循环的作用是统计s数组中1、2、3、4的数字各有多少个,然后存放在数组c的对应下标的元素中,所以c[1]记录的是s中数字1的个数,以此类推,输出c数组的结果为选项21、若要定义一个具有5个元素的整型数组,以下错误的定义语句是A、inta[5]={0};B、intb[]={0,0,0,0,0};C、intc[2+3]D、inti=5,d[i];标准答案:D知识点解析:本题考查一维数组的定义,C语言中一维数组的定义方式为:类型说明符数组名[常量表达式];。选项A正确:选项B初始化了5个元素,因此数组长度为5;选项C常量表达式2+3的值为5,正确:选项D数组长度不是常量表达式,错误。22、有以下程序#includemain(){char*s="12134";intk=0,a=0;while(s[k+1]){k++;if(k%2==0){a=a+(s[k]-’0’+1);continue;}a=a+(s[k]-’0’);}printf("k=%da=%d\n",k,a);}程序运行后的输出结果是()。A、k=4a=12B、k=5a=15C、k=6a=11D、k=3a=14标准答案:A知识点解析:while循环的条件为s[k+1]不为?\0?,循环开始即让k自加1,相当于s[++k]不为?\0?。所以遍历s指向的字符串除首位元素的之后的字符串,a累加s指向字符串中每个元素对应的数字,若元素下标为偶数则多加1。字符串后4位元素"2134"中下标为偶数的元素个数为2,所以a=2+1+3+4+2=12,k记录的是统计的元素个数,为4,所以答案选A。23、设有定义:intx=0,*p;紧接着的赋值语句正确的是A、*p=NULL;B、p=NULL;C、p=x;D、*p=x;标准答案:B知识点解析:题目中定义指针变量p,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。不允许把一个数赋予指针变量,被赋值的指针变量前不能再加"*"说明符,因此B选项正确。24、有以下程序#includemain(){inta=1,b=3,c=5;int*p1=&a,*p2=&b,*p=&c;*p=*p1*(*p2);printf("%d\n",c);}执行后的输出结果是A、1B、2C、3D、4标准答案:C知识点解析:该程序中int*p1=&a,*p2=&b,*p=&c;指定义三个指针变量,并赋值,即使p1指向a;p2指向b;p指向c。*p=*p1*(*p2);该条语句是给p所指的存储单元c赋值,就是p1所指的存储单元的值,即a的值,与p2所指的存储单元b的值相乘,也就是c=a*b,等价于c=1*3=3;因此C选项正确。25、有以下程序:#includemain(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是()。A、0304B、2050C、3344D、3040标准答案:D知识点解析:第一次循环i为0,i%2为0,执行switch(a[0]%2)中的case0语句后内容即a[0]++,a[0]的值变成3;第二次循环i的值为1,i%2为1,执行case1:a[i]=0;所以a[1]的值变成0;第三次循环i的值为2,i%2为0,执行switch(a[2]%2)中的case1语句后的内容a[2]--,a[2]的值变成4;第四次循环i的值为3,i%2为1,执行case1:a[i]=0;所以a[3]的值变成0。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、有以下程序:#includemain(){inti=0,a=O;while(i<20){for(;;){if((i%5)=0)break;elsei--;}i+=13,a+=i;}printf("%d\n",a);}程序的输出结果是()。A、62B、63C、23D、36标准答案:D知识点解析:本题考查while循环。当i<20时,进入while循环体,循环体内的for循环实现的功能是,当i值是0或5的倍数时,执行“i+=13;a+1=i;"这两条语句;若i值不是5的倍数则一直执行for循环。①当i=0时,执行“i+=13;a+=i;i=13,a=13”;②判断“i=13<20”,进入while循环体,i=10时,跳出for循环,执行“i+=13;a+=i;i=23,a=36”;③判断“i=23>20”,循环结束。2、在下列选项中,没有构成死循环的程序段是()。A、inti=100;for(;;){i=i%10+1;if(i>10)break;}B、while(1);C、intk=0:do{++k;}while(k<=10);D、ints=12;while(s);--s;标准答案:C知识点解析:本题考查死循环的知识。选项A)中,for循环没有任何控制语句就会一直执行下去,所以不可能通过控制表达式的值,结束循环。循环体内,“i=i%10+1”这个表达式的值,永远不会大于10,所以永远不会跳出循环,是死循环;选项B)中,while中表达式永远是非0,不会结束循环;选项C)中,当k>10时,结束循环;选项D)中,“while(s);”后面没有任何表达式而是直接加了一个分号,会一直执行,形成死循环。3、有以下定义:structdata{inti;charc;doubled;}x;以下叙述中错误的是()。A、x的内存地址与x.i的内存地址相同B、structdata是一个类型名C、初始化时,可以对x的所有成员同时赋初值D、成员i、c和d占用的是同一个存储空间标准答案:D知识点解析:i、c、d是结构体变量x中的三个不同的成员,占用不同的存储空间。4、下列各序列中不是堆的是A、(91,85,53,36,47,30,24,12)B、(91,85,53,47,36,30,24,12)C、(47,91,53,85,30,12,24,36)D、(91,85,53,47,30,12,24,36)标准答案:C知识点解析:堆可以看成一棵完全二叉树:任一根节点>=左右孩子(或者<=),(大的叫大根堆,小的叫小根堆)。注意一个堆中的这种性质有一致性,不能既有大于又有小于情况存在。此题可以这么做,把结点按照完全二叉树画出来就一目了然了。这个题目很明显91是最大的根,而选项C是“左根右”的排序,那么91的左边只有47,其他都在右边,而右边无法按照此顺序排列,所以选项C不是堆。5、下列选项中属于面向对象设计方法主要特征的是()。A、继承B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择A。6、关系R经过运算σA=B∧C>4∧D>3(R)的结果为()。A、(a,a,2,4)B、(e,e,6,1)C、(c,c,11,4)D、(a,a,2,4)和(e,e,6,1)标准答案:C知识点解析:选择运算是在二维表中选出符合条件的行,形成新的关系的过程。设关系的逻辑条件为F,则关系R满足F的选择运算可写成σF(R)。本题中条件为“A=B∧C>4∧D>3”(∧为并且的意思),只有(c,c,11,4)满足。7、以下程序段完全正确的是A、intk,*p=&k;scanf(’’%d’’,p);B、int*p;scanf(’’%d’’,p);C、int*p;scanf(’’%d’’,&p);D、intk,*p;*p=&k;scanf(’’%d’’,p);标准答案:A知识点解析:选项B没有对指针进行初始化,无效指针。选项C错在没有对指针进行初始化,无效指针,并且在scanf(“%d”,&p)中无需再进行取地址操作。选项D,语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。8、要求通过while循环不惭读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是A、while(ch=getchar()=’N’)printf("%c",ch):B、while(ch=getchar()=="N")printf("%c",ch):C、while((ch=getchar0)!=’N’)printf("%c",ch);D、while((ch=getcharO)==’N’)printf("%c",ch);标准答案:C知识点解析:while循环的执行过程如下:①计算while后面圆括号中表达式的值,当值为非0时,执行步骤②;当值为0时,执行步骤④;②执行循环体一次;③转去执行步骤①;④退出循环。在选项C)中,表达式(ch=getchar())!=’N’表示输入的字符不等于N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于N,则退出循环。9、若有以下程序main(){inta=6,b=0,c=0;for(;a&&(b=0);){b+=a:a-=c++;}printf("%d,%d,%dkn",a,b,c);}则程序的输出结果是A、6,0,0B、5,6,0C、6,6,1D、5,6,1标准答案:C知识点解析:循环条件a&&(b==0),a非零同时b==0则执行循环体,否则退出。循环体执行一次,此时b=6,a=6,c=1。10、定义如下变量和数组:inti,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是()。for(i=0;i<3;i++)printf("%d",x[i][2-i]);A、159B、147C、357D、369标准答案:C知识点解析:本题主要考查二维数组的使用。题中利用for循环来输出x数组中的指定元素:①当i=0时,输出x[0][2]=3;②当i=1时,输出x[1][1]=5;③当i=2时,输出x[2][0]=7。11、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为A、课号,成绩B、学号,成绩C、学号,课号D、学号,姓名,成绩标准答案:C知识点解析:关键字是指属性或属性的组合,其值能够唯一地标识一个元组,而在SC中学号和课号的组合可以对元组进行唯一的标识。12、以下选项中不能作为C语言合法常量的是A、’cd’B、0.1e+6C、\aD、’\011’标准答案:A知识点解析:常量指的是在程序的运行过程中,其值不能被改变的量。在C语言中,包括整型常量、实型常量、字符常量和字符串常量等类型。选项B)0.1e+6是用指数形式表示的实型常量。在C语言中,用以“e”或“E”后一个整数来表示以10为底的幂数。以用这种形式表示实型常量时要注意C语言的语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数,并且在字母e或E的前后以及数字之间不得插入空格。选项C)中用双引号括起来表示的字符串\a。选项D)中’\011’表示用单引号括起来的转义字符八制进数011。选项A)表示的字符常量是非法的,在用单引号表示的字符常量中,只能包含一个字符,而选项A)中包含两个字符。13、软件测试的目的是A、发现程序中的错误B、发现并改正程序中的错误C、设计和执行测试用例D、诊断程序中的错误标准答案:A知识点解析:软件测试的目的是为了发现程序中的错误,而软件调试是为了更正程序中的错误。14、下列关于二叉树的叙述中,正确的是()。A、叶子结点总是比度为2的结点少一个B、叶子结点总是比度为2的结点多一个C、叶子结点数是度为2的结点数的两倍D、度为2的结点数是度为1的结点数的两倍标准答案:B知识点解析:根据二叉树的基本性质3:在任意一棵二叉树中,度为0的叶子结点总是比度为2的结点多一个。所以选择B)。15、以下叙述中正确的是A、charca[3][5]={"A","BB","CCC"};是不合语法的B、字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组C、charca[][5]={"A","BB","CCC"};是不合语法的D、char*ca[3]={"A","BB","CCC"};是不合语法的标准答案:B知识点解析:字符串数组,也就是二维字符数组,其中每个元素为一个字符串,选项B)的说法正确。选项A)和C)对于ca的定义是正确的。选项D)定义一个指针数组,可以保存多个字符串的首地址。16、要求通过while循环不断读入字符,当读入字*N时结束循环。若变量已正确定义,以下正确的程序段是A、while(ch=getchar()=’N’)printf("%c",ch);B、while(ch=getchar()="N")printf("%c",ch);C、while((ch=getchar())!=’N’)printf("%c",ch);D、while((ch=getchar())=’N’)printf("%c",ch);标准答案:C知识点解析:while循环的执行过程如下:①计算while后面圆括号中表达式的值,当值为非0时,执行步骤②;当值为0时,执行步骤④:②执行循环体一次;③转去执行步骤①;④退出循环。在选项C)中,表达式(ch=getchar())!=’N’表示输入的字符不等于N,如果这个条件表达式成立,则执行循环体,打印输出输入的字符。如果这个条件表达式不成立,即输入的字符等于N,则退出循环。17、若有以下程序intf(inta[],intn){if(n>1){intt;t=f(a,n-1);returnt>a[n-1]?t:a[n-1];}elsereturna[0];}main(){inta[]={8,2,9,1,3,6,4,7,5);printf("%d\n",f(a,9));)则程序的输出结果是A、9B、1C、8D、5标准答案:A知识点解析:主函数中调用f(a,9),递归函数的调用过程如下:f(a,9)→f(a,8)→f(a,7)→f(a,6)→f(a,5)→f(a,4)→f(a,3)→f(a,2)→f(a,1),f(a,1)得到返回值为a[0],值为8,递归过程开始回归,回归过程描述如下:8>a[1],返回8→8>a[2]不成立,返回a[2]的值为9……因此函数f的主要功能为计算数组中的最大值。主函数中输出最大值为9。18、以下叙述中正确的是A、在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B、在使用scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C、在printf函数中,各个输出项只能是变量D、使用printf函数无法输出百分号%标准答案:A知识点解析:seanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用printf函数输出,选项A)正确;在使用scanf函数输入整数或实数时,输入数据之间可以用空格、跳格、回车来分隔,选项B)错误;printf输出项不但可以为变量,还可以表达式或者常量,选项C)错误;如果要输出“%”,可以在格式控制中用“%%”表示,将输出一个“%”,选项D)错误。19、以下叙述中正确的是()。A、只要是用户定义的标识符,都有一个有效的作用域B、只有全局变量才有自己的作用域,函数中的局部变量没有作用域C、只有在函数内部定义的变量才是局部变量D、局部变量不能被说明为static标准答案:A知识点解析:用户定义的标识符用来给变量、函数、数组或指针等命名,而这些在C语言中都有自己的作用域,选项A)正确;C语言中所有的变量都有自己的作用域,选项B)错误;在函数内定义的变量为局部变量,在语句块内定义的变量也为局部变量,选项C)错误;局部变量可以被static修饰从而成为一种特殊的局部变量——静态局部变量,选项D)错误;答案选A)。20、有以下程序voidfun(int*p,int*q){intt;t=*p;*p=*q;幸q=t;*q=*p;}main(){inta=0,b=9;fun(&a,&b);printf("%d%d\n",a,b);}程序的输出结果是A、00B、99C、90D、09标准答案:B知识点解析:函数。fun的主要功能是交换p和q指向的地址空间的数据,然后更改p的指向的地址空间数据,使之和q指向的数据相同。主函数调用fun后,p指向a,q指向b,因此a和b的数据全部为9。21、读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);其中buffer代表的是A、一个整型变量,代表待读取的数据的字节数B、一个内存块的首地址,代表读入数据存放的地址C、一个文件指针,指向待读取的文件D、一个内存块的字节数标准答案:B知识点解析:buffer是数据块的指针,对fread来说,它是内存块的首地址,输入的数据存入此内存块中。22、若有以下程序#includechar*a="you";charb[]="WelcomeyoutoChina!";main(){inti,j=0;char*p;for(i=0;b[i]!=’\0’;i++){if(*a==b[i]){p=a;for(j=i;*p!=’\0’;j++){if(*p!=b[j])break;p++;}if(*p==’\0’)break;}}printf("%s",&b[i]);}则程序的输出结果是A、China!B、toChina!C、meyoutoChina!D、youtoChina!标准答案:D知识点解析:该程序首先定义*a和b[],并进行初始化。主函数中通过外层for循环语句,遍历字符数组b[],并且将符合if条件语句的字符赋给数组p;for内层循环语句,遍历字符数组a[]。再将符合if条件语句的结果输出。因此D选项正确。23、若有以下程序#includemain(){charw[20],a[5][10]={"abcdef","ghijkl","mnopq","rstuv","wxyz"};intp[6][2]={{0,1},{1,5},{0,0},{0,2},{1,4},{4,4}},i;for(i=0;i<6;i++)w[i]=a[p[i][0]][p[i][1]];puts(w);}则程序的输出结果是A、catisB、ababjC、ckbdlD、black标准答案:D知识点解析:程序首先初始化字符数组a[5][10]和二维数组p[6][2]。执行for循环语句,循环变量i从0取值到5,得到字符数组w[]的值,并通过字符串输出函数puts进行输出操作。w[0]=a[0][1]、w[1]=a[1][5]、w[2]=a[0][0]、w[3]=a[0][2]、w[4]=a[1][4]、w[5]=a[4][4];因此最后字符数组w的结果为black。因此D选项正确。24、有以下程序#include#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i<N;i++){b[i]=a[i][0];for(j=1;j<N;j++)if(b[i]<a[i][j])b[i]=a[i][j];}}main(){intx[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}程序运行后的输出结果是A、3,5,7B、1,3,5,C、2,4,8,D、3,6,9,标准答案:D知识点解析:函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。因此D选项正确。25、面向对象方法中,继承是指A、一组对象所具有的相似性质B、一个对象具有另一个对象的性质C、各对象之间的共同性质D、类之间共享属性和操作的机制标准答案:D知识点解析:继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、下列关于栈叙述正确的是()。A、栈顶元素最后被删除B、栈底元素最后才能被删除C、栈底元素永远不能被删除D、以上三种说法都不对标准答案:B知识点解析:栈是先进后出的线性表,栈顶的元素最先被删除,栈底的元素最后被删除。2、下列关于栈的叙述中,正确的是A、栈底元素一定是最后入栈的元素B、栈顶元素一定是最先入栈的元素C、栈操作遵循先进后出的原则D、以上三种说法都不对标准答案:C知识点解析:栈是限定只能在表的一端进行插入和删除操作的线性表,必须按“后进先出”的规则操作元素。3、下列对队列的描述中正确的是A、队列属于非线性表B、队列按“先进后出”原则组织数据C、队列在队尾删除数据D、队列按“先进先出”原则组织数据标准答案:D知识点解析:队列(queue)是指允许在一端进行插入、而在另一端进行删除的线性表。允许插入的一端称为队尾:允许删除的一端称为队头。在队列这种数据结构中,最先插入的元素将最先能够被删除:反之,最后插入的元素将最后才能被删除。因此,队列又称“先进先出”或“后进后出”的线性表。4、有以下程序#includevoidmain(){inta=1,b=0;printf("%d,",b=(a++)+(a++));printf("%d\n",a+b);}程序运行后的输出结果是()。A、4,6B、2,5C、3,5D、2,6标准答案:B知识点解析:在主函数中定义了两个整型变量a和b,并把它们的初值分别设置为1和0;在第二条语句中,首先计算b=a+a,然后a自增两次,因此第二句结束时,b=2,a=3,然后第三句,a+b=5。5、关于C语言程序的下列说法中,正确的是()。A、函数的定义可以嵌套,但函数的调用不可以嵌套B、函数的定义不可以嵌套,但函数的调用可以嵌套C、函数的定义和调用均不可以嵌套D、函数的定义和调用均可以嵌套标准答案:B知识点解析:函数定义都是在函数外部进行的,而函数调用是在函数内部发生的,所以函数的定义不可以嵌套,但函数的调用可以嵌套。6、层次型、网状型和关系型数据库划分原则是()。A、记录长度B、文件的大小C、联系的复杂程度D、数据之间的联系方式标准答案:D知识点解析:层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以3种数据库的划分原则是数据之间的联系方式。7、软件测试的目的是()。A、发现程序中的错误B、发现并改正程序中的错误C、执行测试用例D、诊断和改正程序中的错误标准答案:A知识点解析:软件测试是尽可能多的发现程序中的错误,而程序调试的任务是诊断和改正程序中的错误。软件测试贯穿整个软件生命周期,程序调试主要在开发阶段。8、下面对软件测试描述错误的是()。A、严格执行测试计划,排除测试的随意性B、随机地选取测试数据C、软件测试的目的是发现错误D、软件测试是保证软件质量的重要手段标准答案:B知识点解析:软件测试的准则如下:①所有测试都应追溯到需求。②严格执行测试计划,排除测试的随意性。③充分注意测试中的群集现象。④程序员应避免检查自己的程序。⑤穷举测试不可能。⑥妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。9、下列叙述中正确的是A、循环队列是线性结构B、循环队列是线性逻辑结构C、循环队列是链式存储结构D、循环队列是非线性存储结构标准答案:A知识点解析:为充分利用向量空间,克服“假溢出”现象的力法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(CircularQueue)。线性结构是一个有序数据元素的集合。常用的线性结构有:线性表,栈,队列,双队列,数组,串。常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等),图。10、下列叙述中正确的是A、程序执行的效率与数据的存储结构密切相关B、程序执行的效率只取决于程序的控制结构C、程序执行的效率只取决于所处理的数据量D、以上都不正确标准答案:A知识点解析:影响程序执行效率的因素有很多,如数据的存储结构、程序处理的数据量、程序的算法等。顺序存储结构和链式存储结构在数据插入和删除操作上的效率就存在差别。其中,链式存储结构的效率要高一些。11、软件需求规格说明书的作用不包括()。A、软件验收的依据B、用户与开发人员对软件要做什么的共同理解C、软件设计的依据D、软件可行性研究的依据标准答案:D知识点解析:软件需求规格说明书的作用为:便于用户、开发人员进行理解和交流;反映出用户问题的结构,可以作为软件开发工作的基础和依据;作为确认测试和验收的依据。所以答案选择D。12、以下叙述中正确的是()。A、C语句必须在一行内写完B、C程序中的每一行只能写一条语句C、C语言程序中的注释必须与语句写在同一行D、简单C语句必须以分号结束标准答案:D知识点解析:C语句可以跨行来写,但是必须以分号结束,所以A选项错误。C程序中的一行可以有多条语句,所以B选项错误。C语言中的注释语句可以与原语句放在一行,也可以不放在一行,所以C选项错误。13、有以下程序:#include<stdio.h>main(){intx;for(x=3;x<6;x++)printf((x%2)?(″*%d″):(″#%d″),x);printf(″\n″);}程序的输出结果是()。A、*3#4*5B、#3*4#5C、*3*4#5D、*3#4#5标准答案:A知识点解析:条件运算符组成条件表达式的一般形式为:表达式1?表达式2:表达式3。其求值规则为:表达式1值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。本题中语句printf((x%2)?(″*%″):(″#%d″,x);含义为变量x对2求余,如果结果为真,则按照“*%d”出,否则按照“#%d”出。故A选项正确。14、数据库应用系统中的核心问题是A、数据库设计B、数据库系统设计C、数据库维护D、数据库管理员培训标准答案:A知识点解析:在数据库应用系统中的一个核心问题就是设计一个能满足用户要求,性能良好的数据库,这就是数据库设计。所以数据库设计是数据库应用的核心。15、有以下程序#includevoidmain(){ints;scanf("%d",&s);while(s>0){switch(s){case1:printf("%d",s+5);case2:printf("%d",s+4);break;case3:pfintf("%d",s+3);default:printf("%d",s+1);break;}scanf("%d",&s);}}运行时,若输入123450,则输出结果是A、66656B、6566456C、66666D、6666656标准答案:B知识点解析:这道试题主要考查了switch和break语句,当变量s的值为l时,执行easel、case2两条语句,输出65;当变量s的值为2时,执行case2语句,输出6;变量s的值为3时,执行case3、default两条语句,输出6_4;变量s的值为4时,执行default语句。输入5;变量s的值为5时,执行default语句,输出6:变量s的值为0时,程序运行结束。16、下列选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是()。A、switch(a==1){ease0:a=b;break;case1:a++;}B、switch(a){ease1:a=b;break;default:a++;}C、switch(a){default:a++;break;ease1:a=b;}D、switch(a==1){case1:a=b;break;ease0:a++;}标准答案:A知识点解析:if语句的含义是:如果a的值为1,将b的值赋给a,否则将a的值自增1。选项A中,switch(a==1)中表达式a==1的结果如果为真,即为1,则从case1开始执行a++;如果a==1的结果为假,即0,则从case0开始执行a=b,所以与题干含义执行操作相反的是选项A中的语句。17、下列选项中与if(a==1)a=b;elsea++;语句功能不同的switch语句是()。A、switch(a==1){ease0:a=b;break;case1:a++;}B、switch(a){ease1:a=b;break;default:a++;}C、switch(8t){default:a++;break;ease1:a=b;}D、switch(a==1){ease1:a=b;break;ease0:a++;}标准答案:A知识点解析:if语句的含义是:如果a的值为1,将b的值赋给a,否则将a的值自增1。选项A中,switch(a==1)中表达式a==1的结果如果为真,即为1,则从casel开始执行a++;如果a==1的结果为假,即0,则从case0开始执行a=b,所以与题干含义执行操作相反的是选项A中的语句。18、若有以下定义和语句chars1[10]="abcd!",*s2="\n123\\";printf("%d%d\n",strlen(s1),strlen(s2));则输出结果是A、105B、107C、55D、58标准答案:C知识点解析:本题要注意的是转文字符的问题,在字符串s2中,有两个转义字符,分别是回车换行符和反斜线。所以其字符串长度等于5。19、有以下程序:#include<stdio.h>main(){inti,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2)s+=*(t+i);printf(’’%d\n’’,s);}程序的运行结果是()。A、20B、25C、45D、36标准答案:B知识点解析:统计1~9这9个数中的奇数和,此题考查指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址,因此*(t+i)代表数组的第i+1个元素。程序的运行结果是1+3+5+7+9=25。20、下列叙述中错误的是()。A、C程序对预处理命令行的处理是在程序执行过程中进行的B、预处理命令行的最后不能以分号表示结束C、#defineMAX是合法的宏定义命令行D、在程序中,凡是以“#”开始的语句行都是预处理命令行标准答案:A知识点解析:本题考查预处理命令行。预处理是在程序编译之前进行的,所以A选项错误。21、有以下程序#includeintflintx);main()intflintX){inta,b=0;{returnx*x+1;}for(a=0;a<3;a++){b=b+f(a);putchar(’A’+b);}}A、BCDB、BDIC、ABED、BCF标准答案:B知识点解析:在函数main()中,第一次执行for循环时,b的值等于1,此时输出字母B:第二次执行fof循环时,b的值等于3,此时输出字母D;第三次执行for循环时,b的值等于8,此时输出字母I。22、有以下程序#includemain(){inti,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i;j++)m=m%j;printf("%d\n",m);}程序的运行结果是()。A、0B、1C、2D、3标准答案:B知识点解析:第一次执行外循环i的值为1,满足条件,判断第一次内循环,j的值为3,不满足条件,跳出内循环?第二次执行外循环i的值为2,同理也不满足内循环条件,跳出内循环,第三次执行外循环i的值为3,此时进入内循环判断条件时,条件成立,执行m=m%j,m的值为1,跳出内循环,跳出外循环打印m的值。23、以下叙述中错误的是A、函数的返回值类型不能是结构体类型,只能是简单类型B、只要类型相同,结构体变量之间可以整体赋值C、可以通过指针变量来访问结构体变量的任何成员D、函数可以返回指向结构体变量的指针标准答案:A知识点解析:函数的返回值类型可以是结构体类型。结构体变量之间可以相互复制。24、若有以下程序#includemain(){inta=1,b=2,c=3,d=4;if((a=2)&&(b=1))c=2;if((c==3)‖(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d);}则程序的输出结果是A、2,1,2,-1B、2,2,2,4C、1,2,3,4D、5,1,2,-1标准答案:D知识点解析:代码中有两条并列的if语句,第一条if语句,逻辑与表达式(a=2)&&(b=1)中,a=2,则执行b=1,得到该逻辑与表达式值为1,执行分支语句c=2;第二条if语句(c一3)‖(d=-1),c==3不成立,执行d=-1,而后得出整个逻辑与表达式值为1,执行分支语句a=5。25、有以下程序#includevoidmain(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i]=0;}for(i=0;i<4;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是A、2050B、3344C、3040D、0304.标准答案:C知识点解析:在主函数的for循环语句中,当循环变量i的值等于0,2时,执行switch中的case0语句,分别对数组元素a[0]和a[2]加1和减1,所以a[0]的值等于3,a[2]等于4。当循环变量i的值等于1,3时,执行switch中的case1语句,把数组元素a[1]和a[3]的值赋为0。所以输出数组a的元素,其结果为3040。26、有以下程序#include<stdio.h>main(){inta=2,b;b=a<<2;printf("%d\n",b);}A、4B、6C、8D、2标准答案:C知识点解析:表达式a<<2,把a向左移动2位,相当于扩大4倍。27、有以下程序#includeinta=2;intf(){staticintn;intm;m=n=0;n++;a++;m++;returnn+m+a;}main(){intk;for(k=0;k<3;k++)printf("%d,",f());printf("\n");}程序的运行结果是()。A、5,6,7,B、5,7,9,C、5,8,11,D、5,5,5,标准答案:A知识点解析:局变量在当前文件内也是一直存在的。而静态变量定义时的初始化只运行一次,并且其值在程序运行过程中一直存在,函数f()在定义静态变量n时并没有对其初始化,接下来有个赋值语句"m=n=0;"所以每次执行函数f()时,静态变量n都会先被赋值为0再自加1,所以输出的f(0)=1+1+3=5,n=1,m=1,a=3;f(1)=1+1+4=6,n=1,m=1,a=4;f(2)=1+1+5=7,n=1,m=1,a=5。所以答案选A。28、有以下程序#includemain(){inta[]={2,4,6,8,10},x,*p,y=1;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf("%d\n",y);}程序的输出结果是()。A、19B、13C、11D、15标准答案:A知识点解析:考查指针与一维数组。语句p=&a[1];意味着将指针p指向数组a的第二个元素,p+1则是指向数组a的第三个元素,同理,p+x则是指向数组a的第x+2个元素,x取值为0、1、2,然后用y和对应数组的元素累加,y=1,即是1+2+4+6+8=19,结果选A)。29、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}执行后的输出结果是A、24B、5C、32D、40标准答案:C知识点解析:在for循环体中,首先判断自变量i能否被5整除,然后再自加两次,最后判断i能否被8整除。当for循环执行到第30次时,i的值为30能被5整除,然后i经过两次自加1运算,值变为32,能被8整除,故执行“printf("%d",i);”语句,即输出32。30、设有定义doublea[10],*s=a;以下能够代表数组元素a[3]的是A、(*s)[3]B、*s[3]C、*s+3D、*(s+3)标准答案:D知识点解析:语句*s=a,使用指针变量s指向一维数组a的首地址,所以*(s+3)表示的是引用数组a[3]。31、设有定义:intx[2][3];则以下关于二维数组x的叙述错误的是A、数组x可以看作是由x[0]和x[1]两个元素组成的一维数组B、可以用x[0]=0;的形式为数组所有元素赋初值0C、元素x[0]可看作是由3个整型元素组成的一维数组D、x[0]和x[1]是数组名,分别代表一个地址常量标准答案:B知识点解析:二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存中的排列顺序是先存放第0行的元素,再存放第1行的元素……称这种存放顺序为按行存放。可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如,inta[4][3]={1,2,4,5};在编译时,系统将按a数组元素在内存中排列的顺序,将花括号内的数据一一对应地赋给各个元素,若数据不足,系统将给后面的元素自动补初值0。以上将给a数组第一行的元素和第二行的第一个元素依次赋予1、2、4、5,其他元素的初值都为0。32、有以下程序#include<stdio.h>#include<string.h>structA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序运行后的输出结果是A、1002,ChangRong,1202.0B、1001,ChangRong,1098.0C、1001,ZhangDa,1098.0D、1002,ZhangDa,1202.0标准答案:C知识点解析:本题主要考查是的函数调用时参数之间的传递问题。在C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。所以对于本题来说,在主函数中执行f(a),把结构体变量a的值复制一份传递给形参变量t,而实参变量a的值保持不变。33、有以下程序#includevoidfun(char**p){inti;for(i=0;i<4;i++)printf("%s",p[i]);}main(){char*s[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};fun(s);printf("\n");}程序运行后的输出结果是A、ABCDEFGHIJKLB、ABCDC、AEIMD、ABCDEFGHIJKLMNOP标准答案:D知识点解析:本题考查字符串数组,s表示指向字符数组的指针,s指向了第一个字符串,s++指向了第二个字符串,所以最后输出结果为D选项。34、有以下程序#include<stdio.h>#include<string.h>structA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序运行后的输出结果是A、1002,ChangRong,1202.0B、1001,ChangRong,1098.0C、1001,ZhangDa,1098.0D、1002,ZhangDa,1202.0标准答案:C知识点解析:本题主要考查是的函数调用时参数之间的传递问题。在C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。所以对于本题来说,在主函数中执行f(a),把结构体变量a的值复制一份传递给形参变量t,而实参变量a的值保持不变。35、有以下程序#includemain(){inta=3,b=3;printf("%d\n",a&b);}程序运行后的输出结果是()A、3B、1C、0D、6标准答案:A知识点解析:按位与"&"运算符的运算规则是:只要对应的二进制位有一个为0时,结果就为0。一个数与自身的按位与运算结果不变,所以输出结果为3,答案选A。36、以下选项中,没有编译错误的是A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’\0’};B、charstr1[5]="pass",str2[6];str2=str1;C、charname[10];name="china";D、charstr4[];str4="helloworld";标准答案:A知识点解析:B选项中,不能直接将字符数组名直接赋值给另一个字符数组名。C选项赋值错误,不能将一个字符串常量赋值给一个字符指针。D选项定义str4时需要定义其长度。37、有以下程序#includeintf(intm){staticintn=0;n+=m;returnn;}main(){intn=0;printf("%d,",f(++n));printf("%d\n",f(n++));}程序运行后的输出结果是A、3,3B、1,1C、2,3D、1,2标准答案:D知识点解析:该题目中首先区别++n和n++,第一次调用f函数时,将++n(n自增1后再参与运算)作为参数进行传递,此时变量m的值为1,执行n+=m;后,n=1,将1返回主函数,并输出。第二次调用f函数时,将n++(n参与运算后再自增1)作为参数进行传递,此时变量m的值为1,执行语句n+=m;,由于n是静态存储变量,因此n=2,将2返回主函数并输出。因此D选项正确。38、下列叙述中正确的是A、C程序中所有函数之间都可以相互调用B、在C程序中main函数的位置是固定的C、在C程序的函数中不能定义另一个函数D、每个C程序文件中都必须要有一个main函数标准答案:C知识点解析:C程序中主函数不能被其他函数调用,所以A选项错误。main函数可以放在程序开始,也可以放在中间,也可以放在最后,位置不固定,但程序执行时必须从main函数开始,所以B选项错误。在C程序的函数中不能定义另一个函数,可以声明或调用另一个函数,所以C选项正确。每个C程序中必须包含一个main函数,但不一定是每个C程序文件中必须有,用户单独编写的某个函数也可以存储为一个C程序文件,所以D选项错误。39、下列叙述中正确的是A、线性表链式存储结构的存储空间一般要少于顺序存储结构B、线性表链式存储结构与顺序存储结构的存储空间都是连续的C、线性表链式存储结构的存储空间可以是连续的,也可以是不连续的D、以上说法均错误标准答案:C知识点解析:线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此C正确。40、有以下程序#includemain(){chara=’H’;a=(a>=’A’&&a<=’Z’)?(a+32):a;printf("%c\n",a);}程序运行后的输出结果是A、HB、hC、AD、a标准答案:B知识点解析:条件运算符构成的选择结构的一般形式为:表达式1?表达式2:表达式3。其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。该题目中首先给字符变量a赋值为’H’。语句a=(a>=’A’&&a<=’Z’)?(a+32):a;即将大写字母变为小写字母。因此B选项正确。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共40题,每题1.0分,共40分。)1、下列选项中,不属于数据库管理的是()。A、数据库的建立B、数据库的调整C、数据库的监控D、数据库的校对标准答案:D知识点解析:数据库管理一般包括:数据库的建立、数据库的调整、数据库的重组、数据库的安全性控制与完整性控制、数据库的故障恢复和数据库的监控。2、有以下程序:#include<stdio.h>main(){inti=0,a=0;while(i<20){for(;;){if((i%5)==0)break;elsei--;}i+=13,a+=i;}printf(’’%d\n’’,a);}程序的输出结果是()。A、62B、63C、23D、36标准答案:D知识点解析:本题考查while循环。当i<20时,进入while循环体,循环体内的for循环实现的功能是,当i值是0或5的倍数时,执行“i+=13;a+-i;”这两条语句;若i值不是5的倍数则一直执行for循环。①当i=0时,执行“i+=13;a+=i;i=13,a=13”;②判断“i=13<20”,进入while循环体,i=10时,跳出for循环,执行“i+=13;a+i;i=23,a=36”;③判断“i=23>20”,循环结束。3、某完全二叉树共有256个节点,则该完全二叉树的深度为()。A、7B、8C、9D、10标准答案:C知识点解析:根据完全二叉树的性质:具有n个节点的完全二叉树的深度为[log2n]+1。本题中完全二叉树共有256个节点,则深度为[log2256]+l=8+1=9。4、下列叙述中正确的是A、栈是“先进先出”的线性表B、队列是“先进后出”的线性表C、循环队列是非线性结构D、有序线性表既可以采用顺序存储结构,也可以采用链式存储结构标准答案:D知识点解析:栈是“先进后出”,队列“是先进先出”。栈和队列都是一种线性表,属于线性结构。有序线性表既可以采用顺序存储结构,也可以采用链式存储结构。采用链式存储结构的线性表称之为线性链表。5、下列叙述中正确的是A、栈是“先进先出”的线性表B、队列是“先进后出”的线性表C、循环队列是非线性结构D、有序线性表既可以采用顺序存储结构,也可以采用链式存储结构标准答案:D知识点解析:栈是“先进后出”,队列“是先进先出”。栈和队列都是一种线性表,属于线性结构。有序线性表既可以采用顺序存储结构,也可以采用链式存储结构。采用链式存储结构的线性表称之为线性链表。6、下列各项中,不属于软件设计阶段任务的是()。A、软件总体设计B、算法设计C、制订软件并确认测试计划D、数据库设计标准答案:C知识点解析:从技术观点上看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。所以A、B、D正确,C为软件测试阶段的任务。7、有两个关系R和T如下:则由关系R得到关系T的操作是()。A、选择B、交C、投影D、并标准答案:C知识点解析:关系T是由关系R的第3、4行的元组组成的,很显然这是对关系R进行选择运算的结果。可以简单理解为:选择运算是对行的操作,投影运算是对列的操作。选择是从表中选出满足给定条件的元组组成新表。故C选项正确。8、对软件系统总体结构图,下面描述中错误的是()。A、深度等于控制的层数B、扇入是一个模块直接调用的其他模块数C、扇出是一个模块直接调用的其他模块数D、原子模块一定是结构图中位于叶子节点的模块标准答案:B知识点解析:与结构图有关的术语如下:9、度为3的一棵树共有30个结点,其中度为3、1的结点个数分别为3、4。则该树中的叶子结点数为A、14B、15C、16D、不可能有这样的树标准答案:B知识点解析:根据题目可知本树中还有度为2的结点。树的总结点=(度1*个数+度2*个数…)+1,这里我们设度为2的结点数为x,那么30=3*3+2*x+1*4+1=2*x+14,由此可计算出x=8。树的叶子结点数等于总结点减去所有度不为0的结点,也就是30-3-8-4=15。10、设一棵树的度为4,其中度为4,3,2,1的结点个数分别为2,3,3,0。则该棵树中的叶子结点数为A、16B、15C、17D、不可能有这样的树标准答案:A知识点解析:因为任一棵树中,结点总数=总分支数目+1,所以:n0+2+3+3+0=(n0*0+4*2+3*3+2*3+1*0)+1。计算得出n0=16。其中,n0表示叶子结点,所以选项A正确。11、某二叉树中度为2的结点有10个,则该二叉树中有()个叶子结点。A、9B、10C、11D、12标准答案:C知识点解析:根据二叉树的性质3:对任何一棵二叉树,度为0的结点(即叶子结点)总是比度为2的结点多一个。12、下列关于软件工程的描述中正确的是A、软件工程只是解决软件项目的管理问题B、软件工程主要解决软件产品的生产率问题C、软件工程的主要思想是强调在软件开发过程中需要应用工程化原则D、软件工程只是解决软件开发中的技术问题标准答案:C知识点解析:软件工程是建立并使用充善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。软件工程主要思想是强调在软件开发过程中需要应用工程化原则。13、在结构化程序设计中,模块划分的原则是A、各模块应包括尽量多的功能B、各模块的规模应尽量大C、各模块之间的联系应尽量紧密D、模块内具有高内聚度、模块间具有低耦合度标准答案:D知识点解析:内聚性是对一个模块内部各个元素间彼此结合的紧密程度的度量。耦合性是对模块间互相连接的紧密程度的度量。在结构化程序设计中,模块划分应遵循高内聚、低耦合的原则,即减弱模块之间的耦合性和提高模块内聚性,有利于提高软件模块的独立性。14、有以下程序#include<stdio.h>main(){intb=10,a=-11;a%=b%=4;printf(’’%d%d\n’’,a,b);)则程序的输出结果是A、12B、-1-2C、-12D、1.2标准答案:C知识点解析:对于表达式a%=b%=4为复合的赋值运算,结合性自右至左,相当于先计算b=b%4,a=a%b;绌果的符号和第一个操作数的符号相同,因此b为2,a的结果为-1.15、度为3的一棵树共有30个结点,其中度为3、1的结点个数分别为3、4。则该树中的叶子结点数为A、14B、15C、16D、不可能有这样的树标准答案:B知识点解析:根据题目可知本树中还有度为2的结点。树的总结点=(度1*个数+度2*个数…)+1,这里我们设度为2的结点数为x,那么30=3*3+2*x+1*4+1=2*x+14,由此可计算出x=8。树的叶子结点数等于总结点减去所有度不为0的结点,也就是30-3-8-4=15。16、程序调试的任务是A、设计测试用例B、验证程序的正确性C、发现程序中的错误D、诊断和改正程序中的错误标准答案:D知识点解析:程序调试的任务是诊断和改正程序中的错误。它与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于一定的调试工具去执行并找出错误的具体位置。软件测试贯穿整个软件生命期,调试主要在开发阶段。17、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、逻辑设计阶段B、需求分析阶段C、概念设计阶段D、物理设计阶段标准答案:A知识点解析:数据库的逻辑设计主要工作是将E-R图转换成指定关系数据库中的关系模式,答案选A。18、关于’’while(条件表达式)循环体’’,以下叙述正确的是A、循环体的执行次数总是比条件表达式的执行次数多一次B、条件表达式的执行次数与循环体的执行次数一样C、条件表达式的执行次数总是比循环体的执行次数多一次D、条件表达式的执行次数与循环体的执行次数无关标准答案:C知识点解析:while语句中表达式是循环条件,语句为循环体。while语句中当表达式计算的值为真(非0)时,执行循环体语句。因此条件表达式执行的次数总是比循环体多一次。19、设intk=l,m=2;floatf=7;,则以下选项中错误的表达式是()。A、一k++B、k>=(f=m)C、k%(int)fD、2=k>k标准答案:D知识点解析:在C语言中的赋值表达式中,等号的左边必须是变量,等号右边可以是变量、表达式或者常量。选项A是一个赋值表达式;选项B是一个表达式;选项C是计算余数表达式;选项D错误,等号的左边不是变量。20、下

温馨提示

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

评论

0/150

提交评论