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

下载本文档

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

文档简介

国家二级(C语言)机试模拟试卷8(共9套)(共344题)国家二级(C语言)机试模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、以下叙述中错误的是()。A、用户定义的函数中可以没有return语句B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值C、用户定义的函数中若没有return语句,则应当定义函数为void类型D、函数的return语句中可以没有表达式标准答案:B知识点解析:用户定义的函数有两种:①void函数,可以没有return语句,如果有return语句,也不可以返回任何表达式;②指定返回类型函数,至少有一个返回语句。在一个函数内,可以根据需要在多处出现return语句,但无论有多少个return语句,return语句只会被执行一次,然后退出函数,并且只能返回一个函数值。2、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。它包括从E-R图向关系模式转换和逻辑模式规范化及调整、实现。3、下面程序的输出结果是()。#includemain(){chara[]={’a’,’b’,’c’,’d’,’f’,’g’},*p;p=a;printf(“%c\n”,*p+4);}A、aB、bC、eD、f标准答案:C知识点解析:“*”号的优先级比“+”的优先级高,所以先执行“*p”;指针p指向的是数组的首地址,因此*p=a,再加4得‘e’。4、下列排序方法中,最坏情况下比较次数最少的是()。A、冒泡排序B、简单选择排序C、直接插人排序D、堆排序标准答案:D知识点解析:冒泡排序、简单插入排序与简单选择排序法在最坏情况下均需要比较n(n-1)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n。5、按照C语言规定的用户标识符命名规则,不能出现在标识符中的是()。A、大写字母B、下划线C、数字字符D、连接符标准答案:D知识点解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。所以D选项中的连接符不合法。6、有以下程序,其中%u表示按无符号整数输出()。main(){unsignedintx=0xFFFF;/*x的初值为十六进制数*/printf("%u\n",x);}程序运行后的输出结果是()。A、-1B、65535C、32767D、0xFFFF标准答案:B知识点解析:因为%u表示按无符号整数输出,而x用十六进制表示为0xFFFF,所以输出无符号整数的最大值65535。7、运行下列程序时,若输入数据为“321”,则输出结果是()。main(){intnum,i,j,k,s;scanf("%d",&num);if(num>99)s=3;elseif(num>9)s=2;elses=l;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);casel: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,j=2,k=1”。因为s=3,所以执行case3.输出k,j,i的值,然后通过break结束程序。8、有以下程序:#include<stdio.h>#definePT3.5;#defineS(x)PT*x*x;main(){inta=1,b:2;printf("%4.1f\n",S(a+b));}程序运行后的输出结果是()。A、7.5B、31.5C、程序有错无输出结果D、14.0标准答案:C知识点解析:宏定义不是C语句,末尾不需要有分号。所以语句printf("%4.1f\n",s(a+b));展开后为printf("%4.1f\n",3.5;*a+b*a+b;);所以程序会出现语法错误。9、数据库系统的三级模式不包括()。A、概念模式B、内模式C、外模式D、数据模式标准答案:D知识点解析:数据库系统的三级模式是概念模式、外模式和内模式,所以选择D。10、在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的()。A、连接码B、关系码C、外码D、候选码标准答案:D知识点解析:在关系中凡能惟一标识元组的最小属性集称为该表的键或码。二维表中可能有若干个键,它们称为该表的候选码或候选键。从二维表的所有候选键中选取一个作为用户使用的键称为主键或主码。11、若有定义语句:intx=10;,则表达式x-=x+x的值为()。A、0B、-20C、-10D、10标准答案:C知识点解析:算术运算符+的优先级高于-=,且-=的结合方向为自右向左,所以表达式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,选择C。12、以下定义数组的语句中错误的是()。A、intnum[][3]={{1,2},3,4,5,6};B、intnum[2][4]={{1,2},{3,4},{5,6}};C、intnum[]={1,2,3,4,5,6};D、intnum[][4]={1,2,3,4,5,6};标准答案:B知识点解析:B选项中定义的数组为2行4列,而赋值时赋成了3行所以出错。13、有以下程序:#include<stdio.h>voidfun1(char*p){char*q;q=p;while(*q!=’\0’){(*q)++;q++;}main(){chara[]={"Program"},*p;p=&a[3];fun1(p);printf("%s\n",a);}程序执行后的输出结果是()。A、PrphsbnB、ProhsbnC、ProgsbnD、Program标准答案:B知识点解析:(*q)++是q所指的字符加1,q++就是指针移到下一个字符。因此B选项正确。14、有以下程序:#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。15、以下程序的输出结果是()。#include<stdio.h>voidprt(int*x,int*y,int*z){printf(’’%d,%d,%d\n’’,++*x,++*y,*(z++));}main(){inta=10,b=40,c=20;prt(&a,&b,&c);prt(&a,&b,&c);}A、11,42,3112,22,41B、11,41,2012,42,20C、11,21,4011,21,21D、11,41,2112,42,22标准答案:B知识点解析:本题考查的是函数参数的传递及自加运算符。主函数中第一次调用函数“prt(&a,&b,&C;”,此函数中的输出语句“printf(’’%d,%d,‰\n’’,++*x,++*y,*(z++));”使得a和b的值均加1,而“*(z++)”由于先执行“z++”所以c的值不变;第二次调用函数“pn(&a,&b,&c);”使得a和b在上一次的基础上再各自加1(因为形参和实参进行的是地址传递),而c的值仍不变。16、对于循环队列,下列叙述中正确的是()。A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,也可以小于队尾指针标准答案:D知识点解析:循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构所以对头指针有时可能大于队尾指针有时也可能小于队尾指针。17、若有代数式,(其中e仅代表自然对数的底数,不是变量),则下列能够正确表示该代数式的C语言表达式是()。A、sqrt(abs(n^x+e^x))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(fabs(pow(n,x)+exp(x)))D、sqrt(fabs(pow(x,n)+exp(X)))标准答案:C知识点解析:n和e的x幂次方,要分别调用C语言的数学库函数doublepow(n,x)和doubleexp(x),因为这两个函数的返回值都为double型,对两者的和计算绝对值,调用库函数doublefabs(pow(n,x)+exp(x)),求出和的绝对值,再调用开平方函数doublesqrt(fabs(pow(n,x)+exp(x))),这样计算出的结果就是题干中表达式的值。18、设已有定义:floatx;则以下对指针变量p进行定义且赋初值的语句中正确的是()。A、float*p=&;x;B、int*p=(float)x;C、floatp=&;x;D、float*p=1024:标准答案:A知识点解析:考查指针变量的初始化。只能把对应类型的变量的地址赋值给指针,选项B错误;定义指针时要加上“*”标明该变量为一个指针变量,选项C错误;不能把一个整数直接赋值给指针变量,选项D错误;所以答案选A。19、if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是()。A、必须是逻辑值B、必须是整数值C、必须是正数D、可以是任意合法的数值标准答案:D知识点解析:if语句中的表达式可以是任意合法的数值,如常量、变量表达式。所以D选项正确。20、有以下程序:#includemain(){intk=5,n=0;do{switch(k){ease1:ease3:n+=1;k一一;break;default:n=0;k一一;case2:ease4:n+=2;k一一;break;}pfintf(“%d”,n);}while(k>0&&n<5);}程序运行后的输出结果是()。A、02356B、0235C、235D、2356标准答案:C知识点解析:k的值为5,逐个对case语句进行匹配,均不匹配,执行default下的语句n=0;k一一。再执行case2:cased.:后面的语句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一一;执行break语句跳出循环体,打印n的值5。此时n不满足条件k>0&&n<5,所以结束循环。整个程序的打印结果为235。21、下列方法中,不属于软件调试方法的是()。A、回溯法B、强行排错法C、集成测试法D、原因排除法标准答案:C知识点解析:软件调试主要采用以下三种方法:强行排错法:作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。回溯法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置。原因排除法:原因排除法是通过演绎和归纳,以及二分法来实现。22、设有如下类型说明语句typedefstruet{intnum;struet{inty,m,d;}date;}PER;则以下定义结构体数组并赋初值的语句中错误的是()。A、PERst[2]={{1001},2008,8,1,{1002},2006,5,20};B、PERst[2]={1001,{2008,8,1},1002,{2006,5,20}};C、PERst[2]={{1001,2008,8,1},{1002,2006,5,20}};D、PERst[2]={1001,2008,8,1,1002,2006,5,20};标准答案:A知识点解析:结构体PER类型定义了两个成员:num为整型,date为嵌套的结构体类型,初始化时,成员值的顺序必须与成员定义的顺序相同,num必须是整数,date必须是小括号括起来的嵌套的三个整数,选项A中,{1001}和{1002}都不是整数,所以选项A错误,本题答案为A。23、设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。如T=R×S,则T的元组的个数为()。A、6B、8C、9D、12标准答案:C知识点解析:R为n元关系,有p个元组S为m元关系,有q个元组。两个关系笛卡儿积是一个n+m元的关系,元组个数是q×p。所以T的元组的个数为9个。24、以下程序的输出结果是()。#include<stdio.h>main(){inta=8,b=6,m=1;switch(a%4){case0:m++;break;case1:m++:switch(b%3){default:m++;case0:m++:break;}}printf(’’%d\n’’,m);}A、1B、2C、3D、4标准答案:B知识点解析:本题考查switch语句。因为a=8,a%4=0,所以执行case0后面的语句,将m加1,遇到break语句跳出switch。25、阅读以下程序#includemain(){IntCase;floatprintF;printf("请输入2个数:");scanf("%d%f",&Case,&printF);printf("%d%f\n",Case,printF);}以下说法正确的是()。A、定义语句出错,Case是关键字,不能用作用户自定义标识符,printF不能用作用户自定义标识符.B、定义语句出错,Int无法被识别。C、定义语句无错,scanf不能作为输入函数使用D、定义语句无错,printf不能输出Case的值标准答案:B知识点解析:C语言是一种大小写敏感的语言,因此Int应为int,而CaseprintF则可以使用。26、下面不属于需求分析阶段任务的是()。A、确定软件系统的功能需求B、确定软件系统的性能需求C、需求规格说明书评审D、制定软件集成测试计划标准答案:D知识点解析:需求分析阶段的工作有:需求获取;需求分析;编写需求规格说明书;需求评审,所以选择D。27、设文件指针fp已定义,执行语句fp=fopen(“file”,“w”);后,以下针对文本文件file操作叙述的选项中正确的是()。A、只能写不能读B、写操作结束后可以从头开始读C、可以在原有内容后追加写D、可以随意读和写标准答案:A知识点解析:考查文件操作函数fopen的基础知识,以”w”方式打开文件,只能写不能读。选项A正确。28、有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x--){if(x%3){printf("%d,",x--);continue;}printf("%d,",--x);}}程序的运行结果是A、7,4,2,B、8,7,5,2,C、9,7,6,4,D、8,5,4,2,标准答案:D知识点解析:coutinue的作用是跳出循环体中剩余的语句而进行下一次循环,第一次循环x的值为8,循环体中if条件成立,打印x的值8后将x减1,再执行continue语句,跳出本次循环,第二次判断循环条件时,x的值变为6,不满足循环体内if条件,执行打印--x的操作,即打印5后跳出循环,第三次判断循环条件时x的值为4,满足循环体中if条件,执行打印x--的操作,即打印4,后将x值减一,执行continue语句,跳出本次循环,第四次判断循环条件时x的为2,满足循环体中if条件,打印x--,即打印2后将x减一,执行continue语句,跳出本次循环,在进行for条件表达式中第三个表达式x--的操作后x的值为0,不满足条件结束循环,所以打印结果为8,5,4,2,。29、有以下程序#includemain(){intk=5,n=0;while(k>0){switch(k){default:break;case1:n+=k;case2:case3:n+=k:}k--;}printf("%d\n",n);}程序运行后的输出结果是A、0B、4C、6D、7标准答案:D知识点解析:因为没有break语句,当k=2的时候,会顺序执行两条语句,k=1的时候,会顺序执行3条语句。30、设循环队列的存储空间为Q(1:35),初始状态为front=rear=35。现经过一系列入队与退队运算后,front=15,rear=15,则循环队列中的元素个数为A、15B、16C、20D、0或35标准答案:D知识点解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。在循环队列中进行出队、入队操作时,头尾指针仍要加1,朝前移动。只不过当头尾指针指向向量上界时,其加1操作的结果是指向向量的下界0。由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等。答案为D选项。31、设有定义:doublex=5.16894;,则语句printf("%lf\n",(int)(x*1000+0.5)/1000.);的输出结果是()。A、5.16900B、5.16800C、0.00000D、输出格式说明符与输出项不匹配,产生错误信息标准答案:A知识点解析:(x*1000+0.5)表示x移动3位小数,加0.5,也就是小数第4位加5,若这位大于等于5,则进1到个位。因为“5.16894*10005168.94+0.55169.44”所以(int)(x*1000+0.5)强制转换为整型结果为5169。(5169/1000.0)5.169,由于1000.0结果自动转换为浮点数所以printf(“%lf\n”,5.169)结果是5.16900。故答案为A选项32、若有以下程序#include<stdio.h>main(){inta=0,b=0,c=0c=(a+=++b,b+=4);printf("%d,%d,%d\n",a,b,c);}则程序的输出结果是A、1,5,1B、1,5,5C、-1,4,4D、-1,4,-1标准答案:B知识点解析:逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算,且逗号运算符的优先级最低,先计算a+=++b,结果a为1,b为1,然后计算b+=4,b的值为5,逗号表达式的值为其中最后一个表达式的值,所以将5赋给变量c,即a为1,b为5,c为5,所以选择B。33、有以下程序:#include#defineM6#defineg(x)(x*M)main(){intm,n,k=1;m=g(k+1);n=g(2);printf(’’%d,%d\n’’,m,n);}程序运行后的输出结果是()。A、7,12B、12,12C、7,11D、7,7标准答案:A知识点解析:宏定义一定要先代入再计算表达式的值,m=(k+1*6)=(1+6)=7;n=(2*6)=12。34、假如下列选项中的变量已正确定义并成功赋值,其中正确的表达式是()。A、int(22.1%2)B、n=y+m+5,++yC、x=y*3=x+kD、x=21%7.0标准答案:B知识点解析:求余运算符的左右两个数字都必须是整数,所以选项A和D错误,另外,进行整型强制转化时正确的表达式是(int)x,而不是int(x);选项C中不能将x+k的值赋给y*3,所以选项C错误。选项B中涉及逗号运算符,它的级别最低,因此,选项B表达式的执行过程是先将y+m+5的值赋给n,y值自加一次。35、设有某函数的说明为int*func(inta[10],intn);则下列叙述中,正确的是A、形参a对应的实参只能是数组名B、说明中的a[10]写成a[]或*a效果完全一样C、func的函数体中不能对a进行移动指针(如a++)的操作D、只有指向10个整数内存单元的指针,才能作为实参传给a标准答案:B知识点解析:本题重点考察返回指针值的函数相关知识,返回指针值的函数,一般定义形式为:类型名*函数名(参数列表)。func函数被定义为指针型函数,它的形参inta[10]和intn,分别指一维数组a[0]和整型变量n。36、有以下程序#include<stdio.h>structS{inta;int*b;};main(){intx1[]={3,4},x2[]={6,7};structSx[]={1,x1,2,x2};printf("%d,%d\n",*x[0].b,*x[1].b);}程序的运行结果是A、1,2B、3,6C、4,7D、变量的地址值标准答案:A知识点解析:程序的执行过程为:定义整型数组x1,x2并进行初始化,两个数组长度均为2。定义结构体数组x,并为其初始化,则x[0].a=1,x[0].b=x1,x[1].a=2,x[0].b=x2。输出x[0]的成员指针b指向的内存单元值,即数组x1的第一个元素3,输出x[1]的成员指针b指向的内存单元值,即数组x2的第一个元6。程序的运行结果是3,6,B选项正确。37、以下对C语言函数的叙述中正确的是A、调用函数时,只能把实参的值传给形参,形参的值不能传给实参B、函数既能嵌套定义,又能递归定义C、函数必须有返回值,否则不能使用D、程序中有调用关系的所有函数必须放在同一个源程序中标准答案:A知识点解析:C语言不能嵌套定义函数,能递归定义函数,因此B选项错误;函数可以没有返回值,没有返回值的函数返回类型为void,C选项错误;程序有调用关系的所有函数可以不放在同一源程序中,D选项错误,答案为A选项。38、有以下程序#include<stdio.h>#include<string.h>main(){charstr[][20]={"One*World","One*Dream!"},*p=str[1];printf("%d,",strlen(p));printf("%s\n",p);}程序运行后的输出结果是A、10,One*Dream!B、9,One*Dream!C、9,One*WorldD、10,One*World标准答案:A知识点解析:unsignedintstrlen(char*s);计算字符串s的(unsignedint型)长度,不包括’\0’在内;p指向数组的第二个元素,因此strlen(p)=10,并打印,故答案为A选项39、软件生命周期是指A、软件的定义和开发阶段B、软件的需求分析、设计与实现阶段C、软件的开发阶段D、软件产品从提出、实现、使用维护到停止使用退役的过程标准答案:D知识点解析:通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。选项A、B、C选项均为生命周期的一部分。故选D选项40、下列程序的运行结果是()。#include<stdio.h>voidfun(int*s,int*p){staticintt==3;*p=s[t];t--;}voidmain(){inta[]={2,3,4,5},k,x;for(k=0;k<,4;k++){fun(a,&x);printf("%d,",x);}}A、5,4,3,2,B、2,3,4,5,C、2,2,2,2,D、5,5,5,5,标准答案:A知识点解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素以前的元素“逆置”赋给数组p。由于fun函数定义了静态变量t=3,因此,在主函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数组x,最后输出x数组。二、程序填空题(本题共1题,每题1.0分,共1分。)41、下列给定程序中,函数fun的功能是:将形参a所指数组中的前半部分元素中的值与后半部分元素中的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。例如,若a所指数组中的数据为:1,2,3,4,5,6,7,8,9,则调换后为:6,7,8,9,5,1,2,3,4。请在程序的下画线处填入正确的内容并将下画线删除.使程序得出正确的结果。注意:部分源程序给出如下。不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#defineN9voidfun(inta[],intn){inti,t,P;/**********found***********/P=(n%2==0)?n/2:n/2+【1】;for(i=0;i<n/2;i++){t=a[i];/**********found***********/a[i]=a[P+【2】];/**********found***********/【3】=t,}}main(){intb[N]={1,2,3,4,5,6,7,8,9),i;printf(“\nTheoriginaldata:\n”);for(i=0,i<N;i++)printf(“%4d”,b[i]);printf(“\n”);fun(b,N),printf(“\nThedataaftermoving:\n”);for(i=0;i<N;i++)printf(“%4d”,b[i]),printf(“\n”);}标准答案:(1)1(2)i(3)a[p+i]或*(a+p+i)知识点解析:填空1:该处是判断数组元索的个数足奇数还是偶数,为奇数时要使当前位置加1,使p指向数组中间位置。填空2和填空3:这里是一个比较常见的数组位置调换程序,应填入i和a[p+i]或*(a+p+i)。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODll.C中函数fhn的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指存储区中。例如:把3个串:“abc”,“CD”,“EF”连接起来,结果是“abcCDEF”。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include#includevoidfun(charstr[][10],intm,char*pt){/**********found***********/Intk,q,i;for(k=0;k标准答案:(1)intk,q,i;(2)pt[i]=str[k][1i]j知识点解析:函数的功能是将m(1≤m≤10)个字符串连接起来。(1)第一标识下是整型变量k、q和i的定义,根据C语言中整型变量的定义方式,第一标识下应为“intk,q,i;”。(2)第二个标识下的“pt[i]=str[k,i];”语句应该将str中的字符依次拷贝到pt中,根据C语言中对二维数组每一位的取值,应该是str[k][i],所以“pt[i]=str[k,i];”改为“pt[i]=str[k][i];四、程序设计题(本题共1题,每题1.0分,共1分。)43、程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N]),函数的功能是:使数组左下三角元素中的值全部置成0。例如:a数组中的值为则返回主程序后a数组中的值应为注意:部分源程序存在文件PROGl.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#inc2ude#inc2ude#defineN5voidfun(inta[][N]){}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,j,a[5][5];rf=fopen(“in.dat”,“r”);wf=fopen(“out.dat”,“w”);for(i=0;i<5;i++)for(j=0;j<5;j++)fscanf(rf,“%d”,&a[i][j]);fun(a);for(i=0;i<5;i++){for(j=0;j<5;j++)fprintf(wf,“%4d”,a[i][j]);fprintf(wf,“\n”);}fclose(rf);fclose(wf);}main(){inta[N][N],i,j;printf("*****Thearray*****\n");for(i=0;i标准答案:inti,j;for(i=0;i知识点解析:程序功能是使数组左下半三角元素的值全部置成0。(1)对二维数组常用双重循环结构来处理:外层循环控制二维数组的行处理,内层循环控制二维数组的列处理。(2)左下半三角元素的下标特点是列下标小于或等于行下标,即i<=i。(3)依次访问二维数组,把符合以上条件的元素的值赋0。该题是对矩阵操作的考查。国家二级(C语言)机试模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、对于一个正常运行的C程序,下列叙述中正确的是()。A、程序的执行总是从main函数开始,在main函数结束B、程序的执行总是从程序的第一个函数开始,在main函数结束C、程序的执行总是从main函数开始,在程序的最后一个函数中结束D、程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束标准答案:A知识点解析:一个C语言源程序无论包括了多少函数,总是从main函数开始执行,从main函数结束。2、在一棵二叉树上,第5层的结点数最多是()。A、8B、9C、15D、16标准答案:D知识点解析:根据二叉树的性质:二叉树第i(i≥1)层上至多有2i-1个结点。得到第5层的结点数最多是16个。3、设有定义:doublex=2.12;,则以下各项中不能完整输出变量x值的语句是()。A、printf("x=%5.of\n",x);B、printf("x=%f\n",x);C、printf("x=%lf\n",x);D、printf("x=%O.5f\n",x);标准答案:A知识点解析:本题考查printf函数的格式输出,“格式控制字符串”部分为“%f”表示按照浮点型输出,选项B正确;加入长度格式符1即“%1”表示按照双精度浮点型输出,选项C正确;若要控制输出精度,则需以“.”开头,后跟十进制整数,如“%.2f”或“%O.2f”,选项D正确;控制输出宽度则是用整数表示,如“%5f”,选项A中“%5.Of’’表示输出宽度为5,右对齐,小数点后保留位数为0,所以结果输出为2,不能完整输出x,答案选A。4、有以下程序:#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、321678B、876543C、1098765D、345678标准答案:A知识点解析:本题中的函数fun()的功能是将数组k中前5个元素倒序,所以返回后数组k中的元素排列是5,4,3,2,1,6,7,8,9,10。所以打印输出k[2]到k[7]元素的值,即321678,所以选择A。5、下列叙述中正确的是()。A、线性表链式存储结构的存储空间一般要少于顺序存储结构B、线性表链式存储结构与顺序存储结构的存储空间都是连续的C、线性表链式存储结构的存储空间可以是连续的,也可以是不连续的D、以上说法均错误标准答案:C知识点解析:线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的节点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此C选项正确。6、以下对联合类型叙述正确的是()。A、可以对联合变量名直接赋值B、使用联合变量的目的是为了节省内存C、任何一个联合变量可以同时引用联合中的不同成员D、联合类型定义中不能同时出现结构类型的成员标准答案:B知识点解析:山于联合体是同一存储区域山不同类型的变量共享,所以不可以直接对联合体变量名进行赋值,且联合体中的空间在某一时刻只能保持某一成员的数据;另外合体中可以出现结构类型的成员。7、己知函数的调用形式:fread(buffer,size,count,fp);其中buffer代表的是()。A、一个整型变量,代表要读入的数据项总数B、一个文件指针,指向要读的文件C、一个指针,是指向的输入数据放在内存中的起始位置D、一个存储区,存放要读的数据项标准答案:C知识点解析:数据块输入/输出函数的调用形式为:ffead(buffer,size,count,fp))。ffead函数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址;“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。8、在数据库系统的内部结构体系中,索引属于()。A、模式B、内模式C、外模式D、概念模式标准答案:B知识点解析:内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径,内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备级上(如磁盘及磁盘操作)。9、有两个关系R和T如下:则由关系R得到关系T的操作是()。A、选择B、交C、投影D、并标准答案:C知识点解析:关系T是由关系R的第3、4行的元组组成的,很显然这是对关系R进行选择运算的结果。可以简单理解为:选择运算是对行的操作,投影运算是对列的操作。选择是从表中选出满足给定条件的元组组成新表。故C选项正确。10、交换两个变量的值,不允许用临时变量,应该使用下列()位运算符。A、&B、^C、‖D、~标准答案:B知识点解析:按逻辑位运算的特定作用主要有3点:①用按位与运算将特定位清0或保留特定位;②用按位或运算将特定的位置设置为1;③用按位异或运算将某个变量的特定位翻转或交换两个变量的值。11、有以下程序:#includemain(){intm=1,n=2,*P=&m,*q=&n,*r;r=p;p=q;q=r;printf("%d,%d,%d,%d\n",m,n,*P,*q);}程序运行后的输出结果是()。A、1,2,1,2B、1,2,2,1C、2,1,2,1D、2,1,1,2标准答案:B知识点解析:程序中定义了两个整型变量,然后用两个指针分别指向这两个整型变量,交换指针,那么原来指向第一个整数的指针将指向第二个整数,原来指向第二个整数的指针将指向第一个整数。12、下面程序运行后的输出结果是()。#inc1udemain(){inta[5]={1,0,4,2,0},b[5]={1,2,3,4,5},i,s=0;for(i=0;i<5;i++)s=s+b[a[i]];printf("%d\n",s);}A、12B、15C、11D、8标准答案:A知识点解析:这道题目是计算一维数组b中某些元素的和。这些元素的下标值是一维数组a中元素值。s=0+b[1]+b[0]+b[4]+b[2]+b[0]=2+1+5+3+1=12.13、以下叙述中错误的是()。A、gets函数用于从终端读入字符串B、getchar函数用于从磁盘文件读入字符C、fputs函数用于把字符串输出到文件D、fwrite函数用于以二进制形式输出数据到文件标准答案:B知识点解析:本题考查字符处理函数和文件操作函数,属于基础知识,其中B选项getchar函数是用于从终端读入一个字符。14、下列叙述中正确的是()。A、栈是一种先进先出的线性表B、队列是一种后进先出的线性表C、栈与队列都是非线性结构D、以上三种说法都不对标准答案:D知识点解析:栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。15、一般情况下,当对关系R和S进行自然连接时,要求R和S含有一个或者多个共有的()。A、记录B、行C、属性D、元组标准答案:C知识点解析:进行自然连接时要求两个关系具有相同列,即属性。16、以下各项中,当x为大于1的奇数时,值为0的表达式是()。A、x%2==0B、x/2C、x%21=0D、x%2==1标准答案:A知识点解析:当x为大于1的奇数时,x%2==0表达式为0,所以答案为A。17、若有定义语句:char*s1="OK",*s2="ok";以下选项中,能够输出"OK"的语句是A、if(strcmp(s1,s2)!=0)puts(s2);B、if(strcmp(s1,s2)!=0)puts(s1);C、if(strcmp(s1,s2)==1)puts(s1);D、if(strcmp(s1,s2)==0)puts(s1);标准答案:B知识点解析:strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同的字符的大小作为比较结果。因为’OK’<’ok’,所以strcmp(s1,s2)为负值,只有B选项正确。18、有以下程序:#includeintfun(intx[],intf1){staticintsum=0,i;for(i=0;iA、55B、50C、45D、60标准答案:D知识点解析:内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。fun(a,5)的值是15,再次调用后sum=15,所以fun(b,4)=45,s=45+15=60。因此D选项正确。19、若x=4,y=5,则x&y的结果是()。A、0B、4C、3D、5标准答案:B知识点解析:本题主要考查按位与运算的知识点。按位与是对两个运算量相应的位进行逻辑与,“&”的规则和逻辑与“&&”相同。x=4的二进制为00000100,v=5的二进制为00000101,x&y=00000100,转化为十进制即为4。20、若有以下语句:typedefstructS{intg;charh;}T;以下叙述中正确的是()。A、可用s定义结构体变量B、可用T定义结构体变量C、S是struct类型的变量D、T是structS类型的变量标准答案:B知识点解析:本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。21、以下关于C语言的叙述中正确的是()。A、预处理命令通常位于函数体外面,但也可以位于函数体中间B、C语言中的变量定义须在其他语句之前C、在C语言程序的书写中,一个语句必须单占一行D、—个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的ma1n函数标准答案:A知识点解析:源程序中可以有预处理命令(inc1ude命令仅为其中的一种)。C语言中的变量可以在使用之前的任何位置进行定义。C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以由一个或多个源文件组成,但仅可以有一个main函数。22、若有以下程序:#includemain(){inta=1,b=2,c=3,d:4;if((a=2)∣∣(b=1))c=2;if((c==3)&&(d=-1))a=5;printf("%d,%d,%d,%d\n",a,b,c,d;则程序的输出结果是()。A、1,2,3,4B、2,1,2,-1C、5,1,2,-1D、2,2,2,4标准答案:D知识点解析:第一个if语句的判断条件是逻辑或表达式,所以只要有一个运算对象为真结果就为真,且如果前面的已经为真,后面的表达式不再进行执行判断。执行第一个if判断条件时a的值为2,整个表达式的值为真,b的值不变,c的值为2。判断第二个if条件为逻辑与表达式,只有两个运算对象均非零,才为真,第一个表达式c==3,不成立,不再判断第二个运算对象,所以不执行d=一1操作和a=5操作。所以结果为选项D。23、有以下程序:#includemain(){intx;scanf(“%d“,&x);if(x<=0);elseif(x!=5)printf(“%d\n”,x);}程序运行时,输入的值在哪个范围才会有输出结果()。A、不等于5的整数B、大于0且不等5的整数C、大于0或等于5的整数D、小于5的整数标准答案:B知识点解析:题目中,虽然else和第二个if不在同一行上,但等价于在同一行上,因此,程序的意思是当x大于0且不等于5时将其打印出来。24、下列程序的运行结果是()。#includevoidfun(int*S,int*P){staticintt=3;*p=s[t];t--;}voidmain(){inta[]={2,3,4,5),k,x;for(k=0;k<4;k++){fun(a,&x);printf(“%d,”,x);}}A、5,4,3,2,B、2,3,4,5,C、2,2,2,2,D、5,5,5,5,标准答案:A知识点解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(t+1)个元素以前的元素逆置赋给数组p。由于fun函数定义了静态变量t=3,因此,在主函数中调用函数fun(a,&x)时,就是要将数组a中前4个元素逆置赋给数组x,最后输出x数组。25、判断字符串s1是否大于字符串s2,应该使用()。A、if(strcmp(s1,s2)<0)B、if(s1>s2)C、if(strcmp(s2,s1)<0)D、if(strcmp(s1,s2))标准答案:C知识点解析:本题考查字符串比较函数strcmp(),调用形式:strcmp(str+1,str+2),其中str+1、str+2分别是字符串存储区的首地址,函数功能:比较字符串str1和str2,当str1<str2时,返回值为负数:当str1=str2时,返回0;当str1>str2,返回值为正数。注意:不能使用关系运算符比较两个字符串的大小。26、有以下程序:#include<stdio.h>main(){inta=7;while(a--);printf("%d\n",a);}程序运行后的输出结果是()。A、0B、-1C、1D、7标准答案:B知识点解析:a--的含义是先用后减1,所以当a的值为0时,跳出循环,但是仍要执行a--,a的值变为-1。27、有以下程序:#include<stdio.h>main(){charb,c;inti:b=’a’;c=’A’;for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("\n");}程序运行后的输出结果是()。A、abcdefB、ABCDEFC、aBcDeFD、AbCdEf标准答案:D知识点解析:函数的含义是如果i的值能被2整除,以字符格式打印输出i+c的值,如果i的值不能被2整除,打印i+b的值。第一次i值为0,执行else语句打印字符‘A’,第二次i值为1,打印1+b的值即字符‘b’,第三次i值为2,打印字符‘C’,依此类推选择D选项。28、下列叙述中正确的是A、程序执行的效率与数据的存储结构密切相关B、程序执行的效率只取决于程序的控制结构C、程序执行的效率只取决于所处理的数据量D、以上说法均错误标准答案:A知识点解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。29、结构化程序设计的基本原则不包括()。A、多态性B、自顶向下C、模块化D、逐步求精标准答案:A知识点解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,所以选择A)。30、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为()。A、课号,成绩B、学号,成绩C、学号,课号D、学号,姓名,成绩标准答案:C知识点解析:学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,所以选择C)。31、若要打印出字符A,以下语句不正确的是()。(注:字符A的ASCⅡ码值为65,字符a的ASCⅡ码值为97)A、printf(’’%c\n’’,’a’一32);B、printf(’’%c\n’’,’B’—1);C、printf(’’%c\n’’,65);D、printf(’’%d\n’’,’A’);标准答案:D知识点解析:要打印出A,输出格式应该是%c,所以选项D错误;另外,字符是一种特殊的整型数,对应的是其ASCⅡ码数值,所以选项A,B,C正确。32、有以下程序#include<stdio.h>voidfun(char**p){inti;for(i=0;i<4;i++)printf("%s",p[i]);}main(){char*s[6]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};fun(s);printf("\n");}程序运行后的输出结果是A、ABCDEFGHIJKLB、ABCDC、AEIMD、ABCDEFGHIJKLMNOP标准答案:D知识点解析:本题考查字符串数组,s表示指向字符数组的指针,s指向了第一个字符串,s++指向了第二个字符串,所以最后输出结果为D选项。33、一个学生可选多门课程,一门课程也可由多个学生来选。则学生和课程间的联系是()。A、1:1联系B、1:m联系C、m:1联系D、m:n联系标准答案:D知识点解析:一个学生可选多门课程,一门课程也可由多个学生来选,所以他们之间是多对多的关系。34、有以下程序#include<stdio.h>intk=5;voidf(int*s){*s=k;}main(){intm=3,*p=&m;f(p);printf("%d,%d",m,*p);}程序的运行结果是A、5,5B、3,3C、3,5D、5,3标准答案:A知识点解析:本题程序执行过程为:m=3,p指向m,调用函数f,将实参p中m的地址传递给形参s,s指向m,则k赋值给m,m=5,p依然指向m,故输出5,5。A选项正确。35、有以下程序:#includemain(){inti=3,j=5,*p=&i,*q=&j,**r;r=&q;i++;(*q)++;printf(’’%d,%d,%d,%d,%d\n’’,i,j,*P,*q,**r);}执行后的输出结果是()。A、4,6,4,6,6B、5,3,5,3,5C、4,6,4,6,4D、4,6,4,4,6标准答案:A知识点解析:此题考查指针及指针的指针,(*q)是对其指向的地址空间的存储值的引用,所以(*q)++等同于j++;同时,r指向的具体数值也会发生变化。36、有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},k;fp=fopen("data.dat","w+");fprintf(fp,"%d\n",a[0]);for(i=1;i<6;i++){fseek(fp,0L,0);fscanf(fp,"%d",&k);fseek(fp,0L,0);fprintf(fp,"%d\n",a[i]+k);}rewind(fp);fscanf(fp,"%d",&k);fclose(fp);printf("%d\n",k);}程序的运行结果是A、21B、6C、123456D、11标准答案:A知识点解析:fopen函数以一定方式打开指定文件,返回一个指向文件的文件指针,如果不能实现打开指定文件的操作,则返回一个空指针NULL。fscanf函数从文本文件中按格式输入。fprintf函数按照格式向文本文件中输出数据。文件定位函数fseek,将指针由文件开头0、当前位置1、末尾2移动指定字节。rewind函数功能使文件的位置指针返回到文件头。程序执行过程为:以读/写方式建立一个新的文本文件data.dat,将1写入文件;执行for循环,将文件指针移到文件开头,将文件第一个数值1赋给k,再将指针移动到开头,向文件内输入a[i]+k=3。for循环实现将a数组中元素累加,结果21存放在文件中。调用rewind将文件指针移动到开头,调用fscanf函数从文件中读出数值赋予k=21,调用fclose函数关闭文件,打印k值,A选项正确。37、有以下程序#include<stdio.h>main(){charc;while((c=getchar())!=’\n’){switch(c-’2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;}}printf("\n");}程序运行后从第一列开始输入以下数据2473<回车>程序的输出结果是A、668977B、4444C、6677877D、68766标准答案:A知识点解析:本题执行过程为:输入c=’2’,c-’2’=0,首先匹配case0,依次输出6,6,后执行break语句,跳出分支结构;输入c=’4’,c-’2’=2,匹配case2,输出8,执行break语句,跳出分支结构;输入c=’7’,c-’2’=5,匹配default,输出9,执行break语句,跳出分支结构;输入c=’3’,c-’2’=1,匹配case1,依次输出7,7,执行break语句,跳出分支结构。输入回车,结束循环。A选项正确。38、设循环队列为Q(1:m),其初始状态为front=rear=m。经过一系列入队与退队运算后,front=15,rear=20。现要在该循环队列中寻找最大值的元素,最坏情况下需要比较的次数为A、4B、6C、m-5D、m-6标准答案:A知识点解析:循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,队列初始状态为front=rear=m,当front=15,rear=20时,队列中有5个元素,比较次数为4次,A选项正确。39、有如下程序#include<stdio.h>intsum(inta,intb){returna+b-2;}main(){inti;for(i=0;i<5;i++)printf("%d",sum(i,3));printf("\n");}程序运行后的输出结果是A、54321B、1234C、45678D、12345标准答案:D知识点解析:函数调用的一般形式为:函数名(实际参数表)对无参函数调用时,则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。函数sum在main函数之前,所以在main函数中不需要声明。本题程序执行过程为:在i=0,1,2,3,4时依次输出sum(i,3),即调用sum函数后依次输出1、2、3、4、5,D选项正确。40、以下叙述正确的是A、在C语言中分号是语句的组成部分B、C语言程序由C语句组成,可以省略main函数C、分号是C语句之间的分隔符D、所有程序行都必须用分号结束标准答案:A知识点解析:C语言C程序的入口函数是main(),因此C程序中有且只有一个main函数,故选项B错误。分号是C语言一条语句的结束标志,不是分隔符,C语言分隔符是用来分隔多个变量、数据项、表达式等的符号,包括逗号、空白符、分号和冒号等等,选项C错误。C语言的程序不是以分号结束的,分号是C语言一条语句的结束标志,C语言是面向过程的,从main函数开始在main函数里结束,选项D错误。故答案为A选项。二、程序填空题(本题共1题,每题1.0分,共1分。)41、给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANKl.C中。不得增行或删行,也不得更改程序的结构!#include#includeintfun(char*source,char*target;)(FILE*fs,*ft;charch;/**********found**********/if((fs=fopen(source,______1______))==NULL)return0;if((ft=fopen(target,"w"))==NULL)return0;printf("\nThedatainfile:\n");ch=fgetc(fs);/**********found**********/while(!feof(______2______)){putchar(ch);/**********found**********/fputc(ch,______3______);ch=fgetc(fs);}fclose(fs);fclose(ft);printf("\n\n");return1;}main()(charsfname[20]="myfile1",tfname[20]="myfile2";FILE*myf;inti;chac;myf=fopen(sfname,"w");printf("\nTheoriginaldata:\n");for(i=1;i<30;i++){c=’A’+rand()%25;fprintf(myf,"%c",c);printf("%c",c);)fclose(myf);printf("\n\n");if(fun(sfname,tfname))printf("Succeed!");elseprintf("Fail!");}标准答案:(1)"r"(2)fs(3)ft知识点解析:第一空:将指定源文件中的内容复制到指定的目标文件中,源文件只需读,因此以只读方式打开即可,故第一空处应该是“if((fs=fopen(source,"r"))=NULL)”。第二空:“while(!feof(__2__))”循环的目的是不断读取源文件直至到达源文件的末尾,循环结束标志是已达到文件的末尾。用feof()函数来检查是否已经到了文件末尾,文件状态检测函数feof()的调用形式是:feof(fs),如果已经到达文件尾函数返回非零值,否则返回0,故第二空处应该是“while(!feof(fs))”。第三空:考察fputc函数的使用方法,fputc函数的调用形式是:fputc(ch,ft),ch是要输出的字符,由“ch=fgetc(fs)”从源文件读到字符ch,然后将ch写到目标文件中,故第三空处应该是“fputc(ch,ft);”。三、程序修改题(本题共1题,每题1.0分,共1分。)42、给定程序MODIl.C中函数fun的功能是:将长整型数s中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为:87653142时,t中的数为:8642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#includevoidfun(longs,long*t){intd;longs1=1;*t=0;while(s>0){d=s%10;/************found************/if(d%2=0){*t=d*s1+*t;s1*=10;}/************found************/s\=10;}}main(){longs,t;printf("\nPleaseenters:");scanf("%1d",&s);fun(s,&t);printf("Theresultis:%ld\n",t);}标准答案:(1)if(d%2==0)(2)s/=10;知识点解析:(1)第一个标识是判断d是否是偶数,即比较d%2是否等于0,在C语言中,“==”表示的是“等于”,而“=”是赋值,因此第一个标识下“if(d%2=0)”应改为“if(d%2==0)”。(2)第二个标识下的“s\=10:”是对a的截取,这里的“\”本意应该是除号,但这个在C语言中是不可识别的,所以第二个标识下“s\=10;”应该改为“s/=10;”。四、程序设计题(本题共1题,每题1.0分,共1分。)43、函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在C中。合并的方式是:将a中的十位和个位数依次放在变量c的千位和十位上,b中的十位和个位数依次放在变量c的个位和百位上。例如,当a=45,b=12。调用该函数后,c=4251。注意:部分源程序存在文件PROGl.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。#includevoidfun(inta,intb,long*c){}voidNONO(){/+本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*/FILE*rf,*wf;inti,a,b;longc;rf=fopen("in.dat","r");wf=fopen("out.dat","w");for(i=0;i<10;i++){fscanf(rf,"%d,%d",&a,&b);fun(a,b,&c);fprintf(wf,"a=%d,b=%d,c=%1d\n",a,b,c);}fclose(rf);fclose(wf);}msin(){inta,b;longc;voidNONO();printf(”Inputa,b:”);scanf(”%d%d”,&a,&b);fun(a,b,&c);printf("Theresultis:%1d\n",c);NONO();}标准答案:*c=(a/10)*1000+(b%10)*100+(a%10)*10+(b/10);知识点解析:(1)分解两位数的正整数n的个位和十位数,可用n%10和n/10实现。(2)设x0、x1、x2、x3为一位数,则x0、x1×10、x2×100、x3×1000,可以分别使x0、x1、x2、x3构成个、十、百、下带权数,而x0+x1×10+x2×100+x3×1000构成四位数。本题最多只考虑四位数。国家二级(C语言)机试模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、下列数据结构中,属于非线性结构的是()。A、循环队列B、带链队列C、二叉树D、带链栈标准答案:C知识点解析:线性结构的特点:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。不满足线性结构条件的称为非线性结构,二叉树的非叶子结点最多可以有两个后件,属于非线性结构。2、算法的空间复杂度是指()。A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法的空间复杂度是指算法在执行过程中所需要的内存空间,故本题答案为A选项。3、下列数据结构中,能够按照“先进后出”原则存取数据的是()。A、循环队列B、栈C、队列D、二叉树标准答案:B知识点解析:栈是按“先进后出”的原则组织数据的;队列是按“先进先出”的原则组织数据的,故本题答案为B选项。4、某二叉树共有12个结点,其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层)()。A、3B、6C、8D、12标准答案:D知识点解析:二叉树中,度为0的结点数等于度为2的结点数加1,即n2=n0-1,叶子结点即度为0,n0=1,则n2=0,总结点数为12=n0+n1+n2=1+n1+0,则度为1的结点数n1=11,所以深度为12,故D选项正确。5、下面不能作为结构化方法软件需求分析工具的是()。A、系统结构图B、数据字典(DD)C、数据流程图(DFD图)D、判定表标准答案:A知识点解析:结构化方法软件需求分析工具主要有数据流图、数据字典、判定树和判定表。6、下面不属于软件测试实施步骤的是()。A、集成测试B、回归测试C、确认测试D、单元测试标准答案:B知识点解析:软件测试主要包括单元测试、集成测试、确认测试和系统测试。7、下面描述中不属于数据库系统特点的是()。A、数据共享B、数据完整性C、数据冗余度高D、数据独立性高标准答案:C知识点解析:数据库系统的特点为高共享、低冗余、独立性高、具有完整性等,故C选项错误。8、负责数据库中查询操作的数据库语言是()。A、数据定义语言B、数据管理语言C、数据操纵语言D、数据控制语言标准答案:C知识点解析:数据定义语言负责数据的模式定义与数据的物理存取构建;数据操纵语言负责数据的操纵,包括查询及增、删、改等操作;数据控制语言负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。9、设数据元素的集合D={1,2,3,4,5},则满足下列关系R的数据结构中为线性结构的是()。A、R={(1,2),(3,2),(5,1),(4,5)}B、R={(1,3),(4,1),(3,2),(5,4))C、R={(1,2),(2,4),(4,5),(2,3)}D、R={(1,3),(2,4),(3,5),(1,2)}标准答案:B知识点解析:关系R中的每个结点由两个部分构成,分别是数据域和指针域。B选项中可以看出,元素序列为5→4→1→3→2,

温馨提示

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

评论

0/150

提交评论