版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)笔试模拟试卷13(共9套)(共572题)国家二级(C语言)笔试模拟试卷第1套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、下列选项中不符合良好程序设计风格的是()。A、源程序要文档化B、数据说明的次序要规范化C、避免滥用goto语句D、模块设计要保证高耦合、高内聚标准答案:8知识点解析:良好的设计风格包括:程序文档化,选项A的说法正确:数据说明次序规范化,选项B的说法正确:功能模块化,即把源程序代码按照功能划分为低耦合,高内聚的模块,选项D的说法错误:注意goto语句的使用,选项C的说法正确。2、下列关于队列的叙述中正确的是()。A、在队列中只能插入数据B、在队列小只能删除数据C、队列是先进先出的线性表D、队列是先进后出的线性表标准答案:4知识点解析:队列是指允许在一端进行插入、而在另一端进行删除的线性表,允许插入的一端称为队尾,允许删除的一端称为队头,选项A和选项B错误。在队列中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除,所以,队列又称为“先进先出”或“后进后出”的线性表,它体现了“先来先服务”的原则,选项C正确,选项D错误。3、下列选项中不属于软件生命周期开发阶段任务的是()。A、软件测试B、概要设计C、软件维护D、详细设计标准答案:4知识点解析:软件开发周期开发阶段通常由下面5个阶段组成:概要设计、详细设计、编写代码、组装测试和确认测试。软件维护时期的主要任务是使软件持久地满足用户的需要。选项C中的软件维护不是软件生命周期开发阶段的任务。4、下列叙述中正确的是()。A、线性链表中的各元素在存储空间中的位置必须是连续的B、线性链表中的表头元素一定存储在其他元素的前面C、线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面D、线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的标准答案:8知识点解析:在线性表的链式存储结构中,各数据结点的存储位置不连续,选项A错误。各结点在存储空间中的位置关系与逻辑关系也不一致,选项B和选项C错误。选项D正确。5、下列叙述中正确的是()。A、线性链表是线性表的链式存储结构B、栈与队列是非线性结构C、双向链表是非线性结构D、只有根结点的二叉树是线性结构标准答案:1知识点解析:线性链表是线性表的链式存储结构,选项A的说法是正确的。栈与队列是特殊的线性表,它们也是线性结构,选项B的说法足错误的;双向链表是线性表的链式存储结构,其对应的逻辑结构也是线性结构,而不是非线性结构,选项c的说法是错误的;二叉树是非线性结构,而不是线性结构,选项D的说法是错误的。6、下列叙述中正确的是()。A、黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征B、黑箱(盒)测试方法主要考虑程序的内部结构和内部特征C、白箱(盒)测试不考虑程序内部的逻辑结构D、上述3种说法都不对标准答案:1知识点解析:黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例,选项A是正确的,选项B错误。白箱测试是根据对程序内部逻辑结构的分析来选取测试用例,选项C错误。7、下列叙述中正确的是()。A、接口复杂的模块,其耦合程度一定低B、耦合程度弱的模块,其内聚程度一定低C、耦合程度弱的模块,其内聚程度一定高D、上述3种说法都不对标准答案:4知识点解析:影响模块之间耦合的主要因素有两个:模块之间的连接形式,模块接口的复杂性。一般来说,接口复杂的模块,其耦合程度要比接口简单的的模块强,所以选项A的说法错误:耦合程度弱的模块,其内聚程度一定高,选项B错误:选项C正确。8、下列描述中正确的是()。A、程序就是软件B、软件开发不受计算机系统的限制C、软件既是逻辑实体,又是物理实体D、软件是程序、数据与相关文档的集合标准答案:8知识点解析:计算机软件是计算机系统中与硬件相耳依存的另一部分,包括程序、数据及相关文档的完拄集合。9、用树形结构来表示实体之间联系的模型称为()。A、关系模型B、层次模型C、网状模型D、数据模型标准答案:2知识点解析:目前常用的数据模型有3种:层次模型、网状模型和关系模型。在层次模型中,实体之间的联系是用树结构来表示的。10、数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是()。A、DB包含DBS和DBMSB、DBMS包含DB和DBSC、DBS包含DB和DBMSD、没有任何关系标准答案:4知识点解析:数据库管理系统DBMS是数据库系统中实现各种数据管理功能的核心软件。它负责数据库中所有数据的存储、检索、修改以及安全保护等,数据库内的所有活动都是在其控制下进行的。所以,DBMS包含数据库DB。操作系统、数据库管理系统与应用程序在一定的硬件支持下就构成了数据库系统DBS。所以,DBS包含DBMS,也就包含DB。二、选择题(1分)(本题共10题,每题1.0分,共10分。)11、算法具有5个特性,以下选项中不属于算法特性的是()oA、有穷性B、简洁性C、可行性D、确定性标准答案:2知识点解析:一个算法应当具有以下’5个特性:有穷性;确定性;可行性;有零个或多个输入;由一个或多个输出。简洁性不属于这5个特性,所以本题应该选择B。12、以下选项中可作为C语言合法整数的是()。A、10110BB、386C、0XffaD、x2a2标准答案:4知识点解析:在C语言中,整数常量可以用十进制、八进制和十六进制来表示,选项A为二进制表示,故选项A不正确;选项B是八进制表示法,但在八进制数中,各个位数只能为数字0到7中的一个,而在选项B中,有一个数字8,故选项B不正确:选项C为十六进制表示法正确;选项D中也为十六进制表示法,但十六进制数以ox开头,故选项D不正确,所以,4个选项中选项C符合题意。13、以下不合法的字符常量是()。A、’\018’B、’\’’’C、’\\’D、’\xcc\标准答案:1知识点解析:在选项A中,“\”后跟着三个数字,是表示一个ASCII码值等于这三位数字所组成的八进制数数值的字符,但是八进制数只能是由0-7这八个数字表示,而选项A中出现了数字8所以是不合法的。选项B是表示一个双引号的转义字符表示方法;选项C表示的是一个反斜杆;选项D表示一个ASCII值为十六进制值“的字符。故应该选择A。14、表达式3.6-5/2+1.2+5%2的值是()。A、4.3B、4.8C、3.3D、3.8标准答案:8知识点解析:*、/和%的优先级要高于+和—,同级别的运算符从左至右运算。所以本题首先计算5/2和5%2,虽然我们都知道5/2的结果应该是2.5,但C语言中规定了两个整数相除的结果为整数,而且是截尾取整,所以5/2的结果是2;5%2表示的是5除以2所得的余数,其结果为1。计算完后,表达式变为3.6-2+1.2+1,从左至右计算不难得出结果为3.8,故应该选择D。15、以下非法的赋值语句是()。A、n=(i=2,++i)B、j++;C、++(i+1)D、x=j>0;标准答案:4知识点解析:选项A为复合表达式,首先计算(i=2,++i)的值,然后赋值给n,故选项A正确;选项B为简单自加运算,故选项B正确;选项c在表达式++(i+1);中,(i+1)不是变量,该表达式的值为常量,而在什运算中,其运算对象必须为变量,故选项C错误,选项D中为复合赋值表达式,正确。所以应当选择C。16、若有以下程序段(n所赋的是八进制数):intm=32767,n=032767;printf("%d,%\n",m,n);执行后输出结果是()。A、32767,32767B、32767,032767C、32767,77777D、32767,077777标准答案:1知识点解析:程序在定义时,以十进制形式为m赋初值,以八进制的形式为n赋初值。输出的时候m以十进制形式输出,n以八进制形式输出,因此输出的结果为32767和32767。所以,A选项为所选。17、设有定义:floata=2,b=4,h=3;以下c语言表达式中与代数式(a+B)h计算结果不相符的是()。A、(a+B)*h/2B、(1/2)*(a+B))*hC、(a+B)*h*1/2D、h/2*(a+B)标准答案:2知识点解析:选项B中由于1和2都是整型,其1/2的运算结果为0,故整个表达式的值为0,所以它的结果和题目中要求的代数式的讨算结果不相符,所以,4个选项中选项B符合题意。18、以下程序段的输出结果是()。inta=1234;printf("%2d\n",A);A、12B、34C、1234D、提示出错,无结果标准答案:4知识点解析:当整数的值超过格式要求输出范围时,原样输出。本题中要求输出两个有效数字,而实际上a有4个有效数字,故原样输出,输出1234。所以,4个选项中C为所选。19、有以下程序:main(){intm,n,p;scanf("m=%dn=%dp=%d",&m,&n,&p);print("%d%d%d\n",m,n,p);}若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是()。A、m=123n=456P=789B、m=123n=456p=789C、m=123,n=456,p=789D、123456789标准答案:1知识点解析:本题若想使变量m的值为123、n为456、p为789,则应该输入的字符串为:用这三个数据按m、n、p出现在scaaf()函数中的位置顺序替换掉scant()函数格式控制串中的格式控制符后所得到的格式控制串,即"m=123n=456p=789"。所以,4个选项十选项A符合题意。20、设有定义:inta,*pa=&a;以下scanf语句中能正确为变量a读入数据的是()。A、scanf("%d",pA);B、scanf("%d",A);C、scanf("%d",&pA);D、seanf("%d",*pA);标准答案:1知识点解析:本题中定义了整型变量a和一个指向整型数据的指针变量pa,并定义pa是一个存放a的地址的变量。选项B是应该将a改为&a,故选项B不正确;选项c应该将&pa改为pa,因为pa已经表示存放:的地址,故选项C不正确:选项D中*pa表示的是指针p8所指向存储空间的变量的值,而不是一个地址,故选项D不正确,所以,4个选项十选项A符合题意。三、选择题(2分)(本题共30题,每题1.0分,共30分。)21、在以下给出的表达式中,与while(E)中的(E)不等价的表达式是()。A、(!E==0)B、(E>0||E<0)C、(E==0)D、(E!=0)标准答案:4知识点解析:题目中的while(E)循环是当E等于0时,循环结束,E不等于0时,继续循环。选项C中,当E等于0时,表达式“E==0”为真继续循环,而E不等于。时,表达式为假循环结束,这与题目中的条件不等价,故应该选择C。22、若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)s=a;for(b=1;b<=c;b++)s=s+1;则与上述程序段功能等价的赋值语句是()。A、s=a+b;B、s=a+c;C、s=s+c;D、s=b+c;标准答案:2知识点解析:本程序中for循环的次数为c-1+1共循环了c次,而每循环一次s的值加1,所以s的值为s+c。而最开始s的值为a,故4个选项中选项B符合题意。23、已有定义:charc;,程序前面已在命令行中包含ctype.h文件。不能用于判断c中的字符是否为大写字母的表达式是()。A、isupper(c)B、’A’<=c<=’Z’C、’A’<=c&&c<=’Z’D、c<=(’z’-32)&&(’a’-32)<=c标准答案:2知识点解析:大写字母从’A’~’Z’的ASCII码是连续的,所以如果当—个字符大于等于’A’且小于等于’z’时,那这个字符就一定是一个大写字母,故选项C正确。C语言中的库函数isupper()的作用也正是判断一个字符是否为大写字母的,故选项A正确。在ASCII码中,小写字母的编码也是连续的,对应的小写字符比大写字符的ASCII码值大32,所以选项D经过小写字符-32后,换算成了对应的大写字母’Z’和’A’,所得到结果和选项C是一致的,故也是正确的。选项B中,C语言的逻辑表达式不能直接连写,而应该写成选项C那样,故是错误的,应该选择B。24、以下选项中,值为1的表达式是()。A、1-’0’B、1-’\0’C、’1’-0D、’\0’-’0’标准答案:2知识点解析:在ASCII码中,字符串结束符’\0’的ASCII码为0,字符’0’的ASCII码的值为48,字符’1’的ASCII码的值为49。由此可见,选项A的值为-47;选项B的值为1;选项C的值为49;选项D的值为-48。故应该选择B。25、若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是()。A、for(i=1,p=1;i<=5;i++)p*=i;B、for(i=1;i<=5;i++){p=1;p*=i;}C、i=1;p=1;while(i<=5){p*=i;i++;}D、i=1;p=1;do{p*=i;i++;}while(1<=5)标准答案:2知识点解析:选项B中for循环了5次,而每次循环的时候,都将p的值重新赋值为1后,再乘以当前数字i,最后的结果为5,显然不是5!的值,同样的分析可知选项A、选项C和选项D计算的都是5!。所以,4个选项中选项B符合题意。26、有以下程序:main(){chara,b,c,d;scanf("%c,%c,%d,%d",&a,&b,&c,&d);printf("%c,%c,%c,%c\n",a,b,c,d);}若运行时从键盘上输入:6,5,65,66<回车>。则输出结果是()。A、6,5,A,BB、6,5,65,66C、6,5,6,5D、6,5,6,6标准答案:1知识点解析:主函数中首先定义了4个字符变量a、b、cd,然后通过scanf()函数输入a、b、c、d输入中a和b是按字符格式c输入的,c和d是按整型符号d输入的。在看下面的printf()函数中,要求a、b、c、d都按字符输出,故a和b原样输出为6、5,c和d将把与其ASCII码对应的字符输出,65和66的ASCII码对应字符A和B,故最后的输出为6,5,A,B。所以,4个选项中选项A符合愿意。27、有以下程序:fun(intx,inty){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,"k);k=fun(j,m);printf("%d\n",k);}执行后的输出结果是()。A、5,5B、5,11C、11,11D、11,5标准答案:2知识点解析:本题的fun()函数中定义的变量m和i是静态局部变量,第1次调用fun()函数时m=0、i=2,执行i+=m+1后,i的值变为3,再执行m=i+x+y后,m的值变为5,所以第1次输出的整数是5。第2次调用fun()函数时m=5、i=3,执行i+=m+1,i变为9,再执行m=i+x+y,m变为11,所以第2次输出的整数是11。故本题应该选择B。28、设有定义:intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是()。A、*p=*q;B、p=q;C、*p=&n1;D、p=*q;标准答案:1知识点解析:题目中定义了两个变量n1和n2,又定义了两个指针p和q分别指向变量n2和n1。要通过指针实现n2=n1,就是要将q所指内容赋给p所指内容,即*p=*q。所以应该选择A。29、有以下程序:#include<stdio.h>main(){charc1,c2,c3,c4,c5,c6;scanf(%c%c%c%c,&c1,&c2,&c3,&c4);c5=getchar();c6=getchar();putchar(c1);putchar(c2);printf(%c%c\n,c5,c6);}程序运行后,若从键盘输入(从第1列开始)123<回车>45678<回车>则输出结果是()。A、1267B、1256C、1278D、1245标准答案:8知识点解析:在题目中,程序执行到scanf()函数时,会暂停等待用户输入4个字符,按题意输入123<回车>后,字符1~3被分别输入到c1~c3中,而c4会得到一个换行符’\n’。然后执行第1个getchar()函数,由于前面的scanf()函数读完了缓冲区中的所有字符,所以此时程序会又暂停等待用户输入,按题意输入45678<回车>后,缓冲区第1个字符’4’被读入并赋给c5,第2个getchar()函数会读入缓冲区第2个字符’5’。所以最后依次输出c1、c2、c5、c6的值后,屏幕上的结果是1245。故应该选择D。30、有以下程序:#include<stdio.h>main(){printf("%d\n",NULL);}程序运行后的输出结果是()。A、0B、1C、-1D、NULL没定义,出错标准答案:1知识点解析:在C语言中NULL的ASCII码值为0,而输出函数要求以整形格式输出,故最后的输出数为0。所以,4个选项中选项A符合愿意。31、以下程序中函数sort的功能是对a所指数组中的数据进行由大到小的排序;voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i++)for(j=i+1,j<n;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(&aa[3],5);for(i=0;i<10;i++)print("%d,",aa[i]);printf(’\n");}程序运行后的输出结果是()。A、1,2,3,4,5,6,7,8,9,10B、10,9,8,7,6,5,4,3,2,1,C、1,2,3,8,7,6,5,4,9,10D、1,2,10,9,8,7,6,5,4,3,标准答案:4知识点解析:本题中首先定义一个长度为10的一个整型数组,并初始化为“1,2,3,4,5,6,7,8,9,10”,然后调用排序函数sort(),通过分析不难看出,sort()函数是对具有n个元素的a数组进行从大到小排序。由于函数的第一个参数是数组名,其对应的实参可以是函数名或地址。本题在调用该函数时,实参是&aa[3]的地址,即把aa[3]的地址传给了行参数组名a,函数也就是对aa[3]开始的5个元素进行从大到小的摔序,aa[0]、aa[1]、aa[2]、aa[8]、aa[9]并没有变化。Sort()执行完毕后,接着执行后面的for语句输出数组aa中各个元素的值,由于函数sort()只是对aa[3]开始的5个元素进行从大到小的排序,aa[0]、aa[1]、aa[2]、aa[8]、aa[9]并没有变化,所以输出为“1,2,3,8,7,6,5,4,9,10”。所以4个选项中C正确。32、有以下程序:main(){charp[]={’a’,’b’,’c},q[]="abc";printf("%d%d\n",sizeof(p),sizeof(q));}程序运行后的输出结果是()。A、44B、33C、34D、43标准答案:4知识点解析:字符数组即可以用{初始化列表}来初始化,也可以用一个字符串常量来初始化。但字符串常量系统会自动为其添加结束标记’\0’,故比实际长度要多一位,所以本题输出为34,应该选择C。33、若有定义语句:inta[2][3],*p[3];,则以下语句中正确的是()。A、p=a;B、p[0]=a;C、p[0]=&a[1][2];D、p[1]=&a;标准答案:4知识点解析:选项A中,p为数组名,其值是不能被改变的,故非法;选项B中,p[0]的类型是int*,而a是二维数组名(类型为int[][3]),两者无法赋值,故非法:选项C中,p[0]为int型指针,&a[1][2]是int型变量的地址,可以合法赋值;选项D中,p[1]是int型指针,而&a是二维数组的地址(类型为int(*)[2][3]),两者无法赋值,故非法。所以本题应该选择C。34、有以下程序:voidchange(intk[]){k[0]=k[5];}main(){intx[10]=(1,2,3,4,5,6,7,8,9,10},n=0;while(n<=4){change(&x[n]);n++;}for(n=0;n<5;n++)printf("%d",x[n]);printf("\n");}程序运行后输出的结果是()。A、678910B、13579C、12345D、62345标准答案:1知识点解析:本题的change()函数实现的是:将传入的地址值的高5个单位的地址中的内容复制到传入的地址当中,即等价于*k=*(k+5)。在主函数中,首先通过while循环,循环5次调用change()函数,依次将x[0]~x[4]的地址传入,所以while循环结束后,x[0]~x[4]中的内容等于x[5]~x[9]中的内容。所以输出结果为678910,故应该选择A。35、有以下程序:#include<stdio.h>main(){charc1=’1’,c2=’2’;c1=getchar();c2=getchar();putchar(c1);putchar(c2);}当运行时输入:a<回车>后,以下叙述正确的是()。A、变量c1被赋予字符a,c2被赋予回车符B、程序将等待用户输入第2个字符C、变量c1被赋予字符a,c2中仍是原有字符2D、变量c1被赋予字符a,c2中将无确定值标准答案:1知识点解析:getchar()函数执行时将从键盘缓冲区中读取用户的输入,而不管输入的是否可打印字符。所以当输入a<回车>后,键盘缓冲区被输入的实际上是两个字符:’a’和’\n’。故选项A的说法是正确的。36、有以下程序:main(){chars[]="\n123\\";printf("%d,%d\n",strlen(s),sizeof(s));}执行后输出结果是()。A、赋初值的字符串有错B、6,7C、5,6D、6,6标准答案:4知识点解析:本题在定义字符数组时没有定义数组长度,但是给数组赋了初值,这时初值的个数即为数组的长度,故数组长度为6(包括’\0’)。字符串的长度为有效字符的个数5。因此printf语句中输出的结果为5,6。所以,C选项为所选。37、阅读以下函数:fun(char*s1,char*s2){inti=0;while(s1[i]==s2[i]&&s2[i]!=’\0’)i++;return(s1[i]==’\0’&&s2[i]==’\0’);}此函数的功能是()。A、将s2所指字符串赋给s1B、比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0C、比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0D、比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0标准答案:4知识点解析:在函数fun()中有两个字符型指针变量s1和s2,在函数中程序执行while循环,该循环退出条件有两个:一个是s1[i]!=s2[i](两个字符串不相等):第二个是s1[i]和s2[i]相等均为“\0”(两个字符串相等)。循环退出后,执行return语句,即两个字符串相等则返回1,不相等则返回0。所以,C选项为所选。38、以下叙述中正确的是()。A、全局变量的作用域一定比局部变量的作用域范围大B、静态(static)类别变量的生存期贯穿于整个程序的运行期间C、函数的形参都属于全局变量D、未在定义语句中赋初值的auto变量和static变量的初值都是随机值标准答案:2知识点解析:若在函数中定义与全局变量名字相同局部变量,则全局变量在该函数中将不起作用,因此全局变量的作用域并不一定比局部变量的作用域大,故选项A不正确;静态变量一旦定义,将在整个程序的运行期间都存在,故选项B正确;函数的形参只在函数调用的时候分配存储空间,在退出函数时收回存储空间,因此是局部的,故选项C不正确;没有赋值的auto型变量的初值是随机的,没有赋值的static型变量的初值是0,故选项D不正确。所以,B选项为所选。39、有以下程序:#include<string.h>voidf(charp[][10],intn)/*字符串从小到大排序*/{chart[10];inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(strcmp(p[i],p[j])>0){strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);}}main(){charp[5][10]={"abc","aabdog","abbd","dcdbe","cd"};f(p,5);printf("%d\n",strlen(p[0]));}程序运行后的输出结果是()。A、2B、4C、6D、3标准答案:4知识点解析:题目中已告知函数f()的作用是将字符串从小到大排序,因此主函数中调用完f(p,5);后,二维数组p中的内容为("aabdfg","abbd","abc","cd","dcdbc"}。输出的结果是strlen(p[0]),即p中第1个字符串的长度,所以结果是6。故本题应该选择C。40、设有如下说明:typedefstructST{longa;intb;charc[2];}NEW;则下面叙述中正确的是()。A、以上的说明形式非法B、ST是一个结构体类型C、NEW是一个结构体类型D、NEW是一个结构体变量标准答案:4知识点解析:将题目中的定义语句去掉前面的typedef和后面的NEW(分号保留),就是一条完整的结构体定义语句,其中struct是说明符,ST是结构体名,大括号里面的是结构体成员的定义。此时要声明该结构体变量时需要使用struct加结构体名一起来声明,structST一起构成一个结构体类型,就好像字符类型char。若只去掉前面的typedef,就是一条结构体定义同时声明一个结构体变量NEW的语句,因为NEW的前面部分是structST的完整写法,可以看作是structST。C语言允许用typedef说明一种新类型名,其语法格式为:typedef类型名标识符;以后就可以用该标识符来代替被说明的类型名了。因此,当前面存在typedef时,该语句就变成了给structST的完整写法定义一个新的名称NEW。所以,此时的NEW是一个结构体类型,它相当于structST,即可以和char一样单独用来声明该结构体变量,而ST只是一个结构体名,不能单独用来声明变量。所以,4个选项中C符合题意。41、有以下程序:#include<string.h>main(){charp[]={’a’,’b’,’c’},q[10]={’a’,’b’,’c’};printf("%d%d\n",strlen(p),strlen(q));}以下叙述中正确的是()。A、在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3B、由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3C、由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3D、由于p和q数组中都没有字符串结束符,故长度都不能确定标准答案:2知识点解析:使用初始化列表对字符数组赋初值,系统不会自动为其添加字符串结束符,使用字符串初始化时才会自动添加,所以选项A是错的。数组长度在未指定的情况下由初始化列表项中数据的个数决定,若已指定且初始化项数不足时,多出部分会自动初始化为0,0等价于宁符串结束符’\0’。所以选项B是正确的,C和D都是错误的。本题应该选B。42、有以下程序:inta=4;intf(intn){intt=0;staticinta=5;if(n%2){inta=6;t+=a++;}else{inta=7;t+=a++;}returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序运行后的输出结果是()。A、24B、28C、32D、36标准答案:2知识点解析:题目中第1行声明了一个全局变量a,在函数f()中,也声明了一个静态变量a,这时全局变量被屏蔽,即在f()函数中用到的a是其内部定义的这个静态变量a,而不是全局变量。但f()函数的if子句和else子句又分别了局部变量a,这时静态变量a又被屏蔽,即在if子句中使用的是if子句自己定义的a,else子句也是这样。在主函数中,通过for语句连续执行了2次f()函数,并将返回值累加到s中,且s被全局变量a初始化,即初始值是4。第1次调用f(),参数值为0,0能被2整除,执行if子句,t被自增6,a增1不会影响外面的变量a。函数返回t和静态变量a的和,即11,此时,静态变量a被增1,这次对a的改变会带入到下一次f()函数的调用小去。第2次调用f(),参数值为1,1不能被2整除,执行else子句,t被自增7,a增1不会影响外面的变量a。函数返回t和静态变量a的和,此时a的值为上次调用f()时增1后的值6,即返回7+6=13。所以,主函数中s现在的值为4+11+13=28。故应该选择B。43、有以下程序;voidss(char*s,chart){while(*s){if(*s==t)*s=t-’a’+’A’;s++;}}main(){charstr1[100]="abcddfefdbd",c=’d’;ss(str1,c);printf("%s\n",str1);}程序运行后的输出结果是()。A、ABCDDEFEDBDB、abeDDfefDbDC、abcAAfefAbAD、Abcddfefdbd标准答案:2知识点解析:本题中的函数ss()有两个参数,一个是字符型指针变量s,另一个是字符型变量t。在函数中通过一个while循环,在循环中一次取出s指向的字符串并判断它是否和t中存放的字符相同,若相等,则执行“*s=t-’a’+’A’;”(若是小写字母,则把它转换成大写字母)语句。在主函数中执行函数调用ss(str1,c),很显然是把str1数组中所有字符“d”变成大写字母,其他字符不变。所以4个选项中B正确。44、设有以下语句:typedefstructTT{charc;inta[4];}CIN;则下面叙述中正确的是()。A、可以用TT定义结构体变量B、TT是struct类型的变量C、可以用CIN定义结构体变量D、CIN是structTT类型的变量标准答案:4知识点解析:将题目中的定义语句去掉前面的typedef和后面的CIN(分号保留),就是一条完整的结构体定义语句,其中struct是说明符,TT是结构体名,大括号里面的是结构体成员的定义。此时要声明该结构体变量时需要使用struct加结构体名一起来声明,structTT一起构成一个结构体类型,就好像字符类型char。若只去掉前面的typedef,就是一条结构体定义同时声明个结构体变量CIN的语句,因为CIN的前面部分是structTT的完整写法,可以看作是structTT。C语言允许用typedef说明一种新类型名,其语法格式为:typedef类型名标识符;以后就可以用该标识符来代替被说明的类型名了。因此,当前面存在typedef时,该语句就变成了给structTT的定义一个新的名称CIN。所以,此时的CIN是一个结构体类型,它相当于structTT,即可以和char一样单独用来声明该结构体变量,而TT只是一个结构体名,不能单独用来声明变量。所以,4个选项中C符合题意。45、有以下程序:#include<stdio.h>stxucttt{intx;structtt*y;}*p;structtta[4]={20,a+1,15,a+2,30,a+3,17,a};main(){inti;p=a;for(i=1;i<=2;i++){printf("%d,",p->x);p=p->y;}}程序的运行结果是()。A、20,30,B、30,17C、15,30,D、20,15,标准答案:8知识点解析:题目中定义了一个全局结构体数组a,结构体中包含两个成员;一个int型变量x和一个自身类型指针y。所以,结构体数组a的初始化列表中每两个初始化一个结构体元素。主函数通过一个for循环,连续调用了两次输出函数printf(),每次输出p所指元素的x成员值。p初始化时指向数组a的首地址,即a[0]的位置,所以第1次输出的值为20。然后又将a[0]的成员y的值赋给p,y在初始化时是a+1,所以p在第2次输出时指向的元素是a[1],故第2次输出的值为15。所以本题最终输出结果是“20,15,”,应该选择D。46、有以下程序:main(){intx[]={1,3,5,7,2,4,6,0},i,j,k;for(i=0;i<3;i++)for(j=2;j>=i;j--)if(x[j+1]>x[j]){k=x[j];x[j]=x[j+1];x[j+1]=k;}for(i=0;i<3;i++)for(j=4;j<7-i;j++)if(x[j]>x[j+1]){k=x[j];x[j]=x[j+1];x[j+1]=k;}for(i=0;i<8;i++)printf("%d",x[i]);printf("\n");}程序运行后的输出结果是()。A、75310246B、1234567C、76310462D、13570246标准答案:1知识点解析:主函数中定义了一个整型数组x,并初始化。接着执行了一个二重for循环,在该二重循环的作用是将数组的前4个元素按从大到小排序,接着用了一个二重循环(也是冒泡算法)将数组的后4个元素按从小到大的顺序排序,故最后依次输出数组的个元素的值为75310246,所以,4个选项中选项A符合题意。47、设有以下定义:uniondata{intd1;floatd2;}demo;则下面叙述中错误的是()。A、变量demo与成员d2所占的内存字节数相同B、变量demo中各成员的地址相同C、变量demo和各成员的地址相同D、若给demo.d1赋99后,demo.d2中的值是99.0标准答案:8知识点解析:本题中float所占内存字节数为4,而int类型在VC6.0中占4字节,所以demo就与成员d2所占字节数是相同的,选项A的说法正确。联合体的所有成员的首地址都是相同的,和联合体变量的地址一致。故选项B和C都是正确的。由于int类型数据和float类型数据在内存中的存放格式是不一样的,所以给d1赋99后,d2中不会得到99.0这个值。故选项D不正确,答案应该选择D。48、有以下程序:#include<stdlib.h>structNODE{intnurn;structNODE*next;};main(){structNODE*p,*q,*r;intsum=0;P=(structNODE*)malloc(sizeof(structNODE));q=(structNODE*)malloc(sizeof(structNODE));r=(structNODE*)malloc(sizeof(structNODE));p->num=1;q->num=2;r->num=3;p->next=q;q->next=r;r->next=NULL;sum+=q->next->num;sum+=p->num;Printf("%d\n",sum);}执行后的输出结果是()。A、3B、4C、5D、6标准答案:2知识点解析:本题中定义了一个结点structNODE,在主函数中定义了三个结点变量指针p、q和r,接着通过malloc函数分配了三个结点并让p、q和r分别指向他们,再接着给p、q和r所指向的结点的num域赋值为1、2、3,然后让结点p指向小让q指向r,r指向NULL。显然q->next->num的值为指针r所指向结点的num域的值为3,p->num的值为指针p所指向结点的num域的值为1,故最后输出s的值为3+1=4。所以,4个选项中选项B符合题意。49、有以下程序:#include<stdlib.h>main(){char*p,*q;p=(char*)malloc(sizeof(char)*20);q=p;scanf("%s%s",p,q);printf("%s%s\n",p,q);}若从键盘输入:abcdef<回车>,则输出结果是()。A、defdefB、abcdefC、abedD、dd标准答案:1知识点解析:本题首先定义两个字符型指针变量p和q,通过malloc()函数申请20个字符的存储空间,并把它的首地址赋给p,在把p的值赋给q,p和q指向同一个存储区。在scanf()语句中读取字符串到p和q指向的字符串,先把“abc”读取到p指向的存储区中,第一个空格是结束标记,第二个空格是分隔符,再把“def”存放到q指向的存储区,把原先的内容覆盖。所以p和q指向的存储区中内容是“def”,所以最后输出的def,def所以4个选项中A正确。50、以下程序企图把从终端输入的字符输出到名为abc.txt的文件中,直到从终端读入字符#号时结束输入和输出操作,但程序有错。#include<stdio.h>main(){FILE*four;charch;fout=fopen(’abc.txt’,’w’);ch=fgetc(stdin);while(ch!=’#’){fputc(ch,fout);ch=fgetc(stdin);}fclose(fout);}出错的原因是()。A、函数fopen调用形式有误B、输入文件没有关闭C、函数fgetc调用形式有误D、文件指针stdin没有定义标准答案:1知识点解析:stdin是标准输入设备的文件指针,不需定义直接可以使用,它随系统的启动而打开,随系统的关闭而关闭,fgetc()函数的作用是从某个文件中读取一个数据,其参数为要读取文件的文件指针,所以本题中的调用形式是正确的。fopen()函数有两个参数,第一个参数是打开的文件名,第二个参数是文件打开模式,两个参数都是字符串,本例中“fout=fopen(’abc.txt’,’w’);”语句的fopen()函数参数是错误的,应该用双引号“""”,正确的应改为fout=fopen("abc.txt","w");。所以,A选项为所选。四、公共基础填空题(本题共5题,每题1.0分,共5分。)51、设一棵完全二叉树共有700个结点,则在该二叉树中有【】个叶子结点。标准答案:350知识点解析:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。在根据完全二叉树的定义,在一棵完全二叉树中,最多有1个度为1的结点。因此,设一棵完全二叉树具有n个结点,若n为偶数,则在该二叉树中有n/2个叶子结点以及n/2-1个度为2的结点,还有1个是度为1的结点:若n为奇数,则在该二叉树中有[n/2]+1个叶子结点以及[n/2]个度为2的结点,没有度为1的结点。本题中,完全二叉树共有700个结点,700是偶数,所以,在该二叉树中有350个叶子结点以及349个度为2的结点,还有1个是度为1的结点。所以,本题的正确答案为350。52、在面向对象方法中,【】描述的是具有相似属性与操作的一组对象。标准答案:类知识点解析:在面向对象方法中,类描述的是具有相似属性与操作的一组对象。53、诊断和改正程序中错误的工作通常称为【】。标准答案:调试知识点解析:调试也称排错,调试的目的是发现错误的位置,并改正错误。54、对下列二叉树进行中序遍历的结果为【】。标准答案:ACBDFEHGP知识点解析:中序遍历方法的递归定义;当二叉树的根不为空时,依次执行如下3个操作:①按中序遍历左子树。②访问根结点。③技中序遍历右子树。根据遍历规则来遍历本题中的二叉树。首先遍历F的左子树,同样按中序遍历。先遍历C的左子树,即结点A,然后访问C,接着访问C的右子树,同样按中序遍历C的右子树,先访问结点B,然后访问结点D,因为结点D没有右子树,因此遍历完C的右子树,以上就遍历完根结点F的左子树。然后访问根结点F,接下来遍历F的右子树,同样按中序遍历。首先访问E的左子树,E的左子树为空,则访问结点E,然后访问结点E的右子树,同样按中序遍历。首先访问G的左子树,即H,然后访问结点G,最后访问G的右子树P。以上就把整个二叉树遍历一遍,中序遍历的结果为ACBDFEHGP。因此,划线处应填入“ACBDFEHGP”。55、在结构化分析使用的数据流图(DFD)中,利用【】对其中的图形元素进行确切解释。标准答案:数据字典或DD知识点解析:数据流图用来对系统的功能需求进行建模,它可以用少数几种符号综合地反映出信息在系统中的流动、处理和存储情况。数据词典(DataDictionary,DD)用于对数据流图中出现的所有成分给出定义,它使数据流图上的数据流名字、加工名字和数据存储名字具有确切的解释。五、填空题(本题共9题,每题1.0分,共9分。)56、若有定义inta=10,b=9,c=8;,接着顺序执行下列语句,变量b中的值是【】。c=(a-=(b-5));c=(a%11)+(b=3);标准答案:3知识点解析:这里:b-5=4,a-=4之后a的值为6,并把它赋给c。此时b的值并未被改变。在第2个表达式中,也只有赋值表达式b=3改变了b的值。所以两行语句执行完毕,b的值应该为3。57、函数pi的功能是根据以下近似公式求π值:(π*π)/6=1+1/(2*2)+1/(3*3)+...+1(n*n)现在请你在下面的函数中填空,完成求π的功能。#include"math.h"{doubles=0.0;longi;for(i=1;i<=n;i++)s=s+【】;return(sqrt(6*S));}标准答案:0/(i*i)或(double)1/(i*i)知识点解析:表达式1+1/(2*2)+1/(3*3)+...+1(n*n)可写为1/(1*1)+1/(2*2)+1/(3*3)+...+1(n*n)n即:∑1÷(i×i)i=1对应的C语言的表达式s=s+1.0/(i*i)。注:必须要写成1.0的形式,否则1/(i,i)返回值为其值截尾取整,即恒为0。58、若输入字符串:abcde,则以下while循环体将执行【】次。while((ch=getchar())==’e’)printf("*");标准答案:0知识点解析:函数getchar()是从键盘得用户输入的一个字符。用户输入的第1个字符a,不管后面输入的是什么ch的值都是’a’,因此条件(ch=getchar())==’e’为假,这个循环不会被执行。59、若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是【】。intw[10]={23,54,10,33,47,98,72,80,61},*p=w;标准答案:p[5]或*(p+5)知识点解析:98是数组w的第5个元素(最开始的为第0个),而通过*p=w已经将p指向了数组w,要想不移动指针p而引用98,可以有以下两种写法:p[5]、*(p+5)。60、设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部【】。要求形参名为b。main(){double[10][22];intn;......fun(s);}标准答案:voidfun(doubleb[10][22])知识点解析:本题答案:voidfun(doubleb[10][22])。61、有以下程序:intf(intn){if(n==1)return1;elsereturnf(n-1)+1;}main(){inti,j=0;for(i=1;i<3;i++)j+=f(i);printf("%d\n",j);}程序运行后的输出结果是【】。标准答案:3知识点解析:i=1时,f(1)=1,j=j+f(1)=0+1=1;i=2时,f(2)=f(1)+1=1+1=2,j=j+f(2)=1+3=3;此时循环结束,程序运行后的输出结果是3。62、以下程序的输出结果是【】。voidfun(){staticinta=0;a+=2;printf("%d",A);}main(){intcc;for(cc=1;CC<4;CC++)fun();printf("\n");}标准答案:246知识点解析:循环for(cc=1;cc<4;cc++)被执行了3次。在函数fun中,由于a是static型变量,所以函数第1次调用后,a=2;第2次调用后,a=4;第3次调用后,a=6。63、以下程序的输出结果是【】。#defineMAX(x,y)(x)>(y)?(x)L:(y)main(){inta=5,b=2,C=3,d=3,t;t=MAX(a+b,c+D)*10;printf("%d\n",t);}标准答案:7知识点解析:在C语言中,宏定义是直接替换的,所以在对表达式MAX(a+b,c+d)*10进行替换后,表达式变为(a+b)>(c+d)?(a+b):(c+d)*10。在这个条件表达式中,(a+b)>(c+d)为真,所以用(a+b)的值为整个表达式的值(否则用(c+d)*10的值作为整个表达式的值),而(a+b)的值为7。所以整个表达式的值为7。64、实现程序可将磁盘中的一个文件复制到另一个文件中,两个文件的文件名在可执行命令的命令行中(相当于copy命令),假定文件在当前目录下。请补全程序。#include<stdio.h>voidmain(intargc,char*argv[]){FILE*f1,*f2;if(argc<【】){printf("parametererror!\n");exit(0);}n=fopen(argv[1],"r");f2=fopen(argv[2],"w");while(【】)fputc(fgetc(f1),f2);fclose(f1);fclose(f2);}标准答案:3!feof(f1)知识点解析:要实现文件复制,需要指定源文件及目的文件,因此在命令行下执行程序时至少要指定两个参数,加上程序名本身,故argc的值至少为3,因此第一空应填3。while循环中语句fputc(fgetc(f1),(f2);的目的是将f1中的字符依次读出并写入到f2对应的文件中去,直至文件f1结束为止,因此第二空为!feof(f1)。国家二级(C语言)笔试模拟试卷第2套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、下列对于线性链表的描述中正确的是______。A、存储空间不一定是连续,且各元素的存储顺序是任意的B、存储空间不一定是连续,且前件元素一定存储在后件元素的前面C、存储空间必须连续,且各前件元素一定存储在后件元素的前面D、存储空间必须连续,且各元素的存储顺序是任意的标准答案:A知识点解析:线性链表属于链式存储结构,在链式存储结构中,存储空间可以不连续,各元素的存储顺序是任意的,元素之间的逻辑关系是由指针域来决定的。2、下列关于栈的描述正确的是______。A、在栈中只能插入元素而不能删除元素B、在栈中只能删除元素而不能插人元素C、栈是特殊的线性表,只能在一端插入或删除元素D、栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素标准答案:C知识点解析:栈是特殊的线性表,它的一端封闭,在另一端进行插入和删除操作。3、为了使模块尽可能独立,要求______。A、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强B、模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱C、模块的内聚程度要尽量低,且各模块问的耦合程度要尽量弱D、模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强标准答案:B知识点解析:为了使模块尽可能独立,模块分解时应满足信息隐蔽原则。尽量使模块的内聚度高,模块间的耦合度低。模块的大小适中(通常一个模块以50~100个语句行最为适宜)。4、下列叙述中,正确的是______。A、用E-R图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系B、用E-R图只能表示实体集之间一对一的联系C、用E-R图只能表示实体集之间一对多的联系D、用E-R图表示的概念数据模型只能转换为关系数据模型标准答案:A知识点解析:E-R模型可以用一种非常直观的图的形式表示,这种图称为E-R图。用E-R图能够表示实体集之间一对一的联系、一对多的联系、多对多的联系。5、以下叙述中正确的是______。A、C语言的源程序不必通过编译就可以直接运行B、C语言中的每条可执行语句最终都将被转换成二进制的机器指令C、C源程序经编译形成的二进制代码可以直接运行D、C语言中的函数不可以单独进行编译标准答案:B知识点解析:C语言编写的程序必须经过编译、连接后才可以执行,选项A错误;C语言编译后生成的二进制代码是目标文件,需进一步连接生成.exe文件方可执行,选项C错误;C语言中函数可以单独编译。6、以下有4组用户标识符,其中合法的一组是______。A、For-subCaseB、4dDOSizeC、f2_G3IFabcD、WORDvoiddefine标准答案:C知识点解析:选项A中有非法标识符-sub,选项B中有非法标识符4d,选项D中有C语言保留字void。7、以下选项中不属于C语言的类型的是______。A、signedshortintB、unsignedlongintC、unsignedintD、longshort标准答案:D知识点解析:本题考查C语言中整型变量的分类问题,选项D不是C语言合法的数据类型。8、有以下程序:int*f(int*x,int*y){if(*x<*y)returnx;elsereturny;}main(){inta=7,b=8,*P,*q,*r;P=&a;q=&b;r=f(p,q);print("%d,%d,%d\n",*P,*q,*r);}执行后的输出结果是______。A、7,8,8B、7,8,7C、8,7,7D、8,7,8标准答案:B知识点解析:函数f是一个返回值为指针的函数,其功能是比较两个数中的最小值,并返回最小值的存储单元地址。main函数中定义了指针变量p和q,p=&a,q=&b,即*p=7,*q=8,调用函数{后r=p,所以*r=7,printf函数的输出结果为7,8,7。9、有以下程序:main(){chara,b,c,d;scanf("%c,%c,%d,%d",&a,&b,&c,&d);printf("%c,%c,%c,%c\n",a,b,c,d);}若运行时从键盘上输入:6,5,65,66<回车>,则输出结果是______。A、6,5,A,BB、6,5,65,66C、6,5,6,5D、6,5,6,6标准答案:A知识点解析:char型数据类型以%d的形式输入时,输入的是ASCII值。65是字符A的ASCII码值,66是字符B的ASCII值。10、有以下程序:main(){charstr[][10]={"China","Beijing"),*P=str;printf("%s\n",p+10);}程序运行后的输出结果是______。A、ChinaB、BeijingC、ngD、ing标准答案:B知识点解析:本题中p+10表示字符串"Beijing"的地址,故正确答案为B。二、选择题(1分)(本题共10题,每题1.0分,共10分。)11、有以下定义语句:doublea,b;intw;longc;若各变量已正确赋值,则下列选项中正确的表达式是______。A、a=a+b=b++B、w%((int)a+b)C、(c+w)%(int)aD、w=a==b;标准答案:C知识点解析:取模运算的操作数必须是整型或长整数类型,因此C正确。12、有以下程序:main(){inti=1,j=1,k=2;if((j++‖k++)&&i++)printf("%d,%d,%d\n",i,j,k);}执行后的输出结果是______。A、1,1,2B、2,2,1C、2,2,2D、2,2,3标准答案:C知识点解析:本题考查“逻辑或”运算的特例。本题中if语句的条件表达式为(j++||k++)&&i++,首先计算表达式(j++||k++)的值,++运算符位于右侧,因此先取j、k当前值进行运算,因j=1,所以表达式(j++||k++)的值为真,k++表达式不再执行,故执行完表达式(j++||k++)&&i++后,j=2、k=2、i=2。13、数字字符0的ASCII值为48,若有以下程序:main(){chara=’1’,b=’2’;printf("%c,",b++);printf("%d\n",b-a);}程序运行后的输出结果是______。A、3,2B、50,2C、2,2D、2,50标准答案:C知识点解析:b++是先使用b再给b赋值1,因此是先输出2,再将b加1,b=’3’,则第一条语句输出2,第二条语句输出2。14、有以下程序:main(){inti=10,j=1;printf("%d,%d\n",i--,++j);}执行后的输出结果是______。A、9,2B、l0,2C、9,1D、10,1标准答案:B知识点解析:本题中--运算符位于运算变量i右侧,++运算符位于变量j的左侧,所以先输出i的当前值10,然后i再加1;j先加1得2,然后输出。15、以下能正确定义且赋初值的语句是______。A、iht=n1=n2=10;B、charc=32;C、floatf=f+1.1;D、doublex=12.3E2.5标准答案:A知识点解析:B选项中32应加单引号,C选项中f=f+1.1两边都是不定值,不正确;D中E后要用整型数,且E后必须要有数字。16、有以下程序:main(){charal=’M’a2=’m’;printf("%c\n",(al,a2));}以下叙述中正确的是______。A、程序输出大写字母MB、程序输出小写字母mC、格式说明符不足,编译出错D、程序运行时产生出错信息标准答案:B知识点解析:输出项表是一个逗号表达式,它的值为a2,因此输出的是a2的值。17、以下程序的功能是进行位运算:main(){unsignedchara,b;a=7^3;b=~4&3;printf("%d%d\n",a,b);}程序运行后的输出结果是______。A、43B、73C、70D、40标准答案:A知识点解析:a=7^3=00000111^00000011=00000100=4;b=~4&3=~00000100&00000011=11111011&00000011=00000011=318、设有定义:floata=2,B=4,h=3;,以下C语言表达式中与代数式计算结果不相符的是______。A、(a十B)*h/2B、(1/2)*(a+B)*hC、(a+B)*h*1/2D、h/2*(a+B)标准答案:B知识点解析:选项B错误,不符合题意。19、若有以下程序段:intm=0,n=0;charc=’a’;scanf("%d%c%d",&m,&c,&n);printf("%d,%c,%d\n",m,c,n);若从键盘上输入:10A10<回车>,则输出结果是______。A、10,A,10B、16,a,10C、10,a,0D、10,A,0标准答案:A知识点解析:scanf函数为格式输入函数,执行该函数后对变量m、n和c重新赋值,scanf的格式字符为"%dc%d",键盘输入为10A10,所以m=10、c=’A’、n=10。20、以下程序运行后的输出结果是______。main(){inta=1,b=2,c=3;if(c=a)printf("%d\n",c);elseprintf("%d\n",b);}A、2B、3C、5D、1标准答案:B知识点解析:根据if条件,语句c=a的值为1,因此输出c值为3。三、选择题(2分)(本题共20题,每题1.0分,共20分。)21、以下程序段中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是______。A、main(){int*p;fun(p);……}intfun(int*p){ints;p=&s;}B、main(){int*p;fun(&p);……}intfun(int**p){ints;*p=&s;}C、#include<stdlib.h>main(){int*p;fun(&p);……}intfun(int**p){*p=(int*)malloc(2);}D、#include<stdlib.h>main(){int*p;fun(p);……}intfun(int*p){p=(int*)malloc(sizeof(int));}标准答案:C知识点解析:选项A和B中p指向局部变量s的地址,退出函数fun后,该局部变量也被释放,不能使p指向一个整型单元地址;选项D中通过malloc函数分配一个整型地址,但不能被返回到main函数中,因为指针参数指向的地址不能被改变;选项C中,p是指向指针的指针,函数fun改变的是其指向的内容,而不是其地址。22、有以下程序段:main(){inta=5,*b,**c;c=&b;b=&a;}程序在执行了c=&b;b=&a;语句后,表达式**c的值是______。A、变量a的地址B、变量b中的值C、变量a中的值D、变量b的地址标准答案:C知识点解析:本题中b是指向int型的指针变量,c是指向指针的指针变量。执行完语句c=&b;b=&a;后,**c=a=5。23、有以下程序:main(){inti=0,s=0;do{if(i%2){i++;continue;}i++;s+=i;}while(i<7);printf("%d\n",s);}执行后的输出结果是______。A、16B、12C、28D、21标准答案:A知识点解析:continue语句的作用是结束本次循环,程序中while循环语句的功能是计算1~7之间奇数之和,即s=1+3+5+7=16。24、以下能正确定义一维数组的选项是______。A、inta[5]={0,1,2,3,4,5);B、chara[]={0,1,2,3,4,5);C、chara={’A’,’B’,’C’};D、inta[5]="0123";标准答案:B知识点解析:A中初值的个数大于a的定义的长度,错误。C中a被定为字符却给它赋值为数值,错误。D中a是整型数组却给它赋值为字符串,错误。25、已有定义:chara[]="xyz"’b[]={’x’,’y’,’z’);,以下叙述中正确的是______。A、数组a和b的长度相同B、a数组长度小于b数组长度C、a数组长度大于b数组长度D、上述说法都不对标准答案:C知识点解析:a数组是字符串,系统会自动地给它加一个结束标志符’\0’,因此a的长度就变为4了,所以a数组比b数组长。26、有以下程序:main(){charp[]={’a’,’b’,’c’},q[]="abc";printf("%d%d\n",sizeof(p),sizeof(q));};程序运行后的输出结果是______。A、44B、33C、34D、43标准答案:C知识点解析:因为在C语言中对于字符串都会在最后加上结束标志’\0’,因此,q的民度为4。27、若程序中定义了以下函数:doublemyadd(doublea,doubleB){return(a+B);}并将其放在调用语句之后,则在调用之前应该对函数进行说明,以下选项中错误的说明是______A、doublemyadd(doublea,B);B、doublemyadd(double,double);C、doublemyadd(doubleb,doubleA);D、doublemyadd(doublex,doubley);标准答案:A知识点解析:选项A中没有指定第二个形参变量B的数据类型,错误。28、以下程序的输出结果是______。intf(){staticinti=0;ints=1;s+=i;i++;returns;}main(){inti,a=0;for(i=0;i<5;i++)a+=f();printf("%d\n",a);A、20B、24C、25D、15标准答案:D知识点解析:函数f中变量i为静态变量,函数f调用结束后变量i所占据的存储单元不会释放,而在主函数中f被调用5次,具体过程如下:第1次调用f:s=s+i=1+0=1,i=i+1=1,主函数中a=a+f()=0+1=1第2次调用f:s=s+i=1+1=2,i=i+1=2,主函数中a=a+f()=1+2=3第3次调用f:s=s+i=1+2=3,i=i+1=3,主函数中a=a+f()=3+3=6第4次调用f:s=s+i=1+3=4,i=i+1=4,主函数中a=a+f()=6+4=10第5次调用f:s=s+i=1+4=5,i=i+4=5,主函数中a=a+f()=10+5=15所以printf语句的输出结果为15。29、有以下程序:intf1(intx,inty){returnx>y?x:y;}intf2(intx,inty){returnx>y?y:x;}main(){inta=4,b=3,c=5,d=2,e,f,g;e=f2(f1(a,b),f1(c,d));f=f1(f2(a,b),f2(c,d));g=a+b+c+d-e-f;printf("%d,%d,%d\n",e,f,g);}程序运行后的输出结果是______。A、4,3,7B、3,4,7C、5,2,7D、2,5,7标准答案:A知识点解析:函数f1是返回x、y中较大的一个,f2是返回x、y中较小的一个。因此e=4,f=3,g=7。30、有以下程序:#defineN20fun(inta[],intn,intm){inti,j;for(i=m;i>=n;i--)a[i+1]=a[i];}main(){inti,a[N]={1,2,3,4,5,6,7,8,9,10};fun(a,2,9);for(i=0;i<5;i++)printf("%d",a[i]);}程序运行后的输出结果是______。A、10234B、12344C、12334D、12234标准答案:C知识点解析:由于用了宏定义a[10]~a[19]均为0。函数fun的功能是把从a[n]到a[m]中的元素依次赋给后面的一个元素。调用了fun(a,2,9)以后,a[N]={1,2,3,3,4,5,6,7,8,9,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ONO-3708-生命科学试剂-MCE
- 2024融资合同股东出资协议书
- 麦当劳供应链的课程设计
- 全国电子课程设计
- 医美整形医院服务流程优化方案
- 2023年重庆定向选调生笔试真题
- 2024最高对于审理技术合同纠纷案件适用法律若干问题解释新旧对比表
- 美甲操作课程设计
- 2023年绵阳市江油市招聘教师考试真题
- 2024设计院委托设计合同
- 普法学法知识竞赛题库(完整版)
- 2024-2029年中国化妆品喷雾行业市场现状分析及竞争格局与投资发展研究报告
- 医德医风培训课件图文
- 三位数乘以三位数-计算题-竖式-50题-
- 保密宣传月新形势下的行政机关保密工作培训课件
- 剪映课件pptx-2024鲜版
- 农村自建房家装合同
- 战胜挫折主题班会教案
- 有限空间作业审批表
- 《免疫学与病原生物学》课程标准
- 宫外孕破裂出血护理查房
评论
0/150
提交评论