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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷24(共9套)(共270题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、下列叙述中正确的是()。A、在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B、在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C、在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化D、以上说法都不正确标准答案:C知识点解析:栈是先进后出的数据结构,在整个过程中,栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作,所以选择C选项。2、以下叙述正确的是A、C语言程序是由过程和函数组成的B、C语言函数可以嵌套调用,例如:fun(fun(x))C、C语言函数不可以单独编译D、C语言中除了main函数,其他函数不可作为单独文件形式存在标准答案:B知识点解析:在C语言中,允许函数的嵌套调用,即递归调用。在C语言中不存在过程的概念,在C语言中函数允许单独编译,可以作为单独的文件形式存在。3、对下列二叉树进行中序遍历的结果是A、ACBDFEGB、ACBDFGEC、ABDCGEFD、FCADBEG标准答案:A知识点解析:本题考查二叉树的遍历,中序遍历首先遍历左子树,然后访问根节点,最后遍历又子树,选A。4、以下选项中可用作C程序合法实数的是A、3.0e0.2B、E9C、.1e0D、9.12E标准答案:C知识点解析:C程序的合法实数有两种表示形式,一种是小数形式,另一种是指数形式,对于用指数形式表示的实数来说,需要沣意的是字*e或E之前必须要有数字,且字*e或E后面的指数必须为整数。5、结构化程序设计中,下面对goto语句使用描述正确的是()。A、禁止使用goto语句B、使用goto语句程序效率高C、应避免滥用goto语句D、以上说法都不对标准答案:C知识点解析:结构化程序设计中,应尽量避免使用GOTO语句,但不是禁止使用,所以选择C。6、程序流程图中带有箭头的线段表示的是()。A、图元关系B、数据流C、控制流D、调用关系标准答案:C知识点解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择C。7、有以下程序#includemain(){inta=3;printf("%dkn",(a+=a-=a*a));}程序运行后的输出结果是A、9B、0C、3D、-12标准答案:D知识点解析:对于表达式a+=a-=a*a相当于a=a-(a*a),然后计算a=a+a,a的初值为3,则表达式的值为-12。8、有以下程序:#include<stdio.h>main(){inta=6,b=7,m=1;switch(a%2){case0:m++;break;case1:m++:switch(b%2){defaut:m++;case0:m++;break;}}printf(’’%d\n’’,m);}程序运行后的输出结果是()。A、1B、2C、3D、4标准答案:B知识点解析:本题考查switch语句。因为“a=6”,所以“a%2=0”,因此第一个switch语句,执行“case0”,将m加1,遇到break语句跳出switch语句,输出m值为2。9、设栈的存储空间为S(1:50),初始状态为top=0。现经过一系列正常的入栈与退栈操作后,top=51,则栈中的元素个数为A、不可能B、50C、0D、1标准答案:A知识点解析:栈是向上增长的,每次压入一个元素,栈的TOP指针向上移动一位,即top-1。对于这个题目,由于top初始值等于0,此时入栈一个元素,top值减1,即0-1=-1,发生下溢错误,所以选项A正确。10、以下选项中,当x为大于1的奇数时,值为0的表达式是A、x/2B、x%2=0C、x%21=0D、x%2=1标准答案:B知识点解析:因为x的值为大于1的奇数,所以x除以2的余数等于1。所以选项B等于关系表达式的结果为假,即等于0。11、有以下稗宇:#includemain(){inta=1,b=2,c=3,x;x=(a^b.&c:printf(“%d\n”,x);}程序的运行结果是()。A、3B、1C、2D、0标准答案:A知识点解析:本题考查位运算符以及相关运算。^为按位或,&为按位与,那么a^b为3,再与c按位与仍然为3,所以答案为A选项。12、以下不合法的数值常量是()。A、8.0E0.5B、1e1C、011D、Oxabcd标准答案:A知识点解析:A选项中E后面的指数必须为整型数据,所以错误。C选项中011表示的是八进制常量,0xabcd表示的是十六进制常量。13、以下选项中不能作为C语言合法常量的是()。A、O.1e+6B、’cd’C、’’\a’’D、’\011’标准答案:B知识点解析:要想表示字符串常量,应该用双引号表示,即’’ed’’,单引号用于表示字符常量,所以B选项中的表示方法错误。14、若有定义:inta,b;通过语句scanf(’’%d;%d’,&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是A、3.5B、35C、3;5D、35标准答案:C知识点解析:在采用scanf这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,存两个整数之间加分号输入。15、下列叙述中错误的是A、循环队列空的条件是队头指针与队尾指针相同B、若二叉树没有叶子结点,则为空二叉树C、带链栈的栈底指针是随栈的操作而动态变化的D、若带链队列中只有一个元素,则队头指针与队尾指针必定相同标准答案:A知识点解析:初始化建空队时,令front=rear=0,当队空时:front=rear;当队满时:front=rear亦成立。因此,只凭等式front=rear无法判断队空还是队满。有两种方法处理上述问题:①另设一个标志位以区别队列是空还是满;②少用一个元素空间,约定以“队列头指针front在队尾指针rear的下一个位置上”作为队列“满”状态的标志。即:队空时:front=rear;队满时:(rear+1)%maxsize=front。所以选项A正确。16、以下程序:#include<stdio.h>#include<string.h>rnain(){Charstr[]=’’abcd\n\123\xab’’;printf(’’%d’’,strlen(str));}运行后的输出结果是()。A、10B、9C、7D、14标准答案:C知识点解析:本题考查字符串的长度,需注意转义字符串,例如,“\n”表示换行,为一个长度,“\123”表示3位八进制数123表示的字符,为一个长度,“\xab”表示二位十六进制数ab表示的字符,也为一个长度。17、在学生管理的关系数据库中,存取一个学生信息的数据单位是A、文件B、数据库C、字段D、记录标准答案:D知识点解析:本题考查关系数据库中,数据单位的相关概念。文件是指存储在外部介质上的数据的集合。数据库是存储在计算机存储设备上,结构化的相关数据集合。它不仅包括描述事物的数据本身,而且还包括相关事物之间的联系。在数据库中,表的“行”称为“记录”,“列”称为“字段”。由此可得,题中存取一个学生信息的数据单位为记录。18、在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是A、并B、交C、投影D、笛卡儿乘积标准答案:B知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组所组成,记为R∩S。形式定义如下:R∩S≡{t∈R∧t∈S}=R-(R-s)。所以不改变关系表中的属性个数,但能减少元组个数的是关系表之间的交操作。19、有以下程序main(){inta=3;do{printf(’’%d,’’,a-=2);}while(!(-a));printf(’’\n’’);}程序运行后的输出结果是A、1,B、1,-2,C、3,0,D、1,0标准答案:B知识点解析:循环体执行两次。首先输出a=1,然后判断表达式!(一a),a为0,循环条件表达式值为1,执仃第二次循环体,输出a=-2。判断循环条件表达式值为0,循环退出。20、有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为A、并B、自然连接C、笛卡尔积D、交标准答案:D知识点解析:关系R与S经交运算后所得到的关系是由那些既在R内又在S内的有序组组成的,记为R∩S。21、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是A、形参只是形式上的存在,不占用具体存储单元B、函数的形参和实参分别占用不同的存储单元C、同名的实参和形参占同一存储单元D、函数的实参和其对应的形参共占同一存储单元标准答案:B知识点解析:在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。在调用函数时,给形参分配临时存储单元,并将实参对应的值传递给形参,在被调用函数中对形参存储单元中的值进行运算,最后通过return语句把函数值返回调用函数。当调用结束后,形参单元被释放,实参单元仍保留并维持原值。22、以下选项中不能用作C程序合法常量的是A、1.234B、’\123’C、123D、\x7G标准答案:A知识点解析:本题考查C语言中的常量。选项A)错误,多了逗号;选项B)是字符常量:选项C)是整型常量;选项D)是字符常量。23、以下叙述中错误的是A、预处理命令行的最后不能以分号表示结束B、C程序对预处理命令行的处理是在程序执行的过程中进行的C、#defineMAX是合法的宏定义命令行D、在程序中凡是以“#”开始的语句行都是预处理命令行标准答案:B知识点解析:预处理命令行是以“#”开始的语句,预处理命令行的最后不能以分号表示结束,预处理命令行。其中宏定义的字符替换的定义格式为:#define标识符字符串,预处理命令行是在系统刘源程序进行编译之前进行处理的,不是在程序执行的过程中。24、数据库管理系统是A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统标准答案:B知识点解析:数据库管理系统是数据库的结构,它是一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等。25、以下叙述中正确的是A、在scanf函数的格式串中,必须有与输入项一一对应的格式转换说明符B、只能在printf函数中指定输入数据的宽度,而不能在scanf函数中指定输入数据占的宽度C、scanf函数中的字符串,是提示程序员的,输入数据时不必管它D、复合语句也被称为语句块,它至少要包含两条语句标准答案:A知识点解析:输入函数的调用格式:scanf(格式控制,输入项1,输入项2,…)格式控制的主要作用是指定输入时的数据转换格式,格式串中,必须含有与输入项一一对应的格式转换说明符选项A)正确,在scanf。函数的格式字符前可以加入一个正整数指定输入数据所占的宽度.但不可以用实数指定小数位的宽度,选项B)错误,scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,因此若想在屏幕上输出提示信息,应该首先使用printf函数输出,选项C)错误,复合语句还可以是空语句昵,并没有规定语句条数,选项D)错误。26、有以下程序:#include<stdio.h>yoidfun(char*c){while(*c){if(*c>=a’a’&&*c<=’z’)*c=*c=*(*’a’-’A’);C++;}}yoidmain(){chars[81];gets(s);fun(s);puts(s);}当执行程序时从键盘上输入HelloBeijing<回车>,则程序的输出结果是A、HELLOBEIJINGB、HelloBeijingC、helloBeijingD、hELLOBeijing标准答案:A知识点解析:子函数*fun的功能是把小写字*转换成人写字*,所以程序的输出结果为选项A。27、有以下程序main(){inti=5;do{if(i%3=1)if(i%5==2){printf("*%d",i);break;}i++;}while(i!=0);printf("\n"),}程序的运行结果是A、*3*5B、*5C、*7D、*2*6标准答案:C知识点解析:由于循环变量i的初值等于5,所以第一、二次进入do…while循环语句时,条件语句if(i%3==1),if(i%5==2){printf(“*%d”,i);break;不执行,只执行i++语句。当i=7时,满足条件语句if(i%3==1),if(i%5==2){printf("*%d,"i);break;},所以输出*7,结束循环。28、若变量己正确定义,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其输出结果是A、0,0B、1.1C、0,1D、程序进入无限循环标准答案:C知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语句。②计算while后一对圆括号中表达式的值。当值为非0时,转去执行步骤①:当值为0时,执行步骤③。③退出do…while循环。对于本题变量i的初始值等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。再判断while后面括号中表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为l,所以再次输出i的值“1”。29、有以下程序main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("a=%d,b=%d\n",a,b);}程序的运行结果是A、a=2,b=2B、a=1,b=1C、a=1,b=0D、a=2,b=1标准答案:D知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入ease1中进行嵌套判断,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。30、程序流程图中带有箭头的线段表示的是()。A、图元关系B、数据流C、控制流D、调用关系标准答案:C知识点解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择C)。31、下列条件语句中,输出结果与其他语句不同的是A、if(a==0)printf("%d\n",x);elseprintf("%d\n",y);B、if(a==0)printf("%d\n",y);elseprintf("%d\n",x);C、if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);D、if(a)printf("%d\n",x);elseprintf("%d\n",y);标准答案:A知识点解析:选项B、C、D这三条语句都是在变量不等于0的情况下,输出x;等于0的情况下输出y,而选项A则正好相反。32、有以下程序#includevoidf(int*q){inti=0;for(;i<5;i++)(*q)++;}main(){inta[5]={1,2,3,4,5},i;f(a);for(i=0;i<5;i++)printf("%d,",a[i]);}程序运行后的输出结果是()。A、6,2,3,4,5,B、2,2,3,4,5,C、1,2,3,4,5,D、2,3,4,5,6,标准答案:A知识点解析:函数f的功能是循环执行语句"(*q)++;"五次,而该语句的执行过程是获取指针p指向的数据并自加,由于指针p没有移动,所以每次获取的都是数组a第一个元素的值,自加五次之后,值为6,数组的其他元素没有变化,所以答案选A。33、假定已建立以下链表结构,且指针p和q已指向如图所示的节点:则以下选项中可将q所指节点从链表中删除并释放该节点的语句组是A、p=q->next;free(q);B、p=q;free(q);C、(*p).next=(*q).next;flee(p);D、p->next=-q>next;free(q);标准答案:D知识点解析:本题考查了在线性链表删除一个节点的方法,要删除q所指向的节点,只需要把q所指向的节点的前一个节点中的后继指针指向q所指向的节点的下一个节点即可,即p->next=q->next。再释放q所指向的节点,即free(q)。34、有下列程序:#include<stdio.h>#defineN5#defineMN+1#definef(x)(x*M)main(){inti1,i2;i1=f(2);i2=f(1+1);printf("%d%d\n",i1,i2);}程序的运行结果是A、127B、1212C、1111D、117标准答案:D知识点解析:在本题中,定义了3个宏定义语句,分别是:#defineN5、#defineMN+5和#definef(x)(x*M),所以根据C语言的宏替换规则,我们可知,f(2)=2*N+1=2*5+1=11,f(1+1)=1+1*N+1=1+1*5+1=7。35、若变量已正确定义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选项正确。36、以下结构体类型说明和变量定义中正确的是A、structREC;{intn;charc;};RECt1,t2;B、typedefstruct{intn;charc;}REC;RECt1,t2;C、typedefstructREC;{intn=0;charc=’A’;}t1,t2;D、struct{intn;charc;}REC;RECt1,t2;标准答案:B知识点解析:本题考查结构体的相关知识,选项A中structREC后面不能有分号,C选项中typedefstructREC的后面也不能有分号,选项D中REC已经是结构体变量,不能当做结构体类型来使用。37、以下选项中合法的标识符是A、1__B、1-1C、1_1D、_11标准答案:D知识点解析:C语言中的标识符由下划线、字母和数字组成,且必须以下划线或字母开始,所以只有D选项正确。38、若有以下程序#include#includetypedefstructstu{charname[10],gender;intscore;}STU;voidf(char*p){strcpy(p,"Qian");}main(){STUa={"Zhao",’m’,290},b;b=a;f();b.gender=’f’;b.score=350;printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}则程序的输出结果是A、Zhao,m,290,Qian,f,350B、Zhao,m,290,Zhao,m,290C、Qian,f,350,Qian,f,350D、Zhao,m,290,Zhao,f,350标准答案:A知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,b的name会重新赋值为Qian,选项A正确。39、以下叙述中正确的是A、数组下标的下限是1B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、charc1,c2,*c3,c4[40];是合法的变量定义语句标准答案:D知识点解析:数组下标的下限是0。因此D选项正确。40、数据库管理系统是A、操作系统的一部分B、在操作系统支持下的系统软件C、一种编译系统D、一种操作系统标准答案:B知识点解析:数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中数据组织、数据操纵、数据维护、控制及保护和数据服务等。是一种在操作系统之上的系统软件。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、下列叙述中正确的是()。A、栈与队列都只能顺序存储B、循环队列是队列的顺序存储结构C、循环链表是循环队列的链式存储结构D、以上说法都不对标准答案:B知识点解析:栈和队列都可以采用链式存储结构,选项A)错误。队列的顺序存储结构一般采用循环队列的形式,所以循环队列是队列的顺序存储结构,选项B正确,选项C)错误。答案选B)。2、已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是A、c=(’A’+c)%26-’a’B、c=C+32C、c=C-’A’+’a’D、c=(C-’A’)%26+’a’标准答案:A知识点解析:由题意可知,小写字符a和大写字符A的ASCⅡ代码相差为32,所以选项C能将大写字符C的ASCII代码转换为小写字符c的ASCII代码;选项D和C)左侧的表达式都是大写字符C与大写字符A的差与’a’的ASCII代码的和就是小写字符c的ASCII代码。而选项A中应该是加上’a’,而不是减去’a’。3、若变量已正确定义并赋值,则错误的赋值语句是()。A、a+a+1:B、a=sizeof(double);C、a=d‖c;D、a+1=a:标准答案:D知识点解析:赋值号“=”的左边必须是一个变量名。4、软件设计中划分模块的一个准则是()。A、低内聚低耦合B、高内聚低耦合C、低内聚高耦合D、高内聚高耦合标准答案:B知识点解析:一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。5、在结构化程序设计中,模块划分的原则是A、各模块应包括尽量多的功能B、各模块的规模应尽量大C、各模块之间的联系应尽量紧密D、模块内具有高内聚度、模块间具有低耦合度标准答案:D知识点解析:内聚性是对一个模块内部各个元素间彼此结合的紧密程度的度量。耦合性是对模块间互相连接的紧密程度的度量。在结构化程序设计中,模块划分应遵循高内聚、低耦合的原则,即减弱模块之间的耦合性和提高模块内聚性,有利于提高软件模块的独立性。6、以下不正确的转义字符是()。A、’\\’B、’\d’C、’\s’D、’088’标准答案:D知识点解析:“’\\’”是反斜线符,“’\d’”是整型变量转义字符,“’\s’”是字符串型转义字符,C语言中没有规定“’088’”为转义字符。7、关于C程序的编译和运行,以下叙述中错误的是()。A、C语言源代码程序通过编译、链接步骤之后才能形成一个可执行文件B、用C语言编写的程序是以ASCⅡ代码形式存放在一个文本文件中C、C语言中的所有语句都将被转换成二进制的机器指令D、C语言源程序经编译后生成后缀为.obj的目标程序标准答案:C知识点解析:C语言中的某些语句并不会被转换成二进制机器指令,如宏定义命令,在预编译之后替换到代码中,该命令本身也就不存在了,不会转换成二进制的机器指令。C语言编写的源程序就是以ASCⅡ的形式存放在文本文件中的。C源程序经过C编译程序编译之后生成一个后缀为.obj的二进制文件(称为目标文件),然后由称为“链接程序”的软件,因此.obj文件与C语言提供的各种库函数链接起来生成一个后缀为.EXE的可执行文件。8、下列条件语句中,输出结果与其他语句不同的A、if(a==0)printf("%d\n",x);elseprintf("%d\n",y);B、if(a==0)printf("%d\n",y);elseprintf("%d\n",x);C、if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);D、if(a)printf("%d\n",x);elseprintf("%d\n",y);标准答案:A知识点解析:选项B)、C)、D)这三条语句都是存变量不等于0的情况下,输出x;等于0的情况下输出y,而选项A)则正好相反。9、设有定义语句intx[6]={2,4,6,8,5,7),*p=x,i;要求依次输出x数组6个元素中的值不能完成此操作的语句是A、for(i=0;i<6;i++)printf("%2d",*(p++));B、for(i=0;i<6;i++)printf("%2d",*(p+i));C、for(i=0;i<6;i++)printf("%2d",*p++);D、for(i=0;i<6;i++)printf("%2d",(*p)++);标准答案:D知识点解析:指针p指向数组x,因此可以使用p来输出数组x的值。选项A中,*(p++)表示先取出p指向的元素的值,然后p++指向下一个元素,满足要求;选项B中*(p+i)每次i的值发生变化,(p+i)指向x数组的x[i]元素,因此*(p+i)是取出数组x的x[i]元素的值,满足要求;选项C和选项A相比,少了括号,由于.运算符的优先级比++要求,因此,因此*p++表示先取出p指向的元素的值,然后p再++指向下一个元素,满足要求:选项D中(*p)++表示先取出p指向的元素的值,然后该值++,p没有增加,每次循环都*p取出的x[0]的值,不满足要求。10、若变量已正确定义为int型,要通过语句scanf("%d,%d,%d",&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(注:□代表一个空格符)A、□□□1,2,3B、1,□□□2,□□□3C、1,2,3D、1□2□3标准答案:D知识点解析:本题主要考查scanf函数的输入格式问题。scanf函数的一般形式为:scanf(格式控制字符串,地址1,地址2,…);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:①格式说明符由“%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以“%”字符为标志;②普通字符,是需要用户在输入时原样输入的字符。在本题中格式控制字符串为“%d,%d,%d”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符。11、一个教师讲授多门课程,一门课程由多个教师讲授。则实体教师和课程间的联系是A、1:1联系B、1:m联系C、m:1联系D、m:n联系标准答案:D知识点解析:一个教师可讲授多门课程,一门课程可由多个教师讲授,则实体教师和课程的联系是多对多的联系。12、若有以下函数首部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选项正确。13、已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是A、c=(’A’+c)%26-’a’B、c=C+32C、c=C-’A’+’a’D、c=(C-’A’)%26+’a’标准答案:A知识点解析:由题意可知,小写字符a和大写字符A的ASCⅡ代码相差为32,所以选项C)能将大写字符C的ASCⅡ代码转换为小写字符c的ASCⅡ代码;选项D)和C)左侧的表达式都是大写字符C与大写字符A的差与’a’的ASCⅡ代码的和就是小写字符c的ASCⅡ代码。而选项A)中应该是加上’a’,而不是减去’a’。14、有以下程序#includeintfun(int(*s)[4],intn,intk){intm,i;m=s[0][k];for(i=1;i<n;i++)if(s[i][k]>m)m=s[i][k];returnm;}main(){inta[4][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24},{31,32,33,34}};printf("%d\n",fun(a,4,0));}程序的运行结果是A、4B、34C、31D、32标准答案:C知识点解析:本题重点考察二维数组名作为实参进行参数传递,在主函数中调用了fun函数,实参为二维数组名a和两个整数4、0,这样对应定义fun函数首部也有三种形式,这里采用了第一种形式,也就是行指针,这样在fun函数对s[i][j]进行操作实际上就是对主函数中的a[i][j]进行操作,再分析fun函数的作用便可知,是求二维数组第0列中最大的那个元素。因此C选项正确。15、以下定义数组的语句中错误的是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列的二维数组。16、有以下程序:#include<stdio.h>#defineSUB(a)(a)-(a)main(){Inta=2,b=3,c=5,d;d=SUB(a+b)*c;printf("%d\n",d);}程序的运行结果是()。A、0B、-12C、-20D、10标准答案:C知识点解析:本题考查宏定义。宏定义只是做简单的替换,本题中SUB(a+b)*c=(a+b)-(a+b)*c=-20,所以C选项正确。17、以下叙述中正确的是A、a表示一个字符常量B、’\0’表示字符0C、表达式:’a>’b’的结果是“假”D、’\’’’是非法的标准答案:C知识点解析:字符常量可以参加关系运算,按照其存储的ASCII码值进行比较,’a’>’b’不成立,值为假。而’\0’表示NULL,ASCII码值为0。18、以下叙述中正确的是A、C程序书写格式严格,要求一行内只能写一个语句B、C程序书写格式自由,一个语句可以写在多行上C、C程序中的注释只能出现在程序的开始位置和语句的后面D、用C语言编写的程序只能放在一个程序文件中标准答案:B知识点解析:本题主要考查的是C语言结构中的源程序书写格式这个知识点,在C浯言中注释部分对程序的运行结果不产生任何影响,它可以出现在任意位置:C语言书写自由,一行内可以写多个语句,一个语句可以写在多行上;由于C语言编写的程序有很好的移植性,可以放在多个程序文件中。19、设有定义:inta=2,b=3,c=4;,则以下选项中值为0的表达式是A、(!a==1)&(!b==0)B、(a<b)&!c||1C、a&bD、a||(b+b)||(c-a)标准答案:A知识点解析:本题主要考查逻辑运算。选项A中,(!a==1)中!运算优先级比==高,因此!a为假,然后在和1比较是否相等,因此整个表达式的结果为假,(!a==1)和(!b==0)是与的关系,前面的表达式为假,整个表达式结果就是假(0);选项B中a<b为真,!c值为假,(a<b)&!c值为假,(a<b)&!c‖1为真:选项C中a&b的值为2;选项D中a的值为真,表达式的结果为真。20、以下选项中不合法的标识符是A、FORB、&aC、printD、_00标准答案:B知识点解析:合法的标识符要满足组成字符为a~z以及A~z,数字字符0到9和下划线,其中数字不开头,不能是关键字。选项B中,&不属于组成字符,是错误的。21、以下选项中有语法错误的是A、charstr[3][10];str[1]="guest";B、charstr[][10]={"guest"};C、char*str[3];str[1]="guest";D、char*str[]={"guest"};标准答案:A知识点解析:本题考查字符数组的定义和使用。选项A定义了一个二维字符数组,第二句是直接给字符数组赋值错误,C语言中不能直接给字符数组赋值;选项B、C)和D)都是正确的。22、设有以下语句typedefstructTT{charc;inta[4];}CIN;则下面叙述中正确的是A、TT是struct类型的变量B、可以用TT定义结构体变量C、CIN是structTT类型的变量D、可以用CIN定义结构体变量标准答案:D知识点解析:C语言允许用typedef说明一种新的类型名,说明新类型名的语句为一般形式为:typedef。类型名标识符在此,“类型名”必须是此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用作新的类型名。typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。在本题中用typedef定义CIN为TT的一种新的类型名.因而可以用它定义一个结构体变量。23、以下选项中,当x为大于1的奇数时,值为0的表达式是A、x/2B、x%2==0C、x%2!=0D、x%2==1标准答案:B知识点解析:A选项的值为不定值,但绝对不是0,算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,B选项的值为假,即0?C选项的值为真,即1,D选项的值为真,即1,选项B正确。24、有以下程序main(){inti;for(i=1;i<=40;i++){if(i++%5==0)if(++i%8==0)printf("%d",i);}printf("\n");}执行后的输出结果是A、24B、5C、32D、40标准答案:C知识点解析:在for循环体中,先判断自变量i能否被5整除,然后自加两次,最后判断i能否被8整除。当for循环执行到第30次时,i的值为30能被5整除,然后i经过两次自加1运算,值变为32,能被8整除,故执行“printf("%d",i);”语句,即输出32。25、在关系数据库中,描述全局数据逻辑结构的是A、内模式B、用户模式C、概念模式D、物理模式标准答案:C知识点解析:概念模式也称为模式或逻辑模式,概念模式是数据库中全体数据的整体逻辑结构和特征的描述,概念模式通常还包含有访问控制、保密定义和完整性检查等方面的内容,以及概念/物理之间的映射。26、以下叙述中正确的是A、charca[3][5]={"A","BB","CCC"};是不合语法的B、字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组C、charca[][5]:{"A",”BB”,"CCC"};是不合语法的D、char*ca[3]={"A","BB","CCC"};是不合语法的标准答案:B知识点解析:字符串数组,也就是二维字符数组,其中每个元素为一个字符串,选项B)的说法正确。选项A)和C)对于ca的定义是正确的。选项D)定义一个指针数组,可以保存多个字符串的首地址。27、若有以下程序#includeintf(intm){staticintn=0;inta=2;n++;a++;returnn+m+a;}main(){intk;for(k=0;k<4;k++)printf("%d,",f(k));}则程序的输出结果是A、3,5,7,9,B、4,7,10,13,C、4,5,6,7,D、4,6,8,10,标准答案:D知识点解析:本题考查静态局部变量以及自增运算符,静态局部变量在函数调用结束后,并不释放,仍然保留它的值,本题中,k为0时,returnn+m+a之前,n为1,a为局部变量是3,m为0,所以第一个返回值为4。k为1,在函数返回值之前,静态局部变量为2,局部变量a仍然为3,m为1,所以结果是6,依此类推答案为D。28、有以下程序#includefunc(intn)voidmain(){staticintnum=1;{func(3);func(4);printf("\n");}num=num+n;printf("%d",num);}程序运行后的输出是A、45B、35C、48D、34标准答案:C知识点解析:在函数func(intn)中定义了局部静态变量num,其初始值等于l,所以在主函数中执行func(3),输出4,此时静态变量num的值等于4,当退出函数func(3)时,其值不会丢失,所以当在执行func(4)时,输出8。29、设有定义doublea[10],*s=a;以下能够代表数组元素a[3]的是A、(*s)[3]B、*s[3]C、*s+3D、*(s+3)标准答案:D知识点解析:语句*s=a,使用指针变量s指向一维数组a的首地址,所以*(s+3)表示的是引用数组a[3]。30、数据字典(DD)所定义的对象都包含于A、数据流图(DFD图)B、程序流程图C、软件结构图D、方框图标准答案:A知识点解析:在数据流图中,对所有元素都进行了命名,所有名字的定义集中起来就构成了数据字典。因此选A,而B,C,D都不符合。31、有以下程序#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。32、以下叙述中正确的是A、书写源程序时,必须注意缩进格式,否则程序会有编译错误B、程序的主函数名除main外,也可以使用Main或_mainC、程序可以包含多个主函数,但总是从第一个主函数处开始执行D、在C程序中,模块化主要是通过函数来实现的标准答案:D知识点解析:C语言的源程序中对缩进没有要求,所以A选项错误。C语言中区分大小写,main函数不能写成Main或_main,所以B选项错误。一个C程序有且只有一个主函数,所以C选项错误。33、有以下程序(说明:字*A的ASCII码值是65)voidfun(char*s){while(*s){if(*s%2)printf("%c",*s);s++;}}main(){chara[]="BYTE";fun(a);printf("\n");}程序运行后的输出结果是A、BTB、YEC、YTD、BY标准答案:B知识点解析:程序只输出字母ASCII值为奇数的字母,根据字母B,Y,T,E的ASCII值的奇偶性相应输出。34、设有定义语句:char*aa[2]={"abcd","ABCD"};则以下叙述正确的是A、aa数组的两个元素只能存放含有4个字符的一维数组的首地址B、aa数组的值分别是字符串"abcd"和"ABCD"C、aa是指针变量,它指向含有两个元素的字符型数组D、aa[0]存放了字符串"abcd"的首地址标准答案:D知识点解析:题目中char*aa[2],定义了指针教组aa,有两个元素,aa[0]存放"abcd"地址,而aa[1]存放"ABCD"地址。35、若有以下定义intx[10],*pt=x;则对x数组元素的正确引用是()。A、*(x+3)B、*&x[10]C、*(pt+10)D、pt+3标准答案:A知识点解析:数组x[10]下标的最大值为9,不能引用下标大于9的数组元素,选项B)、C)错误;指针pt指向数组x的首地址,所以pt+3与&x[3]等价,为数组第四个元素的地址,不是引用数组元素的值,选项D)错误。所以答案选A)。36、以下叙述中正确的是A、break语句不能用于提前结束for语句的本层循环B、continue语句使得整个循环终止C、使用break语句可以使流程跳出switch语句体D、在for语句中,continue与break的效果是一样的,可以互换标准答案:C知识点解析:用break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体,从而提前结束循环,而continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。37、以下叙述中正确的是A、在包含文件中,不得再包含其他文件B、#include命令行不能出现在程序文件的中间C、在一个程序中,允许使用任意数量的#include命令行D、虽然包含文件被修改了,包含该文件的源程序也可以不重新进行编译和连接标准答案:C知识点解析:#include文件包含命令,使用时应注意以下5个规则:①包含文件的#include命令行通常应书写在所用源程序文件的开头,故有时也把包含文件称作“头文件”。头文件名可以由用户指定,其后缀不一定用“.h”;②包含文件中,一般包含有一些公用的#define命令行、外部说明或对(库)函数的原型说明;③当包含文件修改后,对包含该文件的源程序必须重新进行编译连接;④在一个程序中,允许有任意多个#include命令行;⑤在包含文件中还可以包含其他文件。38、有以下程序#include<stdio.h>main(){intn,*p=NULL;*p=&n;printf("Inputn:");scanf("%d",&p);printf("outputn:");orintf("%d\n",p:}该程序、试图通过指针p为变量n读入数据并输出,但程序有多处错误,以下语句正确的是A、intn,*p=NULL;B、*p=&n;C、scanf("%d",&p)D、printf("%d\n",p);标准答案:A知识点解析:选项A)表示在程序中,声明定义变量语句“intn,*p=NULL;”定义了整型变量n和指针变量p,并且指针变量p初始化为空。其他的语句都是错误的。其中选项B),&n的地址应存放到指针变量p中,而选项C)中数据输入项错误,选项D)输出地址信息。39、以下选项中合法的变量是A、5aB、_10_C、A%D、sizeof标准答案:B知识点解析:变量的命名要符合标识符的命名规则,即由下划线、字母或数字组成,且必须以下划线或字母开始,也不能和关键字相同,所以选择B。40、有以下程序#include#includestructA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序运行后的输出结果是A、1002,ZhangDa,1202.0B、1002,ChangRong,1202.0C、1001,ChangRong,1098.0D、1001,ZhangDa,1098.0标准答案:D知识点解析:本题考查结构体的相关操作以及传值、传址的区别,该题中调用f函数后,会生成参数a的一个副本,而不会改变a的值,所以a值维持原值,选项D正确。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是A、有一个以上根结点的数据结构不一定是非线性结构B、只有一个根结点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:在数据结构中,树这类的数据结构只有一个根结点,但它不是线性结构。2、设栈的顺序存储空间为S(1:m),初始状态为top=0。现经过一系列正常的入栈与退栈操作后,top=m+1,则栈中的元素个数为()。A、0B、mC、不可能D、m+1标准答案:C知识点解析:栈为空时,栈顶指针top=0,经过入栈和退栈运算,指针始终指向栈顶元素。初始状态为top=0,当栈满top=m,无法继续入栈,top值不可能为m+1。3、下列叙述中错误的是()。A、循环链表中有一个表头结点B、循环链表是循环队列的存储结构C、循环链表的表头指针与循环链表中最后一个结点的指针均指向表头结点D、循环链表实现了空表与非空表运算的统一标准答案:B知识点解析:循环链表是指在单链表的第一个结点前增加一个表头结点,队头指针指向表头结点,最后一个结点的指针域的值由NULL改为指向表头结点。循环链表是线性表的一种链式存储结构,循环队列是队列的一种顺序存储结构。4、若运行时给变量x输入12,则以下程序的运行结果是()。main(){intx,y;scanf(’’%d’’,&x);y=x>127x+10:x-12;printf(’’%d\n’’,y);}A、0B、22C、12D、10标准答案:A知识点解析:本题考查三目条件运算符“?:”。表达式“x>127x+10:x-12”即,如果x>12成立,则x+10的值即为此表达式的值,否则x-12即为此表达式的值。因为x=12,所以x>12不成立,所以执行“y=x-12=0”。5、在具有2n个结点的完全二叉树中,叶子结点个数为()。A、nB、n+1C、n-1D、n/2标准答案:A知识点解析:由二叉树的定义可知,树中必定存在度为0的结点和度为2的结点,设度为0结点有a个,根据度为0的结点(即叶子结点)总比度为2的结点多一个,得度为2的结点有a-1个。再根据完全二叉树的定义,度为1的结点有0个或1个,假设度1结点为0个,a+0+a-1=2n,得2a=2n-1,由于结点个数必须为整数,假设不成立;当度为1的结点为1个时,a+1+a-1=2n,得a=n,即叶子结点个数为n。6、在数据库设计中,将E—R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:E—R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。7、在学校里,教师可以讲授不同的课程,同一课程也可由不同教师讲授,则实体教师与实体课程间的联系是()。A、一对多B、一对一C、多对一D、多对多标准答案:D知识点解析:一个教师可以讲授不同的课程,同一课程也可由不同教师讲授,则实体教师与实体课程间的联系是多对多。8、下列叙述中,不属于软件需求规格说明书的作用的是()。A、便于用户,开发人员进行理解和交流B、反映出用户问题的结构,可以作为软件开发工作的基础和依据C、作为确认测试和验收的依据D、便于开发人员进行需求分析标准答案:D知识点解析:软件需求规格说明书有以下几个方面的作用:①便于用户、开发人员进行理解和交流;②反映出用户问题的结构,可以作为软件开发工作的基础和依据;③作为确认测试和验收的依据。9、下面属于黑盒测试方法的是()。A、边界值分析法B、基本路径测试C、条件覆盖D、条件-分支覆盖标准答案:A知识点解析:黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法、因果图等,答案选A。10、下列描述中正确的是A、软件测试应该由程序开发者来完成B、程序经调试后一般不需要再测试C、软件维护只包括对程序代码的维护D、以上三种说法都不对标准答案:D知识点解析:为了达到好的测试效果,应该由独立的第三方进行测试工作。因为从心理学角度讲,程序人员或设计方在测试自己的程序时,要采取客观的态度是会不同程度地存在障碍的,所以选项A)错误。在程序调试时,修改了一个错误的同时可能引入了新的错误,解决的办法是在修改了错误之后,必须进行回归测试,所以选项B)错误。所谓软件维护,就是将交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改,所以选项C)错误。11、我们所写的每条C语句,经过编译最终都将转换成二进制的机器指令。关于转换以下说法错误的是()。A、一条C语句对应转换成一条机器指令B、一条C语句可能会被转换成多条机器指令C、一条C语句可能会被转换成零条机器指令D、某种类型和格式的C语句被转换成机器指令的条数是固定的标准答案:A知识点解析:每条可执行的C语句会依据其类型和格式转换成一条或者多条机器指令,非可执行语句:注释语句或者宏定义语句不会被转换成机器指令,而且相同类型和格式的C语句转换成机器指令的条数是相同的,所以答案选A。12、有以下程序:#include#includemain(){charstr[][20]={t.One*World”,”One*Dream!”;,*P=str[1];prinff(“%d,”,strlen(P));prinff(“%s\n”,P);}程序的运行结果是()。A、10,One*Dream!B、9,One*Dream!C、9,One*WorldD、10,One*World标准答案:A知识点解析:p是指向二维字符数组第二行one*Dream!的数组指针,所以长度是10,打印输出的也是该字符串。13、软件测试的目的是A、发现程序中的错误B、发现并改正程序中的错误C、设计和执行测试用例D、诊断程序中的错误标准答案:A知识点解析:软件测试的目的是为了发现程序中的错误,而软件调试是为了更正程序中的错误。14、若有定义语句charc=’\101’;则变量c在内存中占A、2个字节B、3个字节C、1个字节D、4个字节标准答案:C知识点解析:每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。15、若变量已正确定义为int型,要通过语句scanf("%d,%d,%d",&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(注:□代表一个空格符)A、□□□1,2,3B、1,□□□2,□□□3C、1,2,3D、1□2□3标准答案:D知识点解析:本题主要考查scanf函数的输入格式问题。scanf函数的一般形式为:scanfi(格式控制字符串,地址1,地址2,...);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:①格式说明符由“%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以“%”字符为标志。②普通字符,是需要用户在输入时原样输入的字符。在本题中格式控制字符串为“%d,%d,%d”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符。16、有以下程序#includemain(){inta1,a2;charc1,c2;scanf("%d%c%d%c",&a1,&c1,&a2,&c2);printf("%d,%c,%d,%c",a1,c1,a2,c2);}若想通过键盘输入,使得a1的值为12,a2的值为34,c1的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b则正确的输入格式是(以下□代表空格,代表回车)A、12□a□34□bB、12,a,34,bC、12a34bD、12□a34□b标准答案:C知识点解析:本题考查scanf语句。scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。其调用格式为:scanf("<格式化字符串>",<地址表>)格式化字符串包括以下3类不同的字符。①格式化说明符:格式化说明符与前面用的printf()函数中的格式说明符基本相同。②空白字符:空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。③非空白字符:一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字符。由于在scanf函数中,几个变量之间没有任何问隔,所以输入的时候,也同样不应该有间隔。17、若有定义:inta,b;通过语句scanf("%d;%d",&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是()。A、35B、3,5C、3;5D、35标准答案:C知识点解析:输入数据的格式必须与scanf()的格式控制串完全匹配,所以输入时必须在3和5之间输入";"。18、以下叙述中正确的是A、continue语句的作用是:使程序的执行流程跳出包含它的所有循环B、break语句只能用在循环体内和switch语句体内C、在循环体内使用break语句和continue语句的作用相同D、break语句只能用于switch语句体中标准答案:B知识点解析:只能在循环体内和switch语句体内使用break语句。continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。而break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体。19、定义学生、教师和课程的关系模式S(S#,Sn,Sd,Dc,Sa)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄);C(C#,Cn,P#)(其属性分别为课程号、课程名、先修课);SC(S#,C#,G)(其属性分别为学号、课程号和成绩),则该关系为A、第二范式B、第一范式C、第三范式D、BCNF范式标准答案:A知识点解析:在关系模式S(S#,Sn,Sd,Dc,Sa)中把学号S#设置为主键,则其它列姓名、所在系、所在系的系主任、年龄都依赖主键学号S#。在C(C#,Cn,P#)中将C#课程号设置为主键,则课程名、先修课都依赖主键C#。在SC(S#,C#,G)中,将S#,C#设置为主键,则G成绩依赖于主键S#,C#。所以该关系模式是第二范式。选择A选项。20、有以下程序(strcat函数用以连接两个字符串)#include#includemain(){chara[20]="ABCD\0EFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序运行后的输出结果是()。A、ABCDIJKB、ABCDE\0FG\0IJKC、IJKD、EFGIJK标准答案:A知识点解析:strcat(字符数组,字符串)函数的功能是把"字符串内容"连接到"字符数组"中的字符串尾端,而字符串的尾端用结束标记?\0?标识,所以语句"strcat(a,b);"执行完毕之后,在字符?D?后面连接数组b中的字符串。答案选A。21、以下叙述中正确的是A、打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖B、在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据C、C语言中的文件是流式文件,因此只能顺序存取数据D、当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失标准答案:D知识点解析:在C语言中,有两种对文件的存取方式;顺序存取和直接存取;如果以“a”的方式对一个已打开的文件进行写操作后,则原有文件中内容将保存,新的数据写在原有内容之后。如果以“a+”的方式为读和写而打开一个文件,则既可以对文件进行读,也可以对文件进行写,而且在读和写操作之间不必关闭文件,可以从头开始读。当对文件的读(写)操作完成之后,必须将它关闭。22、若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是()。A、main(){……x=fun(2,10);……}floatfun(inta,intb){……}B、floatfun(inta,intb){……}main(){……x=fun(i,j);……}C、floatfun(int,int);main(){……x=fun(2,10);……}floatfun(inta,intb){……}D、main(){floatfun(inti,intj);……x=fun(i,j);……}floatfun(inta,intb){……}标准答案:A知识点解析:被调函数的定义要在调用语句之前,若不是,则在调用语句之前要对被调函数进行声明,选项A)缺少对被调函数fun()的声明语句,答案选A)。23、下列条件语句中,输出结果与其他语句不同的是A、if(a==0)printf("%d\n",x);elseprintf("%d\n",y);B、if(a==0)printf("%d\n",y);elseprintf("%d\n",x);C、if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);D、if(a)printf("%d\n",x);elseprintf("%d\n",y);标准答案:A知识点解析:选项B、C、D这三条语句都是在变量不等于0的情况下,输出x;等于0的情况下输出y,而选项A则正好相反。24、若有以下程序段charstr[4][12]={"aaa","bbbb","ccccc","dddddd"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];则以下错误引用字符串的选项是(其中0≤k<4)()。A、strpB、str[k]C、strp[k]D、*strp标准答案:A知识点解析:指针strp为一个指针数组,str为一个二维数组名。语句"strp[i]=str[i];"将str数组中第i+1个字符串的首地址赋值给strp[i],所以str[i]与strp[i]、*(strp+i)、*(str+i)等价,选项B)、C)、D)正确,而strp为指针数组所占内存的首地址,不能引用字符串,所以答案选A)。25、下面不属于软件测试实施步骤的是A、集成测试B、回归测试C、确认测试D、单元测试标准答案:B知识点解析:软件测试主要包括单元测试、集成测试、确认测试和系统测试。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、若变量都己正确说明,则以下程序段输出结果为()。#includemain(){chara=’a’;intb=2:printf(a>b?"***a=%d":"###b=%d",a,b);}A、***a=3B、###b=3C、***a=3##b=5D、全部错误标准答案:D知识点解析:本题考查printf函数的格式和三目运算符“?:”的使用。printf函数中格式说明符之前插入的任何字符都原样输出。本题中“a>b”为真,所以返回“***a=97”。2、对于循环队列,下列叙述中正确的是A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,也可以小于队尾指针标准答案:D知识点解析:所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置。循环队列的主要操作是:入队运算和退队运算。每进行一次入队运算,队尾指针就进一。每进行一次退队运算,队头指针就进一。当rear或front等于队列的长度加1时,就把rear或front值置为1。所以在循环队列中,队头指针可以大于队尾指针,也可以小于队尾指针。3、若有以下程序段:structst{intn;int*m;};inta=2,b=3,c=5;structsts[3]=({101,&a},{102,&c},{103,&b}};main(){structst*p;p=s;…}则以下表达式中值为5的是()。A、(p++)->mB、*(p++)->mC、(*p)-mD、*(H_p)->m标准答案:D知识点解析:本题考查如何通过指针引用数组元素。首先定义了一个结构体,然后定义了一个结构体变量s[3],并赋了初值。在主程序中,定义了一个指向结构体变量s的指针p,要使表达式的值为5,就应该引用s[1].m的值,使指针p指向s[1],++p可以实现将p指针加1,指向s[1]。4、下列叙述中正确的是()。A、在链表中,如果每个结点有两个指针域,则该链表一定是非线性结构B、在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是非线性结构C、在链表中,如果每个结点有两个指针域,则该链表一定是线性结构D、在链表中,如果有两个结点的同一个指针域的值相等,则该链表一定是线性结构标准答案:B知识点解析:判断一个非空的数据结构是否为线性结构必须满足以下两个条件:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。选项B)中,如果有两个结点的同一个指针域的值相等,则说明至少有一个结点有两个前件,不符合线性结构的定义,所以答案选B)。5、下面属于白盒测试方法的是()。A、等价类划分法B、判定一条件覆盖C、因果图法D、错误推测法(猜错法)标准答案:B知识点解析:白盒测试法主要有逻辑覆盖、基本路径测试等。其中,逻辑覆盖又包括语句覆盖、路径覆盖、判定覆盖、条件覆盖、判断一条件覆盖。黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。6、若有以下程序,编译时出现错误,你认为出错的是#includemain(){inta=0,b=0,c=0,d;c=(a+=b,,b+=a);/*第4行*/d=c;;/*第5行*/;/*第6行*/printf("%d,%d,%d\n",a,b,c);/*第7行*/}A、第4行B、第5行C、第6行D、第7行标准答案:A知识点解析:第4行出错,在第4行括号中两个逗号不可以为空。单独的分号为C语言的空语句,是编译程序可以识别并且编译的,因此第5、6行都是正确的。7、在黑盒测试方法中,设计测试用例的主要根据是()。A、程序内部逻辑B、程序外部功能C、程序数据结构D、程序流程图标准答案:B知识点解析:黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证,黑盒测试完全不考虑程序内部的逻辑结构和内部特性,只根据程序的需求和功能规格说明,检查程序的功能是否符合它的功能说明,所以本题选择B。8、设一棵树的度为3,其中度为3,2,1的结点个数分别为4,1,3。则该棵树中的叶子结点数为A、10B、11C、12D、不可能有这样的树标准答案:A知识点解析:因为任一棵树中,结点总数=总分支数目+1,所以:n0+4+1+3=(n0*0+3*4+2*1+1*3)+1,计算结果n0=10。其中,n0表示叶子结点。所以选项A正确。9、学生和课程的关系模式定义为:S(S#,Sn,Sd,Dc,Sa)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄);C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课);SC(S#,C#,G)(其属性分别学号、课程号和成绩)。关系中包含对主属性传递依赖的是()。A、S#→SdB、S#→Sd,(S#,C#)→GC、S#→Sd,Sd→DcD、C#→P#,(S#,C#)→G标准答案:C知识点解析:关系SC的主属性为(S#、C#),但在SC中S#(学号)单独就可以决定Sd(所在系),Sd(所在系)可决定Dc(所在系的系主任),故对主属性传递依赖的是S#→Sd,Sd→Dc。10、sizeof(char)是()。A、一种函数调用B、一个整型表达式C、一个字符型表达式D、一个不合法的表达式标准答案:B知识点解析:“sizeof(char)”是一个C语言的关键字,

温馨提示

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

评论

0/150

提交评论