版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
国家二级C语言机试(选择题)模拟试卷21(共9套)(共270题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共25题,每题1.0分,共25分。)1、以下选项中关于程序模块化的叙述错误的是A、把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块B、可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序C、把程序分成若干相对独立的模块,可便于编码和调试D、可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序标准答案:B知识点解析:如果应用结构化程序设计方法设计程序,那么可采用自顶向下,逐步细化的设计方法把若干独立模块组装成所要求的程序。2、以下叙述中正确的是()。A、如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息B、即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同C、设变量p是一个指针变量,则语句p=0;是非法的,应该使用p=NULL;D、指针变量之间不能用关系运算符进行比较标准答案:A知识点解析:空指针意味着该指针没有指向任何具体的变量,所以不能访问一个存储单元,选项A正确。指针的赋值运算只能在同一数据类型之间进行,故选项B错。语句p=0和p=NULL是一样的,都是把一个空指针赋给指针变量p,故选项C错。指针之间能进行关系运算,比较的是地址值的大小,选项D错。答案选A。3、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是()。A、编译程序B、操作系统C、教务管理系统D、汇编程序标准答案:C知识点解析:编译软件、操作系统、汇编程序都属于系统软件,只有C选项教务管理系统才是应用软件。4、在快速排序法中,每经过一次数据交换(或移动)后()。A、只能消除一个逆序B、能消除多个逆序C、不会产生新的逆序D、消除的逆序个数一定比新产生的逆序个数多标准答案:B知识点解析:在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。快速排序的思想是:从线性表中选取一个元素,设为T,将线性表中后面小于T的元素移到前面,而前面大于T的元素移到后面,结果就将线性表分成两部分(称两个子表),T插入到其分割线的位置处,这个过程称为线性表的分割,然后再用同样的方法对分割出的子表再进行同样的分割。快速排序不是对两个相邻元素进行比较,可以实线通过一次交换而消除多个逆序,但由于均与T(基准元素)比较,也可能会产生新的逆序。5、下列选项中不属于结构化程序设计原则的是A、可封装B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化设计方法的主要原则可以概括为自顶向下、逐步求精、模块化、限制使用goto语句。6、设某棵树的度为3,其中度为3、1、0的结点个数分别为3、4、15。则该树中总结点数为A、22B、30C、35D、不可能有这样的树标准答案:B知识点解析:本题采用画图法来求出结果。首先先画出包含3个度为3的结点;然后再添加4个度为1的结点,此时最大度为0的结点数为8。根据题目中描述的度为0的结点数有15个,这时要在书中添加度为2的结点,直到度为0的结点数位15。画图结束后,不管是什么样的树,总结点数都是30。7、软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是A、编辑软件B、操作系统C、教务管理系统D、浏览器标准答案:B知识点解析:软件根据应用目标的不同,是多种多样的。软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决特定领域的应用而开发的软件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具性软件,包括辅助和支持开发和维护应用软件的工具软件,还包括辅助管理人员控制开发进程和项目管理的工具软件。8、下列选项中,当x为大于1的奇数时,值为0的表达式是()。A、x%2==0B、x/2C、x%2!=0D、x%2==1标准答案:A知识点解析:算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。D选项的值为真,即1。9、有嵌套的if语句:if(a<b)if(a<c)k=a;elsek=c:elseif(b<c=k=b;elsek=c:以下选项中与上述if语句等价的语句是()。A、k=(a<b)?((b<c)?a:b):((b>c)?b:c);B、k=(a<b)?((a<c)?a:c):((b<c)?b:c);C、k=(a<b)?a:b;k=(b<c)?b:c;D、k=(a<b)?a:b;k=(a<e)?a:c;标准答案:B知识点解析:题目中嵌套语句的含义是当a<b且a<c成立时,将a的值赋给k,如果a<b成立而a<c不成立,则将c的值赋给k。如果a<h不成立而b<c成立,则将b的值赋给k,如果a<b不成立且b<c也不成立,则将c的值赋给k。判断条件表达式,只有B选项可以表示这个含义。10、以下程序段中的变量已正确定义for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");程序段的输出结果是A、********B、****C、**D、*标准答案:D知识点解析:本题考查循环语句,题中第二个(内层)for循环之后有一个分号,意思是每次循环中的操作为空,不执行任何操作。再循环结束后执行printf语句,即只打出一个*。11、若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是()。A、sqrt(fabs(pow(n,x)+exp(X)))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(abs(n^x+e^x))D、sqrt(fabs(pow(x,n)+exp(x)))标准答案:A知识点解析:B选项中函数pow(x,e)错误,应该直接使用exp(x)函数。C选项中函数abs(n^x+e^x)错误,应该使用fabs()返回浮点数的绝对值。D选项中pow(x,n)参数顺序错误。12、以下选项中合法的常量是A、2.7eB、999C、123E0.2D、0Xab标准答案:D知识点解析:0xab是十六进制表示的常量。13、已知字符’A’的ASCII代码值是65,字符变量c1的值是’A’,c2的值是’D’。则执行语句printf("%d,%d",c1,c2-2);的输出结果是A、A,68B、A,BC、65,66D、65,68标准答案:C知识点解析:在C语言中,字符常量在内存中占一个字节,存放的是字符的ASCII码值。所有的字符常量都作为整型量来处理。在本题中输出语句用整型格式输出字符时,输出的是其ASCII码值。因为字符’A’和’D’的ASCⅡ码值分别为65和68,所以c2.2=68.2=66。14、有以下说明和定义语句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标准答案:D知识点解析:本题考查结构体和结构体指针,stu是一个结构体数组,p是结构体指针,且p指向stu数组,即p指向了stu数组的首元素地址。选项A)中p++表示先引用p指针,然后p指向下一个元素,(p++)->num表示取出stu首元素的num值,然后p指向stu[1]元素地址;选项B)是通过结构体指针访问结构体元素,使用“->”运算符;选项C)中*p代表stu[0]元素,因此(*p)num表示stu[0].num;选项D)中,stu数组的长度为3,stu[3]已经超出数组范围,错误。15、以下选项中,不合法的C语言用户标识符是A、AaBcB、a-bC、a_bD、_1标准答案:B知识点解析:在C语言中的用户标识符只能由字母,数字和下划母组成,并且第一个字符必须是字母或下划线,在选项B中出现了非法的字符“-”。16、阅读以下程序#include<stdio.h>main(){intcase;floatprintF;printf("请输入2个数:");scanf("%d%f",&case,&printF);printf("%d%f\n",case,printF);}该程序在编译时产生错误,其出错原因是A、定义语句出错,printF不能用作用户自定义标识符B、定义语句出错,case是关键字,不能用作用户自定义标识符C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输出case的值标准答案:B知识点解析:case是C语言中的一个关键字,不能用作用户标识符来使用,所以这段程序代码在编译时就会出错。17、以下叙述正确的是()。A、do-while语句构成的循环,当while语句中的表达式值为0时结束循环B、do-while语句和while-do构成的循环功能相同C、while-do语句构成的循环,当while语句中的表达式值为非0时结束循环D、do-while语句构成的循环,必须用break语句退出循环标准答案:A知识点解析:没有while-do循环,选项B)错误;不管是while语句还是do-while语句都是判定表达式的值为0时结束循环,选项A)正确,选项C)错误;循环语句只要循环条件不满足就会退出循环,不必非得用break语句,选项D)错误;答案选A)。18、在C语言中,函数返回值的类型最终取决于A、函数定义时在函数首部所说明的函数类型B、return语句中表达式值的类型C、调用函数时主调函数所传递的实参类型D、函数定义时形参的类型标准答案:A知识点解析:C语言中函数的返回值类型是由定义函数时在函数首部所声明的类型确定的。19、下列选项中,能够满足“只要字符串s1等于字符串s2,则执行ST”要求的是A、if(s1==s2)ST;B、if(strcpy(s1,s2)==1)ST;C、iffstrcmp(s2,s1)==0)ST;D、if(s1-s2==0)ST;标准答案:C知识点解析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数strcmp(),如果这个函数的返回值等于0,说明两个字符串相等。20、有以下程序,程序运行后的输出结果是main(){intm=1,n=2,*p=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*p,*q);}A、1,2,1,2B、1,2,2,1C、2,1,2,1D、2,1,1,2标准答案:B知识点解析:在主函数定义了3个整数指针变量p,q,r,并且使P指向m,q指向n,再执行“r=p;p=q;q=r;”这三条语句,使q指向m,p指向n,再输出变量“m,n,*p,*q”时,它们值分别为1,2,2,1。21、以下叙述中正确的是A、结构体类型中的各个成分均不能是数组或指针B、结构体类型的变量,不能在声明结构体类型组成时一起定义C、使用typedef定义新类型名后,新类型名与原类型名实际上是等价的D、元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义标准答案:C知识点解析:C语言允许用tyoedef说明一种新类型名,typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。结构体变量定义有下面三种形式;(1)先定义结构,再说明结构变量。(2)在定义结构类型的同时说明结构变量。(3)直接说明结构变量。22、有以下程序main(){unsignedchara=8,c;C=a>>3:printf("%d\n",c);}程序运行后的输出结果是A、16B、32C、1D、0标准答案:C知识点解析:在程序中对无符号字符变量a的值执行右移3位运算后,相当于a/8,其值等于1,再赋给变量c。23、有以下程序#includeintfun(inta,intB){returna+b;}main(){intx=6,y=7,z=8,r;r=fun(fun(x,y),z--);printf("%d\n",r);}程序运行后的输出结果是A、21B、15C、20D、31标准答案:A知识点解析:函数fun的功能是返回两个形参的和。调用函数fun(x,y)时,将变量x=6和y=7的值分别传送变量a和b,并且通过语句returna+b;将13返回给主函数。继续调用函数fun(13,z--),这里z--指将z的值参与运算后,再将z的值减1操作;将13和8分别传送变量a和b,且通过语句returna+b;将21返回给主函数。因此A选项正确。24、结构化程序设计的基本原则不包括()。A、多态性B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A)。25、以下叙述中正确的是A、函数的返回值不能是结构体类型B、在调用函数时,可以将结构体变量作为实参传给函数C、函数的返回值不能是结构体指针类型D、结构体数组不能作为参数传给函数标准答案:B知识点解析:本题考查结构体变量作为函数参数,函数返回可以是结构体类型,也可以是结构体类型的指针,结构体数组可以作为参数传给函数。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数()。A、不同,但元素的存储顺序与逻辑顺序一致B、不同,且其元素的存储顺序可以与逻辑顺序不一致C、相同,元素的存储顺序与逻辑顺序一致D、相同,但其元素的存储顺序可以与逻辑顺序不一致标准答案:C知识点解析:在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数相同,在存储空间中是按逻辑顺序依次存放的。2、以下叙述中正确的是A、在C语言程序设计中,所有函数必须保存在一个源文件中’B、在算法设计时,可以把复杂任务分解成一些简单的子任务C、只要包含了三种基本结构的算法就是结构化程序D、结构化程序必须包含所有的三种基本结构,缺一不可标准答案:B知识点解析:模块化设计思想,就是把复杂的任务分成简单的子任务,心函数或者过程描述子任务,C语言中一个程序可以包括多个源文件,每个源文件可以有符干个函数,结构化的程序由顺序结构、循环结构和选择结构三种基本结构组成,不一定全要包括这三种结构,而算法不等于程序。3、下列对队列的描述中正确的是()。A、队列属于非线性表B、队列按“先进后出”原则组织数据C、队列在队尾删除数据D、队列按“先进先出”原则组织数据标准答案:D知识点解析:队列(queue)是指允许在一端进行插入而在另一端进行删除的线性表。允许插入的一端称为队尾;允许删除的一端称为队头。在队列这种数据结构中,最先插入的元素将最先能够被删除;反之,最后插入的元素将最后才能被删除。因此,队列又称“先进先出”或“后进后出”的线性表。4、在面向对象方法中,不属于“对象”基本特点的是A、一致性B、分类性C、多态性D、标识唯一性标准答案:A知识点解析:对象具有如下特征:标识惟一性、分类性、多态性、封装性、模块独立性。5、下列不属于软件工程3个要素的是,()。A、工具B、过程C、方法D、环境标准答案:D知识点解析:软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。6、下列定义变量的语句中错误的是()。A、int_int;B、doubleint_;C、charFor;D、floatUS$;标准答案:D知识点解析:C语言规定,变量命名必须符合标识符的命名规则。D选项中包含了非法字符“$”,所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。大写字符与小写字符被认为是两个不同的字符,所以For不是关键字for。7、数据库技术的根本目标是要解决数据的A、存储问题B、共享问题C、安全问题D、保护问题标准答案:B知识点解析:数据库中的数据具有“集成”、“共享”之特点,即数据库集中了各种应用的数据,进行统一地构造与存储,而使它们能被不同的应用程序所使用。因而数据库技术的根本目标是解决数据的共享问题。8、某系统总体结构如下图所示该系统结构图是A、层次结构B、网状结构C、分支结构D、循环结构标准答案:A知识点解析:层次结构(hierarchy)是一种操作系统的组织结构,其提供了一种隔离操作系统各层功能的模型。其包括归属层次结构dissonance-attributionhierarchy维度层次结构diInensionhierarchy层次结构数据库hierarchicaldatabase等。网状结构这一名词来自早期解剖学家用光学显微镜对脑干中央区网络状外观的描述,在光镜下这部分组织学的特点是神经细胞分散,形态各异,大小不等,神经纤维交错穿行其间,形成一种灰白质交织的结构,称之为网状结构。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构。9、有以下程序:#include<stdio.h>main(){inta=1,b=2,e=3,d=0;if(a==1&&b++==2)if(b!=2||c--!=3)printf(’’%d,%d,%d\n’’,a,b,cv);elseprintf(’’%d,%d,%d\n’’,a,b,c);elseprintf(’’%d,%d,%d\n’’,a,b,c);}程序的运行结果是()。A、1,3,2B、1,3,3C、1,2,3D、3,2,1标准答案:B知识点解析:else总是和最近的if配对,所以进入第一个if语句中进行条件判断时,因为是逻辑与操作,需要两边运算对象的值均为非零值才为真,所以需要逐个执行判断的结果为1。进入第二个if语句条件判断,因为b!=2条件成立,所以整个条件表达式的值为真,不再执行逻辑或的第二个运算对象(c--!=3)c的值不变,也不再执行第一个else语句。打印a的值1,b的值3,c的值3。10、设有以下程序段inty;y=rand()%30+1;则变量y的取值范围是()。A、0<y≤30B、0≤y≤30C、1<y<30D、1<y≤30标准答案:A知识点解析:考查运算符与表达式,rand()%30求得范围在0-29之间的数据,+1后的取值范围为1-30(1、30也包括在内),答案选A。11、有以下程序:#include<stdio.h>main(){charch[]=’’uvwxyz’’,*pc;pc=ch;printf(’’%c\n’’,*(pc+5));}程序的运行结果是()。A、zB、0C、元素ch[5]的地址D、字符y的地址标准答案:A知识点解析:语句pc=ch;使得指针变量指向字符数组ch的首地址,即指向字符’u’,则pc+5指向的是字符向后移动5位,指向字符’z’,所以输出的*pc+5的值即为’z’,因此A选项正确。12、以下程序的输出结果是()。for(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf(’’*’’);A、****B、***C、**D、*标准答案:D知识点解析:本题考查多层for循环语句,题中第二个(内层)for循环之后又一个分号,意思是每次循环中的操作为空,不执行任何操作。在循环结束后执行printf语句,即只打出一个*。13、有以下程序:#include<stdio.h>intf(intx,inty){return((y-x)*x);}main(){inta=3,b=4,c=5,d;d=f(f(a,b),f(a,c));printf(’’%d\n’’,d);}程序的运行结果是()。A、7B、10C、8D、9标准答案:D知识点解析:调用f(a,b)函数返回3,调用f(a,c)函数返回6,所以外层调用f(f(a,1)),f(a,c));即调用f(3,6)函数返回9。14、有以下程序intfun(intx[],intn){staticintsum=0,i;for(i=0;iA、50B、45C、60D、55标准答案:C知识点解析:在函数intfun(intx[],intn)的定义中,变量sum使用了static修饰符,这说明了变量sum为一个静态局部变量。由于在整个程序运行期间,静态局部变量在内存中的静态存储区中占据着永久的存储单元。即使退出函数之后,下次再进入该函数时.静态局部变量继续使用原来存储单元中原来的值。函数intfun(intx[],intn)的功能是求出数组x[]各个元素的和。所以在主函数中,调用函数Fun(a,5)后,变量sum=1+2+3+4+5=15,当再次调用Fun(b,4)后,变量sum=15+6+7+8+9=45.所以s=15+45=60。15、若有定义intw[3][5];,则以下不能正确表示该数组元素的表达式是()。A、*(&w[0][0]+1)B、*(*w+3)C、*(*(w+1))D、*(w+1)[4]标准答案:D知识点解析:A选项中*(&w[0][0]+1)表示w[0][1];B选项中*(*w+3)表示w[0][3];C选项中*(*(w+1))表示w[1][0];而D选项中*(w+1)[4]的正确写法是(*(w+1))[4],表示w[1][4],因此选择D选项。16、有以下程序#inclUde#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;iA、1,3,5,B、2,4,8,C、3,5,7D、3,6,9,标准答案:D知识点解析:函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。17、关于int*func(inta[10],intn);的叙述中正确的是()。A、说明中的a[10]写成a[]或*a效果完全一样B、形参a对应的实参只能是数组名C、func的函数体中不能对a进行移动指针(如a++)的操作D、只有指向10个整数内存单元的指针,才能作为实参传给a标准答案:A知识点解析:函数func为返回值为指针的函数,有两个形参,形参数组a为指针变量,保存实参数组的首地址,其元素个数由实参数组决定,因此说明中的a[10]可以写成a[]或*a。18、关于文件操作中的标高符“EOF”的叙述中正确的是()。A、EOF即NULLB、文本文件和二进制文件都可以用EOF作为文件结束标志C、EOF是在库函数文件中定义的符号常量D、对于文本文件,fgetc函数读入最后一个字符时,返回值是EOF标准答案:C知识点解析:EOF是在stdio.h库函数文件中定义的符号常量,其值等于一1。EOF用作文件结束标志,在二进制或者文本文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用fgetc函数,每读写一次,该指针均向后移动。19、有以下程序#includemain(){inta=5,b=1,t;t=(a<<2)|b;printf("%d\n",t);}程序运行后的输出结果是()。A、1B、11C、6D、21标准答案:D知识点解析:本题考查位运算,以及按位或操作,将a左移一位相当于是将a乘以了4,所以a<<2等于20,二进制表示为00010100,与b按位或得到00010101,即21,所以选项D正确。20、有以下程序,其中k的初值为八进制数#includemain(){intk=011;printf("%d\n",k++);}程序运行后的输出结果是A、12B、11C、10D、9标准答案:D知识点解析:本题主要考查基本数据类型和格式化输出函数printf。变量k的初值为011,表示8进制的11,十进制值为9,printf输出k++的值,++在k的后面表示先使用后自增,因此输出的值为9。21、以下不合法的字符常量是A、’\"’B、’\\’C、’\018’D、’\xcc’标准答案:C知识点解析:在C语言中,一个字符常量代表ASCⅡ字符集中的一个字符,在程序中用单引号把一个字符括起来用为字符常量。转义字符常量也是必须括在一对单引号内,以一个反斜线开头后跟一个特定的字符,用来代表某一个特定的ASCⅡ字符。在选项C中,’\018’是用八进制数来代表一个字符常量,所以其中的数字只能小于8,并不包括8。22、有以下程序#include<stdio.h>intfun(chars[]){char*p=s;while(*p=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序运行后的输出结果是A、6B、7C、1D、0标准答案:B知识点解析:函数fun的主要功能是计算字符串中实际字符的个数,因此主函数中调用。fun得到结果为7。23、下面描述中错误的是()。A、系统总体结构图支持软件系统的详细设计B、软件设计是将软件需求转换为软件表示的过程C、数据结构与数据库设计是软件设计的任务之一D、PAD图是软件详细设计的表示工具标准答案:A知识点解析:详细设计的任务是为软件结构图中而非总体结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节,所以A)错误。24、下列与队列结构有关联的是A、函数的递归调用B、数组元素的引用C、多重循环的执行D、先到先服务的作业调度标准答案:D知识点解析:队列的修改是依先进先出的原则进行的,D正确。25、有以下程序#includemain(){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、02356B、0235C、235D、2356标准答案:C知识点解析:k的值为5,逐个对case语句进行匹配,均不匹配,执行default下的语句n=0;k--;在执行case2:后面的空语句,与case4:后面的n+=2;k--;执行break语句跳出switch判断,打印n的值,即2。经过第一次循环后,k的值为3,然后进行k>0&&n<5条件判断为真,第二次执行循环体,执行case3:后面的n+=1;k--;再执行break语句跳出循环,此时打印n的值3,此时k的值为2。第三次执行循环体k的值为2,满足条件,执行case2:case4:后面的语句n+=2,k--,跳出循环体。打印n的值5。此时n不小于5了条件k>0&&n<5不成立了,所以结束循环。整个程序的打印结果为235。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、设数据结构B=(D,R),其中D={a,b,c,d,e,f}R={(f,8),(d,b),(e,d),(e,e),(a,c)}该数据结构为()。A、线性结构B、循环队列C、循环链表D、非线性结构标准答案:A知识点解析:数据的逻辑结构有两个要素:一是数据元素的集合,通常记为D;二是D上的关系,它反映了D中各数据元素之间的前后件关系,通常记为R。即一个数据结构可以表示成B=(D,R)。其中B表示数据结构。为了反映D中各数据元素之间的前后件关系,一般用二元组来表示。例如,假设a与b是D中的两个数据,则二元组(a,b)表示a是b的前件,b是a的后件。本题中R中的根结点为f,元素顺序为f→a→c→e→d→b,满足线性结构的条件。2、下列描述中正确的是A、线性链表是线性表的链式存储结构B、栈与队列是非线性结构C、双向链表是非线性结构D、只有根结点的二叉树是线性结构标准答案:A知识点解析:线性表的链式存储结构称为线性链表。线性表链式存储结构的基本单位称为存储结点,每个存储结点包括数据域和指针域两个组成部分。各数据元素之间的前后件关系是由各结点的指针域来指示的,指向线性表中第一结点的指针HEAD称为头指针,当HEAD=NULL时称为空表。栈、队列和双向链表是线性结构。树是一种简单的非线性结构。在树这种数据结构中,所有数据元素的关系具有明显的层次特征。二叉树是非线性结构。线性结构和非线性结构是从数据的逻辑结构角度来讲的,与该数据结构中有多少个元素没有关系,即使是空的二叉树也是非线性结构。3、下列四个叙述中,正确的是()。A、C程序中的所有字母必须小写B、C程序中的关键字必须小写,其他标识符不区分大小写C、C程序中的所有字母都不区分大小写D、C程序中的所有关键字必须小写标准答案:D知识点解析:C语言只规定所有的关键字必须小写,而标识符中的字母则既可以大写,也可以小写,但大小写是有区别的。例如,else是关键字,而ELSE可以作为标识符使用。4、深度为5的完全二叉树的结点数不可能是()。A、15B、16C、17D、18标准答案:A知识点解析:设完全二叉树的结点数为n,根据深度为k的二叉树至多有2k-1个结点,再根据完全二叉树的定义可知,2k-1-1<n≤2k-1。本题中完全二叉树的深度为5,则25-1-1<n≤25-1,15<n≤31。因此,结点数不能为15。5、下列叙述中错误的是()。A、在C语言中,对二进制文件的访问速度比文本文件快B、在C语言中,随机文件以二进制代码形式存储数据C、语句FILEfp;定义了一个名为fp的文件指针D、C语言中的文本文件以ASCII码形式存储数据标准答案:C知识点解析:在C语言中,文件指针实际上是指向一个结构体类型的指针,一般称这个结构体类型名为FILE,可以用此类型名来定义文件指针。定义文件类型指针变量的一般形式为:FILE*指针变量名;选项C中少了“*”,所以选项C错误。6、一棵二叉树中共有80个叶子结点与70个度为1的结点,则该二叉树中的总结点数为A、219B、229C、230D、231标准答案:B知识点解析:根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个,故总结点数=叶子节点数+度为2的节点数+度为1的节点数=80+79+70=229。7、在数据库管理技术发展的三个阶段中,没有专门的软件对数据进行管理的是()。A、文件系统阶段B、人工管理阶段C、文件系统阶段和数据库阶段D、人工管理阶段和文件系统阶段标准答案:B知识点解析:数据库管理技术的三个阶段是人工管理阶段、文件系统阶段和数据库系统阶段。人工管理阶段没有专门的软件对数据进行管理。8、以下选项中能用作数据常量的是()。A、115LB、0118C、1.5e1.5D、0115标准答案:A知识点解析:A选项中115L表示115是长整型数据,合法。B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B选项错误。C选项中e后面应该是整数,而不能是小数1.5,所以C选项错误。D选项中八进制常量应该是数字“O”开始,而不是字母“0”开始。9、设有某函数的说明为:int*func(inta[10],intn);则下列叙述中,正确的是()。A、形参a对应的实参只能是数组名B、说明中的a[10]写成a[]或*a效果完全一样C、func的函数体中不能对a进行移动指针(如a++)的操作D、只有指向10个整数内存单元的指针,才能作为实参传给a标准答案:B知识点解析:考查数组名作为函数参数。传递给形参的实参可以是数组名,还可以是指向该数组的指针变量,选项A错误;a[10]、a[]、*a做形参都是接受实参数组首地址,效果一样,选项B正确;数组名可以看作一个指针常量,对其进行自加自减运算相当于指针变量的自加自减,选项C错误;数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项D错误。故答案选B。10、以下叙述中正确的是()。A、C语言函数可以嵌套调用,例如:fun(fun(x))B、C语言程序是由过程和函数组成的C、C语言函数不可以单独编译D、C语言中除了main函数外,其他函数不可作为单独文件形式存在标准答案:A知识点解析:C语言程序是由函数组成的,所以B选项错误。C语言函数可以单独进行编译,所以C选项错误。每个C程序中必须包含一个main函数,但不一定是每个C程序文件中都必须有,用户单独编写的某个函数也可以存储为一个C程序文件,所以D选项错误。11、下列叙述中正确的是()。A、在switch语句中不一定使用break语句B、在switch语句中必须使用default语句C、break语句必须与switch语句中的ease配对使用D、break语句只能用于switch语句标准答案:A知识点解析:default语句在switch语句中可以省略,所以B选项错误;switch语句中并非每个case后都需要使用break语句,所以C选项错误;break语句还可以用于for等循环结构中,所以D选项错误。12、若有以下程序#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、youtoChina!B、toChina!C、meyoutoChina!D、China!标准答案:A知识点解析:程序中循环部分的主要功能是,在字符串b中寻找是否含有子串a,如果含有则退出,此时i为子串a在字符串b中第一次出现的位置。因此最后的输出函数则从第i个字符开始一直输出到字符串的末尾。13、下列叙述中错误的是()。A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中,大、小写字母代表不同标识标准答案:A知识点解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。14、有以下程序:#include<stdio.h>main(){charch[]="uvwxyz",*pc;pc=ch;prinff("%c\n",*(pc+5));}程序的运行结果是()。A、zB、0C、元素ch[5]的地址D、字符y的地址标准答案:A知识点解析:语句pc=ch;使得指针变量指向字符数组ch的首地址,即指向字符’u’,则pc+5指向的是字符向后移动5位,指向字符’z’,所以输出的*pc+5的值即为’z’,因此A选项正确。15、有以下程序:#include<stdio.h>#include<string.h>main(){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:字符串连接函数。执行完语句streal,(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选项正确。16、有以下程序段: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地址之差,即字符串长度。17、关于continue和break的叙述中正确的是()。A、当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并终止循环体的执行B、只能在循环体内和switch语句体内使用break语句C、continue语句的作用是:在执行完本次循环体中剩余语句后,终止循环D、在while语句和do一while语句中无法使用continue语句标准答案:B知识点解析:break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体,但一次只能跳出或终止一层switch语句或循环,因此,当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体,并不能终止循环体的执行。continue语句的作用是结束本次循环,在while和dowhile循环中.continue语句使得流程直接跳到循环控制条件的测试部分,判断是否会进入下一次循环。18、C语言程序的模块化通过以下哪个选项来实现A、变量B、程序行C、函数D、语句标准答案:C知识点解析:用函数作为程序模块以实现C程序的模块化,程序有多个函数构成,每个函数可以实现一个具体的功能,实现程序的模块化设计。19、有以下定义语句,编译时会出现编译错误的是A、chara=’\x2d’;B、chara=’\n’;C、chara=’a’;D、chara="aa";标准答案:D知识点解析:D选项中将字符串常量"aa"赋给字符变量a是错误的。20、若变量已正确定义并赋值,以下不能构成C语句的选项是A、A=a+b;B、B++;C、a=a+bD、A?a:b;标准答案:C知识点解析:C语言语句的表示为分号,不加分号的表达式不能看成C语句。21、以下叙述中正确的是()。A、字符常量需要用单引号括起来B、字符常量在内存中占2个字节C、转义字符要用双引号括起来,以便与普通的字符常量区分开D、字符常量是不能进行关系运算的标准答案:A知识点解析:字符常量是由单引号括起来的ASCII码表中的字符,特殊的转义字符也要用单引号括起来表示其为一个字符,字符常量在内存中占1个字节,参与运算的时候,通常使用该字符的ASCII码进行计算。答案选A。22、若变量均已正确定义并赋值,以下合法的C语言赋值语句是A、x=n%2.5:B、x+n=i;C、x=5=4+1;D、x=y=5;标准答案:D知识点解析:选项D)的含义是把关系表达式y==5的值赋给变量x。所以这是一条正确的赋值语句。因为赋值运算符左侧的操作数必须曩=一个变量,而不能是表达式或者常量。因为求余运算符“%”两侧的运算对象都应当是整型数据。23、以下叙述中正确的是A、在C程序中的八进制和十六进制,可以是浮点数B、八进制数的开头要使用英文字母o,否则不能与十进制区分开C、整型变量可以分为int型、short型、long型和unsigned型四种D、英文大写字母x和英文小写字母x都可以作为二二进制数字的开头字符标准答案:C知识点解析:整型变量分为以下4种类型:①基本型:以int表示。②短整型:以shortint表示,或以short表示。③长整型:以longint表示,或以long表示。④无符号型:以unsignedint表示,选项C)正确,实型常量仅有十进制表示形式,八进制以数字0开头,十六进制开头为0x或者0X,不是二进制。24、设有定义:intn1=0,n2,*p=n2,*q=n1;,以下赋值语句中与n2=n1;语句等价的是A、*p=*q;B、p=q;C、*p=n1;D、p=*q;标准答案:A知识点解析:本题考查指针的使用。指针p和q分别指向变量n2和n1,n2=n1可以用指针来代替,即*p代替n2,*q代替n1。25、若有以下程序段doublex=5.16894;printf("%f\n",(int)(x*1000+0.5)/(double)1000);则程序段的输出结果是A、5.175000B、5.169000C、5.170000D、5.168000标准答案:B知识点解析:fint)(x*1000+0.5)/(double)1000表达式功能,保存数据x的后三位小数,把第四位四舍五入。26、以下选项中非法的字符常量是A、’\019’B、’\65’C、’\xff’D、’\101’标准答案:A知识点解析:本题考查字符型常量。选项A)错误,使用了转义字符“\”,019以0开始表示8进制,8进制数字的范围是0-7,没有9;选项B)、C)和D)正确。27、在以下给出的表达式中,与while(E)中的(E)不等价的表达式是()。A、(E>0||E<0)B、(E==0)C、(!E==0)D、(E!=0)标准答案:B知识点解析:while语句中条件表达式E的值不为0即为真,认为满足条件,所以与B选项中表达式的含义正好相反,选择B选项。28、有以下程序,程序运行后的输出结果是#include#defineS(x)4*(x)*x+1voidmain(){intk=5,j=2;printf("%d\n",S(k+j));}A、197B、143C、33D、28标准答案:B知识点解析:这道题涉及到带参数的宏的定义和替换这个知识点。在程序中定义了带参数的宏S(x),当在主函数中用参数k+i调用宏S时,根据宏替换的原则,则S(k+j)=S(5+2)=4*7*5+2+1=143。29、在关系数据库中,用来表示实体间联系的是A、属性B、二维表C、网状结构D、树状结构标准答案:B知识点解析:关系模型实体间的联系采用二维表来表示,简称表。选项C为网状模型实体间的联系,选项D为层次模型实体间的联系,选项A属性刻画了实体。30、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#include<stdio-h>#defineN10voidfun(intx[N]){inti=0;while(i<N)scanf("%d",_______);}在程序中下划线处应填入的是A、x+iB、x[i+1]C、x+(i++)D、x[++i]标准答案:C知识点解析:本题考查数组和scanf函数的使用。程序通过while循环来给数组元素赋值,赋值语句通过调用scanf函数来实现。scanf函数从键盘接收数据,第二个参数是数据保存的地址,因此选项B)和选项D)不是地址,错误。选项A)和选项C)是地址,但是选项A)的i值不会发生变化,循环体内每次都是给同一个元素赋值,不满足要求,选项C)正确。31、有以下程序段intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k:执行程序段后,k的值是A、3B、2C、1D、0标准答案:B知识点解析:本题主要考查条件表达式。k=a<b?b:a中a<b为真,因此k的值为b,即k=2。k=k>c?c:k中k>c为假,k的值为2。32、有以下定义:inta;longb;doublex,y;则以下选项中正确的表达式是A、a=x<>yB、a%(int)(x-y)C、(a*y)%bD、y=x+y=x标准答案:B知识点解析:C语言中没有"<>"运算符,所以A选项错误,"%"运算符的两个操作值必须为整型数据,所以B选项正确,a*y的结果为double型,所以C选项错误?不能将值赋给像x+y这样的表达式,所以D选项错误。33、设变量己正确定义,则以下能正确计算f=n!的程序段是A、f=0;for(i=1;i<=n;i++)f*=i;B、f=1;for(i=1;i<n;i++)f*=i;C、f=1;for(i=n;i>1;i++)f*=i;D、f=1;for(i=n;i>=2;i--)f*=i;标准答案:D知识点解析:本题主要考查for循环的使用。题目要求计算阶乘n!,通过for循环来实现,循环变量i可以从1到n(包括n)或者从n到1,在循环体内做累乘。选项A)中,累乘变量的初值为0,最终计算结果也为0;选项B)中循环次数为n-1次,累乘结果少乘了n;选项C)是死循环;选项D)正确。34、已有定义:chara[]="xyz",b[]={’x’,’y’,’z’);,以下叙述中正确的是A、数组a和b长度相同B、a数组长度小于b数组长度C、a数组长度大于b数组长度D、上述说法都不对标准答案:C知识点解析:本题考查字符数组的定义。chara[]="xyz",b[]={’x’,’y’,’z’}:定义了两个字符数组a和b,a数组存放的是一个字符串,字符串以“/0”作为结束标志,数组a的长度必须加上结束符长度1,因此数组a的长度为4。数组b中有三个元素,长度为3。35、若有以下程序#include<stdio.h>intk=7;voidf(int**s){int*t=&k;*s=t;printf("%d,%d,%d,",k,*t,**s);}main(){inti=3,*p=&i,**r=&p;f(r);printf("%d,%d,%d\n",i,*p,**r);}则程序的输出结果是A、3,7,7,7,7,7B、7,7,7,3,3,3C、3,3,3,7,7,7D、7,7,7,3,7,7标准答案:D知识点解析:本题考查了二级指针,二级指针可以保存一级指针的地址。主函数中p指向i,r指向p,函数调用后s指向p,在f函数中t指向全局变量k=7,s指向t,同时s保存了实参p的地址,此时p也指向t,输出三个7,流程转到主函数,i的值为3,p以及r的值为7。36、设有定义语句int(*f)(int);则以下叙述正确的是()。A、f是指向函数的指针变量,该函数具有一个int类型的形参B、f是基类型为int的指针变量C、f是指向int类型一维数组的指针变量D、f是函数名,该函数的返回值是基类型为int类型的地址标准答案:A知识点解析:(*f)(int)中f为函数指针变量,可以指向任何已经定义的合法的函数,该函数带有一个int类型的形参,所以答案选A。37、有以下程序#includevoidfun(int*a,int*b){int*c;c=a;a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y;fun(p,q);printf("%d,%d,",*p,*q);fun(&x,&y);printf("%d,%d\n",*p,*q);}程序运行后的输出结果是()。A、3,5,3,5B、3,5,5,3C、5,3,3,5D、5,3,5,3标准答案:A知识点解析:函数的参数传递过程中,参数的传递是单向的,形参只是实参的一个副本,如果形参和实参为两个地址,形参指针指向的变化不能影响到实参指针的指向。所以该函数fun()调用结束后并不能改变指针变量p、q的指向,所以输出结果均为3、5,答案选A。38、若有定义typedefint*T;Ta[10];则a的定义与下面哪个语句等价A、int*a[10];B、int(*a)[10];C、int*a;D、inta[10];标准答案:A知识点解析:typedef的主要功能是为存在的类型命名,后面的代码中可以利用该新定义的类型名定义变量,题目中定义了整型指针类型T,而后利用T定义了整型指针数组a,含有10个元素,选项A)中定义了整型指针数组a,选项B)定义了一个指向一维数组的指针a,选项C)定义指针变量,,而选项D)为定义整型数组最常用的形式,数组a中可以存放10个数据元素。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、ChinangB、ChinaC、ChinaBeijingD、BeijingChina标准答案:A知识点解析:语句"fwrite(s2,7,1,pf);"将指针s2指向的7个字节的数据写入到abc.dat文件中,而后将文件指针fp重定向指向文件首,再执行语句"fwrite(s1,5,1,pf);"时将s1指向的5个字符写入当前文件,原先写入的数据会被部分覆盖,最后文件中的内容为Chinang,答案选A。40、有以下程序#includevoidf(int*p,int*q);main(){intm=1,n=2,*r=&m;f(r,&n);printf("%d,%d",m,n);}voidf(int*p,int*q){p=p+1;*q=*q+1;}程序运行后的输出结果是A、2,3B、1,3C、1,4D、1,2标准答案:B知识点解析:在f(int*p,int*q)函数中,执行p=p+1是将p所对应的地址加1,而*q=*q+1是将q所指向的n的地址所对应的值加1,所以m的得知所对应的值没有变,而n的值则为3了。因此B选项正确。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n—1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序标准答案:D知识点解析:除了堆排序算法的比较次数是O(nlog2n)外,其他的都是n(n—1)/2。2、若二维数组a有m列,则在a[i][j]前的元素个数为()。A、j*m+iB、i*m+jC、j*m+i+1D、i*m+j+1标准答案:B知识点解析:二维数组的元素可以看成是按矩阵形式存放的,总是先存放第一行的元素,再存放第二行的元素。数组第一维的下标是i,说明它前面还有i行,有i*m个元素,数组第二维的下标是i,说明它前面还有j列,有j个元素,所以共有i*m+j个元素。3、按照C语言规定的用户标识符命名规则,不能出现在标识符中的是A、连接符B、大写字*C、数字字符D、下划线标准答案:A知识点解析:在C语言中,合法标识符的命令规则是:标识符可以由字*、数字或下划线组成,并且第一个字符必须为字*或下划线。在C语言‘的标识符中,大写字*和小写字*被认为是两个不同的字符。选项A是连字符,不在C语言规定的命名变量标识符的范围内。4、下列叙述中正确的是()。A、对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)标准答案:A知识点解析:本题主要考查的知识点为查找技术。顺序查找的使用情况:①线性表为无序表;②表采用链式存储结构。二分法查找只适用于顺序存储的有序表,并不适用于线性链表。5、有以下程序:#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。6、以下叙述中正确的是A、每个后缀为.c的C语言源程序都应该包含一个main函数B、在C语言程序中,main函数必须放在其他函数的最前面C、每个后缀为.c的C语言源程序都可以单独进行编译D、在C语言程序中,只有main函数才可单独进行编译标准答案:C知识点解析:每一个C语言的文件或函数都可以单独编译,但只有main函数的才可以执行。7、以下叙述中正确的是A、C程序书写格式严格,要求一行内只能写一个语句B、C程序书写格式自由,一个语句可以写在多行上C、C程序中的注释只能出现在程序的开始位置和语句的后面D、用C语言编写的程序只能放在一个程序文件中标准答案:B知识点解析:本题主要考查的是C语言结构中的源程序书写格式这个知识点,在C浯言中注释部分对程序的运行结果不产生任何影响,它可以出现在任意位置:C语言书写自由,一行内可以写多个语句,一个语句可以写在多行上;由于C语言编写的程序有很好的移植性,可以放在多个程序文件中。8、s1和s2已正确定义并分别指向两个字符串。若要求:当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是A、if(s1>s2)S;B、if(strcmp(s1,s2))S;C、if(strcmp(s2,s1)>0)S;D、if(strcp(s1,s2)>0)S;标准答案:D知识点解析:字符串标记使用strcmp函数,该函数有两个参数分别是需要比较大小的两个字符串s1和s2,如果s1大于s2则返回值大于0,如果s1小于s2则返回值小于0,否则s1和s2相同返回0。题目要求s1大于s2时执行语句s,因此strcmp(s1,s2)的返回值大于0时执行s。9、有以下程序,程序运行后的输出结果是main(){chara=’H’;a=(a>=’A’&&a<=’Z’)?(a+32):a;pfintf("%c\n",a);}A、HB、AC、hD、a标准答案:C知识点解析:表达式a=(a>=’A’&&a<=’Z’)?(a+32):a,为条件表达式,如果a是大写字符,则转换为小写字符存放到a中,否则不变。10、关于数据库管理阶段的特点,下列说法中错误的是A、数据独立性差B、数据的共享性高,冗余度低,易扩充C、数据真正实现了结构化D、数据由DBMS统一管理和控制标准答案:A知识点解析:数据库系统阶段特点:数据的管理者:数据库管理系统;数据面向的对象:整个应用系统;数据的共享程度:共享性高,冗余度小;数据的独立性:具有高度的物理独立性和逻辑独立性;数据的结构化:整体结构化,用数据模型描述;数据控制能力:由数据库管理系统提供数据安全性、完整性、并发控制和恢复能力。所以选项A正确。11、以下选项中,合法的是A、charname[10];name="char";B、charstr1[5]="pass",str2[6];str2=str1;C、charstr3[]={’d’,’e’,’b’,’u’,’g’,’\0’};D、charstr4;str4="helloworld";标准答案:C知识点解析:本题考查字符数组。选项A定义了一个字符数组name,接下来直接给name赋值字符串是错误的;选项B定义了两个字符串数组str1和str2,str1和str2表示两个字符串的首地址,直接把str1赋值给s仃2错误;选项C是正确的;选项D定义了一个字符变量str4,给字符变量赋值字符串是错误的。12、以下定义数组的语句中错误的是A、intnum[][3]={{1,2},3,4,5,6};B、intnum[]={1,2,3,4,5,6};C、intnum[][4]={1,2,3,4,5,6};D、intnum[2]]4]={{1,2),{3,4),{5,6}};标准答案:D知识点解析:在选项D的数组定义中,赋值号左边定义了一个2行4列的二维数组,而在右边定义了一个3行2列的二维数组。13、有以下程序voidfun(intn,int*s){intf;if(n==1)*s=n+1;else{fun(n-1,&f);*s=f;))main(){intx=0;fun(4,&x);printf("%d\n",x);}程序运行后的输出结果是A、1B、3C、4D、2标准答案:D知识点解析:函数fun为递归调用函数,如果n的值为1,那么后面形参指向的空间存放n+1,否则继续计算fun(n-1)的值。调用分析过程如下:fun(4,&x)-→fun(3,&x)-→fun(2,&x)-→fun(1,&x)在回归的过程中,对于x内的数据并没有改动。14、有以下程序#includemain(){inti=1,j=3;printf("%d,",i++);{inti=0;i+=j*2;printf("%d,%d,",i,j);}printf("%d,%d\n",i,j);}程序运行后的输出结果是()。A、1,6,3,2,3B、1,6,3,1,3C、1,6,3,6,3D、1,7,3,2,3标准答案:A知识点解析:不同作用域内若定义有同名的局部变量,则在其中一个局部变量的作用域内,其他同名的局部变量会被"屏蔽",规则一般是作用域小的变量"屏蔽"作用域大的变量。在用{}引起来的复合语句块中,i值为6,输出结果为6,3,而在语句块外,i为2,输出结果为2,3,所以答案选A。15、有以下程序main(){chara[5][10]={"one","two","three","four","five"};inti,j;chart:for(i=0;i<4;i++)for(j=i+1;j<5;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、fwoB、owoC、twoD、fix标准答案:A知识点解析:这个程序的执行过程是当i=0时,j=1,a[0][0]=0<a[1][0]=t;不置换;当i=1时,j=2,a[1][0]=t=a[2][0]=t;不置换;当i=2时,j=3,a[2][0]=t>a[3][0]=f;置换a[2][0]=f,a[3][0]=t;此时,a[2][0]=f,a[1][0]=t,再置换a[2][0]=t,a[1][0]=f,;当i=3时,j=4,a[3][0]=f=a43][0]=f;不置换;所以a[1]的结果为fwo。16、以下叙述中正确的是A、指针变量只能通过求地址运算符(&)来获得地址值B、语句“p=NULL;”与“p=\0;”是等价的语句C、“int*p1;int**p2;int*p3;”都是合法的定义指针变量的语句D、语句p=NULL;执行后,指针p指向地址为0的存储单元标准答案:C知识点解析:指针变量定义形式为:类型*旨针变量名;其中*号的个数决定了几级指针,指针变量赋地址值的方式有3种方式:①通过求地址运算符(&)获得地址值;②通过指针变量获得地址值;③通过标准函数获得地址值。另外NULL是在stdio.h头文件中定义的预定义符。NULL的代码值为0。可以给指针变量赋NULL值。例如p=NULL;赋值语句,称p为空指针。这条语句等价于p=’\0’;或p=0;这时,指针p并不是指向地址为0的存储单元,而是具有一个确定的值——“空”。17、有以下程序voidfun2(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()函数之前定义了全局字符变量a和b。这两个变量的作用域是从其定义处到整个程序结束。在fun1()函数之内定义了两个变量a和b,并且分别初始化为字符’C’和’D’。在C语言中,若全局变量和某个函数中的局部变量同名,则在该函数中此全局变量被屏蔽,在该函数内访问的是局部变量,与同名的全局变量不发生任何关系。所以在主函数中,执行fun1()后,变量a、b的值分别等于’C’、’D’,打印输出CD,接着执行fun2(’E’,’F’)语句,变量a、b的值变为’E’、’F’并输出。18、若fp已定义为指向某文件的指针,且没有读到该文件的末尾,则C语言函数feof(fp)的函数返回值是A、0B、非0C、-1D、EOF标准答案:A知识点解析:feof用来判断文件是否结束。如果遇到文件结束,函数feof(fp)的值为1,否则为0。19、有以下程序#include#includevoidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1;while(p1A、654321B、116611C、161616D、123456标准答案:A知识点解析:函数fun()中w指向的为一个字符串的首地址,该函数中将p1指向字符串首地址,而将p2指向该字符串第m个元素,然后用while()循环实现这一段字符串首尾对应元素的互换,所以函数fun()的功能是把w指向的字符串从前m个字符逆序排列,输出的答案选A。20、设有定义:struct{charmark[12];intnuml;doublenum2;}t1,t2;若变量均已正确赋初值,则以下语句中错误的是A、t2.hum1=t1.num1;B、t2.mark=t1.mark;C、t1=t2;D、t2.num2=t1.num2;标准答案:B知识点解析:这个题目主要涉及到结构体的定义与赋值操作。根据题意结构体变量t1,t2的成员变量mark是字符数组,对于字符数组之间的赋值操作应该使用循环语句对每个字符进行赋值,而选项B是用数组名实现字符数组之间的赋值操作,是错误的。21、下面关于“EOF”的叙述,正确的是A、EOF的值等于0B、文本文件和二进制文件都可以用EOF作为文件结束标志C、EOF是在库函数文件中定义的符号常量D、对于文本文件,fgetc函数读入最后一个字符时,返回值是EOF标准答案:C知识点解析:EOF是在stdio.h库函数文件中定义的符号常量,其值等于-1。EOF用作文件结束标志,在二进制或者文本文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用fgetc函数,每读写一次,该指针均向后移动,22、以下叙述中错误的是A、用typedef可以说明一种新的类型名B、typedef的作用是用一个新的标识符来代表已存在的类型名C、可以用typedef说明的新类型名来定义变量D、typedef说明的新类型名必须使用大写字母,否则会出编译错误标准答案:D知识点解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,新类型可以使用小写,所以D选项错误。23、有以下程序#includemain(){inty=10;wh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论