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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷12(共9套)(共343题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共39题,每题1.0分,共39分。)1、一间宿舍可住多个学生,则实体宿舍和学生之间的联系是()。A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:实体间的联系有如下情况:①一对一(1:1);②一对多(1:m);③多对多(m:n)。本题中,一间宿舍对应多个学生,那么宿舍和学生之间的联系是一对多,学生和宿舍的联系是多对一。2、对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。A、快速排序B、冒泡排序C、直接插入排序D、堆排序标准答案:D知识点解析:除了堆排序算法的比较次数是O(nlog2,n),其他的都是,n(n-1)/2。3、以下4个选项,不能看作一条语句的是()。A、{;}B、intx=0,y=1,z=0;C、if(1a);D、if(b==0)m=1;n=2;标准答案:D知识点解析:if语句是用来判定所给的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。在if和else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号“{}”将几个语句括起来成为一个复合语句。选项D中没有将两个操作语句括起来,不能看作一条语句。4、运行下面程序时,从键盘输入字母A,则输出结果是()。#include<stdio.h>main(){charch;ch=getchar();switch(ch){case’A’:printf(’’AAAA\n’’);case’B’:printf(’’BBBBkn’’);default:printf(’’CCCC\n’’);}}A、AAAAB、AAAABBBBC、AAAABBBBCCCCD、AAAACCCC标准答案:C知识点解析:本题考查“switch”语句。因为“ch=A”,所以第一个switch语句,执行“case’A’”后面的语句,输出AAAA,没有遇到break语句,所以接着再执行“case’B’”和default,分别输出BBBB和CCCC。5、请阅读以下程序:#include#includevoidfun(intb[])main(){staticinti=0;{intk,a[5]={1,3,5,4,9};Do{b[i]+=b[i+1];fun(a);}while(++i<2);}for(k=0;k<5;k++)printf("%d",a[k]);}上面程序的输出是()。A、13579B、48579C、48549D、48999标准答案:C知识点解析:本题考查的是for循环以及while循环。fun函数中定义了静态变量i=0,fun(a)使得a[0]=a[0]+a[1]=4,a[1]=a[1]+a[2]=8,此时i的值变为1,++i<2不成立,所以do-while循环结束,输出数组a的各元素即得到48549。6、下列各选项中,不属于序言性注释的是()。A、程序标题B、程序设计者C、主要算法D、数据状态标准答案:D知识点解析:注释一般为序言性注释和功能性注释。序言性注释常位于程序开头部分,它包括程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期及修改日期等。功能性注释一般嵌在源程序体之中,用于描述其后的语句或程序的主要功能。7、有三个关系R、S和T如下:则下列操作中正确的是()。A、T=R∩SB、T=R∪SC、T=R×SD、T=R-S标准答案:D知识点解析:图中关系R比关系s多一行T中的元组,故由关系R和S得到关系T的操作是差。8、有以下程序:#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<3;i++)for(j=i;j<=i;j++)t+=b[i][b[j][i]];printf("%d\n",t);}程序运行后的输出结果是()。A、3B、4C、1D、9标准答案:B知识点解析:每次内循环只循环一次就结束,第一次外循环时t=t+b[0][b[0][o]]=1+b[0][0]=1+0=1;第二次外循环时t=t+b[1][b[1][1]]=1+b[1][1]=1+1=2;第三次外循环时t=t+b[2][b[2][2]]=2+b[2][2]=2+2=4。9、有以下程序:#include<stdio.h>voidfun(intp){intd=2;p=d++;printf("%d",p);}main(){inta=1:fun(a);printf("%d\n",a);}程序运行后的输出结果是()。A、32B、12C、21D、22标准答案:C知识点解析:C语言中函数参数传递满足“单向传递”,实现传递值的功能,实参能传给形参,形参却不能传回给实参。fun函数体内输出p的值为2,并不影响到fun函数外a的值,a的值在main函数内依然为1。10、设有如下函数定义:#include<stdio.h>intfun(intk){if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若执行调用语句“n=fun(3);”,则函数fun总共被调用的次数是()。A、2B、4C、4D、5标准答案:B知识点解析:首先n=fun(3),3被当作参数传递进去,这就进行了一次调用,3被当做参数传进去后,程序会执行这句elsereturnfun(k-1)+1;这就调用了第二次,而参数是3-1也就是2。2被当做参数传进去后,程序会执行这句elsereturnfun(k-1)+1;这就调用了第三次,而参数是2-1也就是1。1被当做参数传进去后,程序会执行这句elseif(k==1)return1;不再递归调用,所以最终结果为3次。11、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。A、&B、^C、‖D、~标准答案:B知识点解析:按逻辑位运算的特定作用主要有3点:①用按位与运算将特定位清0或保留特定位;②用按位或运算将特定的位置设置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。12、运行下列程序时,若输入数据为“321”,则输出结果是()。main(){intnum,i,j,k,s;scanf(“%d”,&num);if(num>99)s=3:elseif(num>9)s=2:elses=1;i=num/100;j=(num—i*100)/10;k=(num—i*100-j*10);switch(s){case3:printf(“%d%d%d\n”,k,j,i);break;case2:printf(“%d%d\n”,k,j);case1:printf(“%d\n”,k);}}A、123B、1,2,3C、321D、3,2,1标准答案:A知识点解析:本题考查if-else语句和switch语句。scanf函数通过键盘读入num的值。因为num=321>99,所以s=3,i=3,i=2,k=1。因为s=3,所以执行case3,输出k,i,i的值,然后通过break结束程序。13、有以下程序#include<stdio.h>#defineS1(z)4*z+4*(z)#defineS2(x,y)4*(x)*(y)+y*xmain(){inta=1,b=2;printf("%d,",S1(a+b));printf("%d,",S2(a,b)+S1(3));printf("%d",S2(3+a,b+3));程序执行后的输出结果是()。A、18,34,100B、24,34,92C、24,34,100D、18,34,92标准答案:D知识点解析:程序中S1和S2都是宏定义,所以S1(a+b)宏展开后的表达式为:4*a+b+4*(a+b),即4*1=1+2+4*(1+2),结果为18;S2(a,b)宏展开的表达式为:4*(a)*(b)+b*a,即4*(1)*(2)+2*1,结果为10;S1(3)宏展开后的表达式为:4*3+4*(3),结果为24;S2(3+a,b+3)宏展开的表达式为:4*(3+a)*(b+3)+b+3*3+a,即4*(3+1)*(2+3)+2+3*3+1,结果为92,本题输出:18,34,92,答案为D。14、设p是指针变量,语句p=NULL;等价于()。A、p=0;B、p=’’;C、p="";D、p=’0’;标准答案:A知识点解析:本题考查指向指针的指针。i是int类型的变量,p为基本类型为int的指针变量,r为二级指针,指向的是指针p的地址,因此,*p就代表i;**r就代表*p,也等价于i。二级指针作为函数参数,形参和实参指向同一个地址空间,两者的改变保持同步。函数fun()的功能是将r指向的存有变量i的地址的指针变量改为指向存有变量k的地址的指针变量,*p的值发生了改变。函数f()中语句"int*t=&k;*s=t;"同样使得**s、*t、k等价,所以刚开始输出3个7,函数调用结束之后*p与**r的值均为7,i不变,答案选A)。15、下列叙述中错误的是()。A、C语句必须以分号结束B、复合语句在语法上被看作一条语句C、空语句出现在任何位置都不会影响程序运行D、赋值表达式末尾加分号就构成赋值语句标准答案:C知识点解析:C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。复合语句也称为“语句块”,其形式如下:{语句1;语句2;……语句n;},即用一对大括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成为一条语句,即赋值语句。空语句是只有一个分号的语句,它什么也不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号会导致逻辑上的错误,而且这种错误十分隐蔽,编辑器也不会提示逻辑错误,需要慎用。16、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。A、&B、^C、‖D、~标准答案:B知识点解析:按逻辑位运算的特定作用主要有3点:①用按位与运算将特定位清0或保留特定位;②用按位或运算将特定的位置设置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。17、某系统总体结构图如下图所示:该系统总体结构图的深度是()。A、7B、6C、3D、2标准答案:C知识点解析:根据总体结构图可以看出该树的深度为3,比如:XY系统---功能2----功能2.1,就是最深的度数的一个表现。18、下列叙述中正确的是()。A、有一个以上根结点的数据结构不一定是非线性结构B、只有一个根结点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,也最多有一个后件,所以B正确。所以有一个以上根结点的数据结构一定是非线性结构,所以A错误。循环链表和双向链表都是线性结构的数据结构。19、下列选项中属于面向对象设计方法主要特征的是()。A、继承B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性,所以选择A。20、若输入“abcdef”、“abdef”,以下程序的输出结果为()。#include#includemain(){intn;chars1[20],s2[20],*p1,*p2;scanf(“%s”,s1);scanf(“%s”,s2);p1=s1;p2=s2;n=strcmp(p1,p2);printf(“%d\n”,n);}A、-1B、0C、“abcdef”D、“abdef”标准答案:A知识点解析:本题考查两个知识点:①字符串比较函数strcmp(s1,s2),若s1>s2,则返回1;若s1=s2,则返回0;若s121、以下选项中,合法的是()。A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’0’};B、charstr4;str4="helloworld";C、charname[10];name=’china";D、charstd[5]="pass",str2[6];str2=std;标准答案:A知识点解析:选项B不能把一个字符串赋值给一个字符变量,选项C和D犯了同样的错误是把字符串赋给了数组名。22、软件开发中,需求分析阶段可以使用的工具是()。A、N-S图B、DFD图C、PAD图D、程序流程图标准答案:B知识点解析:结构化解析方法是结构化程序设计理论在软件需求解析阶段的运用,数据流图(DataFlowDiagram,DFD))是结构化解析常用的工具之一,数据字典、判定树和判定表也是常用的结构化分析工具。程序流程图、NS图、PAD图等图形工具用于详细设计的过程中。23、有三个关系R、S和R如下:由关系R和S通过运算得到关系T,则所使用的运算为()。A、并B、自然连接C、笛卡尔积D、交标准答案:D知识点解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B)错误。笛卡尔积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以C)错误。根据关系T可以很明显的看出是从关系R与关系S中取得相同的关系组所以取得是交运算,选择D)。24、若有代数式,(其中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)参数顺序错误。25、有以下程序:#include<stdio.h>main(){inta=1,}1=2;for(;a<8;a++){b+=a;a+=2;}printf("%d,%d\n",a,b);}程序运行后的输出结果是()。A、9,18B、8,11C、7,11D、10.14标准答案:D知识点解析:第一次循环a的值为1,满足条件,执行b+=a,与a+=2,则b的值变为3,a的值变为3。执行a++,a的值为4,满足条件进入第二次循环,执行完循环体后b的值为7,a的值为6。执行a++,a的值为7,满足条件进入第三次循环,执行完循环体后b的值为14,a的值为9。执行a++,a的值变为10,不满足条件,循环结束。所以选择D选项。26、设有定义:chars[81];inti=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A、scanf("%s",s);B、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;C、gets(s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:A知识点解析:函数scanf()输入字符串时默认空格为间隔符,所以不能输入空格,答案选A)。27、若有以下程序:#include#defineS(x)(x)*(x)#defineT(x)S(x)/S(x)+1main(){intk=3j=2;printf("%d,%d\n",S(k+j),T(k+j));}则程序的输出结果是()。A、11,2B、25,2C、11,12D、25,26标准答案:D知识点解析:本题考查宏定义。宏定义只是做简单的替换,执行语句s(k+j)=(k+j)*(k+j)=25,T(k+j)=S(k+j)/S(k+j)+1=(k+j)*(k+j)/(k+j)*(k+j)+1=26,因此选项D正确。28、以下程序段中的变量已正确定义folr(i=0;i<4;i++,i++)for(k=1;k<3;k++);printf("*");该程序段的输出结果是()。A、*B、****C、**D、********标准答案:A知识点解析:C语言约定分号为一条语句的结束。因此for(i=0;i<4;i++,i++)for(k=1;k<3;k++);是完整的语句,对printf();没有任何影响,最后printf("*"),执行一次。因此答案为A选项。29、以下选项中不属于C语言标识符的是A、常量B、用户标识符C、关键字D、预定义标识符标准答案:A知识点解析:常量是指在程序运行过程中其值不能被改变的量,如5、1.0、字符’a’等。C语言的标识符分为3类:关键字、预定义标识符和用户标识符,常量不属于标识符,所以选择A。30、有以下函数:intfun(char*s){char*c=s;while(*c++);return(c一s);}该函数的功能是()。A、计算s所指字符串占用内存字节的个数B、比较两个字符串的大小C、计算s所指字符串的长度D、将s所指字符串复制到字符串c中标准答案:C知识点解析:while(*cc++)的结果是将c移动到字符串的结尾,即当c=’\0’时,循环结束。此时s依然指向的是字符串的首字符,因此,返回值c一s是字符串的长度,答案C正确。31、下列叙述中正确的是A、空字符串不占用内存,其内存空间大小是0B、两个连续的单引号(’’)是合法的字符常量C、可以对字符串进行关系运算D、两个连续的双引号("")是合法的字符串常量标准答案:D知识点解析:字符串常量是由一对双引号括起的字符序列。A选项描述不正确。B选项描述的不够完善;字符常量占一个字节的内存空间。D选项正确;字符常量是用单引号括起来的一个字符。C语言字符串比较不能直接用关系运算符进行正确比较。可以用字符串比较函数strcmp来实现,C选项是错误的;字符串常量占的内存字节数等于字符串中字节数加1。因此D选项正确。32、设x=021,y=012,则z=x|y的值是()。A、1B、0C、00011011D、1.1e+007标准答案:C知识点解析:本题主要考查按位或运算。按位或是对两个运算对象相应的位进行逻辑或运算,其运算规则和逻辑或相同,两个运算对象只要有一个是1,则结果为1。33、以下选项中,合法的C语言常量是A、1.234B、’C++’C、"\2.0D、2Kb标准答案:A知识点解析:整型常量:用不带小数点的数字表示。实型常量:用带小数点的数字表示。字符型常量:用带有单引号的字符表示。字符串常量:用一对双引号括起来的一串字符。1.234为实型常量,A选项正确。’C++’不合法,若改成"C++"则为字符串常量,B选项错误。"\2.0不合法,不是任何类型常量,C选项错误。2Kb不合法,若加上双引号"2Kb"为字符串常量,D选项错误。34、设有定义:inta=0,b=1;,以下表达式中,会产生"短路"现象,致使变量b的值不变的是A、a++&&b++B、a++||++bC、++a&&b++D、+a||++b标准答案:A知识点解析:运算符"++"放在变量前面时,表示将变量+1,再参与其他操作,a++&&b++时,由于a值是0直接判定与运算结果为0,忽视b++的值,因此b值不发生改变,答案为A选项。35、下列各序列中不是堆的是A、(91,85,53,36,47,30,24,12)B、(91,85,53,47,36,30,24,12)C、(47,91,53,85,30,12,24,36)D、(91,85,53,47,30,12,24,36)标准答案:C知识点解析:若有n个元素的序列,将元素按顺序组成一棵完全二叉树,当且仅当满足下列条件时称为堆:大根堆,所有结点的值大于或等于左右子结点的值;小根堆,所有结点的值小于或等于左右子结点的值。A、B、D选项属于大根堆,C选项由于47<91,判断属于小根堆,但91>85,不满足条件,不是堆,故正确答案为C选项。36、关于C语言标识符,以下叙述错误的是A、标识符可全部由数字组成B、标识符可全部由下划线组成C、标识符可全部由小写字母组成D、标识符可全部由大写字母组成标准答案:A知识点解析:标识符只能由字母、数字、下划线组成,且标识符的第一个字符只能是字母或下划线。所以,B,C,D选项正确,答案为A选项。37、数据库的数据模型分为A、层次、关系和网状B、网状、环状和链状C、大型、中型和小型D、线性和非线性标准答案:A知识点解析:数据库的数据模型分为层次、关系和网状三种。其中:用树形结构表示实体及其之间联系的模型称为层次模型,模型中结点是实体,树枝是联系,从上到下是一对多的关系。用网状结构表示实体及其之间联系的模型称为网状模型,它是层次模型的扩展,表示多个从属关系的层次结构,呈现一种交叉关系。关系模型的数据结构非常单一,在关系模型中,现实世界的实体以及实体间的各种联系均用关系来表示。故本题选A选项。38、以下叙述正确的是A、C程序由函数组成,可以不包含main函数B、每个C程序文件中的main函数都应当放在最前面C、每个C程序文件都应当包含一个main函数D、每个C程序都只能有一个main函数标准答案:D知识点解析:虽然一个C程序可以包含多个文件,但是有且只有一个文件中包含main函数,因此,选项A,C错误。main函数可以放在程序的任意位置。因此,选项B错误。答案为D选项。39、下列关于线性链表的叙述中,正确的是()。A、各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B、各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C、进行插入与删除时,不需要移动表中的元素D、以上三种说法都不对标准答案:C知识点解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可。故C选项正确。二、程序填空题(本题共1题,每题1.0分,共1分。)40、给定程序的功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1作为字符串输入结束的标志。然后将文件的内容读出显示在屏幕上。文件的读写分别由自定义函数ReadText和WriteText实现。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<string.h>#include<stdlib.h>voidWriteText(FILE*);voidReadText(FILE*);main(){FILE*fp;if((fp=fopen("myfile4.txt","w"))==NULL){printf("openfail!!\n");exit(0);}WriteText(fp);fclose(fp);if((fp=fopen("myfile4.txt","r"))==NULL){printf("openfail!!\n");exit(0);}ReadText(fp);fclose(fp);}/**********found**********/voidWriteText(FILE___1___){charstr[81];printf("\nEnterstringwith-1toend:\n");gets(str);while(strcmp(str,"-1")!=0){/**********fbund**********/fputs(___2___,fW);fputs("\n",fw);gets(str);}}voidReadText(FILE*fr){charstr[81];printf("\nhaReadfileandoutputtoscreen:\n");fgets(str,81,fr);while(!feof(fr)){/**********found**********/printf("%s",___3___);fgets(str,81,fr);}}标准答案:(1)*fw(2)str(3)str知识点解析:第一空:此处是补充函数参数名,参数类型已知是FILE文件指针,fbuts("\n",fw)是将字符“\n”写入文件,可知fw是文件指针名,因此第一空处应该是voidWriteText(FILE*fw);第二空:while(strcmp(str"-1")!=0)循环的结束标志是str字符串等于“-1”时循环退出,如果str不等于“-1”,执行循环体内容:用fbuts函数将str字符串写入文件。fputs函数的调用形式是:fputs(s,fp),其中s是指向字符串的指针或字符串数组名,fp是指向将要被写入的文件的文件指针,因此第二处应该是fputs(str.fw)。第三空:while(!feof(fr))循环的作用是不断读取文件直到到达文件尾,每次最多读81个,将读到的数据放在str字符串里,并用printf输出到屏幕,因此第三处应该是printf("%s"str)。三、程序修改题(本题共1题,每题1.0分,共1分。)41、由N个有序整数组成的数列已放在一维数组中,给定程序MODIl.C中函数fun的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,返回其下标值;反之,返回-1。折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(10whigh,查找结束。请改正程序中的错误,使它能得出正确结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。#include{}defineN10/************found************/voidfun(inta[],intm){intlow=0,high=N一1,mid;while(low<=high){mid=(low+high)/2;if(ma[mid])low=mid+1;elsereturn(mid);}return(一1);}main(){inti,a[N]={一3,4,7,9,13,45,67,89,100,180},k,m;printf("a数组中的数据如F:");for(i=0;i=0)printf("m=%d,index=%d\n",m,k);elseprintf("Notbefound!\n");}标准答案:(1)intfun(inta[],intm)(2)elseif(m>a[mid])知识点解析:(1)根据主函数中“k=fun(a,m);”,知道函数fun应该是返回int型的函数,所以第一个标识下面定义的“voidfun(inta[],intm)”应该改为“intfun(inta[],intm)”。(2)第二个标识下的“elseIf(m>a[mid])”是判断m是否比a[mid]大,在while循环中采用的是if-elseif-else语句,显然“elself”当中“If”应当小写,故第二标识下“elseIf(m>a[mid])”应改为“elseif(m>a[mid])”。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共38题,每题1.0分,共38分。)1、算法的有穷性是指()。A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法原则上能够精确地运行,而且人们用纸笔做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。2、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。A、12345ABCDEB、EDCBA54321C、ABCDE12345D、54321EDCBA标准答案:B知识点解析:栈是按照“先进后出”的原则组织数据的,入栈的顺序为12345ABCDE,则出栈的顺序应为其逆序,即EDCBA54321。3、下列关于线性链表的叙述中,正确的是()。A、各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B、各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C、进行插入与删除时,不需要移动表中的元素D、以上三种说法都不对标准答案:C知识点解析:一般来说,在线性表的链式存储结构中,各数据结点的存储序号是不连续的,并且各节点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只需改变节点的指针域即可。故C选项正确。4、在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。A、O(n)B、O(n2)C、O(log2n)D、O(nlog2n)标准答案:C知识点解析:二分查找的最坏情况是不断的二分直至无法再分时,仍然没有查找成功。对于有序的线性表,二分查找法只需比较log2n次。5、假定已建立以下数据链表结构,且指针p和q已指向如下图所示的结点:则以下选项中可将q所指结点从链表中删除并释放该结点的语句是()。A、(*)p.next=(*q).next;free(p)B、b=q一>next;free(q)C、p=q;free(q)D、p=>next=q一>next;free(q)标准答案:D知识点解析:要删除结点q,应首先由q的上一个结点p的指针域指向q的指针域所指向的结点,即p一>next=q一>next;,然后才能释放结点q,即free(q)。6、软件开发中,需求分析阶段可以使用的工具是()。A、N-S图B、DFD图C、PAD图D、程序流程图标准答案:B知识点解析:结构化分析方法是结构化程序设计理论在软件需求解析阶段的运用,数据流图(DataFlowDiagram,DFD)是结构化分析常用的工具之一,数据字典、判定树和判定表也是常用的结构化分析工具。程序流程图、NS图、PAD图等图形工具用于详细设计的过程中。7、在面向方法中,不属于“对象”基本特点的是()。A、一致性B、分类性C、多态性D、标识唯一性标准答案:A知识点解析:对象的基本特点有:①标识唯一性,是指对象是可区分的;②分类性,是指可将具有相同属性和操作的对象抽象成类;③多态性,是指同一个操作可以是不同对象的行为;④封装性,是指对象的内部对外不可见,在外面不可直接使用对象的处理能力,也不能直接修改对象的内部状态;⑤模块独立性,是指模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。8、在数据管理技术发展的三个阶段中,数据共享最好的是()。A、人工管理阶段B、文件系统阶段C、数据库系统阶段D、三个阶段相同标准答案:C知识点解析:数据库系统阶段实现了数据共享,具有数据的集成性.这使得数据可被多个应用所共享,还可以极大地减少数据冗余性。A项。在人工管理阶段,数据不保存,没有对数据进行管理的软件,数据不能共享;B项,文件系统阶段是数据库系统发展的初级阶段,它提供了简单的数据共享与数据管理能力,但是这种能力十分有限。从人工管理阶段到文件系统阶段再到数据库系统阶段,对数据共享的能力在不断增强。9、一间宿舍可住多个学生,则实体宿舍和学生之间的联系是()。A、一对一B、一对多C、多对—D、多对多标准答案:B知识点解析:实体间的联系有如下情况:①一对一(1:1);②一对多(1:m);③多对多(m:n)。本题中,一间宿舍对应多个学生,那么宿舍和学生之间的联系是一对多,学生和宿舍的联系是多对一。10、有三个关系R、S和T如下:由关系R和S通过进行运算得到关系T,则所使用的运算为()。A、笛卡尔积B、交C、并D、自然连接标准答案:D知识点解析:交和并运算要求关系R和S具有相同的属性,BC两项错误。R与S的笛卡儿积是一个4元关系,有4个元素,A项错误。R与S有公共的属性B,可通过公共属性的相等值进行连接,这种连接称之为自然连接。11、以下叙述中正确的是()。A、C程序的基本组成单位是语句B、C程序中的每一行只能写一条语句C、简单C语句必须以分号结束D、C语言必须在一行内写完标准答案:C知识点解析:C程序的基本组成单位是函数,A项错误;C程序以分号作为每个语句结尾,一行能写多条语句,也可以将一条语句分几行书写,BD两项错误;而简单C语言语句必须以分号结束,所以C项正确。12、C源程序中不能表示的数制是()。A、二进制B、八进制C、十六进制D、十六进制标准答案:A知识点解析:C语言中整型常量可以用十进制数、八进制数、十六进制数来表示。虽然计算机只能识别二进制数,但二进制不能用来表示整型常量。13、以下叙述中错误的是()。A、用户定义的函数中可以没有return语句B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值C、用户定义的函数中若没有return语句,则应当定义函数为voie类型D、函数的return语句中可以没有表达式标准答案:B知识点解析:用户定义的函数有两种:①void函数,可以没有return语句,如果有return语句,也不可以返回任何表达式;②指定返回类型函数,至少有一个返回语句。在一个函数内,可以根据需要在多处出现return语句,但无论有多少个return语句,return语句只会被执行一次,然后退出函数,并且只能返回一个函数值。14、以下选项中不能作为C语言合法常量的足()。A、'cd'B、0.1e+6C、"a"D、'\)11'标准答案:A知识点解析:常量包括整型常量、实型常量、字符常量和字符串常量等。单引号表示字符常量,但不能包含字符串。表达字符串常量时需用双引号。15、如有表达式(w)?(-x):(++y)。则其中与w等价的表达式是()。A、w==1B、w==0C、w!=1D、W!=0标准答案:D知识点解析:?:表达式形式为<表达式1>?<表达式2>:<表达式3>。当表达式1的值为真,则结果为表达式2的值;当表达式1的值为假,则结果为表达式3的值。可见表达式w等价于w!=0。16、以下选项中正确的定义语句是()。A、doublea:b:B、doublea=b=7:C、doublea=7.b=7:D、double,a,b:标准答案:C知识点解析:同一类型变量的定义时,不同变量之间需要用“,”分隔;定义变量时初始化赋值时不能用等号连接;变量类型说明后面不能用逗号,而是用空格分离。17、若变量已正确定义为int型,要通过语句scanf(”%d,%d,%d”,&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(u代表一个空格)()。A、1,2,3<回车>B、1u2u3<回车>C、1,uu2,uu<回车>3<回车>D、uu1.2,3<回车>标准答案:B知识点解析:scanf函数要求除格式控制符以外的字符都要原样输入。逗号是非格式符,所以需要原样输入,否则就不能正确读入数据。B项前两个数据后面没有紧跟一个逗号,格式不匹配,所以输入形式错误。18、执行以下程序段后,w的值为()。intw='A',x=14,y=15;w=((x|y)&&(w<'a'));A、一1B、NULLC、1D、0标准答案:C知识点解析:因为x=14,y=15都是非零整数,因此x|y=1。叉因为'A'+32='a',知w<'a'也为真,因此(x|y)&&(w<'a')的值为1。19、有以下程序:#include<stdio.h>main()chara=4:printf("%d\n",=a<<1);程序运行的结果是()。A、40B、16C、8D、4标准答案:C知识点解析:左移一位相当于原数乘以2,右移一位相当于除以2。a<<1结果为4*2=8,没有超过char类型的范围。20、有以下程序段:inta,b,c;a=10;b=50;c=30;if(a>b)a=b,b=c;c=a;printf("a=%db=%dc=%d",a,b,c);程序的输出结果是()。A、a=10b=50C=10B、a=10b=50C=30C、a=10b=30c=10D、a=10b=30c=50标准答案:A知识点解析:因为a=10,b=50,所以a<b,if语句判断条件不成立,于是执行c=a,得到c=10,a和b的值不变。21、有以下程序:#include<stdio.h>main(){intx=1,y=2,z=3;if(x>y)if(y<z)printf("%d",++z);elseprintf("%d",++y);printf("%d\n",x++);}程序运行的结果是()。A、331B、41C、2D、1标准答案:D知识点解析:else子句总是与最前面最近的不带else的if相结合,与书写格式无关,所以本题中的else语句与第二个if语句配对,且if和else都在第一个if的控制范围内。首先判断x>y不成立,直接退出第一个if语句,执行printf("%d\n",x++)。(x++)的值是x加之前的值,所以输出结果为1。22、有以下程序:#include<stdio.h>main(){ini=5:do{if(i%3==1)if(i%5==2){printf(”*%d”,i);break;}i++:}while(i!=0);printf(”n”):}程序运行的结果是()。A、*7B、*3*5C、*5D、*2*6标准答案:A知识点解析:在dowhile循环中,总是先执行后判断,所以循环体至少会被执行一次。在循环中,如果满足(i%3==1)&&(i%5==2),那么输出i的值,退出循环,否则i++,印果i==0则跳出循环。23、有以下程序:#include<stdio.h>main(){inti,j;for(i=3;i>1;i——){for(j=1;j<=2;j++)printf("%d",i+j);printf("\n");}}程序运行的结果是()。A、234345B、43254345C、233423D、4534标准答案:D知识点解析:外层主循环i从3减到1执行了3次(最后一次循环条件不成立,不执行),嵌套的循环j从1增到2,每轮执行2次。每次输出i+j的值,就可以得到如D选项的输出结果。每次换行发生在外循环完成一次循环之后。24、若有定义语句:chars[10]=”1234567\0\0”;,则strlen(s)的值是()。A、7B、8C、9D、10标准答案:A知识点解析:C语言规定以字符'\0'作为字符串结束的标识符。strlen函数返回的是字符串的长度,“1234567\0\0”与“1234567”等效,所以字符串长度是7。25、若有定义语句:intm[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误的是()。A、m[一一i]B、m[2*2]C、m[m[0]]D、m[m[i]]标准答案:C知识点解析::数组的下标从零开始,数组m中有5个元素,所以数组m即为m[0]=5,m[1]=4,m[2]=3,m[3]=2,m[4]=1。C项,m[0]=5,引用数组元素为m[5],但是数组下标范围是0~4,所以m[5]溢出,引用错误。26、有以下程序:#include<stdio.h>voidfun(inta[],intn){inti.t:for(i=0;i<n/2;i++){t=a[i]:a[i]=a[n一1一i];a[n一1一i]=t;}}main(){intk[10]={1,2,3,4,5,6,7,8,9,10},i;fun(k,5):for(i=2;i<8;i++)printf("%d",k[i]);printf("\n");}程序运行的结果是()。A、3456787B、876543C、1098765D、321678标准答案:D知识点解析:由于数组名本身是一个地址,所以在用数组名作为实参传递时,对应的形参相当于一个指针变量,在函数中可以通过指针变量来引用数组元素,从而改变元素的值。本题中函数fun的作用是将数组A的前n个元素进行逆转,fun(k,5)的结果是数组k的前五个元素1、2、3、4、5变为5、4、3、2、1。逆转后,输出数组中第3个至第8个元素。27、有以下程序:#include<stdio.h>voidfun(inta,intb){intt;t=a;a=b;b=t;}main(){intc[10]={1,2.3.45,6,7,8,9,0},i;for(i=0:i<10;i+=2)fun(c[i],c[i+1]);for(i=0;i<10;i++)printf("%d,",c[i]);printf("\n");程序运行的结果是()。A、1,2,3,4,5,6,7,8,9,0,B、2,1,4,3,6,5,8,7,0,9,C、0,9,8,7,6,5,4,3,2,1,D、0,1,2,3,4,5,6,7,8,9,标准答案:A知识点解析:在C语言中,函数参数传递的作用是“传值",形参和实参是两个没有关系的变量。函数fun交换了参数值,但只是交换了形参的值,结果并不会传递给实参。所以数组c没有发生变化,原样输出。28、有以下程序:#include<stdio.h>#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、1234B、1070C、1459D、3480标准答案:B知识点解析:数组x有4列。fun函数中for循环的作用是将二维数组前4行的对角线元素分别赋给b[0],b[1],b[2],b[3]。在主函数中,二维数组初始化为{1,2,3},{4},{5,6,7,8},{9,10},所以可以看出对角线元素为1070。29、若有定义语们:doublex[5]={1.0,2,3,4,5.0},*p=x,则错误引用X数组元素的是()。A、*pB、x[5]C、*(P+1)D、*X标准答案:B知识点解析:引用一维数组元素有多种方式。直接引用的表达式为:数组名[下标]。数组大小为n时,下标的取值范围为0~(n一1),所以本题中x的下标为0~4,x[5]溢出,B项错误。此外还可以通过指针引用一维数组元素。指针p指向该数组,所以*p表示x[0],A项正确;指针p+1指向数组x的第二个元素的地址,*(p+1)表示引用x的第二个元素,C项正确;x为x数组元素的首地址,*x表示对x[0]的引用,D项正确。30、下面的函数渊刚语句中,func函数的实参个数是()。func(f2(vl,v2),(v3,v4,v5),(v6,max(v7,v8)))A、3B、4C、5D、8标准答案:A知识点解析:函数调用中,实参有多个时,它们之间应该用逗号分隔。本题中的实参有3个,为f2(v1,v2)、(v3,v4,v5)、(v6,max(v7,v8))。其中f2(v1,v2)是函数做参数,(v3,v4,v5)是逗号表达式做参数,(v6,max(v7,v8))是逗号与函数相结合做参数。31、有以下程序:#include<stdio.h>intfun(inta,intb){if(b==0)returna:elsereturn(fun(一一a,一一b));}main(){printf("%d\n",fun(4,2));}程序运行的结果是()。A、1B、2C、3D、4标准答案:B知识点解析:fun函数是一个递归函数,其功能是:当b的值为零时,返回此时a的值;否则,返回fun(——a,——b),即将a和b的值分别减1后返回fun(a,b)。当b不断递减时,a也不断递减,直到b为零。执行过程为:执行fun(4,2),b=2,返回f(3,1),此时b=1,返回f(2,0),b=0,返回a的值2。32、有以下程序:#include<stdio.h>intfun(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通过数组指针引用二维数组,其作用是遍历s[1][k]~s[n一1][k],找出数组中最大的元素。33、有以下程序:#include<stdio.h>#include<stdlib.h>intfun(intn){int*P:P=(int*)malloc(sizeof(int)):*p=n;return*P;}main(){inta;a=fun(10):printf("%d\n",a+fun(10));}程序运行的结果是()。A、0B、10C、20D、出错标准答案:C知识点解析:fun函数的功能是申请一个指针p,把p指向的存储空间赋值为n,并返回p指向的空间的值,即为n。fun(10)的返回值为10,所以a=fun(10)后a的值为10,a+fun(10)=20。34、以下关于宏的叙述中正确的是()。A、宏名必须用大写字母表示B、宏定义必须位于源程序中所有语句之间C、宏替换没有数据类型限制D、宏调用比函数调用耗费时间标准答案:C知识点解析:A项错误,宏名标识符习惯用大写字母表示,但宏名可以是任何合法的C语言标识符,没有对大小写的强制性要求;B项错误.宏定义可以根据需要写在任何位置;D项错误,宏调用在编译前由编译预处理程序完成,不占用运行的时间。35、以下程序段中完全正确的是()。A、int*P;scanf("%d",&p);B、int*P;scanf("%d",p);C、intk,*p=&k;scanf("%d",p)D、intk,*P;*p=&k;scanf("%d",p)标准答案:C知识点解析:选项A错在没有对指针进行初始化,是无效指针,并且在scanf("%d",&p)中无需再进行取地址操作;选项B没有对指针进行初始化,是无效指针;选项D,语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。36、有以下程序:#include<stdio.h>structst{intx,y;}data[2]={1,10,2,20};main(){structst*P=data:printf("%d",1)一>y);printf("%d\n",(++p)一>x);}程序运行的结果是()。A、101B、201C、102D、202标准答案:C知识点解析:题目在定义结构体st的同时便定义了结构体数组data。可知data[0]={1,10},幽ta[1]={2,20}。结构体指针p指向数组的首地址,指向data[0],++p则指向data[1],所以输出p一>y和(++p)一>x即输出data[0].y和data[1].x。37、有以下程序:#include<stdio.h>main(){structSTU{charname[9];charsex;doublescore[2]};structSTUa={"Zhao",'m',85,90.0},b={"Qian",'f',95,92.0};b=a:printf("%s%c%2.0f%2.0f\n",b.name,b.sex,b.score[0],b.score[l]);}程序运行的结果是()。A、Qianf9592B、Qianm8590C、Zhaof9592D、Zhaom8590标准答案:D知识点解析:在C语言中,相同类型变量可以通过等号直接赋值,它会按照每个成员在结构体中的川页序一一对应赋初值.可知。a.name="Zhao",a.scx='f'a.score[0]=85.0,a.score[1]=90.0,b.name=”Qian”,b.sex='m',b.score[0]=95.0.b.score[1]=92.0。要特别注意a=b;语句,如果没有该条语句,则输出A选项的结果。38、有以下程序:#include<stdio.h>nlain()FILE*pf:char*sl="China",*s2="Beijing":pf=fopen("abc.dat","wb+");fwrite(s2,7,1,pf):rewind(pf);/*文件位置指针回到文件开头**fwrite(s1,5,1,pf):fclose(pf);}以上程序执行后。abe.dat文件的内容是()。A、ChinaB、ChinangC、ChinaBeijingD、BeijingChina标准答案:B知识点解析:pf是一个文件指针,fopen("abc.dat""wb+")执行后,fp指向可读写的二进制文件abc.dat。语句fwrite(s2,7,1,pf);是将s2的前7*1个字符的内容写入pf中,即Beijing。rewind(pf)是将文件位置指针移回到文件开头,语句fwrite(s1,5,1,pf)是从文件的开头位置向s1写入五个字符,所以结果为Chinang。二、程序填空题(本题共1题,每题1.0分,共1分。)39、给定程序中,函数fun的功能是:求ss所指字符串数组中长度最长的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指变量中。ss所指字符串数组中共有M个字符串,且串长<N。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<string.h>#defineM5#defineN20/******found******/intfun(char(*ss)1,int*n){inti,k=0,len=0;for(i=0;i<M;i++){len=strlen(ss[i]);/******found******/if(i==0)*n=2;if(len>*n){/******found******/3;k=i;}}return(k}:{main(){charss[M][N]={"shanghai","guang-zhou","beijing","tianjing","cchongqing"};intn,k,i;printf("Theoriginalstringsare:\n");for(i=0;i<M;i++)puts(ss[i]);k=fun(ss,&n);printf("Thelengthoflongeststringis:%d\n",n);printf("Thelongeststringis:%s\n",ss[k]);}标准答案:(1)[N](2)len(3)*n=len知识点解析:本题考查:字符数组处理;函数形参定义;for循环语句。填空1:形参ss是一个字符串数组的定义,其宽度为N,所以应填[N]。填空2:*n用来记录最长字符串的长度,此处取第一个字符串的长度赋值给变量*n,所以应填len。填空3:每循环一次,判断当前字符串的长度是否大于*n,如果大于,则*n=len。三、程序修改题(本题共1题,每题1.0分,共1分。)40、下列给定程序中,fun函数的功能是:根据形参m,计算下列公式的值。t=1+1/2+1/3+1/4+…+1/m例如,若输入5,则应输出2.283333。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdlib.h>#include<conio.h>#include<stdio.h>doublefun(intm){doublet=1.0;inti;for(i=2;i<=m;i++)/******found******/t+=1.0k:|******found******/returni;}voidmain(){intm;system("CLS"):printf("Pleaseenter1integernumber:");scanf("%d",&m);printf("Theresultis%1f\n",fun(m));}标准答案:(1)t+=1.0/i;(2)returnt;知识点解析:本题考查:for循环语句的循环条件;函数返回值。该题目考查分母成等差数列递增的一个数学公式,先看循环条件for(i=2;i<=m;i++),i从2开始递增到m,所以t的值应该是由1.0/i的值逐步循环叠加后的结果,而不是t+=1.0/k;。returni考查对程序的解读能力,当循环结束后(由输入m的值决定),函数返回当前t的值。四、程序设计题(本题共1题,每题1.0分,共1分。)41、请编写函数fun,其功能是:计算并输出给定10个数的方差。S一[((XX—X')2)/10]0.5其中:S=((XX一X')2)/10例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,则输出为S=11.730729。注意:请勿改动主main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:#include<math.h>#include<stdio.h>doublefun(doublex[10]){}voidmain(){FIILE*wf:doubles,x[10]=95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0};int1:printf("Theoriginaldatais:n");for(i=0;i<10;i++)printf("%6.1f",x[i]);printf("n"):s=fun(x):printf("s=%f\n",s);/************/wf=fopen("out.dat","w"):fprintf(wf,"f",s);fclose(wf):/************/标准答案:doublefun(doublex[10]){doublex1=0.0,s=0.O:inti:for(i=0;i<10;i++)x1=x1+x[i];x1=x1/10;/*求10个数的平均值*/for(i=0;i<10;i++)s=s+(x[i]一x1)*(x[i]一x1);returnsqrt(s/10);/*求10个数的方差*/}知识点解析:本题考查:平均值的求法;for循环;复合运算符;sqrt函数(求方差)。这是一道求公式的值的题目,程序中第1个循环用来完成求10个数的总和,接着再用xl=xl/10来求出平均值。第2个循环用来求累加和的值,最后将累加和的平方根返回,注意sqrt函数的应用。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、计算机能直接执行的程序是()。A、源程序B、目标程序C、汇编程序D、可执行程序标准答案:D知识点解析:计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe。所以选择D选项。2、假设有语句sizeof(double),则它是()。A、一个整型表达式B、一个双精度浮点型表达式C、一种函数调用D、一种函数定义标准答案:A知识点解析:sizeof(double)是C语言内部规定的一个计算参数(double)在计算机的内存中所占用的字节数量的函数,它返回一个整数值。3、以下程序:#includemain(){charstr[10];scanf(“%s”,&str);printf(“%s\nttstr):}运行上面的程序,输入字符串howareyou,则程序的执行结果是()。A、howB、howareyouC、hD、howareyou标准答案:A知识点解析:当从键盘输入howareyou时,由于scanf输入函数的特点是遇到空格时结束读入字符,因此,该程书只将how这3个字符送到了字符数组str中,并在其后自动加上结束符“\0”。4、下列数据结构中,能够按照“先进后出”原则存取数据的是()。A、循环队列B、栈C、队列D、二叉树标准答案:B知识点解析:栈是按“先进后出”的原则组织数据的。队列是按“先进先出”的原则组织数据的。5、若定义函数int*func(),则函数func的返M值为()。A、一个实数B、一个指向整型变量的指针C、一个指向整型函数的指针D、一个整型函数的入口地址标准答案:B知识点解析:今题考查函数返回值。fun函数的返回值类型为int*类型,即函数返回一个指向整型变量的指针。6、下述程序的输出结果是()。#includevoidmain(){inta[20],*p[4];inti,k=0;for(i=0;i<20;i++)a[i]=i;for(i=0;i<4;i++)p[i]=&a[i*i+1];for(i=0;i<4;i++){k=k+*p[i];}printf("%dt",k);}A、10B、18C、6D、数组元素引用不合法,输出结果不定标准答案:B知识点解析:第一个for循环,给数组a的20个元素分别赋值0—19;第二个for循环,给数组p赋值,p[0]=a[1]=1,p[1]=a[2]=2,p[2]=a[5]=5,p[3]=a[10]=10;第三个for循环,将数组p中元素的值进行累加,k=1+2+5+10=18。7、下面函数的功能是()。SSS(S,t)char*s,*t;{while(*s);while(*t)*(s++)=*(t++);returnS;}A、将字符串S复制到字符串t中B、比较两个字符串的大小C、求字符串的长度D、将字符串t续接到字符串S中标准答案:D知识点解析:本题考查指针变量的运用。本题中的函数实质上是将字符串t续接到字符串s中。8、设有定义:char*c;,以下选项中能够使字符型指针c正确指向一个字符串的是()。A、charstr[]=’’string’’;c=str;B、scanf(’’%s’’,c);C、c=getchar();D、charstr[]=’’string’’;strcpy(’’c,str’’)标准答案:A知识点解析:在题目的题干中定义了字符指针变量c,在选项A中,首先定义字符数组str,然后再把字符数组str的首地址赋给字符指针变量c。所以选项A是正确的。在选项B中,指针c没有正确初始化,指向的地址是为止的,因此不能在scanf函数中使用;在选项C中,getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕,如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取,即c只能指向一个字符而不能指向字符串;在选项D中,strcpy函数用于字符串拷贝,函数有两个参数,因此strcpyt:’’c,str")书写错误,所以选项D是错误的。9、以下选项中,能用作数据常量的是()。A、115LB、0118C、1.5e1.5D、0115标准答案:A知识点解析:A选项中115L表示115是长整型数据,合法。B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B错误。C选项中e后面应该是整数不能是小数1.5,所以C错误。D选项中八进制常量应该是数字“0”开始,而不是字母“o”开始。10、有以下程序:voidss(char*s,chart){while(*s){if(*s==t)*s=t-’a’+’A’;s++;}}main(){charstr1[100]="abcddfefdbd",c=’d’;ss(str1,c);printf("%s\n",str1);}程序运行后的输出结果是()。A、ABCDDEFEDBDB、abcDDfefDbDC、abcAAfefAbAD、Abcddfefdbd标准答案:B知识点解析:函数ss(char*s,chart)的功能是将指针s所指向的字符串中存在的字符“t”均改写成大写字母;所以main函数中引用函数ss后使得数组str1中的小写字母“d”均变成了大写字母“D”,然后输出数组str1,结果为:abcDDfefDbD。11、设有如下关系表:则下列操作正确的是()。A、T=R/SB、T=R×SC、T=R∩SD、T=R∪S标准答案:C知识点解析:T就是关系R中有的,同时S中也有的有序组(4、5、6),即交运算(∩)。12、下列工具中,不属于结构化分析的常用工具的是()。A、数据流图B、数据字典C、判定树D、N-S图标准答案:D知识点解析:结构化分析的常用工具有数据流图、数据字典、判定树和判定表。13、程序设计的任务包括()。A、编写程序代码并上机调试B、确定所用数据结构C、确定所用算法D、以上选项均正确标准答案:D知识点解析:程序设计是一门技术,需要相应的理论、技术、方法和工具来支持。程序设计的任务包括选项A)、B)、C)等方面。14、有下列程序:main(){intm,n,p;scanf("m=%dn=%dp=%d",&m,&n,&p);printf("0%d%d%d\n",m,n,p);}若想从键盘上输入数据,使变量m中的值为123,n中的值为456,P中的值为789,则正确的输入是()。A、m=123n=456p=789B、m=123n=456p=789C、m=123,n=456.p=789D、123456789标准答案:A知识点解析:scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什么字符,在输入数据时,按照一一对应的位置原样输入这些字符。15、有以下程序:#include<stdio.h>main(){inti,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf("%d",t[2-i][i]);}程序执行后的输出结果是()。A、357B、753C、369D、751标准答案:A知识点解析:二维数组t[][3]实际上指t[3][3]={{9,8,7},{6,5,4},{3,2,1}},通过循环语句for语句可以得到i=0,t[2][0]=3、i=1,t[1][1]=5、i=2,t[0][2]=7、i=3时循环结

温馨提示

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

评论

0/150

提交评论