版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级(C语言)笔试模拟试卷27(共9套)(共543题)国家二级(C语言)笔试模拟试卷第1套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、下列数据结构中,不是线性结构的是()。A、线性链表B、带链的队列C、带链的栈D、二叉链表标准答案:8知识点解析:线性链表是线性表的链式存储结构,带链的栈与带链的队列分别是栈与队列的链式存储结构。线性表属于线性结构,栈与队列是特殊的线性表,因此也属于线性结构。二叉链表是二叉树的链式存储结构,二叉树属于非线性结构。2、在深度为6的满二叉树中,结点的个数为()。A、32B、31C、16D、15标准答案:1知识点解析:深度为m的二叉树最多有2m-1个结点,满二叉树中叶子结点的个数为2m-1个。本题中,26-1=25=32。3、下图所示的二叉树的先序遍历序列是()。A、ABDGCEHIFB、DGBAHEICFC、GDBHIEFCAD、ABCDEFGHl标准答案:1知识点解析:先序遍历顺序应该为:访问根结点→先序遍历左子树→先序遍历右子树。按照定义,先序遍历序列是ABDGCEHIF。4、模块化程序设计主要强调的是()。A、程序的规模要大B、对程序进行分解C、程序的执行效率D、程序的可移植性标准答案:2知识点解析:模块化设计是指把一个大程序按人们能理解的大小规模进行分解。5、结构化程序设计的主要特点是()。A、每个控制结构要模块化B、每个控制结构具有封装性C、每个控制结构具有独立性D、每个控制结构只有一个入口和一个出口标准答案:8知识点解析:结构化程序设计中,要求把程序结构限制为顺序、选择和循环3种基本结构,特点是:以控制结构为单位,只有一个入口和一个出口,接口简单,每个单位容易理解;缩小了程序静态结构与动态执行之间的差异,易于方便、正确地理解程序功能。6、下列叙述中错误的是()。A、测试是程序执行的过程,目的在于发现错误B、一个好的测试在于能发现至今未发现的错误C、一个成功的测试是发现了至今未发现的错误D、上述说法都不对标准答案:8知识点解析:选项A、B、C中的说法都正确。测试的目的是设法暴露程序中的错误和缺陷,它是程序执行的过程,目的在于发现错误;好的测试在于能发现至今未发现的错误;成功的测试是发现了至今未发现的错误。7、对于白箱(盒)测试用例的各设计准则,下列叙述中正确的是()。A、分支覆盖准则比语句覆盖准则严密B、条件覆盖要比分支覆盖优越。因此,条件覆盖能完全满足分支覆盖C、组合条件覆盖准则既能满足分支覆盖准则,也能满足条件覆盖准则。因此,组合条件覆盖准则是一种完全测试D、上述说法都不对标准答案:1知识点解析:白箱(盒)测试是根据对程序内部逻辑结构的分析宋选取测试用例。白箱(盒)测试用例的设计准则有:语句覆盖、分支覆盖、条件覆盖和组合条件覆盖。分支覆盖通过足够多的测试用例,使程序中的每个分支至少通过一次。分支覆盖准则比语句覆盖准则严密一些,选项A正确;条件覆盖通过执行足够多的测试用例,使每个判定中的每个条件都能取到两种不同的结果(“真”与“假”)。虽然条件覆盖要比分支覆盖优越,但并不能完全满足分支覆盖,选项B错误;组合条件覆盖要求通过足够多的测试用例,使每个判定中各条件的各种可能组合至少出现一次,它则既能满足分支覆盖准则,也能满足条件覆盖准则,但也不是完全测试,选项C错误。8、下列叙述中正确的是()。A、数据库设计是指设计数据库系统B、数据库设计是指设计数据库管理系统C、数据库设计是指在已有数据库管理系统的基础上建立数据库D、以上三种说法都不对标准答案:4知识点解析:数据库设计是指,在已有数据库管理系统的基础上建立数据库的过程,选项A与B错误,选项C正确。9、关系数据库管理系统能实现的专门关系运算包括()。A、排序、索引、统计B、选择、投影、连接C、关联、更新、排序D、显示、打印、制表标准答案:2知识点解析:在关系模型的数据语言中,除了常规的集合运算外,还定义了一些专门的关系运算,如投影、选择、连接等运算。10、下列数据模型中,具有坚实理论基础的是()。A、关系模型B、网状模型C、层次模型D、以上三个都是标准答案:1知识点解析:在层次模型和网状模型的系统研究和数据库设计中,其性能和质量主要决定于设计者的经验和技术水平,缺乏一定的理论指导。关系模型有坚实的理论基础,它以数学理论为基础,从而避免了层次模型和网状模型系统中存在的问题。二、选择题(1分)(本题共10题,每题1.0分,共10分。)11、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是()。A、有零个或多个输入B、有零个或多个输出C、有穷性D、可行性标准答案:2知识点解析:算法是为解决某个特定问题而采取的确定的且有限的步骤,一个算法应当具有以下5个基本特性:有穷性、确定性、可行性、有零个或多个输入、有一个或多个输出。由此可知选项B不正确,故4个选项中选项B符合题意。12、C语言中用于结构化程序设计的3种基本结构是()。A、顺序结构、选择结构、循环结构B、if、switch、breakC、for、while、do-whileD、if、for、continue标准答案:1知识点解析:结构化程序设计是由3种基本结构组成的,它们是顺序结构、选择结构和循环结构。所以,A选项为所选。13、在一个C程序中()。A、main函数必须出现在所有函数之前B、main函数可以在任何地方出现C、main函数必须出现在所有函数之后D、main函数必须出现在固定位置标准答案:2知识点解析:一个完整的C语言程序有且仅有一个主函数(main()函数)。程序总从main()函数的第一条语句开始执行,到main()函数的最后一条语句结束,其他函数都是在执行main()函数时,通过函数调用或嵌套调用而得以执行的。C语言规定,main()函数在程序中的位置是任意的,故选项A、选项C和选项D均不正确。所以,B选项为所选。14、下列叙述中正确的是()。A、C语言中既有逻辑类型也有集合类型B、C语言中没有逻辑类型但有集合类型C、C语言中有逻辑类型但没有集合类型D、C语言中既没有逻辑类型也没有集合类型标准答案:8知识点解析:在C语言中没有逻辑类型,逻辑类型用整型来表示,故选项A和选项C不正确:C语言中没有集合类型,故选项B不正确。所以,D选项为所选。15、若以下选项中的变量已正确定义,则正确的赋值语句是()。A、x1=26.8%3;B、1+2=x2C、x3=0x12;D、x4=1+2=3;标准答案:4知识点解析:赋值的一般形式为:变量名:表达式;,赋值的方向为由右向左,即将:右侧表达式的值赋给:左侧的变量,执行步骤是先计算再赋值。选项A中运算符%的运算对象必须为整数,而选项A中26.8不为整数,故选项A不正确;选项B将一个变量赋值给一个常量,这在C语言中是不允许的,故选项B不正确;选项D中也是将一个常量3赋值给一个常量,故选项D不正确;所以,4个选项中选项C符合题意。16、设有以下定义:inta=0;doubleb=1.25;charc=’A’;#defined2则下面语句中错误的是()。A、a++;B、b++;C、c++;D、d++;标准答案:8知识点解析:自加运算对象可以是整型变量也可以是实型变量,但不能是表达式和常量。本题中,#defined2定义了d为常数2,d是符号常量不能进行自加运算。故选项D是个不正确的语句。17、若有如下定义:intx=6,y=3,z=2;则表达式x=y||y<z&&z==z的值是()。A、0B、1C、4D、6标准答案:2知识点解析:<优先级高于==高于&&高于||高于=。首先计算表达式y<z的值,y<z为假,表达式的值为0,则逻辑表达式y<z&&z==z的值也为0,||左侧y的值为非零值3,所以表达式的值为1,将1赋值给x,赋值表达式的值是1。18、设有如下程序段:x=2002,y=2003;printf("%d\n",(x,y));则以下叙述中正确的是()。A、输出语句中格式说明符的个数少于输出项的个数,不能正确输出B、运行时产生出错信息C、输出值为2002D、输出值为2003标准答案:8知识点解析:“x,y”是一个逗号表达式,逗号运算符的结合性为从左到右,逗号表达式一般形式为“表达式1,表达式2…,表达式n”,整个表达式的值为表达式n的值,故本题是输出y的值2003。所以,4个选项中选项D符合题意。19、有以下程序:main(){inta=666,b=888;printf("%d\n",a,b);}程序运行后的输出结果是()。A、错误信息B、666C、888D、666,888标准答案:2知识点解析:程序中的printf()函数的输出格式部分只说明了一个%d,而输出成员列表却有两个成员a和b,在这里将只输出第一个成员a值为666,所以,4个选项中选项B符合题意。20、有以下程序:main(){inti;for(i=0;i<3;i++)switch(i){case0:prinft("%d",i);Case2:prinft("%d",i);default:prinft("%d",i);}}程序运行后的输出结果是()。A、22111B、21021C、122D、12标准答案:4知识点解析:程序中for循环了三次,第一次i=O,执行switch语句中case0:分支,直到遇到default语句,退出switch,这里共执行了3个输出语句分别输出0、0、0,第二次循环i=1,switch语句中没有匹配的分支,故只执行default语句输出1,退出switch语句;第三次循环i=2,从switch语句中的case2:开始执行,共执行了两个输出语句输出2、2。最后输出的结果为000122。所以,4个选项中选项C符合题意。三、选择题(2分)(本题共30题,每题1.0分,共30分。)21、有以下程序:inta=3;main(){ints=0;{inta=5;s+=a++;)s+=a++;printf(’%d\n’,s);}程序运行后的输出结果是()。A、8B、10C、7D、11标准答案:1知识点解析:本题中定义一个全局变量a和一个局部变量a。局部变量和全局变量的不同在于,局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失,而全局变量是在函数外部任意位置上定义的变量,它的作用域从变量定义开始,到整个源文件结束为止。若全局变量和某一函数中的局部变量同名,则在该函数中,此全局变量被屏蔽,在该函数内,起作用的将是局部变量,与同名的全局变量不发生任何关系。在程序中首先定义了变量s并赋值为0,接着在嵌套的复合语句{}中定义了变量a并赋初值为5,接着执行语句“s+=a++;”在这条语句中a加1,但表达式a++还是原来的值,故s=s+5,s为5,程序执行到外层,此时{}内定义的变量a不再有效,变量a为{}之前定义的且初值为3,接着执行{}后面的语句“s+=a++;”,相当于执行语句“s=s+(a++);”即s=5+3,最后值为8,所以输出的s值为8。故4个选项中A正确。22、阅读下述程序段:y=-1;if(x!=0)if(x>0)y=1;elsey=0;该程序段所描述的数学关系是()。A、B、C、D、标准答案:4知识点解析:y的初值为-1,第一个if语句的判断条件为x!=0,即当x!=0时y的值变化,x=0时y的值不变,仍为-1。第二个if语句的判断条件为x>O,如果x>0则y=1,否则y=0,即x<O时,y=O。4个选项中C符合题意。23、有如下程序:main(){intx=23;do{printf("%d",x--);}while(!x);}程序运行后的输出结果是()。A、321B、23C、不输出任何内容D、陷入死循环标准答案:2知识点解析:本题中使用do-while循环,每执行一次循环体输出x的值后将x减1。当x=23,执行循环体输出x为23,X=X-1=23-1=22,判断循环条件是否成立,因为x=22,!x的值为0,终止循环,因此只输出23。24、要求以下程序的功能是计算s=1+1/2+1/3+…+1/10main(){intn;floats;s=1.0;for(n=1O;n>1;n--)s=s+1/n;printf("%6.4f\n",s);}程序运行后输出结果错误,导致错误结果的程序行是()。A、s=1.0;B、for(n=1O;n>l;n--)C、s=s+1/n;D、printf("%6.4f\n",s);标准答案:4知识点解析:程序中由于n为整型,所以1/n的结果始终为0,故程序最后输出的结果为0,其结果错误,原因为在表达式1/n中1和n均为整型,所以应该将1改为1.0,这样表达式1.0/n的值不为0,为该数学表达式的值,因此可以知道导致程序运行后输出结果错误的行为“s=s+1/n;”,所以,4个选项中选项C符合题意。25、有以下程序:main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=O)continue;k--;}printf("%d,%d\n",k,n);}程序运行后的输出结果是()。A、1,1B、2,2C、3,3D、4,4标准答案:4知识点解析:在本程序的for循环中,用到了一个continue语句,continue语句的作用是停止本次循环,不执行循环体内continue语句后面的其他语句,继续下次循环的条件判断。首先在for循环中n自加1(值变为1),然后执行后面的if语句,由于if语句后面括号的表达式1%3!=0的值为真,程序执行continue语句,回到for循环的开始部分,并且判断for循环中的条件表达式(n<k)为真,重复执行“n++;”语句,如此循环直到n=3时,if语句判定条件中表达式3%3!=0的值为假,程序执行if语句后面的“k--;”语句,此时k的值为3,不满足n<k,退出for循环。故最后的k和n的值为3和3,选项C符合题意。26、有以下程序:floatfun(intx,inty){return(x+y);}main(){inta=2,b=5,C=8;printf("%3.0f\n",fun((int)fun(a+c,b),a-c));}程序运行后的输出结果是()。A、编译出错B、9C、21D、9标准答案:2知识点解析:fun((int)fun(a+c,b),a-c))是用函数的返回值做实参。第一次调用fun(a+c,b),x+y=a+c+b=2+5+8=15,由于函数fun()的返回值类型被定义为float型,返回值为15.000000,在主函数中被强制转换为int型变为15。第二次调用后fun(15,a-c),x+y=15+a-c=15+2-8=9,返回值为9.000000,输出格式要求小数位为0且数据宽度为3,则输出9。27、有以下程序:intf1(intx,inty){returnx>y?x:y;}intf2(intx,inty){returnx>y?y:x;}main(){inta=4,b=3,c=5,d,e,f;d=fl(a,b);d=f1(d,c);e=f2(a,b);e=f2(e,c);f=a+b+c-d-e;printf("%d,%d,%d\n",d,f,e);}执行后输出结果是()。A、3,4,5B、5,3,4C、5,4,3D、3,5,4标准答案:4知识点解析:函数f1()的作用是返回形参x和y的较大值,函数f2()的作用是返回形参x和y的较小值,在main()函数中通过调用两次f1()函数,求得a、b、c的最大值并存放在变量d中,通过调用两次f2()函数,求得a、b、c的最小值并存放到变量e中。由程序可知d值为5,f的值为4,e的值为3,因此最后输出的d、f、e的值为5、4、3。所以C选项为所选。28、有如下程序:voidf(intx,inty){intt;if(x<y){t=x;x=y;y=t;}}main(){inta=4,b=3,C=5,f(a,b);f(a,c);f(b,c);printf("%d,%d,%d\n",a,b,C);}执行后输出结果是()。A、3,4,5B、5,3,4C、5,4,3D、4,3,5标准答案:8知识点解析:C语言规定,在函数调用时变量作为参数传递是传值的,在函数体中对形参变量的修改不能影响到对应的实参变量。本题定义了一个函数f(),用变量作为形参,在main()函数中调用了3次f()函数,由于变量作为参数进行传递,所以对应的实参的值并没有被交换。故输出的a、b、c依旧是原来的值4、3、5。D选项为所选。29、以下选项中,正确运用指针变量的程序段是()。A、int*i=NULL;B、float*f=NULL;scanf("%d",i);*f=10.5;C、chart=’m’,*C=&t;D、long*L;*C=&t;L=’0’;标准答案:8知识点解析:选项A定义了一个整型变量i,并且初始化让它指向NULL,接着通过scarnf()函数,改变i指向的存储空间的值,选项A中首先定义了整型指针变量i并初始化为NULL,即表示指针i不指向任何存储单元,即此时还没有为i在内存中开辟存储单元,而在scanf()函数中第二个参数是地址参数,显然在这里i不表示地址,所以下面的scanf("%d",i)语句是不正确的,故选项A不正确。选项B定义了一个实型指针变量f并初始化使它指向NULL,即还没有为f在内存中开辟存储单元,不能向*f代表的存储单元(不存在)中写数据,故选项B错误;选项C中首先定义了一个字符变量t并给它赋初值’m’,然后定义一个字符型指针c并让它指向了变量t,这一部分正确,然后接着用了一个语句“*c=&t;”应该将该语句中c前的*去掉,故选项C运用指针变量不正确。选项D中的’\0’是一个转移字符,称作“空值”,可以给指针变量L赋值。所以,4个选项中选项D符合题意。30、有以下程序:#include<stdio.h>main(){printf("%d\n",NULL));程序运行后的输出结果是()。A、0B、1C、-1D、NULL没定义,出错标准答案:1知识点解析:在C语言中NULL的ASCII码值为0,而输出函数要求以整形格式输出,故最后的输出数为0。所以,4个选项中选项A符合题意。31、已定义c为字符型变量,则下列语句中正确的是()。A、c=’97’;B、c="97";C、c=97;D、c="a";标准答案:4知识点解析:用单引号括起来的—介字符称为字符常量,而选项B和选项D中用的是双引号,而用双引号括起来的字符为字符串常量,故选项B和选项D不正确。因为在C语言中,字符常量在存储时,并不是把该字符本身放到内存单元中去,而是将该字符的相应ASCII代码放到存储单元中,所以C语言使字符型数据和整形数据之间可以通用,选项C正确。而选项A中,给字符型变量赋值时只能赋一个字符,9,7作为字符时为两个字符且必须分别为单引号括起来,故选项A不正确,所以,4个选项中选项C符合题意。32、以下不能正确定义二维数组的选项是()。A、inta[2][12]={{1},{2}};B、inta[][2]={1,2,3,4};C、inta[2][2]={{1},2,3}:D、inta[2][]={{1,2},{3,4}};标准答案:8知识点解析:在定义中如果对所有元素赋初值,其第1维的长度可以省略,故选项B正确;二维数组初始化也可以只对每行或前若干个行的前若干个元素赋初值,故选项A和选项C正确:在二维数组定义时不能省略第二维的长度,故选项D错误。所以,4个选项中选项D符合题意。33、若有如下程序:main(){chara[3][5]={"name","age","sex"},n;for(n=0;n<3;n++)printf("%s\n",a[n]);}则程序执行后的输出结果是()。A、nameagesexB、nameC、nameD、nameagexexgeagesexxsex标准答案:4知识点解析:a[3][5]是一个二维数组,它也可以看成是一个有3个元素的一维数组a[0]、a[1]、a[2],同时这3个元素也是一维数组,分别保存字符串“name”、“age”、“sex”。for循环循环3次,输出3个字筘串“name”、“age”、“sex”。所以,C选项为所选。34、有以下程序:main(){intm[][3]={1,4,7,2,5,8,3,6,9}inti,j,k=2;for(i=0;i<3;i++){printf("%d",m[k][i]);}}执行后输出结果是()。A、456B、258C、369D、789标准答案:4知识点解析:变量k的初值为2,循环执行了3次,分别输出m[2][0]、m[2][1]和m[2][2],其值分别为3、6、9。所以,C选项为所选。35、执行下列程序的结果是()。#defineN5#defineH(x)((N+2)*x)main(){inta=2,b=3,C;c=H(a+b);printf("%d",c);}A、15B、17C、23D、35标准答案:2知识点解析:用a+b替代宏H(x)中的参数x,用5替代N,则((N+2)*x)=((5+2)*a=b)=((5+2)*2+3)=17。36、有以下程序:main(){chars[]="\n123\\";printf(’%d,%d\n’,strlen(s),sizeof(s));}执行后输出结果是()。A、赋初值的字符串有错B、6,7C、5,6D、6,6标准答案:4知识点解析:本题在定义字符数组时没有定义数组长度,但用字符常量给数组赋了初值,这时初值的个数即为数组的长度,故数组长度为6(包括’\0’)。字符串的长度为有效字符的个数5。strlen(s)返回值为串中字符的个数(不计最后的’\0’),则输出值为5。sizeof(s)计算数组所占的字节数,包含’\0’,则输出值为6。因此,C选项正确。37、阅读以下函数:fun(char*s1,char*s2){inti=0;while(s1[i]==s2[i]&&s2[i]!=’\0’)i++;return(s1[i]==&&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、设有如下说明:typedefstruct{intn;charc;doublex;)STD;则以下选项中,能正确定义结构体数组并赋初值的语句是()。A、STDtt[2]={{1,’A’,62},{2,’B’,75}};B、STDtt[2]={1,"A",62},2,"B",75};C、stmctt[2]={{1,’A’),{2,’B’}};D、structt[2]={{1,"A",62.5),{2,"B",75.0}};标准答案:1知识点解析:本题定义了一个结构体类型并自定义类型名为STD,用户自定义类型后,就可以利用它进行变量与数组的定义。定义的方法,与C语言中其他类型的定义完全一样,定义结构型数组并赋初值时,每个元素用一对{和}括起来,字符型元素用,括起来,选项A、B、C、D中只有选项A符合条件。所以,A选项为所选。40、在下列定义中的共用体所占内存字节数是()。union{chark[6];struct{intm;floarf;}a;doubled;}b;A、8B、14C、18D、10标准答案:1知识点解析:结构体变量所占的存储空间是各个分量所占空间的总和。共用体变量中的所有成员占有同一个存储空间,其字节数与成员中占字节数最多的那个成员相等。m占2个字节,f占4个字节,因此结构体变量a所占的存储空间为6字节。k[6]占6个字节,d占8个字节。共用体变量b所占的存储空间与占存储空间最多的d所占存储空间的字节数相同。所以,A选项为所选。41、若有以下结构体,则正确的定义或引用是()。structTest{intx;inty;}v1;A、Test.x=10;B、Testv2;v2.x=10;C、structTestv2;v2.x=10;D、structTest.v2=10;标准答案:4知识点解析:定义结构体类型的变量的方式有:①紧跟在结构体类型说明之后进行定义,如题目中给出的;②在说明对结构成员的引用形式为结构体变量名.成员名选项A对结构成员的引用的形式是错误的,Test是结构体名,不能用来引用结构成员。选项B中定义结构体类型的变量的形式是错误的,Test是结构体名,不能用宋定义结构体类型的变量。选项D中对结构成员的引用的形式是错误的,对结构成员的引用的形式为:结构体变量名.成员名。4个选项中只有选项C是正确的定义或引用。42、有以下程序:main(){chars[]="Yes\n/No",*ps=s;puts(ps+4);*(ps+4)=0;puts(s);}程序运行后的输出结果是(选项D中的第一行是空行)()。A、n/NoYes/NoB、/NoYesC、n/NoYes/NoD、/NoYes标准答案:2知识点解析:主函数中定义了一个字符数组s并赋初值,一个字符串指针变量ps并让它指向s。程序中p+4的地址为数组第5个元素的地址,而调用put(str_adr)函数时,将从str_adr这一地址开始,依次输出存储单元中的字符,遇到第一个\0时结束输出,并自动输出一个换行符。所以put(p+4)将输出n/No,put(s)将从s第一个元素开始输出到第3个元素结束(因为执行*(p+4)=0语句后s中的第5个元素的值为0,而s中的第4个元素为\,puts将遇到\0,结束输出),即输出yes。所以,4个选项中选项B符合题意。43、有以下程序:voidfun(int*a,inti,intj){intt;if(i<j){t=a[i];a[i]=a[j];a[j]=t;fun(a,++i,--j);}}main(){inta[]={1,2,3,4,5,6),i;fun(a,0,5)for(i=0;i<6;i++)printf("%d",a[i]);}执行后的输出结果是()。A、654321B、432156C、456123D、123456标准答案:1知识点解析:函数fun()中有3个参数,参数a为一个指针变量,接收的实参可以是数组名,参数i和j分别表示数组元素的下标,当下标i小于下标j时,a[i]和a[j]交换,然后对自身进行调用,可见这是一个递归函数。其实现的功能是把数组a从下标为i的元素到下标为j的元素之间的所有元素反序存放。在主函数中调用fun()函数,把a数组从a[0]到a[5]之间的所有元素反序存放,最后输出从a[0]到a[5]的值,因此输出的值为6、5、4、3、2、1,.所以,A选项为所选。44、假定下列程序的可执行文件名为filel.exe,在该程序的子目录下输入命令行:file1ChinaBejing<回车>main(intargc,char*argv[]){while(argc-->1)printf("%s\n",*++argv);}则程序运行后的输出结果是()。A、filelChinaBejingB、ChinaBejingC、ChinaD、Bejing标准答案:2知识点解析:主函数的第一个参数argc为整形参数,记下从命令行输入的参数的个数;第二个参数argv是一个字符型的指针数组,它的每一个指针指向命令行输入的参数字符数。在本例中argc的值为3,argv[0]指向字符串.“filel”,argv[l]指向参数字符串“China”,argv[2]指向字符串“Bejing”。在main()函数中,while循环执行了2次。第1次循环,argc=3,3>1为真,argc-1=3-1=2,执行循环体输出*++argv,argv为字符型的指针数组的数组名,代表数组的首地址,同时也是数组第1个元素的地址,++argv指向数组的第2个元素,第2个元素是一个指针,它指向字符串“China”。第2次循环,argc=2,2>1为真,argc-1=2-1=1,执行循环体输出*++argv,这次循环畔++argv指向数组的第3个元素,第3个元素是一个指针,它指向字符串“Bejing”。argc=1时,1>1为假,退出循环。所以,4个选项中选项B符合题意。45、有如下说明和定义语句:structstudent{intage;charnum{8};};structstudentstu[3]={{20,"200401"},{21,"200402"),{19,"200403"}};structstudent*p=stu;以下选项中引用结构体变量成员的表达式错误的是()。A、(p++)->numB、p->numC、(*p).numD、stu[3].age标准答案:8知识点解析:结构体变量也有地址,因此可以把它的地址赋值给一个指针变量,然后通过该指针变量来引用结构体的成员,选项A和选项B就是通过指针变量来引用结构体的成员,故选项A和选项B都正确,也可以通过结构体数组元素的成员引用,选项C和选项D属于这种情况,而在选项D中stu[3].age不正确,因为结构体数组stu共有3个元素,其下标应该为0,1,2。所以,4个选项中选项D符合题意。46、若要说明一个类型名STP,使得定义语句STPs等价于char*s,以下选项中正确的是()。A、typedefSTPchar*s;B、typedef*charSTP;C、typedefSTP*char;D、typedefchar*STP;标准答案:8知识点解析:指针类型的白定义形式如下:typedef类型说明符*用户类型名。不难看出只有选项D是正确的定义形式。所以,D选项为所选。47、下面程序的输出结果为()。structst{intx;int*y;}*p;intdt[4]={10,20,30,40);structstaa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};main(){p=aa;printf("%d\n",++p->x);printf("%d|n",(++p)->x);printf("%d\n",++(*p->y));}A、102020B、506021C、516021D、607031标准答案:4知识点解析:第1个输出语句中由于->的优先级高于++,因此先取结构体的分量x,再对x的值加1,再输出。p的初值为结构体数组aa的首地址即a[0]的地址,a[0]的x分量值为50,加1后输出51。第2个输出语句中++p被括号括起来,括号的优先级与->相同,自左至右结合,因此先对p加1,再取p所指向的元素的x分量的值。p加1后p指向数组元素a[1],a[1]的x分量的值为60,输出60。第3个输出语句中括号的优先级高于++,因此先求括号中表达式的值,又由于->的优先级高于*,所以先取p所指向的数组元素的y分量的值,p所指向的元素为a[1],y分量的值为&dt[1]。&dt[1]是一个存储单元的地址,是数组dt第2个元素的地址值,再取该存储单元中的值为20,最后对20加1,输出21。选项C为所选。48、表达式“~9&9<<1|4”的值为()。A、0B、4C、5D、22标准答案:8知识点解析:优先级由高到低的顺序为~、<<、&、|。9的二进制形式为00001001,4的二进制形式为00000100。~9即11110110。9<<1为00010010,11110110&00010010=00010010,00010010|00000100=10110即22。49、以下叙述中不正确的是()。A、C语言中的文本文件以ASCII码形式存储数据B、C语言中对二进制文件的访问速度比文本文件快C、C语言中,随机读写方式不适用于文本文件D、C语言中,顺序读写方式不适用于二进制文件标准答案:8知识点解析:在C语言中文本文件是以ASCII码形式存放的,每个字符占一个字节。由于数据在计算机中是以二进制形式存放的,因此二进制文件中的数据可以直接读出,而不需要像文本文件那样把ASCII码转换成二进制,因此速度较快。在文本文件叶,,数据以ASCII码形式存放,用户很难判定一个数据到底占几个字节,所以不适合使用随机读写方式。数据以二进制形式存放,占有的字节数是固定的,所以可以进行随机读写,当然也可以顺序读写。故D选项为所选。50、有以下程序(提示,程序中fseek(fp,-2L*sizeof(int),SEEK_END);语句的作用是使位置指针从文件末尾向前移2*sizeof(int)字节):#include<stdio.h>main(){FILE*fp;inti,a[4]={l,2,3,4},b;fp=fopen("data.dat","wb");for(i=0;i<4;i++)fwrite(&a[i],sizeof(int),1,fp);fclose(fp);fp=fopen("data.dar","rb");fseek(fp,-2L*sizeof(int),SEEKEND);fread(&b,sizeof(int),1,fp);/*从文件中读取sizeof(int)字节的数据到变量b中*/fclose(fp);printf("%d\n",b);}执行后输出结果是()。A、2B、1C、4D、3标准答案:8知识点解析:函数fopen(constchar*filename,constchar*mode)的功能足以mode指定的模式打开filename指定的磁盘文件;fclose(FILE*fp)的功能是关闭文件指针fp指向的文件;函数fscanf(FILE*fp,constchar*format[,address,--])的功能是根据format中的格式从fp指向的文件中读取数据,并存入到相应的address指向的变量中。函数fprintf(FILE*fp,constchar*format[,argument,--])的功能是把argument列表中的表达式值写到fp所指向的文件中;函数fwrite(void*ptr,intsize,intn,FILE*fp)的功能足把ptr指向的缓冲区中的size×n个字节写到文件指针fp指向的文件中。本题中首先定义了一个文件指针fp,然后通过函数fopen以可wb的方式打开文件data.dat,直接通过一个for循环,每循环一次调用函数fwrite将数组中的元素a[i]的值写进fp所指的文件中,该循环共循环4次,循环完后fp所指文件的内容为123,然后通过fclose函数关闭fp所指文件。接着通过函数fopen以rb的方式打开文件data.dat,通过fseek函数让指针fp从文件末尾向前移动两个血型大小字节,再通过函数fread从fp所指的文件畔,读取一个int型大小的数据到变量b中,故此时b的值为3,因此最后输出b的值为3,所以,4个选项中选项D符合题意。四、公共基础填空题(本题共5题,每题1.0分,共5分。)51、在一个容量为25的循环队列中,若头指针front=16,尾指针rear=9,则该循环队列中共有【】个元素。标准答案:18知识点解析:设循环队列的容量为n。若rear>front,则循环队列中的元素个数为rear-front;若rear<front,则循环队列中的元素个数为n+(rear-front)。题中,front=16,rear=9,即rear<front,所以,循环队列中的元素个数为m+(rear-front)=25+(9-16)=18。52、在面向对象方法中,属性与操作相似的一组对象称为【】。标准答案:类知识点解析:在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属性与操作相似的一组对象称为类。53、在软件开发中,结构化方法包括结构化分析方法、结构化设计方法和结构化程序设计方法。详细设计阶段所采用的是【】方法。标准答案:结构化设计知识点解析:在软件开发中,结构化方法包括结构化分析方法、结构化设计方法和结构化程序设计方法。详细设计阶段所采用的是结构化设计方法。54、在关系模型中,把数据看成一个二维表,每一个二维表称为一个【】。标准答案:关系知识点解析:在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。55、实体之间的联系可以归结为一对一的联系,一对多的联系与多对多的联系。如果一个学校有许多教师,而一个教师只归属于一个学校,则实体集学校与实体集教师之间的联系属于【】的联系。标准答案:一对多知识点解析:实体之间的联系可归结为一对一、一对多与多对多的联系。如一个学校有许多教师,一个教师只归属于一个学校,则实体集学校与实体集教师之间的联系属于一对多的联系。五、填空题(本题共12题,每题1.0分,共12分。)56、已知字符A的ACSII码值为65,以下语句的输出结果是【】。charch=’B’;printf("%c%d\n",ch,ch);标准答案:B66知识点解析:printf函数的功能是按照指定的格式,在标准输出设备上输出数据,它有两种参数:格式控制参数和输出项参数。本题中,printf("%c%d\n",ch,ch)表示以字符格式和十进制整数格式输出ch,B的ACSII码值为66,即在计算机中B的十进制整数格式是66。所以,输出为B66。57、以下程序段的输出结果是【】。main(){inta=2,b=2,c=4;a*=16+(b++)-(++C);printf("%d",a);}标准答案:26知识点解析:a*=16+(b++)-(++c)等价于a*=a*(16+(b++)-(++c))=2*(16+(2-5)=26。b++是先使用b的值参加运算,再对b加1;++c是先c加1,再使用c的值参加运算。58、有以下程序main(){intt=1,i=5;for(;i>=0;i--)t*=i;printf("%d\n",t);}执行后输出结果是【】。标准答案:0知识点解析:本题中的for循环共执行了6次,每执行一次将相应i的值相乘,最后当i=-1时停止循环。该for循环执行完后t的值为5*4*3*2*1*0=0,故最后输出t的值为0。59、若有以下程序:main(){inta=4,b=3,c==5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c;c=t;printf("%d%d%d\n",a,b,C);}执行后输出结果是【】。标准答案:503知识点解析:先判断表达式a<b为假,不执行t=a,但执行“a=b;b=t;”,a的值为3,b的值为0。再判断表达式a<C,值为真,所以执行后面的3条语句“t=a;a=c;c=t”,结果a的值为5,c的值为3,所以最后输出的结果为5、0和3。60、有以下程序:#include<stdio.h>main(){charch1,ch2;intn1,n2;ch1=getchar();ch2=getchar();n1=ch1-’0’;n2=n1*10+(ch2-’0’);printf("%d\n",n2);;}程序运行时输入12<回车>,执行后输出结果是【】。标准答案:12知识点解析:字符类型的数据在内存中以相应的ASCII码存放,在C语言中,字符数据可以等价为与其相应的ASCII码的整数,还可以作为整数参加运算。在本题中,n1=ch1-’0’=’1-’0’=49-48=1,n2=n1*10+(ch2-’0’)=1*10+(’2’-’0’)=10+2=12,所以,最后输出为12。61、有以下程序:voidf(inty,int*x){y=y+*x;*x=*x+y;}main(){intx=2,y=4;f(y,&x);ptintf("%d%d\n",x,y);}执行后输出结果是【】。标准答案:84知识点解析:“值传递”指实参将值传递给形参后,实参与形参再无联系。也就是说对行参的改变将不影响实参;地址传递是指地址或数组名作为形参时的参数传递,这种情况下对形参的改变将对实参产生影响。函数f(y,*x)的作用是让y的值加上指针x所指向变量的值,让指针x所指向变量的值加上y的值。由于形参y是传值的,形参x是传地址的,故调用该函数后,作为实参y的值将不改变,而实参x的值将改变,故最后输出的y值为4,而x的值为8。62、若x、y和z均是int型变量,则执行下面表达式后的x值为【】。x=(y=4)+(z=3)标准答案:7知识点解析:x=(y=4)+(z=3)等价于y=4,z=3,x=y+z=4+3=7。63、以下程序中,for循环体执行的次数是【】。#defineN2#defineMN+1#defineKM+1*M/2main(){inti;for(i=1;i<K;i++){...}}标准答案:4知识点解析:将程序中所有的宏替换掉可得:M=2+1,K=2+1*2+1/2=4,所以for循环共循环了K-1+1次,即4-1+1共4次。64、设有如下变量说明,则a+(int)((int)b+c)>>(int)(b-c)的值为【】。inta=5;floatb=7.2,c=3.6;标准答案:1知识点解析:在表达式a+(int)((int)b+c)>>(int)(b-c)中圆括号最优先,其次为类型转换(int)、加法+、减法-、右移运算>>。所以先看两个圆括号((int)b+c)和(b-c),前者b先被转换为int型7,然后与c相加得10.6,后者结果是3.6,现在表达式为a+(iot)10.6>>(int)3.6。C语言中,float型转换为int型是截尾取整,所以表达式进一步简化为5+10>>3=>15>>3。由于15的二进制为000011112(下标),所以15>>3的结栗是000000012(下标),即1。65、main(){printf("Thesum=%d\n",SunFun(10));}SunFun(intn){intx,s=0;for(x=0;x<=n;x++)s+=F(【】);returns;}F(intx){return(【】);)标准答案:xx*x+1或1+x*x知识点解析:题目中要求从x=0开始将f(x)的值累加起来,直到x=10。在SunFun()函数中用了一个for循环,每循环一次将f(x)累加到s中,所以在本题的第一个空白处应该填x,然后x+1,共循环10次。F()函数的功能应该是求数学表达式f(x)的值,所以其返回值应该为x*x+1。66、若有如下程序:main(){intx=5,y,*t;t=&x;y=++(*t);printf("%d,%d",x,y);}则程序执行后的x值为【】,y的值为【】。标准答案:66知识点解析:本题定义两个iht型变量x、y,一个int型指针t,并将x初始化为5,t指向变量x。表达式y=++(*t)的意思是:让t所指地址内容自增1,然后赋给y。所以执行后t所指的内容(即变量x的值为6)y也为6。故本题的两个空都应该填6。67、下面函数用来求两个单精度数之和,并通过形参将结果传回,请填空。voidsub(floatx,floaty,【】z){【】=x+y;}标准答案:float**z知识点解析:C程序中可以通过传送地址的方式在被调用函数中直接改变被调用函数中变量的值,从而达到函数之间数据的传递。国家二级(C语言)笔试模拟试卷第2套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、下列选项中,不是一个算法的基本特征的是()。A、完整性B、可行性C、有穷性D、拥有足够的情报标准答案:1知识点解析:作为一个算法,一般应该具有下列4个特征:①可行性,即考虑到实际的条件能够达到一个满意的结果;②确定性,算法中的第一个步骤都必须是有明确定义的:③有穷性,一个算法必须在有限的时间内做完;④拥有足够的情报。2、下列数据结构中,属于非线性的是()。A、线性表B、队列C、树D、栈标准答案:4知识点解析:线性结构,是指数据元素只有一个直接前件元素和直接后件元素。线性表是线性结构。栈和队列是指对插入和删除操作有特殊要求的线性表,树是非线性结构。3、下列叙述中错误的是()。A、线性表是由n个元素组成的一个有限序列B、线性表是一种线性结构C、线性表的所有结点有且仅有一个前件和后件D、线性表可以是空表标准答案:4知识点解析:线性表是一种线性结构,由n(n≥0)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件,所以C是错误的。4、按照“先进先出”组织数据的数据结构是()。A、队列B、栈C、双向链表D、二叉树标准答案:1知识点解析:队列是一种特殊的线性表,只允许在表的一端插入元素,在表的另一端删除元素,插入元素的一端叫“队尾”,删除元素的一端叫“队头”,先插入的元素先被删除,是按“先进先出”的原则组织数据的。5、下列关于线性链表的描述中正确的是()。A、存储空间不一定连续,且各元素的存储顺序是任意的B、存储空间不一定连续,且前件元素一定存储在后件元素的前面C、存储空间必须连续,且各前件元素一定存储在后件元素的前面D、存储空间必须连续,且各元素的存储顺序是任意的标准答案:1知识点解析:线性表的链式存储结构中的结点空间是动态生成的,它们在内存中的地址可能是连续的,也可能是不连续的。6、某二叉树共有60个叶子结点与50个度为1的结点,则该二叉树中的总结点数为()。A、148B、169C、182D、198标准答案:2知识点解析:叶子结点总是比度为2的结点多一个。所以,具有60个叶子结点的二叉树有59个度为2的结点。总结点数=60个叶子结点+59个度为2的结点+50个度为1的结点=169个结点。7、下列数据结构中,能用二分法进行查找的是()。A、顺序存储的有序线性表B、结性链表C、二叉链表D、有序线性链表标准答案:1知识点解析:二分法查找只适用于顺序存储的有序线性表,对于顺序存储的非有序线性表和线性链表。都只能采用顺序查找。8、简单的交换排序方法是()。A、快速排序B、选择排序C、堆排序D、冒泡排序标准答案:8知识点解析:所谓的交换类排序方法是指借助数据元素之间的互相交换进行排序的一种方法,包括冒泡排序和快速排序,冒泡排序是一种最简单的交换排序方法,它通过相邻元素的交换,逐步将线性表变成有序。9、对于长度为n的线性表,在最坏情况下,下列各种排序法所对应的比较次数中正确的是()。A、冒泡排序为n/2B、冒泡排序为nC、快速排序为nD、快速排序为n(n-1)/2标准答案:8知识点解析:在最坏情况下,冒泡排序和快速排序的比较次数都是n(n-1)/2。所谓冒泡排序,就是将相邻的两个数据相比较,如前面的数据大于后面的,则位置互换。这样不停地比较、互换,其实就是把大的数往后排,小的数往前排(就像冒泡一样冒出来了)。10、结构化程序设计的3种基本结构是()。A、过程、子程序和分程序B、顺序、选择和重复C、递归、堆栈和队列D、调用、返回和转移标准答案:2知识点解析:程序的3种基本控制结构包括顺序、选择和重复(循环),这3种结构就足以表达出各种其他形式的结构。二、选择题(1分)(本题共10题,每题1.0分,共10分。)11、C语言可执行程序的开始执行点是()。A、包含文件中的第一个函数B、程序中第一个函数C、程序中的main()函数D、程序中第一条语句标准答案:4知识点解析:每个C程序有且只有一个主函数main(),且程序必须从main函数开始执行,并在main()函数中结束。12、可以在C语言程序中用做用户标识符的一组标识符是()。A、void123BBNB、aaabccasC、as+b3-123IfD、6fDoSIG标准答案:2知识点解析:C语言规定,标识符是由字母、数字或下画线组成,并且它的第一个字符必须是字母或者下画线。13、下列正确的实型常量是()。A、E3.4B、-12345C、2.2e0.8D、4标准答案:2知识点解析:实型常量有两种书写形式。①小数形式,它由符号、整数部分、小数点及小数部分组成;②指数形式,由十进制小数形式加上指数部分组成,其形式为:十进制小数e指数或十进制小数E指数。注:e或E后面的指数必须是整数,并且在e或E的前面必须有数字。本题中,选项A)中E的前面没有数字,因此错误。选项C)中0.8不是整数,因此错误。选项D)中4是整型常量而不是实型常量。14、下列表达式中,可以正确表示x≤0或x)1的关系是()。A、(x>=1)||(x<=0)B、x>l||x=0C、x>=1ORx<=0D、x>=1&&x<=0标准答案:1知识点解析:题中要求x的取值是小于等于0或者大于等于1,这说明表达式是或的关系,所以在写成C语言表达式应是逻辑或的关系,逻辑或运算符是“||”。15、若有定义inta=5,b=7;,则表达式a%=(b%2)运算后,a的值为()。A、0B、1C、11D、3标准答案:1知识点解析:本题考查“%”运算符的使用。运算符“%”要求两个运算对象都为整型,其结果是整数除法的余数。本题中表达式a%=(b%2)等价于a=a%(b%2)=5%(7%2)=5%1=0。16、已知i、j、k为int型变量,若要从键盘输入2、3、4<CR>,使i、j、k的值分别为2、3、4下列正确的输入语句是()。A、scanf(“%3d,%3d,%3d”,&i,&j,&k);B、scanf(“%d,%d,%d”,&i,&j,&k);C、scanf(“%d%do/od”,&i,&j,&k);D、scaaf(“i=%d,j=%d,k=%d”,&i,&j,&k);标准答案:2知识点解析:函数scanf()的调用形式是:scanf(格式字符串,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。若在格式符中插入了其他字符,则在输入时要求按一一对应的位置原样输入这些字符,其中的逗号也必须输入。17、下列程序的输出结果是()。main(){intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;while(i++<7)if(p[i]%2)j+=p[i];printf("%d\n",j);}A、42B、45C、56D、60标准答案:2知识点解析:在C语言中,数组的下标默认为0,因此数组p的下标范围为:0~7。程序循环过程为:第1次循环i=0,执行循环,并且i自加,得i=1,因此p[i]为p[1]=12,12%2=0,不执行后面的语句;接着进行第2次循环,此时i=1,小于7执行循环,并且i自加,得i=2,因此p[i]为p[2]=13,13%2=1,执行后面的语句;这样一直到退出循环。最后j的值为j=13+15+17=45。18、若有下列定义(设int类型变量占2个字节):inti=8,j=9;则下列语句:printf("i=%u,j=%x\n",i,j);输出的结果是()。A、i=8,j=9B、8.9C、89D、i=8,j=8标准答案:1知识点解析:本题考查函数printf()的格式。“%x”表示以十六进制输出整型数据;“%u”表示以十进制无符号型输出整型数据。printf函数中格式说明符之前插入的任何字符都原样输出。19、设有定义:intk=1,m=2;floatf=7;则下列选项中错误的表达式是()。A、k=k>=kB、-k++C、k%int(f)D、k>=f>=m标准答案:4知识点解析:在C语言中,求余运算符“%”两边的运算对象都应为整型数据,所以需要对变量f进行强制类型转换,正确的写法为k%(int)f。在C语言中,逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑“非”)、算术运算符、关系运算符、&&(逻辑“与”)、||(逻辑“或”)、赋值运算符。根据运算符的优先级与结合性,对于选项A),先计算k>=k的值(为真,即1),再用1对k进行赋值。对于选取项B),先计算k++的值,再对其取负数。对于选项D),先计算k>=f的值(为假,即0),再用0与出进行比较,故最终结果为0。20、若执行下列程序时从键盘上输入2,则输出结果是()。#include<stdio.h>main(){inta;scanf("%d",&a);if(a++<3)printf("%d\n",a);elseprintf("%d\n",va--);}A、1B、3C、2D、4标准答案:2知识点解析:本题考查ifelse语句。程序中首先使用函数scanf()通过键盘读入a的值,并通过第1个if语句,先判断条件,取a的值2和3比较,然后将a的值加1,发现条件成立,执行下列的printf语句,输出a的值3。三、选择题(2分)(本题共20题,每题1.0分,共20分。)21、有下列程序段:intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k;执行该程序段后,k的值是()。A、3B、2C、1D、0标准答案:2知识点解析:因为a<b成立,所以条件表达式a<b?b:a的值等于b的值等于2,因此变量k的值等于2。又因为k=2>c=3不成立,所以条件表达式k>c?e:k的值等于k的值等于2。把条件表达式k>c?e:k的值赋给变量k,因而变量k的值等于2。因此,选项B)为正确答案。22、有下列程序:main(){inty=20;do{y--;}while(--y);printf("%d\n",y--);}当执行程序时,输出的结果是()。A、-1B、1C、4D、0标准答案:8知识点解析:本题考查do…while循环。当-y是0(即y是0)时结束循环,输出y--是先输出y的值再将y的值减1。23、有下列程序段:structSt{intx;int*y;)*pt;inta[]={1,2),b[]={3,4);structstc[2]={10,a,20,b);pt=c;下列选项中表达式的值为11的是()。A、*pt->yB、pt->xC、++pt->xD、(pt++)->x标准答案:4知识点解析:由题目的已知条件可知,pt指向结构体数组c[2]的第一元素c[0],所以pt->x=10,执行自加运算后为11。24、表达式’8’-’2’的值是()。A、整数6B、字符6C、表达式不合法D、字符8标准答案:1知识点解析:在C语言中,虽然字符都是变为其对应的ASCII码值来参与算术运算的,但字符间的相对位置关系还是不变的,字符8和字符2的ASCII码值相差仍是6。25、在嵌套使用if语句时,C语言规定else总是()。A、和之前与其具有相同缩进位置的if配对B、和之前与其最近的if配对C、和之前与其最近的且不带else的if配对D、和之前的第一个if配对标准答案:4知识点解析:C语言的语法规定:else子句总是与前面最近的不带else的if相结合,与书写格式无关。所以选项C)为正确答案。26、下列函数值的类型是()。fun(doublex){floaty;y=3*x-4;returny;}A、intB、不确定C、voidD、float标准答案:1知识点解析:本题考查默认函数的函数值的类型。在函数调用时,尽管y的类型是float,x的类型是double,但是因为函数定义时省去类型说明,系统默认函数值的类型为int型,所以计算后的y的类型是int型。27、有下列程序:main(){intk=5,n=0;do{switch(k){case1:case3:n+=1;k--;break;default:n=0;k--;case2:case4;n+=2;k--;break;}printf("%d",n);}while(k>0&&n<5);}程序运行后的输出结果是()。A、235B、235C、2356D、2356标准答案:2知识点解析:因为变量的初始值分别为k=5,n=0,所以程序第1次进入循环时,执行default语句,输出0,k减1;这时n=0,k=4,程序进行第2次循环,执行case4:这个分支,结果是n=2,k=3,打印出2;这时n=2,k=3,程序进行第3次循环,执行case3:这个分支,结果是n=3,k=2,打印出3;这时n=3,k=2,程序然后进行第4次循环,执行case2:case4:这个分支,结果是n=5,k=1,打印出5,这时因为n=5不满足n<5的循环条件,因此退出循环,程序运行结束。所以在屏幕上打印出的结果是0235。28、下列程序执行输出的结果是()。#include<stdio.h>f(inta){intb=0;staticc=3;a=c++;b++;return(a);}main(){inta=2,i,k;for(i=0;i<2;i++)k=f(a++);printf("%d\n",k);}A、3B、4C、5D、6标准答案:2知识点解析:本题考查函数调用时的参数传递。在函数调用时,static变量在函数调用结束后所做的所有变化均保持(即上次调用结束时的值)。在主函数中,第一次循环,i=0,调用k=f(a++)=f(2),调用完之后才将a加1,a变为3,在f(2)中,先将c=3赋值给a返回,然后将c加1,得到k=a=3,c=4。第二次循环,i=1,调用k=f(a++)=f(3),调用完之后才将a加1,a变为4,在f(3)中,先将c=4赋值给a返回,然后将c加1,得到k=a=4,c=5。29、设有下列的程序段:charstr[]="HelloWorld";char*ptr;ptr==str;执行上面的程序段后,*(ptr+10)的值为()。A、’\0’B、’0’C、不确定的值D、’0’的地址标准答案:1知识点解析:本题涉及字符数组和指针两个知识点:①在C语言中,字符型数组在存放字符串时会自动在末尾加上’\0’,所以题中数组str有11个元素;②ptr指向数组str的首地址,ptr+10是指向str[10],*(ptr+10)是引用str[10]的值。30、分析下列程序:#include<stdio.h>main(){int*p1,*p2,*p;inta=6,b=9;p1=&a;p2=&b;if(a<b){p=p1;p1=p2;p2=p;}printf("%d,%d",*p1,*p2);printf("%d,%d",a,b);}程序的输出结果为()。A、9,66,9B、6,99,6C、6,96,9D、9,69,6标准答案:1知识点解析:通过p1=&a,p2=&b分别将a、b的地址赋给指针p1、p2,接着执行if语句,发现a<b成立,则通过交换p1、p2的值,即交换a、b所在存储单元的地址,但是a、b的值并没有发生变化。31、若有定义inta[10],*p=a,则p+6表示()。A、数组元素a[5]的值B、数组元素a[5]的地址C、数组元素a[6]的地址D、数组元素a[0]的值加上5标准答案:4知识点解析:指针中存放的是变量的地址,指针也可以进行加减运算,这时指针移动的最小单位是一个存储单元,而不是一个字节。所以题中p+6指的是将指针向后移动了6个存储单元,指向a[6],存放的是a[6]的地址。32、下列说法正确的是()。A、在C语言中,可以使用动态内存分配技术,定义元素个数可变的数组B、在C语言中,数组元素的个数可以不确定,允许随机变动C、在C语言中,数组元素的数据类型可以不一致D、在C语言中,定义了一个数组后,就确定了它所容纳的元素的个数标准答案:8知识点解析:本题考查数组的两个知识点:①在C语言中,数组元素的个数是确定的,不允许随机变动,数组定义好之后,它所能容纳的元素的个数也就确定了;②同一个数组中所有元素的类型是一样的。33、下列的程序用来输出两个字符串前7个字符中对应相等的字符及其位置号,程序空白处应该填写的是()。#include<stdio.h>main(){chars1[]="chinese",s2[]="japnese";inti;for(i=0;s1[i]!=’\0’&&s2[i]!=’\0’;i++)if(s1[i]==s2[i]&&i<7)__________________;}A、putchar(s2[i]);putchar(i)B、puts(s1[i],i)C、printf("%c%d\n",s2[i],i)D、printf("%c",s1[i]);printf("%d\n",i)标准答案:4知识点解析:putchar(s)的功能是把字符s输出到标准输出设备;puts(s1)是把s1指向的字符串输出到标准输出设备。34、若已包括头文件<stdio.h>和<string.h>,运行下列程序段时输出结果是()。inti=0;chars1[10]="ABCD",s2[10]="EFG";strcat(s1,s2);while(s2[i++]!=’\0’)s2[i]=s1[i];puts(s2);A、ABCB、ABCDEFC、EBCDEFGD、CBD标准答案:4知识点解析:strcat(s1,s2)把s2连接到s1的后面,s1=ABCDEFG,执行while(s2[i++]!=’\0’)后i的值变为1,往后执行s2[i]=s1[i]时是从把s1的第二位给s2的第二位开始,把s1赋给s2。35、下列程序的运行结果是()。#include<stdio.h>main(){staticchara[]="Languagef",b[]="programe";char*p1,*p2;intk;p1=a;p2=b;for(k=0;k<=8;k++)if(*(p1+k)==*(p2+k))printf("%c",*(p1+k));}A、gaeB、angC、programD、有语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福州市2024福建福州市红庙岭垃圾综合处理中心招聘1人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 广西壮族自治区2024广西壮族自治区社会科学界联合会直属事业单位招聘实名编制1人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 大方县2024贵州毕节市大方县面向社会招聘事业单位人员166人笔试历年参考题库典型考点附带答案详解(3卷合一)试卷2套
- 2025贵州毕节金沙县国有资本投资运营集团有限公司招聘工作人员笔信息更正笔试历年备考题库附带答案详解
- 2025四川虹信软件股份有限公司招聘项目经理等岗位拟录用人员笔试历年典型考点题库附带答案详解
- 2026年河南洛阳63880部队社会招聘备考题库参考答案详解
- 上海音乐学院《大学英语》2023-2024学年第一学期期末试卷
- 上海兴伟学院《计算机基础》2023-2024学年第一学期期末试卷
- 2026年上海外国语大学国际教育学院招聘备考题库附答案详解
- 2026年湖北洪山实验室知识产权专员及条件保障管理人员招聘备考题库及答案详解一套
- 2026年护理部工作计划
- 食品安全知到智慧树章节测试答案2024年秋浙江大学
- 2024年世界职业院校技能大赛中职组“婴幼儿保育组”赛项考试题库-上(单选题)
- 钛的基本知识
- 2024年抖音影视作品宣传合同
- 技术调试合同范例
- JJG 272-2024空盒气压表和空盒气压计检定规程
- 大国三农II-农业科技版智慧树知到期末考试答案章节答案2024年中国农业大学
- SYT 7041-2016 钢质管道聚丙烯防腐层技术规范
- 矿山生态环境保护与恢复治理方案(规划)编制规范(试行)(HJ 652-2013)
- DB32T3916-2020建筑地基基础检测规程
评论
0/150
提交评论