版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言机试(选择题)模拟试卷8(共9套)(共348题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为()。A、20B、0或35C、15D、16标准答案:B知识点解析:Q(1:35)则队列的存储空间为35;队空时:front=rear(初始化时:front=rear);队满时:(rear+1)%n==front,n为队列长度(所用数组大小)。因此当执行一系列的出队与入队操作,front=rear,则队列要么为空,要么为满。2、下列关于栈的叙述中,正确的是()。A、栈底元素一定是最后入栈的元素B、栈操作遵循“先进后出”的原则C、栈顶元素一定是最先入栈的元素D、以上三种说法都不对标准答案:B知识点解析:栈是“先进后出”,因此,栈底元素是先入栈的元素,栈顶元素是后入栈的元素。3、下列链表中,其逻辑结构属于非线性结构的是()。A、双向链表B、带链的栈C、二叉链表D、循环链表标准答案:C知识点解析:数据的逻辑结构是描述数据之间的关系,分为两大类:线性结构和非线性结构。线性结构是n个数据元素的有序(次序)集合,指的是数据元素之间存在着“一对一”的线性关系的数据结构。常用的线性结构有:线性表、栈、队列、双队列、数组、串。非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个后继。常见的非线性结构有:树(二叉树等)、图(网等)、广义表。4、在关系数据库中,用来表示实体间联系的是()。A、网状结构B、树状结构C、属性D、二维表标准答案:D知识点解析:单一的数据结构——关系,现实世界的实体以及实体间的各种联系均用关系来表示。数据的逻辑结构——二维表,从用户角度,关系模型中数据的逻辑结构是一张二维表。但是关系模型的这种简单的数据结构能够表达丰富的语义,可以描述现实世界的实体以及实体间的各种关系。5、公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可有多名职员。则实体部门和职员间的联系是()。A、1:m联系B、m:n联系C、1:1联系D、m:1联系标准答案:A知识点解析:部门到职员是一对多的,职员到部门是多对一的,因此,实体部门和职员间的联系是1:m联系。6、C语言中最基本的数据类型包括()。A、整型、实型、逻辑型B、整型、字符型、数组C、整型、实型、字符型D、整型、实型、结构体标准答案:C知识点解析:C语言中最基本的数据类型包括整型、实型、字符型。7、数据字典(DD)所定义的对象都包含于()。A、软件结构图B、方框图C、数据流图(DFD图)D、程序流程图标准答案:C知识点解析:数据字典(DD)是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各元素做出详细的说明。8、软件需求规格说明书的作用不包括()。A、软件设计的依据B、软件可行性研究的依据C、软件验收的依据D、用户与开发人员对软件要做什么的共同理解标准答案:B知识点解析:《软件可行性分析报告》是软件可行性研究的依据。9、下列各项中属于黑盒测试方法的是()。A、边界值分析B、路径覆盖C、语句覆盖D、逻辑覆盖标准答案:A知识点解析:黑盒测试方法主要有等价类划分、边界值分析、因果图、错误推测等。白盒测试的主要方法有逻辑驱动、路径测试等,主要用于软件验证。10、下列各项中不属于软件设计阶段任务的是()。A、制订软件确认测试计划B、数据库设计C、软件总体设计D、算法设计标准答案:A知识点解析:软件设计阶段的主要任务包括两个:一是进行软件系统的可行性分析,确定软件系统的建设是否值得,能否建成;二是进行软件的系统分析,了解用户的需求,定义应用功能,详细估算开发成本和开发周期。11、以下叙述中正确的是()。A、在C语言程序中,main函数必须放在其他函数的最前面B、每个后缀为.C的C语言源程序都可以单独进行编译C、在C语言程序中,只有main函数才可单独进行编译D、每个后缀为.C的C语言源程序都应该包含一个main函数标准答案:B知识点解析:c语言是一种成功的系统描述语言,具有良好的移植性,每个后缀为C的C语言源程序都可以单独进行编译。12、C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述中正确的是()。A、预定义标识符(如库函数中的函数名)可用作用户标识符,但失去原有含义B、用户标识符可以由字母和数字任意顺序组成C、在标识符中大写字母和小写字母被认为是相同的字符D、关键字可用作用户标识符,但失去原有含义标准答案:A知识点解析:用户标识符不能以数字开头,C语言中标识符是区分大小写的,关键字不能用作用户标识符。13、以下选项中表示一个合法的常量的是(说明:符号口表示空格)()。A、9□9□9B、0XabC、123E0.2D、2.7e标准答案:B知识点解析:当用指数形式表示浮点数据时,E的前后都要有数据,并且E的后面数要为整数。14、C语言主要是借助以下哪个功能来实现程序模块化?()A、定义函数B、定义常量和外部变量C、三种基本结构语句D、丰富的数据类型标准答案:A知识点解析:C语言是由函数组成的,函数是C语言的基本单位。所以可以说C语言主要是借助定义函数来实现程序模块化的。15、以下叙述中错误的是()。A、非零的数值型常量有正值和负值的区分B、常量是在程序运行过程中值不能被改变的量C、定义符号常量必须用类型名来设定常量的类型D、用符号名表示的常量叫符号常量标准答案:C知识点解析:在C语言中,可以用一个标识符来表示一个常量,称为符号常量。符号常量在使用之前必须先定义,其一般形式为:#define标识符常量。16、若有定义和语句:inta,b;scanf(“%d,%d",&a,&b);以下选项中的输入数据,不能把值3赋给变量a、把值5赋给变量b的是()。A、3,5,B、3,5,4C、3.5D、3,5标准答案:C知识点解析:在输入3和5之间除逗号外不能有其他字符。17、C语言中char类型数据占字节数为()。A、3B、4C、1D、2标准答案:C知识点解析:char类型数据占1个字节。18、下列关系表达式中,结果为“假”的是()。A、(3+4)>6B、(31=4)>2C、3<=4‖3D、(3<4)=1标准答案:B知识点解析:在一个表达式中,括号的优先级高,先计算3!=4,为真即1,1>2为假。19、若以下选项中的变量全部为整型变量,且已正确定义并赋值,则语法正确的switch语句是()。A、switch(a+9){easec1:y=a—b;casec2:y=a+b;}B、switcha*b{case10:x=a+b;default:y=a—b;}C、switch(a+b){case1.case3:y=a+b;breakcasecase3DreaK;case0:case4:y=a—b;}D、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a—b;break;}标准答案:D知识点解析:选项A,当c1和c2相等时,不成立;选项B,a*b要用括号括起来;选项C,case与后面的数字用空格隔开。20、有以下程序:#includemain(){inta=一2,b=0;while(a++&&++b);prinff(“%d,%d\n”,a,b);}程序运行后的输出结果是()。A、1.3B、0,2C、0,3D、1,2标准答案:D知识点解析:考查while循环以及自加运算,其中a++是a先参与运算再自加1,而++b是b先自加1再参与运算。第一次进入循环:a的值是一2,b的值是0,判断条件为一2&&1,2个值都是非零,while判断条件成立,接着进入第二次循环。这时a的值是一1,b的值是1,判断条件即为一1&&2,表达式的值为真,进入第三次循环。这时a的值是0,b的值是2,判断条件为0&&3,与运算左边的值为0,即判断为假。此时跳出循环,执行prinff语句,这时a的值是1,b的值是2。21、有以下程序:#includemain(){inta[]={2,4,6,8},*P=a,i;for(i=0;i<4;i++)a[i]=*P++;printf(“%d\n”,a[2]);}程序运行后的输出结果是()。A、2B、8C、4D、6标准答案:D知识点解析:本题通过语句“*p=a”将一维数组a的首地址的值赋值给变量p,即p的值为2。执行for循环,a[i]=*p++,表示将p的值赋给a[i]后,再进行++操作。因此4次循环后a[2]的值为6。故D选项正确。22、下列叙述中正确的是()。A、可以用关系运算符比较字符串的大小B、空字符串不占用内存,其内存空间大小是0C、两个连续的单引号是合法的字符常量D、两个连续的双引号是合法的字符串常量标准答案:D知识点解析:比较两个字符串大小用函数strcmp(str1,str2),空字符串有结尾符,所以也要占用字节,两个双引号表示地是空字符串。23、有以下程序:#includemain(){intilia[3][3]={{2},{4},{6}},i,*P=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*P+1;else++P;printf(“%d”,*P);}printf(“\n”);}程序运行后的输出结果是()。A、26B、23C、43D、46标准答案:B知识点解析:本题主要考查指针与数组。观察题目,可以发现,*p=&aa[0][0]语句实际是将数组aa的首地址赋给指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,*p=2,*p输出地是指针所指向的数组值,此时p所指向地是aa[0][0],输出2,而i=1时执行了++p操作,使指针向后移动指向aa[0][1],所以在输出*p时应为3。故B选项正确。24、有以下程序:#includeintf(intx){returnx*x+1:}voidmain(){inta,b=0;for(a=0;a<3;a++){b=b+f(a);putchar(‘A’+b);}printf(“\n”);}程序运行后的输出结果是()。A、ABEB、BDIC、BCFD、BCD标准答案:B知识点解析:第一次循环时,b=1,输出结果为B;第二次循环时,b=3,输出结果为D;第三次循环时,b=8,输出结果为I。25、以下选项中,能正确进行字符串赋值的是()。A、char*s=“ABCDE”;B、chars[5]={’A’,’B’,’C’,’D’,’E’};C、chars[4][5]={“ABCDE”};D、char*s;get(s);标准答案:A知识点解析:本题考查字符数组的初始化。B选项中赋值号右侧是赋值给一个字符串数组,而左边是一个字符数组,所以错误;C选项中字符串包含6个字符,所以不能赋值给左边只能存放5个字符的字符串数组中。D选项gets函数中参数需要指定长度。故A选项正确。26、有以下程序:#includeintfun(intx){intP;if(x==0‖x==1)return3;P=x—fun(x一2);return(P);}main(){printf(“%d\n”,fun(9));}程序运行后的输出结果是()。A、4B、5C、9D、7标准答案:D知识点解析:本题考查函数的递归调用。执行fun(9)后,fun(9)=9一(7一(5一(3一f(1))))=7,故D选项正确。27、有以下程序:#includemain(){inta[]={10,20,30,40},*P=a,i;for(i=0;i<=3;i++){a[i]=*p;P++;}prinff(“%d\n”,a[2]);}程序运行后的输出结果是()。A、30B、40C、10D、20标准答案:A知识点解析:for循环结束后,数组a的值并没有变化,由于数组是由0开始,所以a[2]的值是30。28、有以下程序:#include#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i<=2;i++){intmax=a[i][0];for(j=i;j<=2;j++)if(maxA、2,4,8,B、3,6,9,C、3,5,7,D、1,3,5,标准答案:B知识点解析:fun函数功能是把数组a的每一行的最大值赋给b,a的第一行的最大值是3,第二行的最大值是6,第三行的最大值是9,所以答案是3,6,9,。29、有以下程序:#includeintfun(char*s){char*P=S:while(*P++!=’\0’);return(P—s);}main(){char*r=“01234”;printf(“%d\n”,fun(r));}程序的运行结果是()。A、6B、5C、4D、3标准答案:A知识点解析:程序执行过程为:定义字符串指针r,并为其初始化为“01234”,调用函数fun(r),将指针传入函数while循环找到字符串的结束符地址,然后使这个指针指向结束符下一个单元,结束循环。返回字符串首地址与结束符下一个地址之差,也即是字符串长度加1。输出地址差为6。30、以下选项中,合法的是()。A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’0’};B、charstr4:str4=“helloworld”;C、charname[10];name=“china”;D、charstrl[5]=“pass”,str2[6];str2=strl;标准答案:A知识点解析:选项B不能把一个字符串赋值给一个字符变量,选项C和D犯了同样的错误是把字符串赋给了数组名。31、有以下程序段:intfun(char*s){char*P;P=s:if(*s==0)return0;while(*++P);return(P—S);}该段程序是用来()。A、计算字符串所占字节数B、实现字符串的赋值C、计算字符串的长度D、将字符串逆序存放标准答案:C知识点解析:在fun()函数中定义了指针p,首先把s地址赋给p,再通过while函数移动指针p,当p指针指向单元为0时,退出while循环,返回此时p和s地址之差,即字符串长度。32、有以下程序:#includevoidmain(){chara[5][10]={“one”,“two”,“three”,“four”,“five”};inti,j;chart;for(i:0;i<5;i++)for(j=i+1;j<4;j++)if(a[i][0]>a[j][0]){t:a[i][0];a[i][0]=a[j][0];a[j][0]=t;puts(a[1]);}}程序运行后的输出结果是()。A、twoowoB、fixowoC、twofovD、owooff标准答案:A知识点解析:for循环完成的功能是把二维数组a的第一列的字母按从小到大排序,其他列的字母不变。33、有以下程序:#includeinta=1,b=2;voidfunl(inta,intb){prinff(“%d%d”,a,b);}voidfun2(){a=3.b=4;}voidmain(){funl(5,6);fun2();prinff(“%d%d\n”,a,b);}程序运行后的输出结果是()。A、1256B、5634C、5612D、3456标准答案:B知识点解析:funl是输出局部变量的值,fun2是把全局变量的值改成3,4,所以输出结果是5634。34、有以下程序:#includevoidfunc(intn){staticintnum=1;num=num+n;printf(“%d”,num);}main(){func(3);func(4);prinff(”\n”);}程序运行后的输出结果是()。A、48B、34C、35D、45标准答案:A知识点解析:第一次调用func函数时输出4,第二次调用func函数时num值并不会释放,仍然是上次修改后的值4,第二次调用结果为8,所以输出结果是48。35、有以下程序:#include#includevoidfun(int*pl,int*p2,int*s){s=(int*)malloc(sizeof(int));*s=*p1+*p2:free(s);}voidmain(){inta=1,b=40,*q=&a;fun(&a,&b,q);printf(“%d\n”,*q);}程序运行后的输出结果是()。A、42B、0C、1D、41标准答案:C知识点解析:fun函数功能是新开辟内存空间存放a和b的地址,q的地址并没有变化,所以应该还是指向地址a。36、有以下程序:#includestructSTU{charname[9];charsex;intscore[2];};voidf(structSTUa[]){structSTUb={“Zhao”,’m’,85,90};a[1]=b;}main(){structSTUc[2]={{“Qian”,‘f’,95,92},{“Sun”,,m,,98,99}};f(c);printf(”%s,%c,%d,%d,”,c[0].nanle,c[0].sex,c[0].score[0],c[0].score[1]);prinff(“%s,%c,%d,%d\n”,c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);}程序运行后的输出结果是()。A、Zhao,m,85,90,Sun,m,98,99B、Zhao,m,85,90,Qian,f,95,92C、Qian,f,95,92,Sun,m,98,99D、Qian,f,95,92,Zhao,m,85,90标准答案:D知识点解析:fun函数是为结构体数组的第二个数赋值,数组的第一个数没有变化,所以正确答案应选D。37、以下针对全局变量的叙述中错误的是()。A、用extern说明符可以限制全局变量的作用域B、全局变量是在函数外部任意位置上定义的变量C、全局变量的作用域是从定义位置开始至源文件结束D、全局变量的生存期贯穿于整个程序的运行期间标准答案:A知识点解析:在不同编译单位内用extem说明符来扩展全局变量的作用域,extern可以将全局变量作用域扩展到其他文件,而不是限制全局变量的作用域,故选A。38、以下关于宏的叙述中错误的是()。A、宏名必须用大写字母构成B、宏替换不具有计算功能C、宏替换不具有计算功能D、宏替换不占用运行时间标准答案:A知识点解析:宏名习惯采用大写字母,以便与一般变量区别,但是并没有规定一定要用大写字母,故选A。39、若有定义语句intb=2;,则表达式(b<<2)/(3‖b)的值是()。A、4B、8C、0D、2标准答案:B知识点解析:2的二进制数为010,左移两位后的二进制数为01000,转成二制数为8,(3‖2)为真即1,8/1=8,所以结果为8。40、有以下程序:#includemain(){FILE*fp;inti,aE6]={1,2,3,4,5,6};fp=fopen(“d2.dat”,“W+”);for(i=0;i<6;i++)fprintf(fp,“%d\n”,a[i]);rewind(fp);for(i=0;i<6;i++)fscanf(fp,“%d”,&aE5一i]);fclose(fp);for(i=0;i<6;i++){prinff(“%d,”,a[i]);}prinff(“\n”);}程序运行后的输出结果是()。A、4,5,6,1,2,3,B、1,2,3,3,2,1,C、1,2,3,4,5,6,D、6,5,4,3,2,1,标准答案:D知识点解析:这是对文件的操作,把数组的数写到文件里,然后再从文件里倒序读出。所以输出结果为6,5,4,3,2,1,。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、以下关于宏的叙述中正确的是A、宏替换没有数据类型限制B、宏定义必须位于源程序中所有语句之前C、宏名必须用大写字母表示D、宏调用比函数调用耗费时间标准答案:A知识点解析:宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以B)选项中宏定义必须位于源程序中所有语句之前是错误的。宏名一般用大写,但不是必须用大写,所以C选项错误。宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以D选项错误。2、下列数据结构中,能够按照“先进后出”原则存取数据的是A、循环队列B、栈C、队列D、二叉树标准答案:B知识点解析:栈是按先进后出的原则组织数据的。队列是先进先出的原则组织数据。3、对于循环队列,下列叙述中正确的是A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,也可以小于队尾指针标准答案:D知识点解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以对头指针有时可能大于队尾指针有时也可能小于队尾指针。4、算法的空间复杂度是指A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A。5、软件设计中划分模块的一个准则是A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。6、下列选项中不属于结构化程序设计原则的是A、可封装B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A。7、下列数据结构中,属于非线性结构的是A、循环队列B、带链队列C、二叉树D、带链栈标准答案:C知识点解析:树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。8、数据库管理系统是A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统标准答案:B知识点解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。9、在E-R图中,用来表示实体联系的图形是A、椭圆形B、矩形C、菱形D、三角形标准答案:C知识点解析:在E-R图中实体集用矩形,属性用椭圆,联系用菱形。10、若有定义语句:doublea,*p=&a;以下叙述中错误的是A、定义语句中的*号是一个间址运算符B、定义语句中的*号是一个说明符C、定义语句中的p只能存放double类型变量的地址D、定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p标准答案:A知识点解析:在变量定义doublea,*p=&a;中,*号是一个指针运算符,而非间址运算符,所以A错误。11、以下关于结构化程序设计的叙述中正确的是A、结构化程序使用goto语句会很便捷B、在C语言中,程序的模块化是利用函数实现的C、一个结构化程序必须同时由顺序、分支、循环三种结构组成D、由三种基本结构构成的程序只能解决小规模的问题标准答案:B知识点解析:滥用goto语句将使程序的流程毫无规律,可读性差,对于初学者来说尽量不要使用,所以A错误。一个结构化程序可以包含顺序、分支、循环结构中的一种或多种,所以C错误。由三种基本结构构成的程序可以解决任何复杂的问题,所以D错误。12、对于一个正常运行的C程序,以下叙述中正确的是A、程序的执行总是从main函数开始,在程序的最后一个函数中结束B、程序的执行总是从程序的第一个函数开始,在main函数结束C、程序的执行总是从main函数开始D、程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束标准答案:C知识点解析:任何一个C程序都是从主函数main开始,至主函数main结束,所以选择C选项。13、以下选项中能表示合法常量的是A、1,200B、1.5E2.0C、’\’D、\007标准答案:D知识点解析:A选项中整型常量应表示为1200,不能包含","。B选项中E后面的指数必须为整数。C选项中转义字符以"\"开始,若要表示字符"\",应写为"\\"。14、以下定义语句中正确的是A、inta=b=0;B、charA=65+1,b=’b’;C、floata=1,*b=&a,*c=&b;D、doublea=0.0;b=1.1;标准答案:B知识点解析:A选项语句中b变量还没有定义不能直接用于给a变量赋值。C选项语句中*b、*c表示的是一个实型变量的地址,不能再将&b赋值给指针型变量c。D选项语句中a=0.0后面应该为逗号,不能是分号。15、若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是A、x+1=yB、++x,y=x--C、x=x+10=x+yD、double(x)/10标准答案:B知识点解析:A选项中不能将变量y赋给表达式,C选项中错误与A选项一样,D选项中强制类型转换表达式应写成(double)x/10。16、若变量已正确定义为int型,要通过语句scanf("%d,%d,%d",&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(注:□代表一个空格符)A、1,2,3<回车>B、□□□1,2,3<回车>C、1,□□□2,□□□3<回车>D、1□2□3<回车>标准答案:D知识点解析:scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配。所以逗号必须输入。17、以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)A、printf("%c\n",’a’-32);B、printf("%d\n",’A’);C、printf("%c\n",65);D、printf("%c\n",’B’-1);标准答案:B知识点解析:B选项输出的格式为%d,即为整型格式,所以输出字符A的ASCII码值65,而不是字符A。由于大写字母和其对应的小写字母的ASCII码值小32,所以A正确。字符A的ASCII码值就是65,所以以%c格式输出可以输出字符A,所以C正确。由于字符A的ASCII码值比字符B的小1,所以D正确。18、若a是数值类型,则逻辑表达式(a==1)||(a!=1)的值是A、1B、0C、2D、不知道a的值,不能确定标准答案:A知识点解析:逻辑或"||"要求只要两边的运算对象有一个非零,结果就为真,虽然不知道a的值,但是若a为1,则左边运算对象为1,若a的值不是1,则右边运算对象的值为1,所以总能保证一边非零,所以结果为真,即1。19、设有定义: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知识点解析:由于a不小于b,所以所有选项中的条件都为假,A选项中实际执行了a=b;b=c;两个操作。而B,C,D选项由于条件不成立,所以什么也没有做,所以选择C选项。20、有以下程序#includemain(){inty=10;while(y--);printf("y=%d\n",y);}程序执行后的输出结果是A、y=0B、y=-1C、y=1D、while构成无限循环标准答案:B知识点解析:执行y--直到值为0,由于y--是先用再减,所以退出循环时,y的值为-1。21、有以下程序#includemain(){inti,j;for(i=1;i<4;i++){for(j=i;j<4;j++)printf("%d*%d=%d",i,j,i*j);printf("\n");}}程序运行后的输出结果是A、1*1=11*2=21*3=32*2=42*3=63*3=9B、1*1=11*2=21*3=32*1=22*2=43*1=3C、1*1=11*2=22*2=41*3=32*3=63*3=9D、1*1=12*1=22*2=43*1=33*2=63*3=9标准答案:A知识点解析:外循环第一次i的值为1,内循环第一次j的初值为1,打印1*1=1,内循环第二次j的值为2,打印1*2=2,内循环第三次j的值为3,打印1*3=3,打印回车换行,退出内循环。外循环第二次i的值为2,内循环第一次j的初值为2,打印2*2=4,内循环第二次j的值为3,打印2*3=6,打印回车换行,退出内循环。外循环第3次,i的值为3,内循环第一次j的初值为3,打印3*3=9,打印回车换行,退出内循环。22、有以下程序#includemain(){inti=5;do{if(i%3==1)if(i%5==2){printf("*%d",i);break;}i++;}while(i!=0);printf("\n");}程序的运行结果是A、*2*6B、*3*5C、*5D、*7标准答案:D知识点解析:do...while语句是先执行后判断,所以第一次先执行循环体,判断i%3==1的条件,由于i为5所以余数为2,条件不成立,执行i++,i的值为6,判断while条件为真,第二次执行循环体,同第一次循环体的执行过程一样,i的值变为7,判断while条件为真,第三次执行循环体,此时i%3==1条件成立,判断i%5==2也成立,打印*与i的值,即*7,然后执行break语句,跳出循环。所以选择D选项。23、有以下程序#includedoublef(doublex);main(){doublea=0;inti;for(i=0;i<30;i+=10)a+=f((double)i);printf("%3.0f\n",a);}doublef(doublex){returnx*x+1;}程序运行后的输出结果是A、500B、401C、503D、1404标准答案:C知识点解析:本题重点考察函数的定义和调用,第一次循环,a=0,i=0;返回值a=0*0+1=1;第二次循环,a=1,i=10;返回值a=10*10+1+1=102;第三次循环,a=102,i=20;返回值a=20*20+1+102=503;第四次循环,a=503,i=30;不符合i<30,跳出循环,最后结果输出a=503。24、若有以下函数首部intfun(doublex[10],int*n)则下面针对此函数的函数声明语句中正确的是A、intfun(double,int);B、intfun(double*,int*);C、intfun(double*x,intn);D、intfun(doublex,int*n);标准答案:B知识点解析:函数声明的一般形式为:类型说明符被调函数名(类型形参,类型形参…);或为:类型说明符被调函数名(类型,类型…);由于函数首部为intfun(doublex[10],int*n),因此B选项正确。25、有以下程序#includemain(){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、2,1,1,2B、1,2,1,2C、2,1,2,1D、1,2,2,1标准答案:D知识点解析:intm=1,n=2,*p=&m,*q=&n,*r;即指针变量p指向m,指针变量q指向n,r=p;p=q;q=r;即通过指针变量r,将指针p和指针q指向交换。因此最后输出1,2,2,1。26、若有以下定义intx[10],*pt=x;则对x数组元素的正确引用是A、pt+3B、*&x[10]C、*(pt+10)D、*(x+3)标准答案:D知识点解析:没有A选项的引用形式。*与&放在一起作用抵消,所以B选项错误,最大只能引用到x[9]。*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。因此D选项正确。27、有以下程序#includemain(){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九个数中的奇数和,此题考察指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第i+1个元素。程序运行的结果是1+2+3+4+5+6+7+8+9=25。28、有以下程序#include#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i];}main(){intx[][N]={{1,2,3},{4},{5,6,7,8},{9,10}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}程序的运行结果是A、1,0,7,0,B、1,2,3,4,C、1,4,5,9,D、3,4,8,10,标准答案:A知识点解析:该程序首先在定义变量时,对二维数组x[][N]进行赋值操作;调用函数fun,函数fun的功能是将二维数组中的a[0][0]、a[1][1]、a[2][2]和a[3][3]赋值给一维数组。最后将一维数组1,0,7,0,输出。29、设有定义:char*c;以下选项中能够使c正确指向一个字符串的是A、charstr[]="string";c=str;B、scanf("%s",c);C、c=getchar();D、*c="string";标准答案:A知识点解析:A选项为正确用法,先将字符串存于字符数组中,然后将数组名赋给字符指针。(数组名代表数组首地址,定义数组时为其分配确定地址)。C选项错误,getchar()函数输入个字符给字符型变量,而不是字符指针。B选项和D选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在B选项和D选项中,字符指针没有被赋值,是个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。因此A选项正确。30、若有定义语句:chars[10]="1234567\0\0";则strlen(s)的值是A、7B、8C、9D、10标准答案:A知识点解析:strlen()函数:是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。本题中字符串,从第一个字符开始,遇到第一个结束标识’\0’为止,注意’\0’不占字符串长度,所以字符串长度为7。因此A选项正确。31、有以下程序#include#includemain(){charp[20]={’a’,’b’,’c’,’d’},q[]="abc",r[]="abcde";strcat(p,r);strcpy(p+strlen(q),q);printf("%d\n",strlen(p));}程序运行后的输出结果是A、11B、9C、6D、7标准答案:C知识点解析:strcpy:字符串拷贝函数;strlen:求字符串长度函数(注意:不包含字符串结束标记字符’\0’);strcat:字符串连接函数。执行完语句strcat(p,r);后,p数组中存储的元素为a,b,c,d,a,b,c,d,e;执行语句strcpy(p+strlen(q),q);得到的结果是将q所指向的字符串拷贝至p+strlen(q)开始的存储位置,因为strlen的值为3,即p+3开始存储q中的元素。所以执行完strcpy(p+strlen(q),q)语句后,字符数组p[20]的存储元素为a,b,c,a,b,c;所以strlen(p)的结果为6。因此C选项正确。32、有以下程序(说明:字母A的ASCII码值是65)#includevoidfun(char*s){while(*s){if(*s%2)printf("%c",*s);s++;}}main(){chara[]="BYTE";fun(a);printf("\n");}程序运行后的输出结果是A、BTB、YEC、YTD、BY标准答案:B知识点解析:本题中执行fun(a)时,会取a的第一个字母B,因为B的ASCII码为66,所以不会输出B,函数只会输出ASCII码为奇数的字母,Y的ASCII码为89,T的ASCII码为84,E的ASCII码为69。因此B选项正确。33、有以下程序#includeintfun(){staticintx=1;x+=1;returnx;}main(){inti,s=1;for(i=1;i<=5;i++)s+=fun();printf("%d\n",s);}程序运行后的输出结果是A、120B、11C、6D、21标准答案:D知识点解析:fun函数中的变量x为静态局部变量,占用固定的内存单元,下一次调用时仍可以保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第一个调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用上次x的值。fun函数被调用了5次,每次调用后的返回值累加到s上。5次调用后,x的值为6,s的值为21。因此D选项正确。34、有以下程序#includevoidfun2(chara,charB){printf("%c%c",a,b);}chara=’A’,b=’B’;voidfun1(){a=’C’;b=’D’;}main(){fun1();printf("%c%c",a,b);fun2(’E’,’F’);}程序的运行结果是A、ABEFB、CDEFC、ABCDD、CDAB标准答案:B知识点解析:本题考察的是变量的作用范围。如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被"屏蔽",即不起作用。本题中,在fun1()和main()函数内访问的是全局变量a和b,在fun2()函数中访问的是形参变量a和b。所以,main()函数中的printf()函数输出的是在fun1()函数中被改变的全局变量a和b的值CD,而fun2()函数中输出的是传递给它的实参值EF。因此B选项正确。35、以下关于typedef的叙述错误的是A、用typedef可以增加新类型B、typedef只是将已存在的类型用一个新的名字来代表C、用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D、用typedef为类型说明一个新名,通常可以增加程序的可读性标准答案:A知识点解析:typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。所以A选项错误。36、有以下程序#include#defineS(x)4*(x)*x+1main(){intk=5,j=2;printf("%d\n",S(k+j));}程序运行后的输出结果是A、33B、197C、143D、28标准答案:C知识点解析:本题考查带参数的宏定义,S为带参数的宏定义,运行S(k+j)为4*(k+j)*k+j+1=143,选项C正确。37、若有以下程序段intr=8;printf("%d\n",r>>1);输出结果是A、16B、8C、4D、2标准答案:C知识点解析:本题考查位运算,属于基础知识,题目中将整型变量8,二进制表达为00001000,右移一位为00000100,即4,选项C正确。38、以下叙述中错误的是A、gets函数用于从终端读入字符串B、getchar函数用于从磁盘文件读入字符C、fputs函数用于把字符串输出到文件D、fwrite函数用于以二进制形式输出数据到文件标准答案:B知识点解析:本题考查字符处理函数和文件做操函数,属于基础知识,其中B选项getchar是用于从终端读入字符。39、有以下程序#includemain(){FILE*pf;char*s1="China",*s2="Beijing";pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf);rewind(pf);/*文件位置指针回到文件开头*/fwrite(s1,5,1,pf);fclose(pf);}以上程序执行后abc.dat文件的内容是A、ChinaB、ChinangC、ChinaBeijingD、BeijingChina标准答案:B知识点解析:本题考查文件操作函数,fwrite和rewind函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B正确。40、以下叙述中正确的是A、逻辑"或"(即运算符||)的运算级别比算术运算要高B、C语言的关系表达式:0<x<10完全等价于:(0<x)&&(x<10)C、逻辑"非"(即运算符!)的运算级别是最低的D、由&&构成的逻辑表达式与由||构成的逻辑表达式都有"短路"现象标准答案:D知识点解析:B选项中,(x>0)&&(x<10)的值是1或0,条件是x>0并且x<10。但是0国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、下列叙述中正确的是A、一个算法的空间复杂度大,则其时间复杂度也必定大B、一个算法的空间复杂度大,则其时间复杂度必定小C、一个算法的时间复杂度大,则其空间复杂度必定小D、算法的时间复杂度与空间复杂度没有直接关系标准答案:D知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,算法的时间复杂度,是指执行算法所需要的计算工作量,两者之间并没有直接关系,答案为D。2、下列叙述中正确的是A、循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B、循环队列中的元素个数随队头指针的变化而动态变化C、循环队列中的元素个数随队尾指针的变化而动态变化D、以上说法都不对标准答案:A知识点解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。所以循环队列中的元素个数与队头指针和队尾指针的变化而变化,A正确。3、一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为A、219B、229C、230D、231标准答案:B知识点解析:二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,则n2=79,总结点数为n0+n1+n2=80+70+79=229,答案为B。4、对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为A、9B、10C、45D、90标准答案:C知识点解析:冒泡法是在扫描过程中逐次比较相邻两个元素的大小,最坏的情况是每次比较都要将相邻的两个元素互换,需要互换的次数为9+8+7+6+5+4+3+2+1=45,选C。5、构成计算机软件的是A、源代码B、程序和数据C、程序和文档D、程序、数据及相关文档标准答案:D知识点解析:软件指的是计算机系统中与硬件相互依赖的另一部分,包括程序、数据和有关的文档,选D。6、软件生命周期可分为定义阶段、开发阶段和维护阶段,下面不属于开发阶段任务的是A、测试B、设计C、可行性研究D、实现标准答案:C知识点解析:开发阶段包括分析、设计和实施两类任务。其中分析、设计包括需求分析、总体设计和详细设计3个阶段,实施则包括编码和测试两个阶段,C不属于开发阶段。7、下面不能作为结构化方法软件需求分析工具的是A、系统结构图B、数据字典(DD)C、数据流程图(DFD图)D、判定表标准答案:A知识点解析:结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。8、在关系模型中,每一个二维表称为一个A、关系B、属性C、元组D、主码(键)标准答案:A知识点解析:关系模型采用二维表来表示,即每个二维表称为一个关系。9、若实体A和B是一对多的联系,实体B和C是一对一的联系,则实体A和C的联系是A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:A和B为一对多的联系,则对于A中的每一个实体,B中有多个实体与之联系,而B与C为一对一联系,则对于B中的每一个实体,C中之多有一个实体与之联系,则可推出对于A中的每一个实体,C中有多个实体与联系,所以为一对多联系。10、有三个关系R,S和T如下:则由关系R和S得到关系T的操作是A、选择B、差C、交D、并标准答案:D知识点解析:关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。11、以下叙述中正确的是A、C语言程序所调用的函数必须放在main函数的前面B、C语言程序总是从最前面的函数开始执行C、C语言程序中main函数必须放在程序的开始位置D、C语言程序总是从main函数开始执行标准答案:D知识点解析:C语言所调用的函数可以放在调用它的函数前,也可以放在调用它的函数后,所以A错误,C语言程序总是从main函数开始执行,所以B错误,main函数的位置可以放在开始,也可以放在中间,也可以放在最后,所以C错误。12、C语言程序中,运算对象必须是整型数的运算符是A、&&B、/C、%D、*标准答案:C知识点解析:%取余运算是二目运算符,且要求运算对象必须为整数,所以选C。13、有以下程序#includemain(){intsum,pad,pAd;sum=pad=5;pAd=++sum,pAd++,++pad;printf("%d\n",pad);}程序的输出结果是A、5B、6C、7D、8标准答案:B知识点解析:C语言区分大小写,pad与pAd是两个不同的变量,首先将5赋值给两个变量,由于赋值运算符的优先级高于逗号运算符,所以计算pAd=++sum,此时pAd为6,sum也为6,然后计算pAd++,pAd的值变为7,++pad,pad的值变为6,所以选择B。14、有以下程序#includemain(){inta=3;a+=a-=a*a;printf("%d\n",a);}程序的输出结果是A、0B、9C、3D、-12标准答案:D知识点解析:首先计算a*a结果为9,执行a=a-9,a的值为-6,然后执行a+=a,即a=a+a=-6+(-6),所以值为-12。15、sizeof(double)是A、一个整型表达式B、一个双精度型表达式C、一个不合法的表达式D、一种函数调用标准答案:A知识点解析:sizeof是C语言中的一个操作符(operator),不是函数调用,简单的说其作用就是返回一个对象或者类型所占的内存字节数,所以选择A。16、有以下程序#includemain(){inta=2,c=5;printf("a=%%d,b=%%d\n",a,c);}程序的输出结果是A、a=2,b=5B、a=%2,b=%5C、a=%d,b=%dD、a=%%d,b=%%d标准答案:C知识点解析:C语言中用"%%"打印输出字符"%",所以%%d,输出为%d两个普通字符,而不是格式控制符"%d"的含义,所以打印结果为C。17、若有定义语句:chara=’\82’;则变量aA、说明不合法B、包含1个字符C、包含2个字符D、包含3个字符标准答案:A知识点解析:定义语句:chara=’\82’;定义字符变量a,但是赋初值时却给赋值字符常量,因此A选项正确。18、有以下程序#includemain(){charc1=’A’,c2=’Y’;printf("%d,%d\n",c1,c2);}程序的输出结果是A、输出格式不合法,输出出错信息B、65,89C、65,90D、A,Y标准答案:B知识点解析:本题重点考察字符变量的相关知识。分别给字符型变量a和b分别赋值为’A’和’Y’,即A和Y的ASSCII码,因此输出结果为65,89,因此B选项正确。19、若变量已正确定义for(x=0,y=0;(y!=99&&x<4);x++)则以上for循环A、执行3次B、执行4次C、执行无限次D、执行次数不定标准答案:B知识点解析:本题重点考察for语句的循环次数,for(x=0,y=0;(y!=99&&x<4);x++),y!=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。20、对于while(!E)s;,若要执行循环体s,则E的取值应为:A、E等于1B、E不等于0C、E不等于1D、E等于0标准答案:D知识点解析:while语句的一般形式为:while(表达式)语句;其中表达式是循环条件,语句为循环体。while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。该题中如要执行语句s,则!E应为真,因此E应等于0,D选项正确。21、有以下程序#includemain(){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的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。本题中语句printf((x%2)?("*%d"):("#%d"),x);含义为变量x对2求余,如果结果为真,则按照"*%d"格式输出,否则按照#%d输出。因此A选项正确。22、有以下程序#includemain(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b=b+3;continue;}b=b-5;}printf("%d\n",a);}程序的输出结果是A、10B、9C、8D、7标准答案:B知识点解析:首先注意for循环的控制条件当b>=20或者a>100则跳出for循环也即b<20且a<=100时执行for循环;第一次进入循环a=1,b=1均满足循环条件,但b%3==1条件满足,故执行b=b+3,得到b=4,注意有continue,所以后面语句不执行,直接跳转到a++这个语句,所以第一次循环完之后a=2,b=4;进入第二轮循环,b%3==1也是满足的,故再次b=b+3,此轮循环执行之后a=3,b=7,进入下一轮。此后和前面循环同理,都是b%3==1满足,因为每次都是加3,而之后又去模3,且都跳过for后面语句直接执行a++,所以,一直循环到b=22跳出for循环。此时a为8。综合起来就是,每次循环b增加3,a增加1,且当b>22时跳出循环,结束程序。所以b从1增加到22,有(22-1)/3=7,所以a=1+7=8。因此B选项正确。23、有以下程序#includevoidfun(intx,inty,int*c,int*d){*c=x+y;*d=x-y;}main(){inta=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf("%d%d\n",c,d);}程序的输出结果是A、00B、43C、34D、71标准答案:D知识点解析:主函数中首先初始化整型变量a、b、c、d分别为4、3、0、0。调用函数fun,将实参传递给形参。在fun函数内,*c=7、*d=1。返回主函数,最后输出7和1。因此D选项正确。24、有以下程序#includevoidfun(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、90B、00C、99D、09标准答案:C知识点解析:主函数中定义整型变量a、b,分别赋值0和9。将a和b的地址传递给指针变量p和q,函数fun中将a和b的值互换后,又将a的值赋给b。返回主函数,最后输出9和9。因此C选项正确。25、有以下程序#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、13B、19C、11D、15标准答案:B知识点解析:本题通过语句"p=&a[1]"将指针变量p指向了存储单元a[1],即使得p[0]的值为4,y的初始值为1,然后通过3次for循环,使得y的值分别加上p[0]、p[1]和p[2],那么y=1+4+6+8,所以输出的y的值为19。26、有以下程序#includemain(){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]);printf("\n");}程序的输出结果是A、150B、357C、147D、369标准答案:B知识点解析:程序首先初始化二维数组x[3][3],然后通过3次for循环,输出x[0][2]、x[1][1]和x[2][0]的值,即3、5、7。因此B选项正确。27、设有某函数的说明为int*func(inta[10],intn);则下列叙述中,正确的是A、形参a对应的实参只能是数组名B、说明中的a[10]写成a[]或*a效果完全一样C、func的函数体中不能对a进行移动指针(如a++)的操作D、只有指向10个整数内存单元的指针,才能作为实参传给a标准答案:B知识点解析:本题重点考察返回指针值的函数相关知识,返回指针值的函数,一般定义形式为:类型名*函数名(参数列表)。func函数被定义为指针型函数,它的形参inta[10]和intn,分别指一维数组a[0]和整型变量n。28、有以下程序#includecharfun(char*c){if(*c<=’Z’&&*c>=’A’)*c-=’A’-’a’;return*c;}main(){chars[81],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);p++;}printf("\n");}若运行时从键盘上输入OPENTHEDOOR<回车>,程序的输出结果是A、OPENTHEDOORB、oPENtHEdOORC、openthedoorD、OpenTheDoor标准答案:C知识点解析:字符串输入函数gets的功能是从标准输入设备键盘上输入一个字符串。首先使指针变量p指向字符串的首字母,while循环语句中对字符串的每个字符进行fun函数操作。fun函数的功能是,将字符串中的大写字母变小写字母。将处理结果返回主函数,主函数通过putchar()字符输出函数进行输出。因此C选项正确。29、设有定义语句:char*aa[2]={"abcd","ABCD"};则以下叙述正确的是A、aa[0]存放了字符串"abcd"的首地址B、aa数组的两个元素只能存放含有4个字符的一维数组的首地址C、aa数组的值分别是字符串"abcd"和"ABCD"D、aa是指针变量,它指向含有两个元素的字符型数组标准答案:A知识点解析:本题中定义了一个指针数组,数组中存放的是字符指针,aa数组的两个元素分别包含了5个字符,所以可以存放5个字符的一维数组的首地址,所以B选项错误。aa数组的值是指向那两个字符串的字符指针,而不是那两个字符串,所以C选项错误。aa本身是一个指向两个字符指针的指针,所以D选项错误。30、有以下程序#includeintfun(char*s){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("goodbey!"));}程序的输出结果是A、0B、6C、7D、8标准答案:C知识点解析:本题主要考查了函数定义及调用,以及while循环语句,执行fun函数后,首先是找到最后一个字符的地址,然后减去第一个地址得到的就是这个字符串的长度,所以本题答案为8。31、有以下程序#includeintfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的输出结果是A、9B、14C、10D、15标准答案:D知识点解析:考查函数的递归调用,只需要一步一步递归调用fun函数即可,执行fun(5)=5+(4+(3+(2+fun(1))))=15,所以答案为D选项。32、有以下程序#includeintd=1;voidfun(intp){intd=5;d+=p++;printf("%d",d);}main(){inta=3;fun(a);d+=a++;printf("%d\n",d);}程序的输出结果是A、84B、96C、94D、85标准答案:A知识点解析:本题主要考查局部变量和全局变量的区别,题目中函数之外定义的d为全局变量,函数fun内定义的d为局部变量,所以执行fun函数后,打印出8,执行完d+=a++;后d变为4,所以答案为A。33、有以下程序#includeintfun(intA){intb=0;staticintc=3;a=(c++,b++);return(a);}main(){inta=2,i,k;for(i=0;i<2;i++)k=fun(a++);printf("%d\n",k);}程序的输出结果是A、4B、0C、1D、2标准答案:B知识点解析:题目中fun函数被执行了两次,两次执行后,都是返回了函数内部的b值,所以答案为0,即B选项正确。34、有以下程序#includemain(){charc[2][5]={"6934","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0&&p[i][j]<=’9’;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序的输出结果是A、693825B、69825C、63825D、6385标准答案:D知识点解析:本题的意图在于将c中两个字符串的偶数位置的数字组成一个新数,找到的四个数字分别为6、3、8、5,组成的数为6385,所以答案为D选项。35、有以下程序#include#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}程序的输出结果是A、0B、1C、9D、10标准答案:B知识点解析:本题考查宏定义,宏定义只是做个简单的替换,执行SQR(k+m)/SQR(k+m)=k+m*k+m/k+m*k+m=15/2,a/=SQR(k+m)/SQR(k+m)的结果为1,选项B正确。36、有以下程序#includemain(){charx=2,y=2,z;z=(y<<1)&(x>>1);printf("%d\n",z);}程序的输出结果是A、1B、0C、4D、8标准答案:B知识点解析:本题考查位运算<<、&。y<<1为4,x>>1为1,二者与一下为0,所以B选项正确。37、有以下程序#includestructS{inta;intb;};main(){structSa,*p=&a;a.a=99;printf("%d\n",_______);}程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是A、a.aB、*p.aC、p->aD、(*p).a标准答案:B知识点解析:本题考查结构体变量的引用,题目中要求输出结构体中成员a的数据,p为指针,*p为结构体变量,那么*p.a可以表示为结构体中成员a的数据。38、有以下程序#include#includevoidfun(double*p1,double*p2,double*s){s=(double*)calloc(1,sizeof(double));*s=*p1+*(p2+1);}main(){doublea[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf("%5.2f\n",*s);}程序的输出结果是A、21.10B、11.10C、12.10D、1.10标准答案:D知识点解析:本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1.10,选项D正确。39、若已建立以下链表结构,指针p、s分别指向如图所示结点则不能将s所指结点插入到链表末尾的语句组是A、p=p->next;s->next=p;p->next=s;B、s->next=’\0’;p=p->next;p->next=s;C、p=p->next;s->next=p->next;p->next=s;D、p=(*p).next;(*s).next=(*p).next;(*p).next=s;标准答案:A知识点解析:本题考查向链表中插入节点,A选项语句错误,不能够实现在链表末尾插入。40、若fp已定义为指向某文件的指针,且没有读到该文件的末尾,则C语言函数feof(fp)的函数返回值是A、EOFB、非0C、-1D、0标准答案:D知识点解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,所以选项D正确。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共40题,每题1.0分,共40分。)1、算法的有穷性是指()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师校本培训
- 关于医疗简单的认识
- 教育学职业规划
- 2024年度仓储物流服务合同:智能化仓储管理系统建设与运营2篇
- 2024版音乐制作与定制服务合同2篇
- 医院护理员身体清洁培训
- 医院合作协议
- 2024护理带教述职报告
- 2024版新能源汽车充电桩建设项目合同3篇
- 2024年度股权转让合同股权比例分配协议3篇
- 周围神经病变(课件)
- 2024年全国中小学教师职业道德知识竞赛试题库及答案
- 知识付费合同协议范本
- 设备点检基础知识和预防性维修课件
- MOOC 细胞生物学-北京师范大学 中国大学慕课答案
- 高压电缆高频局部放电带电检测技术导则
- 液压起重机液压系统
- 双鹿老品牌复活引领农村市场新模式
- 盗墓笔记英语演讲-PPT
- 精神科问诊及精神检查方法
- 人工智能的风险与挑战
评论
0/150
提交评论