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

下载本文档

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

文档简介

国家二级(C语言)笔试模拟试卷21(共9套)(共527题)国家二级(C语言)笔试模拟试卷第1套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、在一棵二叉树上,第5层的结点数最多是()。A、8B、9C、15D、16标准答案:D知识点解析:根据二叉树的性质:二叉树第i(i>1)层上至多有2i-1个结点。得到第5层的结点数最多是16个。2、在长度为64的有序线性表中进行顺序查找,最坏情况下需要比较的次数为A、63B、64C、6D、7标准答案:B知识点解析:顺序查找是从线性表的第—个元素开始依次向后查找,如果线性表中的第一个元素就是要查找的元素,则只需要做—次比较就查找成功;但如果要查找的元素是线性表中的最后一个元素,或者要查找元素不在线性表中,则需要与线性表中所有元素进行比较,这是顺序查找的最坏情况,比较次数为线性表的长度。3、下面关于完全二叉树的叙述中,错误的是______。A、除了最后—层外,每—层上的结点数均达到最大值B、可能缺少若干个左右叶子结点C、完全二叉树—般不是满二叉树D、具有结点的完全二叉树的深度为[log2n]+1标准答案:B知识点解析:满二叉树指除最后一层外每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外,每—层上的结点数均达到最大值,在最后—层上只缺少右边的若干子结点(叶子结点)的二叉树。4、下列描述中正确的是______。A、程序就是软件B、软件开发不受计算机系统的限制C、软件既是逻辑实体,又是物理实体D、软件是程序、数据与相关文档的集合标准答案:D知识点解析:程序是软件的一部分,软件是一种逻辑实体,它的开发、运行都依赖计算机系统,因此出现了软件的移植问题。5、源程序的文档不包括()。A、符合号名的命名要有实际意义B、正确的文档形式C、良好的视觉组织D、正确的程序注释标准答案:B知识点解析:本题主要考查源程序的定义:①符号名应具有一定实际的含义;②正确的程序注释;③良好的视觉组织。6、下列实体的联系中,属于多对多联系的是()。A、学生与课程B、学校与校长C、住院的病人与病床D、职工与工资标准答案:1知识点解析:只有选项A符合多对多联系的条件,因为一个学生可以选修多门课程,而一门课程又可以由多个学生来选修,所以学生与课程之间的联系是多对多联系。7、算法一般都可以用______控制结构组合而成。A、循环、分支、递归B、顺序、循环、嵌套C、循环、递归、选择D、顺序、选择、循环标准答案:8知识点解析:算法的控制结构给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。8、设a=2、b=3、c=4,则表达式a+b>c&&b==c&&a||b+c&&b+c的值为______。A、5B、8C、0D、1标准答案:8知识点解析:暂无解析9、在关系数据库中,用来表示实体之间联系的是______。A、树结构B、网结构C、线性表D、二维表标准答案:8知识点解析:在关系数据库中,用二维表来表示实体之间联系。10、关系代数运算是以______为基础的运算。A、关系运算B、谓词运算C、集合运算D、代数运算标准答案:4知识点解析:关系代数运算是以关系代数作为运算对象的一组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包括垂直分割(投影)、水平分割(选择)、关系的结合(连接)等。二、选择题(1分)(本题共11题,每题1.0分,共11分。)11、下列表达式中,可以正确表示的关系是()。A、(x>=1)10(x<=0)B、x>1‖x=0C、x>=1ORx<=0D、X>=1&&x<=0标准答案:A知识点解析:题中要求x的取值是小于等于0或者大于等于1,这说明表达式是或的关系,所以在写成C语言表达式应是逻辑或的关系,逻辑或运算符是"‖"。12、有以下程序#include#includeStructA{inta;charb[10];doublec;};structAf(structAt);main(){structAa={1001,“ZhangDa”,1098.0};a=f(a);printf(“%d,%s,%6.1f﹨n”,a.a,a.b,a.C;}structAf(StructAt){t.a=1002;strcpy(t.b,“WangPeng”);t.c=1220.0;returnt.}程序运行后的输出结果是()。A、1001,ZhangDa,1098.0B、1002,ZhangDa,1220.0C、1001,WangPeng,1098.0D、1002,WangPeng,1220.0标准答案:D知识点解析:在主函数中定义结构体A的变量a,并对其赋初值,再调用函数f(a),在函数f(a)中对结构体变量a的各个成员重新进行了赋值操作,并把其值返回在屏幕上输出。13、已知chara;intb;floatc;doubled;则表达式a-b+c-d结果为()型。A、doubleB、floatC、intD、char标准答案:A知识点解析:C语言中允许进行不同数据类型的混合运算,但在实际运算时,要先将不同类型的数据转化成同一类型再进行运算。类型转换的一般规则是:①运算中将所有char型转换成int型,float型转换成double型;②低级类型服从高级类型,并进行相应的转换,数据类型由低到高的顺序为:char->int->unsigned->long->float->double;③赋值运算中最终结果的类型,以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。14、下面关于数据库三级模式结构的叙述中,正确的是()。A、内模式可以有多个,外模式和模式只有一个B、外模式可以有多个,内模式和模式只有一个C、内模式只有一个,模式和外模式可以有多个D、模式只有一个,外模式和内模式可以有多个标准答案:B知识点解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。15、若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是#includemain(){charc;intv0=1,v1=0,v2=0;do{switch(c=getchar()){case′a′:case′A′:case′e′:case′E′:case′i′:case′I′:case′o′:case′O′:case′u′:case′U′:v1+=1;default:v0+=1;v2+=1;}}while(c!=’\n’);printf("v0=%d,v1=%d,v2=%d\n",v0,v1,v2);}A、v0=7,v1=4,v2=7B、v0=8,v1=4,v2=8C、v0=11,v1=4,v2=11D、v0=13,v1=4,v2=12标准答案:D知识点解析:本题考查switch语句的掌握。必须撑握以下内容:首先应该明白switch语句的语法格式:switch语句的语法格式为:switch(表达式){case常量表达式1:语句组1;case常量表达式2:语句组2;case常量表达式n:语句组n;default:语句组n+1;}另外,以下几点关于switch语句的重点:①系统在执行时计算开关表达式的值;②根据所得的值在各个case标号表达式中寻找匹配,直到发现与表达式匹配的标号(本例中匹配的是case’B’:);③找到匹配后执行后面相应的语句表,顺序往下执行;④如果无相匹配的标号,若存在default标号,则执行该语句标号后面的语句表n+1;当不存在default标号时,不执行switch中的任何一个语句表。一般而言,在多分支结构中总会出现"意外"的情况,这时均可归入default程序段,作统一的处理。default标号是可选性的,不必每次都有,视需要而定。switch语句中还可以包含switch语句,形成switch的嵌套。16、以下定义语句中正确的是A、chara=’A’b=’B’;B、floata=b=10.0;C、inta=10,*b=&a;D、float*a,b=&a;标准答案:4知识点解析:选项A中定义两个变量a和b,并赋初值,C语言中可以同时定义多个变量,但变量之间必须用“,”隔开,显然,选项A中少了一个逗号“,”,故选项A不正确;选项B中定义变量时用了连续的赋值语句,这在定义变量是不正确的,故选项B不正确,选项D定义一个指针,然后定义了一个变量并让这个变量的初值为该指针变量,显然这这时的指针变量还没初始化就被赋值给变量,是不对的,故选项D不正确,所以,4个选项中选项C符合题意。17、若有以下定义和语句:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;则值为3的表达式是______。A、p+=2,*(p++)B、P+=2,*++pC、P+=3,*p++D、P+=2,++*p标准答案:1知识点解析:引用—个数组元素,可以用:(1)下标法,如a[i]形式:(2)指针法,如*(a+i)或*(p+i)。数组的下标从0开始,值为3的数组元素是a[2]。B、C的内容为a[3],D将a[2]前自加,结果为4。18、有以下程序:main(){inti;for(i=0;i<3;i++)switch(i){case0:prinft("%d",i);Case2:prinft("%d",i);default:prinft("%d",i);}}程序运行后的输出结果是()。A、22111B、21021C、122D、12标准答案:4知识点解析:程序中for循环了三次,第一次i=O,执行switch语句中case0:分支,直到遇到default语句,退出switch,这里共执行了3个输出语句分别输出0、0、0,第二次循环i=1,switch语句中没有匹配的分支,故只执行default语句输出1,退出switch语句;第三次循环i=2,从switch语句中的case2:开始执行,共执行了两个输出语句输出2、2。最后输出的结果为000122。所以,4个选项中选项C符合题意。19、下面程序的执行结果是______。main(){charstr[]="quert?",*p=str;while(putchar(*p++)!=’?’);}A、quertB、RvfsuC、quert?D、rvfsu?标准答案:4知识点解析:*p++是先取*p的值,然后指针变量p指向下一个字符,putchar是先执行(输出)再判断,所以“?”是可以显示的。20、八进制数253.74转换成二进制数是()A、10101011.1111B、10111011.0101C、11001011.1001D、10101111.1011标准答案:1知识点解析:暂无解析21、有以下程序#includeintfun(){staticintx=l:X*=2:returnX:}main(){inti,s=l:for(i=l;i<=3,i++)s*=fun();printf(“%d\n”,s);}程序运行后的输出结果是A、0B、10C、30D、64标准答案:B知识点解析:fun函数中的变量x为静态局部变量,它在内存的静态存储区中占据着永久性的存储单元.即使退出fun函数也不释放x的存储单元,仍保留其原来的值,函数共调用了3次fun函数,第一次调用fun函数后,x=2,s=2;第二次调用fun函数后,x=l,s=8;第三次调用fun函数后.x=8,s=64。故程序运行后输出结果为64。三、选择题(2分)(本题共20题,每题1.0分,共20分。)22、以下程序中函数setup的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址:#include<stdio.h>#include<string.h>char*scmp(char*s1,char*s2){if(strcmp(s1,s2)<0)return(s1);elsereturn(s2);}main(){inti;charstring[20],str[3][20];for(i=0;i<3;i++)gets(str[i]);strcpy(string,scmp(str[0],str[1]));strcpy(string,scmp(string,str[2]));printf("%s\n",string);}若运行时依次输入:abcd、abba和abc3个字符串,则输出结果为______。A、abcdB、abbaC、abcD、abca标准答案:B知识点解析:函数scmp的功能是比较两个符号串的大小,返回值较小的那个符号串。str[0]中存放"abcd"、str[1]中存放"abba"、str[2]中存放"abc",执行完语句strcpy(string,scmp(sty[0],sir[1]));后string中存放"abba",执行完语句strcpy(string,scmp(string,str[2]));后string中存放"abba"。23、对下述程序的判断中,正确的是()。#include<stdio.h>voidmain(){char*P,s[256];p=s;while(strcmp(s,"theend")){printf("Inputthestring:");gets(s);while(*P)putchar(*p++);}}A、此程序循环接收字符串并输出,直到接收到字符串“theend”为止B、此程序循环接收字符串,接收到字符串“theend”则输出,否则程序终止C、此程序循环接收字符串并输出,直到接收字符串“theend”为止,但因为代码有错误,程序不能正常工作D、此程序循环接收字符串并将其连接在一起,直到接收字符串“theend”为止,输出连接在一起的字符串标准答案:A知识点解析:strcmp(str1,str2)是比较字符串str1和sir2,当两字符串相等时,返回值为0,不相等时返回值为非0;所以此段程序的功能是在未接收到字符串“theend”时,读入字符并输出。24、有以下程序#include<string.h>main(){charp[]={’a’,’b’,’c’},q[10]={’a’,’b’,’c’};printf("%d%d\n",strlen(p),strlen(q));}以下叙述中正确的是A、在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3B、由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3C、由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3D、由于p和q数组中都没有字符串结束符,故长度都不能确定标准答案:A知识点解析:在给p和q数组赋初值时,系统会自动添加字符串结束符,从题目中可以看出数组p和q都有3个字符,所以长度均为3。25、C语言允许函数类型缺省定义,此时函数值隐含的类型是()。A、floatB、intC、longD、double标准答案:2知识点解析:在C语言中,对于自定义函数要遵循“先定义,后使用”的规则,如定义时不指定函数类型,C编译系统都默认函数的返回值是int型。26、设有如下定义:structsk{inta;floatb;}data;int*p;若要使p指向data中的a域,正确的赋值语句是()。A、p=&a;B、p=data.a;C、p=&data.a;D、p=a;标准答案:4知识点解析:要注意不能将结构体变量作为一个整体进行输入和输出,只能对结构体变量中的各个成员进行输入和输出。引用结构体变量中成员的方式有以下几种:结构体变量名.成员名;指针变量名->成员名;(*指针变量名).成员名。27、以下程序调用findmax函数返回数组中的最大值findmax(inE*a,intn){int*p,*s;for(p=a,s=a;p-a<n;p++)if(______)s=p;return(*S);}main(){intx[5]={12,21,13,6,18);printf("%d\n",findmax(x’5));}在下划线处应填入的是A、p>sB、*p>*sC、a[p]>a[s]D、p-a>p-s标准答案:2知识点解析:在main()函数中定义了一个具有5个元素的x数组并赋初值,然后调用findmax()函数求数组中元素的最大值。调用时把数组元素x的首地址,传给了形参指针变量a,把5传给形参n。在函数findmax()中定义了两种指针变量p和s,其中s用来记录最大元素的地址,p作为循环控制变量,表示每个元素的地址.求最大值的算法是先将第一个元素(用s记下它的地址)做为最大值,然后用最大值(*s)与后面的每个元素比较(*p),若后面的元素大,则用s记下它的地址,所以下划线应填“*s<*p*或“*P>*s”。所以,4个选项中B为所选。28、以下程序中函数reverse的功能是将a所指数组中的内容进行逆置。voidreverse(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(){intb[10]={1,2,3,4,5,6,7,8,9,10};inti,s=0;reverse(b,8);for(i=6;i<10;i++)s+=b[i];printf("%d\n",s);}程序运行后的输出结果是A、22B、10C、34D、30标准答案:1知识点解析:本题考查的知识点是数组名作为函数参数及函数调用。reverse()数的功能是将具有n个元素的数组a反序存放。在主函数中调用语句是“reverse(b,8);”,实现的功能是把b数组的前八个元素逆置,所以b数组中依次存放的值为“8,7,6,5,4,3,2,1,9,10”。for循环了4次,分别把b[6]、b[7]、b[8]和b[9]的值(分别是2、1、9、10)加到了s中,s的结果是22,所以最后输出的s值为22。所以4个选项中A正确。29、下列关于C语言数据文件的叙述中正确的是A、文件由ASCII码字符序列组成,C语言只能读写文本文件B、文件由二进制数据序列组成,C语言只能读写二进制文件C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件标准答案:8知识点解析:本题考核的知识点是文件的基本概念。C语言可以读写二进制文件和文本文件两种,故选项A和选项B不正确;文件按数据的存放格式可分为二进制文件和文本文件两种,其中二进制文件中数据都是以二进制的形式存放,故选项C不正确。所以,4个选项中选项D符合题意。30、下面程序的运行结果是______。main(){unsigneda=3,b=10;printf("%d\n",a<<2|b>>1);}A、3B、10C、13D、14标准答案:4知识点解析:本题考查移位运算和按位或运算,注意按位或运算时只要对应的二进制位中有一个为1,结果为1;若都为0,结果为0031、以下程序的输出结果是______。main(){inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};printf("%d%d%d%d\n",a[0][3],a[1][2],a[2][1];a[3][0]);}A、650B、1470C、5430D、输出值不定标准答案:1知识点解析:对未给出初始值的整数数组元素,被默认初始化为零。32、以下选项中的表达式调用库函数依次求-4.5的绝对值、-4.0的平方根值、30°角的正弦值和2的3次方值。正确的调用是()A、abs(-4.5)B、sqrt(-4.0)C、sin(3.1416/6.0)D、paw(2.0,3.0)标准答案:4知识点解析:暂无解析33、有以下程序段:inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;b=p[5];b中的值是()。A、5B、6C、8D、9标准答案:8知识点解析:C语言中规定:一个数组名代表它的起始地址。本题中,定义了一个长度为10的数组a并赋初值,数组名a就是数组的起始地址,由于数组下标是从0开始,因此a[0]的地址也是a的值,a[1]的地址可以用a+1表示,也就是说a+1指向数组a中下标为1的元素,同样a+i是a[i]的地址,*p=&a[3]表明指针变量p指向元素a[3],即p指向数组a的第4个元素4,p[5]的值应为数组a中的第9个元素的值即a[8]的值,即p[5]=9,所以b=9。故4个选项中选项D符合题意。34、若有如下程序:main(){staticchar*a[3]={"123","456","789");char**b;b=a;++b;printf("%s,%s\n",*a,*a+1);printf("%s,%s\n",*b,b[1]);}则程序运行后的输出结果是()。A、123,456,456,789B、123,23456,56C、123,23456,789D、123,456456,56标准答案:4知识点解析:a为指针数组,a[0]即数组a的数组名指向字符串"123"的首地址,输出*a为"123",*a+1将指针下移1个存储单元,输出字符串为”23”。a[1]指向字符串"456"的首地址,a[2]指向字符串"789"的首地址。b为指针的指针,它的值为数组a的首地址。35、下面软件中,属中应用软件的是()A、UnixB、人事管理系统C、数据库管理理系统D、DOS标准答案:2知识点解析:暂无解析36、若有下列说明,则()不是对strcpy库函数的正确的调用。strcpy库函数用于复制一个字符串:char*str1="abed",str2[10],*str3="hijklmn",*str4[2],*str5="aaaa";A、strcpy(str2,str1)B、strcpy(str3,str1)C、strcpy(str4,str1)D、strcpy(str5,str1)标准答案:4知识点解析:strcpy(s1,s2)函数的功能是将字符串s2复制到字符串s1中(注意:要保证s1存储区能容纳下s2字符串)。37、以下程序运行后的输出结果是______。intd=1:fun(intp){staticintd=5;d+=p;printf("%d",d);returnd;}main(){inta=3;printf("%d\n",fun(a+fun(d)));}A、699B、669C、61515D、6615标准答案:4知识点解析:静态局部变量在编译时赋初值,即只赋初值一次,在程序运行时它已有初值。以后每次调用时不再重新赋初值而只是保留上次函数调用结束时的值,而对自动变量赋初值,不是在编译时进行的,而在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。本题在程序开头定义了全局变量d并赋初值1,在被调函数fun()中,定义了静态局部变量d,初值为5。在第一次调用函数fun时,d初值为5,P由主函数传递过来的值为1,则d=d+p=5+1=6,由于d是静态局部变量,在函数调用结束后,它仍保留d=6。再次调用fun函数,d的初值为6,而由主函数传递的p的值为9,则此时d=d+p=6+9=15,最后打印输出d的值并返回主函数。38、有以下程序段:intk=0,a=1,b=2,c=3;k=a<b?b:a;k=k>c?c:k;执行该程序段后,k的值是______。A、3B、2C、1D、0标准答案:B知识点解析:三目运算符的一般形式为(表达式1)?(表达式2):(表达式3),当(表达式1)值为真时,(表达式2)的值为整个表达式的值;当(表达式1)值为假时,(表达式3)的值为整个表达式的值。题中执行表达式“k=a<b?b:a”后,k=2,将此值代入后一个表达式“k=k>c?c:k,由于“k>c”值为假,故k的值还等于原来k的值,即2。39、有以下程序main(intargc,char*argv[]){intn=0,i;for(i=1;i<argc;i++)n=n*10+*argv[i]’0’;printf("%d\n",n);}编译连接后生成可执行文件tt.exe。若运行时输入以下命令行tt12345678程序运行后的输出结果是A、12B、12345C、12345678D、136标准答案:D知识点解析:运行时输入该命令后,参数argc的值为4,字符串数组argv[1]、argv[2]、argv[3]分别为“12”、“345”、“678”,然后取这3个参数的第一个字符,将其转化成原来的数字并组合成一个新的三位数。40、若有定义语句: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知识点解析:一维数组的定义方式为:类型说明符数组名[常量表达式]。其中“常量表达式”表示元素的个数,即数组长度。元素的下标从0开始,最大下标是元素个数减一。本题定义了一个由5个元素(m[0[到m[4])组成的数组。选项A表示对m[3]的引用;选项B表示对m[4]的引用;由于m[0]的值为5,所以选项C表示m[5],但由于m数组元素的最大下标为4,所以本引用下标越界;由于m[i]即m[4]的值为1,所以选项D表示对m[1]的引用。41、有以下程序#inculdeintFun(){ststicintx=1;x*=2;returnx;}main(){inti,s=1;For(i=1;I<=2,I++)s=Fun();printF(“%d\n”,s);}程序运行后的输出结果是A、0B、1C、4D、8标准答案:C知识点解析:暂无解析四、公共基础填空题(本题共5题,每题1.0分,共5分。)42、在算法的4个特性中,算法必须能执行有限个步骤之后终止指的是算法的特性________。标准答案:有穷性。知识点解析:本题考查算法的4个基本特性;可靠性、确定性、有穷性和拥有足够的情报,其中,算法的有穷性是指算法必须在有限的时间内完成,即算法必须执行有限个步骤之后终止。43、诊断和改正程序中错误的工作通常称为【】。标准答案:程序调试知识点解析:程序调试的任务是诊断和改正程序中的错误。程序调试与软件测试不同,软件测试是尽可能多地发现软件中的错误。先要发现软件的错误,然后借助于调试工具找出软件错误的具体位置。软件测试贯穿整个软件生命期,而调试主要在开发阶段。44、软件设计模块化的目的是【】。标准答案:降低复杂性知识点解析:模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程,由此分解来降低复杂性。45、在运算过程中,能够使空表与非空表的运算统一的结构是【】。标准答案:循环链表知识点解析:在链表的运算过程中,采用链接方式即循环链表的结构把空表与非空表的运算统一起来。循环链表具有两个特点:①在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。②循环链表中最后一个结点的指针不是空,而是指向表头结点。46、数据结构分为逻辑结构和存储结构,循环队列属于______结构。标准答案:逻辑知识点解析:数据的逻辑结构主要是反映数据之间的逻辑关系,而存储结构是用来反映数据的逻辑结构在计算机存储空间中的存放形式。循环队列主要是强调数据之间的关系,因此属于逻辑结构。五、填空题(本题共9题,每题1.0分,共9分。)47、下面程序的输出是【】。main(){intarr[10],i,k=0;for(i=0;i<10;i++)arr[i=i;]for(1;i<4;i++)k+=arr[i]+i;printf("%d\n",k);}标准答案:12知识点解析:本题通过第—个for循环将数组arr[0]-arr[9]分别赋值为0-9,通过第二个for循环的三次循环累加,求出结果为12,具体分析如下:i+1:k=0+arr[1]+1即k=2;i=2:k=2+arr[2]+2即k=6;i=3:k=6+arr[3]+3即k=12;48、当m=1,n=2,a=3,b=2,c=4时,执行d=(m=a!=B)&&(n=b>C)后,m的值为()。标准答案:1知识点解析:①“sizeof"、“%”、“>”、“<<”、“*=”,运算符的优先级顺序为:“*=”→“>”→“<<”→“%”→“sizeof”;②位运算的优先级顺序为:“~”→“<<”→“>>”→“&”→“^”。(b=2)>(c=4)不成立,逻辑为假,所以n=0;(a=3)!=(b=2)成立,逻辑为真,所以m=1。49、下列程序段是从键盘输入的字符中统计小写字母的个数,用换行符结束循环。请填空。intn=0,c;c=getchar();while(c!=’\n’){if(______)n++;}A、c>=’a’&&c<=’z’标准答案:知识点解析:小写字母在内存中以ASCII的形式存入,且从a到z依次递增,所以可以直接用c>’a’&&c<=’z’判断是不是小写字母;c!=’\n’判断是用换行符结束循环。50、设变量已正确定义为整型,则表达式n=i=2,++i,i++的值为______。A、3标准答案:知识点解析:本题考查的是C语言逗号表达式的相关知识。程序在计算逗号表达式时,从左到右计算由逗号分隔各表达式的值,整个逗号表达式的值等于其中最后一个表达式的值。本题中,首先i被赋值为2,再自加1,最后i++的值计算为3。51、以下程序的运行结果是#defineMAX(A,B)(A)>(B)?(A):(B)#definePRINT(Y)printf(:Y=%d\t",Y)main(){inta=1,b=2,c=3,d=4,t;t:MAX(a+b,c+d);PRINT(t);}A、Y=3B、存在语法错误C、Y=7D、Y=0标准答案:C知识点解析:暂无解析52、数据模型包括数据结构、()和数据条件。标准答案:数据操作知识点解析:数据模型就是现实世界的反映,数据模型所描述的内容有3个部分,它们是数据结构、数据操作与数据约束。53、用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。st=(char*)_________。标准答案:malloc(11*sizeof(shar))。知识点解析:本题考查库函数调用的一些方法,要写11个字节的动态存储空间的库函数是malloc(11*sizeof(shar))。54、以下程序的输出结果是______。main(){ints,i;for(s=0,i=1;i<3;i++,s+=i);printf("%d\n".s);}标准答案:5知识点解析:此程序中,for循环语句后面直接跟了一个“;”,表明循环体为空.输出语句不在for循环体内,所以在循环执行完毕后才输出s的值.s、i的初值分别为0和1,判断循环条件,表达式“1<3”成立,执行“i++,s+=i”后,i和s的值分别为2和1,继续判断循环条件,表达式“2<3”成立,执行“i++,s+=i”后,i和s的值分别为3,再次判断循环条件,表达式“3<3”不成立,循环结束。55、有以下语句段intn1=10,n2=20;printf("【】",n1,n2);要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。n1=10n2=20标准答案:n1=%d\nn2=%d\n或n1=%d\nn2=%d或n1=%2d\nn2=%2d\n或n1=%2d\nn2=%2d知识点解析:printf函数有两种参数:格式控制参数和输出项参数,其中格式控制参数由两种成分组成:格式说明和普通字符,普通字符将被简单地复制显示,格式说明项将引起一个输出参数项的转换与显示,它是由“%”引出并以一个类型描述符结束的字符串。本题中,n1=和n2=就是普通字符,可以直接显示,又因为n1,n2为整数,所以格式说明项为%d,也可以在%与d之间加上域宽,另外还要在每行输出结束时加转义字符\n进行换行。所以,应填写n1=%d\nn2=%d\n或n1=%d\nn2=%d或n1=%2d\nn2=%2dn或n1=%2d\nn2=%2d。56、下列程序段的输出结果是【】。intn=’c’;switch(n++){default:printf("error");break;case’a’:case’A’:case’b’:case’B’:printf("good");break;case’c’:case’C’:printf(”pass");case’d’:case’D’:printf(”warn");}标准答案:passwarn知识点解析:n++是在执行完其所在的语句后再加1,因此,在执行case的时候,n的值依然为’c’,执行case’c’后面的语句,先打印出“pass”;在执行完case’c’后,未遇到break跳出switch,便接着执行下面的语句,又打印出warn。所以此题输出结果是passwarn。57、有以下定义和语句,则sizeof(a)的值是【】,而sizeof(a.share)的值是【】。structdate{intday;intmouth;intyear;union{intshare1;floatshare2;}share;}a;标准答案:104知识点解析:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。int占2个字节,float占4个字节,共用体变量所占的内存长度等于最长的成员的长度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4=10。国家二级(C语言)笔试模拟试卷第2套一、公共基础选择题(本题共10题,每题1.0分,共10分。)1、算法执行过程中,所需要的存储空间称为算法的A、时间复杂度B、计算工作量C、空间复杂度D、工作空间标准答案:4知识点解析:算法执行时所需要的存储空间,包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间,其中额外空间还包括算法程序执行过程的工作单元以及某种数据结构所需要的附加存储空间。这些存储空间共称为算法的空间复杂度。2、下列关于队列的叙述中,正确的是A、在队列中只能插入数据B、在队列中只能删除数据C、队列是先进先出的线性表D、队列是先进后出的线性表标准答案:4知识点解析:对队列可以进行插入和删除数据的操作,只是插入数据只能在队尾,删除数据只能在队头。所以队列是先进先出的线性表。3、设有下列二叉树:对此二叉树后序遍历的结果是A、ABCDEFB、BDAECFC、ABDCEFD、DBEFCA标准答案:8知识点解析:二叉树的遍历分为先序、中序、后序三种不同方式。本题要求后序遍历,遍历顺序应该为:后序遍历左子树->后序遍历右子树->访问根结点。按照定义,后序遍历序列是DBEFCA。4、下面描述中,不符合结构化程序设计风格的是A、使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑B、注重提高程序的可读性C、模块只有一个人口和一个出口D、使用goto语句标准答案:8知识点解析:在结构化程序设计中,应严格控制使用GOTO语句,必要时才可以使用。5、在面向对象设计中,对象有很多基本特点,其中“从外面看只能看到对象的外部特性,而对象的内部对外是不可见的。”这一性质指的是对象的A、分类性B、标识惟一性C、多态性D、封装性标准答案:8知识点解析:从外面看只能看到对象的外部特性,而对象的内部,即处理能力的实行和内部状态,指的是对象的封装性。6、用黑盒技术测试用例的方法之一为A、因果图B、逻辑覆盖C、循环覆盖D、基本路径测试标准答案:1知识点解析:黑盒测试主要方法有等价值划分法、边界值分析法、错误推测法、因果图法等。白盒测试的主要方法有逻辑覆盖、基本路径测试循环覆盖等。只有A属于黑盒测试。7、软件需求分析阶段的工作可以分为4个方面:需求获取、需求分析、编写需求分析说明书和A、阶段性报告B、需求评审C、总结D、都不正确标准答案:2知识点解析:需求分析的4个方面是:需求获取、需求分析、编写需求分析说明书和需求评审。8、在数据库管理系统提供的数据语言中,负责数据的查询及增、删、改等操作的是A、数据定义语言B、数据转换语言C、数据操纵语言D、数据控制语言标准答案:4知识点解析:在数据库管理系统提供的数据语言中,数据操纵语言负责数据的查询及增、删、改等操作。9、关系数据库的数据及更新操作必须遵循()等完整性规则。A、实体完整性和参照完整性B、参照完整性和用户定义的完整性C、实体完整性和用户定义的完整性D、实体完整性、参照完整性和用户定义的完整性标准答案:8知识点解析:关系模型中包括关系的数据结构、关系的操纵和关系中的数据约束。关系完整性约束即数据完整性,包括实体完整性、参照完整性和用户自定义完整性。10、实体一联系模型中,实体与实体之间的联系不可能是A、一对一B、多对多C、一对多D、一对零标准答案:8知识点解析:实体联系模型中实体与实体之间的联系有一对一(1:1),一对多或多对一(1:m或m:1),多对多(m:n)其中一对一是最常用的关系。二、选择题(1分)(本题共10题,每题1.0分,共10分。)11、用C语言编写的代码程序A、可立即执行B、是一个源程序C、经过编译即可执行D、经过编译解释才能执行标准答案:2知识点解析:C语言是一种高级语言,C语言源程序经过C语言编译程序编译之后,生成一个后缀为.OBJ的二进制文件(称为目标文件),最后还要由称为“连接程序”(Link)的软件,把此.OBJ文件与c语言提供的各种库函数连接在一起,生成一个后缀.EXE的可执行文件。显然C语言不能立即执行。12、结构化程序由三种基本结构组成,三种基本结构组成的算法A、可以完成任何复杂的任务B、只能完成部分复杂的任务C、只能完成符合结构化的任务D、只能完成一些简单的任务标准答案:1知识点解析:C程序由顺序结构、选择结构和循环结构三种基本的结构组成,这三种结构可以组成任何复杂的C程序,即可以完成任何复杂的任务。13、以下定义语句中正确的是A、chara=’A’b=’B’;B、floata=b=10.0;C、inta=10,*b=&a;D、float*a,b=&a;标准答案:4知识点解析:选项A中定义两个变量a和b,并赋初值,C语言中可以同时定义多个变量,但变量之间必须用“,”隔开,显然,选项A中少了一个逗号“,”;选项B中定义变量时用了连续的赋值语句,这在定义变量是不正确的;选项D定义一个指针,然后定义了一个变量并让这个变量的初值为该指针变量,显然这这时的指针变量还没初始化就被赋值给变量。14、下列选项中,不能用作标识符的是A、_1234_B、_1_2C、int_2_D、2_int_标准答案:8知识点解析:在C语言中,合法的标识符由字母、数字和下划线组成,并且第一个字符必须为字母或者下划线,如:acd、d_ad、_adf124、_124等都是合法的标识符号。而2asdf,_sd/=都不是合法的标识符。在C语言中大写字母和小写字母被认为是两个不同的字符,如:ACD和acd是两个不同的标识符号。15、有以下定义语句doublea,b;intw;longc;若各变量已正确赋值,则下列选项中正确的表达式是A、a=a+b=b++B、w%((int)a+b)C、(c+w)%(int)aD、w=a==b;标准答案:4知识点解析:选项A中不是合法的赋值语句,将最右边的第一个赋值表达式加括号即为a=b+(b=b++)才正确;选项B中运算符“%”的对象必须是整型,而在选项B中(int)a+b为double型;选项a,b都为double“==”应该改为“=”。16、有以下程序main(){ihtm=3,n=r,x;x=-m++;X=x+8/++n;printf("%d\n",x);}程序运行后的输出结果是A、3B、5C、-1D、-2标准答案:8知识点解析:主函数中首先定义了整型变量m、n和x,并给m和n赋初值为3和4,接着执行两条赋值语句,第一条x=-m++等价于x=-(m++),其值即为-3,第二条x=x+8/++n等价于x=x+8/(++n),即为x=-3+8/5=-2,因此最后输出x的值为-2。17、有以下程序main(){chara=’a’,b;printf("%c,",++A);printf("%c\n",b=a++);}程序运行后的输出结果是A、b,bB、b,cC、a,bD、a,c标准答案:1知识点解析:程序中的第一个输出语句输出表达式++a的值,该++a是在使用a之前,先使a的值加1,即为a加1为字符b,此时a的值为b,所以第一个输出语句输出的值为b,第二个输出语句中输出的b的值,这时b的值为表达式a++的值,a++是在使用a之后(此时a的值为b,所以赋给b的值为B),使a的值加因此第二个输出的值也为b。18、有以下程序main(){intm=0256,n=256;printf("%o%o\n",m,n);}程序运行后的输出结果是A、02560400B、0256256C、256400D、400400标准答案:4知识点解析:程序中定义了两个整型变量,一个用八进制表示,一个用十进制表示,输出语句中要求m,n都为八进制输出,显然m原样输出为256,n的值转换为八进制输出(256的八进制为400)。19、有以下程序main(){inta=666,b=888;Printf("%d\n",a,b);}程序运行后的输出结果是A、错误信息B、666C、888D、666,888标准答案:2知识点解析:程序中的printf()函数的输出格式部分只说明了一个%d,而输出成员列表却有两个成员a和b,在这里将只输出第一个成员a值为666。20、有以下程序main(){inti;for(i=0;i<3;i++)switch(i){case0:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}}程序运行后的输出结果是A、22111B、21021C、122D、12标准答案:4知识点解析:程序中for循环了三次,第一次i=0,执行switch语句中case0:分支,直到遇到default语句,退出switch,这里共执行了三个输出语句分别输出0,0,0,第二次循环i=1,switch语句中没有匹配的分支,故只执行default语句输出1,退出switch语句;第三次循环i=2,从switch语句中的case2:开始执行,共执行了两个输出语句输出2、2。最后输出的结果为000122。三、选择题(2分)(本题共30题,每题1.0分,共30分。)21、有以下程序main(){ints=0,a=1,n;seanf("%d",&n);do{s+=1;a=a-2;}while(a!=n);printf("%d\n",s);}若要使程序的输出值为2,则应该从键盘给n输入的值是A、-1B、-3C、-5D、0标准答案:2知识点解析:根据题目要求,最后要使输出的s值为2,在程序中改变。的值语句只有循环体中的s+=1;语句,而初始9的值为o,显然要使s的值变为2,该语句必须执行,两次,即do-while循环中的循环体要执行两次,而在do-while中,首先不进行条件而执行do后面的循环体语句,然后再判断while循环条件。所以说不管循环判断条件是否为真s+=1;语句至少执行一次,根据分析,只需要while后面括号的循环判断表达式的值为真一次且只能为真一次,将四个选项中的内容依次代入该程序中不难得到只有n=-3刚好使循环判断条件a!=n为真一次。22、若有如下程序段,其中s、a、b、c均已定义为整型变量,且a、c均已赋值(c大于0)s=a;for(b=1;b<=c;b++)s=s+1;则与上述程序段功能等价的赋值语句是A、s=a+b;B、s=a+c;C、s=s+c;D、s=b+c;标准答案:2知识点解析:本程序中for循环的次数为c-1+1共循环了c次,而每循环一次s的值加1,所以s的值为s+c。而最开始s的值为a。23、有以下程序main(){intk=4,n=0;for(;n<k;){n++;if(n%3!=0)continue;K--;}printf("%d,%d\n",k,n);}程序运行后的输出结果是A、1,1B、2,2C、3,3D、4,4标准答案:4知识点解析:在本程序的for循环中,用到了一个continue语句,continue语句的作用是停止本次循环,即不执行循环体内continue语句后面的其他语句,继续下次循环的条件判断。首先在for循环中n自加1(值变为1),然后执行后面的if语句,由于if语句后面括号的表达式(1%3!=0)的值为真,程序执行continue语句,回到for循环的开始部分,并且判断for循环中的条件表达式(n<k)为真,重复执行“n++;”语句,如此循环直到n=3时,if语句判定条件中表达式(3%3!=0)的值为假,程序执行if语句后面的“k--;”语句,此时k的值为3,不满足“n<k”,退出for循环。故最后的k和n的值为3和3。24、要求以下程序的功能是计算main(){intn;floats;s=1.0;for(n=10;n>1;n--)s=s+1/n;pfintf("%6.4f\n",s);}程序运行后输出结果错误,导致错误结果的程序行是A、s=1.0;B、for(n=10;n>1;n--)C、s=s+1/n;D、printf("%6.4f\n",8);标准答案:4知识点解析:程序中由于n为整型,所以1/n的结果始终为0,故程序最后输出的结果为0,其结果错误,原因为在表达式1/n中1和n均为整型,所以应该将1改为1.0,这样表达式1.0/n的值不为0,为该数学表达式的值,因此我们可以知道导致程序运行后输出结果错误的行为s=s+1/n。25、已定义ch为字符型变量,以下赋值语句中错误的是A、ch=’\’;B、ch=62+3;C、ch=NULL;D、ch=’\xaa’;标准答案:1知识点解析:给字符型变量赋值只能赋一个字符,包括转义字符。选项A中“\”为转义字符应该用“||”来表示;选项B中将一个整数赋值给字符变量;选项C将一个空值赋值给字符变量;选项D将一个用十六进制数表示的转义字符赋值给字符变量。26、若已定义的函数有返回值,则以下关于该函数调用叙述中错误的是A、函数调用可以作为独立的语句存在B、函数调用可以作为一个函数的实参C、函数调用可以出现在表达式中D、函数调用可以作为一个函数的形参标准答案:8知识点解析:在c语言中规定,无返回值的函数调用,可以作为表达式或表达式的一部分,也可以作为一条语句;而有返回值的函数调用只能作为一个函数的实参(即将其返回值传给相应的形参),而不能作为形参(因为形参是在函数定义时说明的)。27、有以下函数定义:voidfun(intn,doublex){……}若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是A、fun(inty,doublem);B、k=fun(10,12.5);C、fun(x,n);D、voidfun(n,x);标准答案:4知识点解析:选项A中应将y和m前面的函数的类型说明符去掉;选项B中函数传了2个参数,其中一个为整型一个为浮点型,而fun()函数在定义时声明的2个参数,一个为整型一个为双精度型,其参数类型不一致;选项D在调用函数时,不应该再声明其返回类型。28、有以下程序voidfun(char*a,char*b){a=b;(*a)++;}main(){charcl=’A’,c2=’a’,*p1,*p2;p1=&c1;p2:&c2;fun(p1,p2);printf("%c%c\n",c1,c2);}程序运行后的输出结果是A、AbB、aaC、AaD、Bb标准答案:1知识点解析:指针作为函数参数的运用,经过分析得知fun()函数的功能:将形参a指向形参b所指的存储空间,然后使形参a指向变量的值加1。在主函数中定义了字符型指针变量p1和p2,并让它们分别指向“c1和c2。然后将p1、p2作为实参传递给形参a、b。在fun()函数中,首先让指针变量p1指向P2,然后P1指向的存储空间的值加1,即让变量c2加1为“b”,而c1的值没有被改变,仍然是“A”。29、若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是A、int*i=NULL;scanf("%d",i;B、float*f=NULL;*f=10.5;C、chart=’m’,*c=&t;*c=&t;D、long*L;L=’\0’;标准答案:8知识点解析:选项A定义了一个整型变量i,并且初始化让它指向NULL,接着通过scanf()函数,改变i指向的存储空间的值,选项A中首先定义了整型指针变量i并初始化为NULL,即表示指针i不指向任何内存,即此时程序还没有为i在内存中开辟存储单元,而在scanf()函数中第二个参数是地址参数,显然在这里i不是表示地址,所以下面的scanf(“%d”,i)语句是不正确的;选项B定义了一个浮点型变量f并初始化让它指向NULL,而当一个指针变量指向NULL以后不能再给它赋值,而接下来的程序中为其赋了一值;选项C中首先定义了一个字符变量t并给它赋初值’m’,然后定义一个字符型指针c并让它指向了变量t,这一部分正确,然后接着用了一个语句“*c=&t;”应该将该语句中c前的“*”去掉。30、有以下程序#include<stdio.h>main(){printf("%d\n",NULL);}程序运行后的输出结果是A、0B、1C、-1D、NULL没定义,出错标准答案:1知识点解析:在C语言中NULL的ASCII码值为0,而输出函数要求以整型格式输出,故最后的输出数为0。31、已定义c为字符型变量,则下列语句中正确的是A、C=’97’;B、C="97";C、c=97;D、c="a";标准答案:4知识点解析:用单引号括起来的一个字符称为字符常量,而选项B和选项D中用的是双引号,而用双引号括起来的字符为字符串常量。因为在c语言中,字符常量在存储时,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中,所以C语言使字符型数据和整型数据之间可以通用。而选项A中,给字符型变量赋值时只能赋一个字符,而9,7作为字符时为两个字符且必须分别用单引号括起来。32、以下不能正确定义二维数组的选项是A、inta[2][2]={{1},{2}};B、inta[][2]={1,2,3,4};C、inta[2][2]={{1},{2,3}};D、inta[2][]={1,2},{3,4}};标准答案:8知识点解析:二维数组的定义和初始化在定义中如果对所有元素赋初值,其第一维的长度可以省略;二维数组初始化也可以只对每行或前若干行的前若干个元素赋初值;在二维数组定义时不能省略第二维的长度。33、以下选项中不能正确把c1定义成结构体变量的是A、typedefstruct{intred;intgreen;;intblue;}COLOR;COLORcl;B、structcolorcl{intred;intgreen;intblue;};C、struetcolor{intred;intgreen;intblue;}c1;D、struct{intred;intgreen;intblue;}cl;标准答案:2知识点解析:结构体类型的定义格式为:stract结构体名成员说明列表};结构体变量的定义有3种形式:第一种,定义结构体类型的同时定义结构体变量,如:street结构体名{成员说明列表}变量;第二种,先定义一个结构体类型,然后使用该类型来定义结构体变量,如:strectstudent{成员说明列表};student变量;第三种,定义一个无名称的结构体类型的同时定义结构体变量,如:strectstudent{成员说明列表}变量;。34、以下能正确定义一维数组的选项是A、intnum[];B、#defineN100intnum[N];C、intnum[0..100];D、intN=100;intnum[N];标准答案:2知识点解析:选项A定义数组时省略了长度,而C语言中规定,只有在定义并同时进行初始化时,数组的长度才可以省略,数组的长度为初始化时候的成员个数;在C语言中规定,数组的长度必须是一个整数或整型常量表达式;定义时数组的长度不能使用变量表示。35、下列选项中正确的语句组是A、chars[8];s={"Beijing"};B、char*s;s={"Beijing"};C、chars[8];s="Beijing";D、char*s;s="Beijing";标准答案:8知识点解析:字符数组初始化可以有两种方式:方式一,按单个字符的方式赋初值。方式二,把一个字符串作为初值赋给字符数组。选项A定义的字符数组长度为8,由于最后还要加一个“、0”做结束标志,所以赋给他的字符串长度应小于等于7;在给字符数组赋初值的时候,应该用花括号“{”和“}“将字符串括起来。将字符型指针变量指向字符串也有两种方法,一是在定义指针变量时就给其赋初值,比如:char*p=“student”;二是给指针变量赋值,比如:p=“student”;(p已经被定义为字符型指针变量;)。36、已定义以下函数fun(int*p){return*p;}该函数的返回值是A、不确定的值B、形参p中存放的值C、形参p所指存储单元中的值D、形参p的地址值标准答案:4知识点解析:函数的返回值应该为return后面的表达式的值,在本题中的表达式为*p,*p指的是形参p所指存储单元中的值。37、下列函数定义中,会出现编译错误的是A、max(intx,inty,int*z){*z=x>y?xy;}B、intmax(intx,y){intz;z=x>y?xy;returnz;}C、max(intx,inty){intz;z=x>y?xy;return(z);}D、intmax(intx,inty){return(x>y?xy);}标准答案:2知识点解析:本题考核的知识点是函数的定义方法。选项B中在说明形参时,省略了第二个参数的类型,故选项B编译不能通过。38、有以下程序#include<stdio.h>#defineF(X,Y)(X)*(Y)main(){inta=3,b=4;printf("%d\n",F(a++,b++));程序运行后的输出结果是A、12B、15C、16D、20标准答案:1知识点解析:在程序中先用表达式将宏替换掉,则输出语句中的表达式为(a++)*(b++),而a++的值为3,b++的值为4。因此最后的值为3*4=12。39、有以下程序fun(inta,intb){if(a>b)return(a);elsereturn(b);}main(){intx=3,y=8,z=6,r;r=fun(fun(x,y),2*z);Printf("%d\n",r);}程序运行后的输出结果是A、3B、6C、8D、12标准答案:8知识点解析:主函数中首先定义了4个整型变量x、y、z和r,并分别给x、y、z赋初值为3、8、6,接着调用一个fun()函数,并将返回值赋给变量r。其中将fun(x,y)函数的返回值和2*z作为fun()函数的两个参数。在内层fun(x,y)函数中,将x的值和y的值传给形参a和b,此时a和b的值分别为3和8,执行if语句,由于if后面判断条件表达式“a>b”为假,所以执行else后面的语句,返回值为8。此时,外层fun(x,y)函数两个参数为8和2*z=12,所以,的赋值语句相当于r=fun(8,12),同上分析可知fun(8,12)返回值为12,因此最后r的值为12。40、若有定义:iht*p[3];,则以下叙述中正确的是A、定义了一个基类型为int的指针变量p,该变量具有三个指针B、定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针C、定义了一个名为*p的整型数组,该数组含有三个int类型元素D、定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素标准答案:2知识点解析:指针数组也是一种数组,所有有关的概念都适用于它。但它与普通的数组又有区别,它的数组元素是指针类型,只能用来存放地址。其格式为:存储类型数据类型*指针数组名[长度1],其含义为:定义了一个长度1的数组,其中数组元素为相应存储类型的指针。41、以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址#include<stdio.h>#include<string.h>char*scmp(char*s1,char*s2){if(strcmp(s1,s2)<0)return(s1);elsereturn(s2);}main(){inti;charstring[20],str[3][20];for(i=0;i<3;i++)gets(str[i]);strcpy(string,scmp(str[0],str[1]));/*库函数strcpy对字符串进行复制*/strcpy(string,scmp(string,str[2]));printf("%s\n",string);}若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为A、abcdB、adbaC、abcD、abca标准答案:1知识点解析:字符串比较大小的标准是从第一个字符开始依次向右比较,遇到某一个字符ASCII码值较大时,该字符所在的字符串就是较大的字符串。主函数中调用了函数scmp(),分析不难知道该函数的作用是返回参加比较的两个字符串中的较小的字符串,它的主函数中定义了一个二维字符数组来存放三个字符串。接着通过for循环给每个字符串赋值,赋值后三个字符串分别为“abcd”、“abba”、“abc”,接着比较str[0]和str[1]的大小,根据字符串大小比较标准可知str[0]较小,然后通过函数strcpy()把str[0]中的字符串,拷贝到string中,然后比较string和str[2)的大小,比较结果是string较小,最后输出string的值为“abcd”。42、有以下程序structs{intx,y;}data[2]={10,100,20,200};main(){structs*p=data;printf("%d\n",++(p->x));}程序运行后的输出结果是A、10B、11C、20D、21标准答案:2知识点解析:本题中定义了一个结构体数组data[2]并初始化,主函数中定义了一个结构体类型指针变量并让它指向data的首地址,由于p指向第一个元素的地址,所以p->x相当于data[0].x即为10,所以++(p->x)后的值为11。43、有以下程序段main(){inta=5,*b,**c;c=&b;&a;}程序在执行了“C=&b;b=&a;”语句后,表达式“**c”的值是A、变量a的地址B、变量b中的值C、变量a中的值D、变量b的地址标准答案:4知识点解析:指向指针的指针,主函数中定义了一个整型变量a,一个整型指针变量b和一个二级指针变量c,并让c指向指针变量b,让指针b指向整型变量a,所以**c为变量a的值。44、有以下程序#include<string.h>main(){charstr[][20]={"Hello","Beijing"},*p=str;printf("%d\n",strlen(p+20));}程序运行后的输出结果是A、0B、5C、7D、20标准答案:4知识点解析:二维数组的初始化及库函数strlen()的应用,主函数中定义了一个二维字符数组并初始化,初始化后的结果为str[0]=“Hello”、str[1]=“Beijing”,然后定义一个字符指针变量p并让它指向数组的首地址,即指向str[0],而在C语言中无论是一维还是多维数组,其元素在内存中都是顺序存放的,故p+20后指针指向str[1],所以strlen(p+20);返回的是str[1]中的字符串的长度,即Beijing的长度为7,所以最后输出的值为7。45、已定义以下函数fun(char*p2,char*p1){while((*p2=*p1)!=’0’){P1++;p2++;}}函数的功能是A、将p1所指字符串复制到p2所指内存空间B、将P1所指字符串的地址赋给指针p2C、对p1和p2两个指针所指字符串进行比较D、检查P1和p2两个指针所指字符串中是否有’\0’标准答案:1知识点解析:fun()函数中声明了两个字符串指针作为形参,在其函数体中用了一个while循环,首先while括号内表达式*p2=*p1是将p1所指的内容赋值到P2所指的存储空间中,然后再判断是否为’\0’,表达式的值为真时,执行循环体,指针p1和指针P2分别下移一位,当p1指向字符’\0’时,表达式的值为假,循环结束,故此函数的功能是将p1所指字符串复制到p2所指内存空间中。46、有以下程序main(){intx=3,y=2,z=1;printf("%d\n",x/y&~z);}程序运行后的输出结果是A、3B、2C、1D、0标准答案:8知识点解析:位与运算符“&”,按二进位进行“与”运算,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0;取反运算符“~”,用来对一个二进制按位取反,即将0变1,1变0。在prinf()函数的表达式中,“&”前面表达式的值为1(3/2=1)表示为二进制为00000001,而按位取反运算符“~”的优先级高于按位与运算符“&”,先计算“&”后面的取反运算符“~”。z的二进制表示为00000001,取反后为11111110,最后进行“&”,即“00000001&11111110”可知结果为00000000,故最后的值为0。47、若fp已正确定义并指向某个文件,当未遇到该文件结束标志时函数feof(fp)的值为A、0B、1C、-1D、一个非0值标准答案:1知识点解析:文件尾测试函数feof()的应用,读取文件时,当文件中的数据全部读完后,文件位置指针将位于文件的结尾。此时如果读数据,将会出现错误。为了保证读写数据的正确性,需要进行文件尾测试,文件尾测试使用函数feof(),它的功能是测试fp指向的文件是否到达文件尾。若到达文件尾,返回值为非0,否则返回值为0。在本题中fP指向的某文件还没有到了文件尾,因此返回0。48、下列关于C语言数据文件的叙述中正确的是A、文件由ASCII码字符序列组成,C语言只能读写文本文件B、文件由二进制数据序列组成,C语言只能读写二进制文件C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件标准答案:8知识点解析:C语言可以读写二进制文件和文本文件两种:文件按数据的存放格式可分为二进制文件

温馨提示

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

评论

0/150

提交评论