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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷14(共9套)(共304题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、下列叙述中错误的是()。A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中,大、小写字母代表不同标识标准答案:A知识点解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。2、下列关于栈的叙述正确的是()。A、栈按“先进先出”组织数据B、栈按“先进后出”组织数据C、只能在栈底插人数据D、不能删除数据标准答案:B知识点解析:栈是按”先进后出”的原则组织数据的,数据的插入和删除都在栈顶进行操作。3、以下叙述中正确的是()。A、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式B、一条语句只能定义一个数组C、每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元D、在引用数组元素时,下标表达式可以使用浮点数标准答案:C知识点解析:同类元素的集合称为数组,数组元素在内存中占据连续的存储空间,答案C正确。方括号中可以为整型变量或者常量表达式,选项A错。在使用逗号运算苻的情况下,一条语句可以定义多个数组,选项B错。数组元素在数组中的下标为整型常量或者变量构成的整型表达式,不能为浮点数,选项D错。4、下列说法不正确的是()。A、int*fun();----fun是一个返回int指针的函数B、int(*fun)();---fun是一个返回int指针的函数C、int(*array[5])();----array是一个有5个元素的数组,每一个元素都是一个函数指针,指向一个返回int的函数D、int(*fun(int))(int);----fun是带有一个int参数的函数,返回值是一个函数指针,这个指针指向带有一个int参数并返回int的函数标准答案:B知识点解析:该函数中fun是一个函数指针。指向一个返回int的函数。5、若有定义intx,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++):(y++)中的条件表达式(x-y)等价的是()。A、(x-y<0||x-y>0)B、(x-y<0)C、(x-y>0)D、(x-y==0)标准答案:A知识点解析:考查条件表达式。条件表达式的形式为:表达式1?表达式2:表达式3,计算"表达式1"的值,若为"真",取"表达式2"的值作为整个条件表达式的值;若为"假",取"表达式3"的值作为整个条件表达式的值。本程序中要选能判定(x-y)为"真"的语句,即x!=y,或者(x-y<0||x-y>0),选A6、已知:intc[3][4];,则对数组元素引用正确的是()。A、c[1][4]B、c[1.5][0]C、c[1+0][0]D、以上表达都错误标准答案:C知识点解析:此题考查的是数组元素的引用。对于已定义的数组a[M][N],数组元素的正确引用必须满足行下标小于M,列下标小于N,且为正整数。因此,选项A)中列下标溢出;选项B)中行下标出现小数;选项C)满足要求。7、有以下程序:voidss(char*s,chart){while(*s){if(*s==t)*s=t-’a’+’A’;s++;}}main(){charstrl[100]="abcddfefdbd",c=’d’;ss(strl,c);printf("%s\n",strl);}程序运行后的输出结果是()。A、ABCDDEFEDBDB、abcDDfefDbDC、abcAAfefAbAD、Abcddfefdbd标准答案:B知识点解析:函数ss(char*s,chart)的功能是将指针s所指向的字符串中存在的字符“t”均改写成大写字母;所以main函数中引用函数ss后使得数组str1中的小写字母“d”均变成了大写字母“D”,然后输出数组str1,结果为:abcDDfefDbD。8、在C语言中,只有在使用时才占用内存单元的变量,其存储类型是()。A、auto和registerB、extern和registerC、auto和staticD、static和register标准答案:A知识点解析:C语言中,动态存储区域中存放的变量在使用时才分配内存空间。auto变量的存储单元是分配在内存的动态存储区中,每当进入函数体时自动分配存储单元。register变量也是自动类变量。static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储单元,直至程序运行结束。extern说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。9、有以下程序#includevoidmain(){chars[][={"01aXy");inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]<=’a’&&s[i]>=’z’)n++;printf("%d、n",n);}程序运行后的输出结果是()。A、0B、2C、3D、5标准答案:A知识点解析:这段程序的功能求出字符串s中字符的ASCII码小于小写字符a并且大于小写字符z的字符的个数。因为小写字符z的ASCII码大于小写字符a的ASCII码,所以满足a的ASCII码并且大于z的的ASCII码的字符是不存在的,所以输出0。10、以下关于宏的叙述中正确的是()。A、宏替换没有数据类型限制B、宏定义必须位于源程序中所有语句之前C、宏名必须用大写字母表示D、宏调用比函数调用耗费时间标准答案:A知识点解析:宏定义写在函数的花括号外边,作用域为其后的程序,通常在文件的最开头,所以B选项中宏定义必须位于源程序中所有语句之前是错误的。宏名一般用大写,但不是必须用大写,所以C选项错误。宏展开不占运行时间,只占编译时间,函数调用占运行时间(分配内存、保留现场、值传递、返回值),所以D选项错误。11、算法的空间复杂度是指()。A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间。所以选择A。12、下列叙述中正确的是()。A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性标准答案:B知识点解析:线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。13、有以下程序:#include<stdio.h>main(){unsignedchara=8,c;c=a>>3:printf("%d\n",c);}程序运行后的输出结果是()。A、32B、16C、1D、0标准答案:C知识点解析:字符常量与其ASCII码值一一对应,在计算的时候,可以使用该字符的ASCII码参与运算,输出时会根据格式控制符输出对应的字符或者ASCII码。右移运算符“>>”的运算规则是把左边运算数的各二进制位全部右移n位,n取决于“>>”右边的数值。字符a的ASCII码值为8,对应二进制为1000,所以a>>3=1,输出的字符c的ASCII码值为1,答案选C。14、软件测试的目的是()。A、评估软件可靠性B、发现并改正程序中的错误C、改正程序中的错误D、发现程序中的错误标准答案:D知识点解析:软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。15、下列关于逻辑运算符两侧运算对象的叙述中正确的是()。A、只能是整数0或1B、只能是整数0或非0整数C、可以是结构体类型的数据D、可以是任意合法的表达式标准答案:D知识点解析:逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。16、以下叙述中正确的是()。A、实用的C语言源程序总是由一个或多个函数组成B、用户自己定义的函数只能调用库函数C、不同函数的形式参数不能使用相同名称的标识符D、在C语言的函数内部,可以定义局部嵌套函数标准答案:A知识点解析:一个C程序可以有一个或多个程序文件,所以也可以有一个或多个函数,选项A)正确;除了main函数不能被其他函数调用之外,用户自定义函数可以调用其他任意函数,选项B)错误;函数是一个独立的模块,不同函数之间的定义相互没有影响,所以标识符可以相同,选项C)错误;函数体内部只可以调用但是不可以定义其他函数,选项D)错误;答案选A)。17、若有定义:inta,b,c;,想通过语句:scanf("%d,%d%d",&a,&b,&A、;把1、2、3分别输入给变量a、b、c,则正确的键盘输入是()。B、1,2,3<回车>C、1,2<tab>3<回车>D、1<回车><tab>2<tab>3E、D标准答案:B知识点解析:题意中,输入语句scanf()的格式控制字符串中,第一个%d与第二个%d之间有一个逗号,第二个%d与第三个%d之间有一个空格,所以输入的第一个整数和第二个整数之间也必须要有一个逗号,选项C、D错误;对于第二个整数和第三个整数之间的空格,可以使用tab、回车、空格符,选项A错误;本题答案为B。18、有以下程序#includeintfun(intas*intb){if(b==0)returna;elsereturn(fun(--a,--b));}main(){pfintf("%d\n",fun(4,2));}程序的运行结果是()。A、1B、2C、3D、4标准答案:B知识点解析:由程序可知,函数fun(inta,intb)是一个递归函数。所以当主函数中调用fun(4,2)时,其执行过程如下:fun(4,2)->fun(3,1)->fun(2,0),其返回值为2。所以正确答案为选项B)。19、有以下程序:#include<stdio.h>intfun(intx[],intn){staticintsum=0.i;for(i=0;i<11;i++)sum+=x[i];returnsum;}main(){inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;s=fun(a,5)+fun(b,4);printf("%d\n",s);程序执行后的输出结果是()。A、55B、50C、45D、60标准答案:D知识点解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。fun(a,5)的值是15,再次调用后sum=15,所以fun(b,4)=45,s=45+15=60。因此D选项正确。20、下列定义变量的语句中错误的是()。A、int_int;B、doubleint_;C、charFor;D、floatUS$;标准答案:D知识点解析:C语言规定,变量的标识符只能由字母、数字和下划线3种字符组成,且首字符必须为字母或下划线。在C语言中大写字母和小写字母被认为是两个不同的字符。选项A定义的变量标识符_int和选项B定义的变量标识符_int与C语言的关键字int是不同的,是正确的变量标识。选项C定义的变量标识符For与C语言中的关键字for是两个不同的标识符,所以选项C是正确的,而选项D包含有特殊字符$,因而其不符合C语言的变量命名规定。21、有以下程序:#include<stdio.h>main(){inty=10;while(y--);printf("y=%d\n",y);}程序执行后的输出结果是()。A、y=-1B、y=0C、y=1D、while构成无限循环标准答案:A知识点解析:y--表示y使用后再自减1,所以最后一次y的值为0.条件不成立但仍要执行自减操作,y的值为-1,跳出循环,打印y的值-1。22、下列选项中,能正确定义数组的语句是()。A、intnun[0..2008];B、intBum[];C、intN=2008;intnum[N];D、#defineN2008intnum[N];标准答案:D知识点解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误,C语言中数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初俩的个数;C选项错误,N为变量,不能用来定义数组大小。因此D选项正确。23、以下函数实现按每行8个输出w所指数组中的数据:#includevoidfun(int:*w,intn){inti;for(i=0;iA、if(i/8==0)printf(“\n”);B、if(i/8==0)continue;C、if(i%8==0)printf(“\n”);D、if(i%8==0)continue;标准答案:C知识点解析:要按照每行8个输出数据的话,横线处语句的功能应该为:当i是8的倍数时(即i%8==0),输出一个换行符。因此C选项正确。24、有以下函数:intaaa(char*s){char*t=s;while(*t++);t--;return(t-s);}以下关于aaa函数功能叙述正确的是()。A、将串s复制到串tB、比较两个串的大小C、求字符串s的长度D、求字符串s所占字节数标准答案:C知识点解析:本题重点考察的知识点while循环语句的应用。8tsta()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到t指向字符串结束标识处。当t指向结束标识处时,由于后缀++运算符的原因,它还会被再递增1,所以接下来的t--;语句让它回到结束标识处。最后返回t-s,s还是指向字符串第1个字符处,而t指向了字符串结尾,故返回值为字符串的长度值。因此C选项正确。25、有以下程序:#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;main(){inti,s=1:for(i=1;i<=2;i++)s=fun();printf("%din",s);}程序运行后的输出结果是()。A、0B、1C、4D、8标准答案:C知识点解析:fun函数中的x为静态局部变量,占用固定的内存单元,下一次调用时仍可保留上次调用时的值。也就是说,如果多次调用fun函数,x的定义只在第一次调用时有效,从第二次调用开始,x的定义相当于不存在,直接使用x的值。主函数中调用两次fun函数:第一次调用:x=1,x=x*2=2,s=2;第二次调用:(直接用上次x的值)x=x*2=4,s=4。因此C选项正确。26、有以下计算公式若程序前面已在命令行中包含math.h文件,不能够正确计算上述公式的程序段是()。A、if(x>=0)y=sqrt(x);if(x<0)y=sqrt(一x);B、if(x>=0)y=sqrt(x);elsey=sqrt(一x);C、y=sqrt(x);D、if(x<0)y=sqrt(一x);标准答案:C知识点解析:本题重点考查的知识点是:sqrt()函数。sqrt()函数的作用是计算平方根,要求输出的参数x必须大于等于0。题目公式的要求是无论x大于等于0还是小于0,y的值都为x绝对值的开方。选项C中调用了sqrt(x)函数,而没有判断x的正负,则y=sqrt(x)会出错。27、有以下程序:#include#includemain(){charW[20],a[5][10]={"abcdef","ghijkl","mnopq",’rstuv","wxyz."};inti;for(i=0;i<5;i++)w[i]=a[i][strlen(a[i])-1];w[5]=’\0’;puts(w);}程序的运行结果是()。A、flqv.B、agmrwC、ekpuyD、flqvz标准答案:A知识点解析:puts()函数将数组中存放的字符串输出,用"\n"取代字符串结束符"\0"。strlen()函数求字符串的实际长度(不包含结束标志)。程序中for循环将第i个字符串最后一个字符放入w数组下标值为i的位置。最后将数组最后一个字符赋值为“\0”,输出字符串w为flqv.。28、有以下程序:#include<stdio.h>#include<string.h>main(){inti,len;charb[]="WelcomeyoutoBeijing!";len=strlen(b);for(i=0;i<len;i++)if(b[i]==’’){strcpy(b,b+i+1);i=0;}printf("%s\n",b);}程序运行后的输出结果是()。A、Beijing!B、toBeijing!C、WelcomeyoutoBeijing!D、youtoBeijing!标准答案:A知识点解析:for循环的作用是每次遇到空格,将空格后面的移动到数组的最前面。因此数组最后的状态是“Beijing!\0g!\0ng!\neijing!\0”,但是printf(“%s”)打印遇到\0自动结束。因此,打印Beijing!。故答案为A选项。29、设有定义:doublex=2.12;,以下不能完整输出变量x值的语句是()。A、printf("x=%5.0f\n",x);B、printf("x=%f\n",x);C、printf("x=%lf\n",x);D、printf("x=%0.5f\n",x);标准答案:A知识点解析:暂无解析30、有以下程序#include<stdio.h>main(){inta=0,b=0;for(;a<5;a++){if(a%2==0)continue;b+=a;}printf("%d\n",b);}程序的运行结果是A、4B、10C、0D、15标准答案:A知识点解析:continue语句只能用在循环结构中,其作用是结束本次循环,即不再执行循环体中continue语句之后的语句,而是立即转入对循环条件的判断与执行。本题执行过程为:a=0,if条件成立,结束本次循环,执行下一次循环;a=1,b=1;a=2,if条件成立,结束本次循环,执行下一次循环;a=3,b=4;a=4,if条件成立,结束本次循环,执行下一次循环;a=5退出循环,输出4。A选项正确。31、有以下程序#include<stdio.h>voidf(intx[],intn){if(n>1){f(&x[1],n-1);printf("%d,",x[0]);}elseprintf("%d,",x[0]);}main(){intz[6]={1,2,3,4,5,6};f(z,6);printf("\n");}程序的运行结果是A、6,5,4,3,2,1,B、1,1C、1,1,1,1,1,1,D、1,2,3,4,5,6,标准答案:A知识点解析:在调用一个函数的过程中又出现直接或间接的调用该函数本身,称为函数的递归调用。本题目中递归函数调用执行过程为:f(z,6)->f(&z[1],5)->f(&z[2],4)->f(&z[3],3)->f(&z[4],2)->f(&z[5],1),输出x[0],也即z[5]=6,返回执行f(&z[4],2)之后的输出x[0]语句,即5,同理再返回上一个f函数,依次输出4,3,2,1,A选项正确。32、有以下程序(字母A的ASCII代码为65)#include<stdio.h>main(){charc1=’A’,c2=’Y’;printf("%d,%d\n",c1,c2);}程序运行后的输出结果是A、输出格式不合法,输出出错信息B、A,YC、65,90D、65,89标准答案:D知识点解析:一个整数,只要它的值在0~255范围之内,也可以用字符形式输出,输出之前,系统会将该整数转化为相应的ASCII码字符;字符也可以用整型来输出,输出的是对应的ASCII值。’A’的ASCII值为65,’Y’的ASCII值为89,D选项正确。33、设数据集合为D={1,3,5,7,9},D上的关系为R,下列数据结构B=(D,R)中为非线性结构的是A、R={(5,1),(7,9),(1,7),(9,3)}B、R={(9,7),(1,3),(7,1),(3,5)}C、R={(1,9),(9,7),(7,5),(5,3)}D、R={(1,3),(3,5),(5,9)}标准答案:D知识点解析:一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件,也最多有一个后件,则称为线性结构,在数据结构中习惯称为线性表。A选项中,5为根结点,线性表为51793。B选项中,9为根结点,线性表为97135。C选项中,1为根结点,线性表为19753。D选项,结点1与7都是根结点,属于非线性结构,故D选项正确。34、简单程序设计步骤中不包括A、编码B、确定算法C、安装编译程序D、调试标准答案:C知识点解析:简单程序设计步骤为:确定数据结构、确定算法、编码、调试、整理文档,不包括安装编译程序,故答案为C选项。35、有语句:k=x<y,(y<z,1:0):0;,以下选项中,与此语句功能相同的是A、if(x<y||y<z)k=1;elsek=0;B、if(x<y)k=0;elseif(y<z)k=1;C、if(x<y)if(y<z)k=1;elsek=0;D、if(x<y&&y<z)k=1;elsek=0;标准答案:D知识点解析:表达式1:表达式2:表达式3,若表达式1为真,则执行表达式2,表达式2的值就作为整个条件表达式的值,否则执行表达式3,,表达式3的值就作为整个条件表达式的值。题中,k=x<y,(y<z?1:0):0,执行顺序为先判断x<y是否为真,为真时执行(y<z,1:0),再判断y<z是否为真,为真时,k=1否则k=0。因此判断,答案为D选项。36、设有定义:chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A、gets(s);B、while((s[i++]=getchar())!=’\n’);s[i]=’\0’;C、scanf("%s",s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:C知识点解析:字符串的输入不能使用scanf("%s",s);而应该使用gets(s)。37、一棵完全二叉树共有360个结点,则在该二叉树中度为1的结点个数为A、0B、1C、180D、181标准答案:B知识点解析:在二叉树中,一个结点所拥有的后件个数称为该结点的度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。由定义可以知道,完全二叉树中度为1的结点个数为1或者0。若结点总数为偶数,则有1个度为1的结点;若结点总数为奇数,没有度为1的结点。由于题目中的完全二叉树共有360个结点,则度为1的结点个数为1。故选择B选项38、有以下函数定义:intfun(doublea,doubleb){returna*b;}若以下选项中所用变量都已正确定义并赋值,错误的函数调用是()。A、if(fun(x,y)){……}B、z=fun(fun(x,y),fun(x,y));C、z=fun(fun(x,y)x,y);D、fun(x,y);标准答案:C知识点解析:本题考查函数调用时的参数传递。选项C)中第一个参数的表达式不正确,因此不能得到正确的结果。39、有以下程序:#include<stdio.h>intf(intn){staticinta=1;n+=a++;returnn:)main(){Inta=3,s:s=f(a);s=s+f(a);printf("%d\n",s);}程序运行以后的输出结果是()。A、7B、8C、9D、10标准答案:C知识点解析:在函数f中,整型变量a为静态变量,所以每次调用函数f时不再为a重新赋值.而且a的值只有在程序结束时才被释放。第一次调用f后n=4,a=2;第二次调用时,a已经变成2了,所以结果为4+5=9。40、设有以下函数:voidfun(intn,char*s){……}则下面对函数指针的定义和赋值均是正确的是()。A、void(*pf)();pf=fun;B、void*pf();pf=fun:C、void*pf();*pf=fun:D、void(*pf)(intchar);pf=&fun:标准答案:A知识点解析:函数指针的一般定义形式为:数据类型(*指针变量名)()。D项中,void(*pf)(int,char)带有两个数据类型,不符合函数指针定义。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。注意:不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>typedefstruct{intnum;charname[9];floatscore[3];}STU;voidshow(STUtt){inti;printf("%d%s:",tt.num,tt.name);for(i=0;i<3;i++)printf("%5.1f",tt.score[i]);printf("\n");}/******found******/voidmodify(【1】*ss,floata){inti;for(i=0;i<3;i++)/******found******/ss一>【2】*=a;}main(){STUstd={1,"Zhanghua",76.5,78.0,82.0};floata;printf("Theoriginalnumberandnameandscores:\n");show(std);printf("Inputanumber:");scanf("%f",&a);/******found******/modify(【3】,a);printf("Aresultofmodifying:\n");show(std);}标准答案:(1)STU(2)score[i](3)&std知识点解析:本题考查:数组变量赋值;函数实参定义。本题是利用结构体存储学生记录,对记录进行修改并由实参ss返回。填空1:实参ss是一个结构型指针变量,所以应填STU。填空2:该学生的各科成绩都乘以一个系数a,所以应填score[i]。填空3:函数的调用,由于函数定义时使用的指针结构型变量,所以应填&std。三、程序修改题(本题共1题,每题1.0分,共1分。)42、下列给定程序中,函数fun的功能是:求两个非零正整数的最大公约数,并作为函数值返回。例如,若num1和num2分别为49和21,则输出的最大公约数为7;若num1和num2分别为27和81,则输出的最大公约数为27。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>intfun(inta.intb){intr,t;if(a<b){/******found******/t=a;b=a;a=t;}r=a%b;while(r!=0){a=b;b=r;r=a%b;}/******found******/return(a);}main(){intnum1,num2,a;printf("Inputnum1num2:");scanf("%d%d",&num1,&num2);printf("num1=%dnum2=%d\n",num1,num2);a=fun(num1,num2);printf("Themaximuncommondivisoris%d\n",a);}标准答案:(1)t=a;a=b;b=t;(2)return(b);或returnb;知识点解析:本题考查:return语句,功能是计算表达式的值,并将其返回给主调函数。求最大公约数算法一般采用辗转相除法。辗转相除法的算法为:首先将m除以n(m>n)得余数r,再用余数r去除原来的除数,得到新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。(1)程序首先判断参数a和b的大小,如果a<b则进行交换,这里是一个数学逻辑错误,应先将a的值赋给中间变量t,再将b的值赋给a,最后将t的值赋给b。(2)当余数r为0时,除数b即为所求的最大公约数,所以函数应返回b。四、程序设计题(本题共1题,每题1.0分,共1分。)43、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组S中,请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。注意:部分源程序在文件PROG1.C文件中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#include#defiheN16typedefstruct{charnum[10];ints;}STREC;intfun(STREC*a,STREC*b){}main(){STRECs[N]={{“GA05”,85),{“GA03”,76),{“GA02”,69},{“GA04”,85),{“GA01”,91},{“GA07”,72),{“GA08”,64},{“GA06”,87},{“GA015”,85),{“GA013”,91),{“GA012”,64},{“GA014”,91),{“GAO11”,91},{“GA017”,64),{“GA018”,64},{“GA016”,72}};STRECh[N];inti,n;FILE*out;n=fun(s,h);printf(“The%dlowestscore:\n”,n);for(i==0;i标准答案:inti,j=0,min=a[0].s;for(i=0;ia[i].s){j=0;b[j++]=a[i];min=a[i].s;}elseif(min==a[i].s)b[j++]=a[i];}returnj;知识点解析:该程序功能是把分数最低的学生数据放在b所指的数组中。本题是关于求解结构体中某些成员的最小值,首先将第一个值设定为最小值,并在循环中将其他所有值与该值进行比较,求得最小值。然后将最小值与所有值进行比较,求得所有的最小值。[解题思路](1)要把最低分数的学生数据放在数组中,首先求出最低分数,再使用一个for循环把所有的成绩进行比较,找出最低的分数来。(2)找出所有与最低分数相等的学生,并将最低分数的人数累加。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、数据库技术的根本目标是()。A、数据存储B、数据共享C、数据查询D、数据管理标准答案:B知识点解析:数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。2、有以下程序:main(){intk=33;printf("%d,%o,%x",k,k,k);}执行后的输出结果是()。A、33,033,0x21B、33,033,21C、33,041,021D、33,41,21标准答案:D知识点解析:本题考查不同进制间的转换。printf输出函数中输出变量的格式,由输出格式符决定。题中“%o”格式符表示以八进制的形式输出;“%x”格式符表示以十六进制的形式输出。“33”的八进制和十六进制分别是41和21。3、下列各选项中,不属于序言性注释的是()。A、程序标题B、程序设计者C、主要算法D、数据状态标准答案:D知识点解析:注释一般为序言性注释和功能性注释。序言性注释常位于程序开头部分,它包括程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期及修改日期等。功能性注释一般嵌在源程序体之中,用于描述其后的语句或程序的主要功能。4、有以下程序#includemain(){inta=1,b=0;printf("%d,",b=a+b);printf("%d\n",a=2*b);}程序运行后的输出结果是()。A、1,2B、1,0C、3,2D、0,0标准答案:A知识点解析:考查数据的输入,printf("%d,",b=a+b);先计算b=a+b,得出b=1,再输出b值。语句printf("%d\n",a=2*b);先计算a=2*b,得出a=2,再输出a值。所以输出结果为A)。5、以下关于C语言函数参数传递方式的叙述正确的是()。A、数据只能从实参单向传递给形参B、数据可以在实参和形参之间双向传递C、数据只能从形参单向传递给实参D、C语言的函数,参数既可以从实参单向传递给形参,也可以在实参和形参之间双向传递,可视情况选择使用标准答案:A知识点解析:数据只能由实参单向传递给形参,称为“值传递”,数组名、指针等作参数,实参传递给形参的是地址值,这样形参和实参就指向同一段内存单元,在函数体内对形参数据的改变也将影响到实参的值。6、有以下程序:#include<stdio.h>intf(intn){staticinta=1:n+=a++;returnn;}main(){inta=3,s;s=f(a);s=s+f(a);printf("%d\n",s);}程序运行以后的输出结果是()。A、7B、8C、9D、10标准答案:C知识点解析:在函数f中,整型变量a为静态变量,所以每次调用函数f时不再为a重新赋值,而且a的值只有在程序结束时才被释放。第一次调用f后n=4,a=2;第二次调用时,a已经变成2了,所以结果为4+5=9。7、有以下函数:intfun(char*x,char*y){intn=0;while((*x==*y)&&*x!=’\0’){x++;y++;n++;}returnn;}函数的功能是()。A、将y所指字符串赋给x所指存储空间B、查找x和y所指字符串中是否有’\0’C、统计x和y所指字符串中最前面连续相同的字符个数D、统计x和y所指字符串中相同的字符个数标准答案:C知识点解析:本题中由循环条件可知遇到‘\0’或x与y所指的字符的值不等中的一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个数。8、以下程序段中的变量已定义为int类型,则sum=pad=5;pad=sum++,pad++,++pad;printf("%d\n",pad);程序段的输出结果是()。A、6B、4C、5D、7标准答案:D知识点解析:赋值运算符的优先级高于逗号运算符,因此语句“pad=sum++,pad++,++pad”的执行顺序为pad=sum++,pad=5;pad++,pad=6;++pad,pad=7,输出7。9、已有定义“inta=3;”和输出语句“printf("%8x",a),”以下正确的叙述是()。A、整型变量的输出格式符只有%d—种B、%x是格式符的一种,它可以适用于任何一种类型的数据C、%x是格式符的一种,其变量的值按十六进制数输出,但%8x是错误的D、%8x是正确的格式符,其中数字8规定了输出字段的宽度标准答案:D知识点解析:本题考查printf函数的格式。“%8x”表示以十六进制无符号形式输出整型数据。“8”表示指定输出数据的宽度为8位。10、有以下程序#include<stdio.h>voidmain(){intn=2,k=1;while(!(k>0||n++));printf(’’%d%d\n’’,k,n);}程序运行后的输出结果是()。A、02B、13C、57D、12标准答案:D知识点解析:在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断“n++’是否为真,“(k>0‖n++)”表达式的值为真。“!(k>0‖n++)”表达式的值为假,所以while语句中的条件不满足,循环语句不会执行,变量n的值也不会加1,所在输出变量k和n的值是1和2。11、以下叙述中错误的是()。A、使用三种基本结构构成的程序只能解决简单问题B、结构化程序由顺序、分支、循环三种基本结构组成C、C语言是一种结构化程序设计语言D、结构化程序设计提倡模块化的设计方法标准答案:A知识点解析:已经证明,由顺序、分支、循环这三种基本结构组成的算法可以解决任何复杂的问题。选项A)叙述有误。12、有以下程序:#include#include“string.h”voidfun(char*s[],intn){char*t;inti.d;for(i=0;istrlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={“bcc”,“bbcc”,“xy”,“aaaacc”,“aabcc”);fun(ss,5);printf(“%s,%s\n”,ss[0],ss[4]);}程序的运行结果是()。A、xy,aaaaccB、aaaacc,xyC、bcc,aabccD、aabcc,bcc标准答案:A知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列元素,所以执行fun(SS,5)函数后,*ss[]={"xy","bcc","bbcc""aabcc""aaaacc"},所以调用printf函数输出ss[0],ss[4]的值分别为xy,aaaacc。13、设有定义:structcomplex{intreal,unreal;}datal={1,8},data2;则以下赋值语句中错误的是()。A、data2={datal.real,datal.unreal};B、data2=(2,6);C、data2.real=datal.real;D、data2->real=datal.unreal;标准答案:C知识点解析:本题主要考查结构体变量的定义与初始化。题目中定义了complex类型的结构体变量data1和data2,并对data1进行了初始化。可以用一个结构体变量的成员对另一个结构体变量的成员赋值。14、以下选项中可用作C程序合法实数的是()。A、0.1B、3.0e0.2C、E9D、9.12E标准答案:A知识点解析:C程序的合法实数有两种表示形式,一种是小数形式,另一种是指数形式,对于用指数形式表示的实数来说,需要注意的是字母e或E之前必须要有数字,且字母e或E后面的指数必须为整数,所以选项A)为正确答案。15、以下程序的输出结果是()。#include<Stdio.h>structst{intx;int*y;)*p;intdt[4]={1,2,3,4};structstaa[4]={2,&dt[0],3,&dt[0],4,&dt[0],5,&dt[0],};main(){p=aa;printf("%d\n",++(p->x));}A、1B、2C、3D、4标准答案:C知识点解析:程序首先将指针p指向结构体数组aa的首地址,通过p->x引用了结构体数组aa[0]的第一个成员2;++(p->x)是将p->x的值加1,所以输出结果为3。16、若i、j已定义成int型,则以下程序段中内循环体的总执行次数是()。for(i=6;i>0;i--)for(i=0;j<4.j++){…}A、20B、24C、25D、30标准答案:B知识点解析:本题考查的是嵌套for循环执行次数。对于外层i的循环中任何一个i,内层j的循环中的j都要从0变化到3,j=4时退出循环;然后外层i循环的i减少1,内层循环的j仍要从0变化到3,j=4时退出循环……直到外层i循环的i变为0,退出i循环。所以执行多重循环时,对外层循环变量的每一个值,内层循环的循环变量都要从初始值变化到终值。对外层循环的每一次循环,内层循环要执行完整的循环语句。外层for语句执行6次,内层for语句执行4次,所以内循环体执行6*4=24次。17、结构化程序设计的基本原则不包括()。A、多态性B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A)。18、有以下程序:#include<stdio.h>main(){intc;while((c=getchar0)!=’\n’){switch(c-’3’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);case4:putchar(c+3);break;}}printf(’’\n’’);}从第一列开始输入数据(<CR>代表一个回车符):3845<CR>,则程序输出结果为()。A、77889B、77868C、776810D、77886610标准答案:A知识点解析:题中while循环的条件是:当从键盘读入的字符不是“’\n’”时,执行while循环。输入第一个字符3时:执行case0,什么也不输出;case1,输出7;case2,输出7;遇到break语句,跳出switch语句。输入第二个字符8时“c-’3’=5”,不执行任何语句。输入第三个字符4时“c-’3’=1”,执行case1输出8;case2,输出8;遇到break语句,跳出switch语句。输入第四个字符5时“c-’3’=2”,执行case2,输出9;遇到break语句,跳出switch语句。19、有以下程序:#includemain(){chara=4;printf("%d\n",a=a<<1);}程序的运行结果是()。A、16B、8C、40D、4标准答案:B知识点解析:本题考查位运算。题目中将4向左移一位然后重新赋值给a,4左移一位为8,程序运行结果为8,选项B正确。20、若有以下定义,则对数组元素的正确引用是()。inta[5],*p=a;A、*&a[5]B、(*a)+2C、*p+4D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。选项A)、C)没有这种引用形式;选项B),(*a)+2与*a+2相同,表示第一一个元素的值加2:选项D),*(a+2)引用数组的第3个元素。21、有以下程序:#inc1ude#inc1ude"string.h"voidfun(char*s[],intn){char*t,inti,j,for(i=0;istrlen(s[j]){t=s[i];s[i]=s[j];s[j]=t;}}main(){char*ss[]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的运行结果是()。A、xy,aaaaccB、aaaacc,xyC、bcc,aabccD、aabcc,bcc标准答案:A知识点解析:从main函数入手,定义了一个一维数组并赋初值,接着调用函数fun(),函数的功能是:比较数组中各元素的长度,按元素长度从小到大的顺序排列元素,所以执行“fun(ss,5)”函数后,“*ss[]={"xy","bcc","bbcc","aabcc","aaaacc"}”,所以调用printf函数输出ss[0],ss[4]的值分别为xy,aaaacc。22、有以下程序:#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,5,3B、3,5,3,5C、5,3,3,5D、5,3,5,3标准答案:B知识点解析:C语言中,函数参数传递的功能是“传值”,即形参和实参是两个没有关系的变量。本题程序中函数的形参为指针变量,函数内部交换的是地址值,不是地址值所指向的值,所以不会改变实参的值。23、有以下程序:#include<stdio.h>#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i<=2;i++){intmax=a[i][0];for(j=i;j<=2;j++)if(max<a[i][j])max=a[i][j];b[i]=max;}}main(){intx[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;fun(x,y);for(i=0;i<=2;i++){prA、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,。24、有如下程序段:intx=12:doubley=3.141593;prinff(“%d%8.6f”,x,y);其输出结果是()。A、123.141593B、123.141593C、12,3.141593D、123.1415930标准答案:A知识点解析:printf函数中格式字符“%8.6”的含义是:变量y的输出宽度为8(包括小数点),小数点后面保留6位小数,且右对齐。所以选择A。25、软件测试的目的是()。A、评估软件可靠性B、发现并改正程序中的错误C、改正程序中的错误D、发现程序中的错误标准答案:D知识点解析:软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。不是为了评估软件或改正错误。26、有以下程序:#include<stdio.h>main(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%d\n",y);}程序运行后的输出结果是()。A、1B、2C、0D、3标准答案:C知识点解析:因为x=1,!x为0,x==0为false,所以if和elseif的判断条件都不满足,程序运行时只执行x,y的初始化语句和printf()函数,打印出y的值为0,故答案为C。27、有以下程序:#includevoidfun(char*c,intd){*c=*c+1:d=d+1:printf(“%e,%e,”,*c,d);}main(){charb=’a’,a=’A’;fun(&b,a);printf(“%c,%c\n”,b,a);}程序运行后的输出结果是()。A、b,B,b,AB、b,B,B,AC、a,B,B,aD、a,B,a,B标准答案:A知识点解析:本题重点考察函数的调用,首先要了解字母对应的ASCⅡ码。例如A为65,a为97。即字母+1则可得到下一个字母。其次是函数形参和实参的问题,运行过程如下:在fun(&b,a)中,*c=’a’,d=65。*c+1=’b’,d+1=66,printf(”%c,%c,”*c,d);输出b,B,因为指针c指向地址的值为b,此时b=*c=’b’;函数返回执行printf(“%c,%c\n”,b,a);输出b,A,因此A选项正确。28、以下选项中能正确定义二维数组的选项是()。A、doublea[][3]={2*3};B、doublea[][3];C、doublea[][3]={};D、doublea[2][3]={{1.0},{2.0},{3.0,4.0}};标准答案:A知识点解析:如果第一维的长度没有指定,则定义的同时需要完成初始化,否则不知道分配多大的内存空间给它,所以选项B、C错误;二维数组a[2][3]中只有两个元素,都是一维数组,一维下标最大只能是a[1],所以选项D错误;若完成初始化的二维数组,第一维的长度没有指定,则第一维的大小按如下规则确定:若初值个数能被第二维大小整除,所得的商就是第一维的大小;若不能整除,则所得的商加1作为第一维的大小,所以选项A相当于:douhlea[1][3]=|6|;其中a[0][0]=6,其他元素赋值0,故选项A正确,答案为A。29、以下叙述中正确的是()。A、charc1,c2,*c3,c4[40];是合法的变量定义语句B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、数组下标的下限是1标准答案:A知识点解析:暂无解析30、若有定义语句:charstr[8]=’’abcdef\0\0’’;则strlen(str)的值是()。A、6B、7C、8D、9标准答案:A知识点解析:系统会在字符数组末尾加一个字符(’\0’)作为结束符,strlen()会将’\0’作为字符串的结束符,因此,本题中的字符串的实际长度是6。31、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:E-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。32、不能正确表示数学式的表达式是A、a/c*bB、a*b/cC、a/b*cD、a*(b/c)标准答案:C知识点解析:/号和*号的优先级处于平级,结合性都是自左至右?所以选择C,C式子表示的是?33、下面选项中合法的字符常量是A、XB、’X’C、’abc’D、’\’标准答案:B知识点解析:字符常量是用单引号括起来的一个字符。A选项中,使用双引号,所以是错误的;C选项中,’abc’是字符串,字符常量只能是单个字符,不能是字符串;D选项中,以反斜线"\"开头的是转义字符。因此B选项正确。34、当a=4,b=5,c=7,d=6时,执行下面一段程序:iffa<b)if(c<d)x=l:elseiffa<c)if(b<c)x=2;elsex=3;elsex=4;elsex=5;程序执行后,x的值为()。A、1B、2C、3D、4标准答案:B知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变量ch。在输入时,空格、回车符都将作为字符读入,而且只有在用户敲入Enter键时,读入才开始执行。gets()函数的调用形式为:gets(stradr),其中stradr。是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返同。35、有以下程序#include<stdio.h>voidfun(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选项正确。36、有以下程序#include<stdio.h>main(){inta=0,b=0,c=0,d=0;(++a||++b)?++c:++d;printf("%d,%d,%d,%d\n",a,b,c,d);}程序的运行结果是A、1,0,1,0B、1,1,0,1C、1,0,0,1D、1,1,1,0标准答案:A知识点解析:条件表达式一般形式:exp1:exp2:exp3,执行规则为:若exp1为真,求解exp2,输出exp2的值,不计算exp3的值;若为假,求解exp3,输出exp3的值,不计算exp2的值。本题程序执行过程为:求解逻辑表达式(++a||++b),先求解++a,a=1,则整个表达式为真,不计算++b,然后求解++c,不计算++d,最后得到a=1,b=0,c=1,d=0,A选项正确。37、下列叙述中错误的是A、算法的时间复杂度与算法所处理数据的存储结构有直接关系B、算法的空间复杂度与算法所处理数据的存储结构有直接关系C、算法的时间复杂度与空间复杂度有直接关系D、算法的时间复杂度与算法程序执行的具体时间是不一致的标准答案:C知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量。数据的存储结构直接决定数据输入,而这会影响算法所执行的基本运算次数,A选项叙述正确。算法的空间复杂度是指执行这个算法所需要的内存空间,其中包括输入数据所占的存储空间,B选项叙述正确。而算法的时间复杂度与空间复杂度没有直接关系,故选择C选项。算法程序执行的具体时间受到所使用的计算机、程序设计语言以及算法实现过程中的许多细节所影响,而算法的时间复杂度与这些因素无关,所以是不一致的,D选项叙述正确。38、设有n个数按从大到小的顺序存放在数组x中,以下能使这n个数在x数组中的顺序变为从小到大的是A、for(i=0;i<n/2;i++){t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}B、for(i=0;i<n;i++){t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}C、for(i=0;i<n/2;i++){t=x[i];x[i]=x[n-i+1];x[n-i+1]=t;}D、for(i=0;i<n/2;i+=2){t=x[i];x[i]=x[n-i-1];x[n-i-1]=t;}标准答案:A知识点解析:本题使用for循环实现数组元素首尾倒置。A选项中控制变量上限为n/2,用变量t实现数下标值i与n-i-1的元素交换,使数组元素首尾倒置,从而实现从小到大排列,A选项正确。B选项控制变量上限为n,用变量t实现数下标值i与n-i-1的元素交换,当i=n/2时,已经实现数组首尾倒置,而继续运行至i=n,将再次将新的数组首尾倒置,与原数组相比没有发生变化,依然是从大到小排列,B选项错误。C选项数组越界,i=0时x[n+1]不存在,C选项错误。D选项控制变量每次加2,实现数组偶数下标值的元素首尾倒置,奇数下标值元素不变,不能实现整个数组从小到大排列,D选项错误。39、有以下程序#include<stdio.h>main(){intm,n;scanf("%d%d",&m,&n);while(m!=n){while(m>n){m=m-n;}while(n>m){n=n-m;}}printf("%d\n",m);}该程序的功能是A、计算m和n的最小公倍数B、计算m和n的最大公约数C、计算m和n的差值D、找出m和n中的较大值标准答案:B知识点解析:题目使用更相减损术求最大公约数,其思想:1、任意给定两个正整数,判断它们是否都是偶数。若是,则用2约简,若不是则执行第二步。第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。因此。故答案为B选项.40、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。A、12345ABCDEB、EDCBA54321C、ABCDE12345D、54321EDCBA标准答案:B知识点解析:栈是按照“先进后出”的原则组织数据的,入栈的顺序为12345ABCDE,则出栈的顺序应为其逆序,即EDCBA54321。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序中,函数fun的功能是建立一个NxN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,…依次类推。例如,若N=5,生成的矩阵为:1111112221123211222111111请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#defineN7/**********found**********/voidfun(int(*a)____1____)(inti,j,k,m;if(N%2==0)m=N/2;elsem=N/2+1;for(i=0;i标准答案:(1)[N](2)i(3)i+1知识点解析:第一空:第一空处是补充函数定义,在主函数内fun的调用形式是:fun(x),x是二维数组名,因此fun函数的参数是一个二维数组指针,故第一空处应为“[N]”。第二空:i等于0时,此时第二空下的循环内a[0][j]=a[N-1][j]=1,显然这是对最外围的两列赋值为1;i等于1时,对外向内第2列元素的值全部赋值为2,依此类推,故第二空处i的初值应为“i”。第三空:“a[k][i]=a[k][N-i-1]=__3__;”是对矩阵的两行进行操作,题干要求矩阵每一圈上的值都相等,故这里和上一个循环的列上的值相同,也为“i+1”。三、程序修改题(本题共1题,每题1.0分,共1分。)42、下列给定程序中,函数fun的功能是:实现两个整数的交换。例如,给a和b分别输入60和65,输出为:a=65b=60。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>/*********found*********/voidfun(inta,b){intt;/*********found*********/t=b;b=a;a=t;}voidmain(){inta,b;system("CLS");printf("Entera,b:");scanf("%d%d",&a,&b);fun(&a,&b);printf("a=%db=%d\n",a,b);}标准答案:(1)voidfun(int*a,int*b)(2)t=*b;*b=*a;*a=t;知识点解析:(1)本题考查指针变量作函数参数。采用一般变量作参数,不能改变实参的值,采用指针变量作为参数则能够改变实参的值。主函数中fun的调用方式说明fun函数的参数应当为指针类型。(2)此处错误比较明显,因为a和b都是指针变量,进行变量交换时不能直接引用,应加上“*”号。四、程序设计题(本题共1题,每题1.0分,共1分。)43、请编写函数fun,函数的功能是:将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,二维数组中的数据为:333333334444444455555555则一维数组中的内容应是:333333334444444455555555。注意:部分源程序在文件PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(int(*s)[10],int*b,int*n,intmm,intnn){}main(){intw[10][10]={{33,33,33,33),{44,44,44,44),{55,55,55,55}},i,j;inta[100]={0),n=0;VoidNONO();printf(“Thematrix:\n”);for(i=0;i<3;i++){for(j=0;j<4;j++)printf(“%3d”,W[i][j]);printf(“\n”);}fun(W,a,&n,3,4);printf(“TheAarray:\n”);for(i=0;i标准答案:inti,j;for(i=0;i知识点解析:该程序功能是将M行、N列的二维数组中的数据,按行的顺序依次放到一维数组中。本题中首先要清楚数组元素在通常情况下是按行存放的,而如果要实现按行存放,其对应关系应为:s[0][0],s[0][1],s[0][2],…,s[0][M—1],s[1][0],s[1][1],…,s[N-1][M—1]。国家二级(C语言)机试模拟试卷第3套一、程序填空题(本题共1题,每题1.0分,共1分。)1、使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:计算出形参s所指字符串中包含的单词个数,作为函数值返回。为便于统计,规定各单词之间用空格隔开。例如,形参s所指的字符串为:ThisisaClanguageprogram.,函数的返回值为6。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:部分源程序在文件BIANK1.C中。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>intfun(char*s){intn=0,flag=0;while(*s!=’\0’){if(*s!=’’&&flag==0){/*********found*********/【1】;flag=1;)/*********found*********/if(*s==’’)flag=【2】;/*********found*********/【3】;}returnn;}main(){charstr[81];intn;printf("\nEnteralihete

温馨提示

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

评论

0/150

提交评论