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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷7(共9套)(共350题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。A、12345ABCDEB、EDCBA54321C、ABCDE12345D、54321EDCBA标准答案:B知识点解析:栈是先进后出的原则组织数据,所以入栈最早的最后出栈,所以选择B)。2、下列叙述中正确的是()。A、循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B、在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C、在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D、循环队列中元素的个数是由队头指针和队尾指针共同决定标准答案:D知识点解析:循环队列有队头和队尾两个指针,但是循环队列仍是线性结构的,所以A)错误;在循环队列中只需要队头指针与队尾两个指针来共同反映队列中元素的动态变化情况,所以B)与C)错误。3、在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。A、O(n)B、O(n2)C、(log2n)D、O(nlog2n)标准答案:C知识点解析:当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为n的有序线性表,在最坏情况下,二分法查找只需要比较log2n次,而顺序查找需要比较n次。4、下列叙述中正确的是()。A、顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B、顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C、顺序存储结构能存储有序表,链式存储结构不能存储有序表D、链式存储结构比顺序存储结构节省存储空间标准答案:A知识点解析:链式存储结构既可以针对线性结构也可以针对非线性结构,所以B)与C)错误。链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以D)错误。5、数据流图中带有箭头的线段表示的是()。A、控制流B、事件驱动C、模块调用D、数据流标准答案:D知识点解析:数据流图中带箭头的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。6、在软件开发中,需求分析阶段可以使用的工具是()。A、N-S图B、DFD图C、PAD图D、程序流程图标准答案:B知识点解析:在需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD,判定树与判定表,所以选择B)。7、在面向对象方法中,不属于"对象"基本特点的是()。A、一致性B、分类性C、多态性D、标识唯一性标准答案:A知识点解析:对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、模块独立性好。所以选择A)。8、一间宿舍可住多个学生,则实体宿舍和学生之间的联系是()。A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。9、在数据管理技术发展的三个阶段中,数据共享最好的是()。A、人工管理阶段B、文件系统阶段C、数据库系统阶段D、三个阶段相同标准答案:C知识点解析:数据管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。其中最后一个阶段结构简单,使用方便逻辑性强物理性少,在各方面的表现都最好,一直占据数据库领域的主导地位,所以选择C)。10、有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为。A、笛卡尔积B、交C、并D、自然连接标准答案:D知识点解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以根据T关系中的有序组可知R与S进行的是自然连接操作。11、以下不能用于描述算法的是A、文字叙述B、程序语句C、伪代码和流程图D、E-R图标准答案:D知识点解析:算法的描述有伪代码、流程图、N-S结构图等,E-R是实体联系模型,所以选择D。12、以下选项中合法的实型常量是A、0B、3.13e-2.1C、.914D、2.0*10标准答案:C知识点解析:A选项为整型数据,B选项中e后面必须为整数,D选项是表达式,不是常量,所以选择C。13、以下叙述中正确的是A、a是实型变量,a=10在C语言中是允许的,因此可以说:实型变量中可以存放整型数B、在赋值表达式中,赋值号的右边可以是变量,也可以是任意表达式C、若有inta=4,b=9;执行了a=b后,a的值已由原值改变为b的值,b的值变为0D、若有inta=4,b=9;执行了a=b;b=a;之后,a的值为9,b的值为4标准答案:B知识点解析:B选项中a是实型变量,a=10在C语言中是允许的,但是实型变量中不可以存放整型数?C选项中执行a=b后,a的值变为b的值,为9,b的值不变,仍为9,D选项中执行a=b后,a的值为9,b的值为9,执行b=a后,a的值为9,b的值也为9,所以选择B。14、以下选项中合法的变量是A、5aB、_10_C、A%D、sizeof标准答案:B知识点解析:变量的命名要符合标识符的命名规则,即由下划线、字母或数字组成,且必须以下划线或字母开始,也不能和关键字相同,所以选择B。15、不能正确表示数学式的表达式是A、a/c*bB、a*b/cC、a/b*cD、a*(b/c)标准答案:C知识点解析:/号和*号的优先级处于平级,结合性都是自左至右?所以选择C,C式子表示的是。16、有以下程序#includemain(){inta=3;printf("%d\n",(a+=a-=a*a));}程序运行后的输出结果是A、3B、9C、0D、-12标准答案:D知识点解析:首先计算a*a,结果为9,然后执行a=a-9,即3-9,结果为-6,然后执行a=(-6)+(-6),即a=的值为-12,所以选择D。17、若变量已正确定义,以下选项中非法的表达式是A、a!=4||’b’B、’a’=1/2*(x=y=20,x*3)C、’a’%4D、’A’+32标准答案:B知识点解析:A选项中’a’即表示a为字符常量,再给’a’赋值1/2*(x=y=20,x*3),是不正确的。因此B选项正确。18、有以下程序#includemain(){intx=35,B;charz=’B’;B=((x)&&(z<’b’));printf("%d\n",B);}程序运行后的输出结果是A、1B、0C、35D、66标准答案:A知识点解析:本题重点考察逻辑运算符和关系运算符的相关知识,已知变量x为整型变量,并赋值为35,变量z为字符型变量,并赋值为’B’。语句B=((x)&&(z<’b’));中,(x)的值为1,’B’的asscii码小于’b’的asscii码,所以(z<’b’)的值也为1,1&&1结果为1。因此A选项正确。19、与数学表达式x≥y≥z对应的C语言表达式是A、(x>=y)||(y>=x)B、(x>=y>=z)C、(x>=y)!(y>=z)D、(x>=y)&&(y>=z)标准答案:D知识点解析:本题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z是逻辑与的关系。因此D选项正确。20、有以下程序#includemain(){doublex=2.0,y;if(x<0.0)y=0.0;elseif((x<5.0)&&(!x))y=1.0/(x+2.0);elseif(x<10.0)y=1.0/x;elsey=10.0;printf("%f\n",y);}程序运行后的输出结果是A、0.000000B、0.250000C、0.500000D、1.000000标准答案:C知识点解析:本题重点考察if语句,变量x和y均为double类型,由于变量x赋值为2.0,因此执行if((x<5.0)&&(!x)),即条件为0,继续执行if(x<10.0),条件为1,即执行y=1.0/x;。依据printf()函数输出类型中f是以小数形式输出单、双精度实数。因此C选项正确。21、有以下程序#includemain(){inti,sum;for(i=1;i<6;i++)sum+=i;printf("%d\n",sum);}程序运行后的输出结果是A、随机值B、0C、15D、16标准答案:A知识点解析:本题重点考察for语句,变量没有初始化的情况下,默认值与编译器有关系,不同的编译器有不同的值。因此A选项正确。22、有以下程序#includemain(){inta=3;do{printf("%d,",a-=2);}while(!(--a));printf("\n");}程序运行后的输出结果是A、1B、1,-2,C、3,0,D、1,0标准答案:B知识点解析:本题重点考察do……while语句,该循环语句的特点是,先执行循环中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。变量a赋初值为3,每循环一次需执行语句a-=2一次,同时循环条件使变量a自减1,所以第一次循环后变量a变为1,第2次循环后变量a变为-2。因此A选项正确。23、有以下程序#includevoidfun(inta,intb,intc){a=b;b=c;c=a;}main(){inta=10,b=20,c=30;fun(a,b,c);printf("%d,%d,%d\n",c,b,a);}程序运行后的输出结果是A、10,20,30B、30,20,10C、20,30,10D、0,0,0标准答案:B知识点解析:函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。因此B选项正确。24、有以下程序#includemain(){intc[6]={10,20,30,40,50,60},*p,*s;p=c;s=&c[5];printf("%d\n",s-p);}程序运行后的输出结果是A、5B、50C、6D、60标准答案:A知识点解析:首先初始化一维数组c[6],语句p=c;指将c[0]元素的地址赋给指针变量p;语句s=&c[5];指将c[5]元素的地址赋给指针变量s。程序最后输出s-p,即结果为5。因此A选项正确。25、有以下程序#includemain(){inta[3]={0},i,j,k=2;for(i=0;i<k;i++)for(j=0;j<k;j++)a[j]=a[i]+1;printf("%d\n",a[1]);}程序运行后的输出结果是A、0B、2C、1D、3标准答案:D知识点解析:该题首先初始化一维数组a[3]所有元素都为0;执行嵌套循环for语句,当i=0、j=0时,a[0]=a[0]+1=1;当i=0、j=1时,a[1]=a[0]+1=2;当i=1、j=0时,a[0]=a[1]+1=3;当i=1、j=1时,a[1]=a[1]+1=3;因此D选项正确。26、有以下程序#includemain(){inta[5]={2,4,6,8,10},*p,**k;p=a;k=&p;printf("%d",*(p++));printf("%d\n",**k);}程序运行后的输出结果是A、46B、44C、22D、24标准答案:D知识点解析:首先通过p=a使p指向数组的第1个元素,所以输出2;在输出2以后,由于p++,即p就指向数组的第2个元素,**k就是取出p所指向元素的值,而p指向的是数组的第2个元素,即输出4。因此D选项正确。27、有以下程序#includemain(){intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];for(i=0;i<2;i++){if(i==0)aa[i][i+1]=*p+1;else++p;printf("%d",*p);}}程序运行后的输出结果是A、26B、23C、43D、46标准答案:B知识点解析:观察题目,可以发现,*p=&aa[0][0]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,*p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[0][0],输出2,而i=1时执行了++p操作使指针向后移动指向了aa[0][1],所以在输出*p时应为3。因此B选项正确。28、以下fun函数返回数组中最大值的下标#includeintfun(int*s,intn){inti,k;for(i=0,k=i;iA、++kB、i=kC、k++D、k=i标准答案:D知识点解析:fun函数的功能是返回数组中最大值的下标。通过for循环语句,每次将最大的数给k,即k=i。因此D选项正确。29、有以下程序#includeintfun(chars[]){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("0ABCDEF"));}程序运行后的输出结果是A、1B、6C、7D、0标准答案:C知识点解析:本题考查字符串作为函数参数以及while语句,本题中传入字符串OABCDEF,然后执行fun后,就得到了该字符串中字符的个数,不包括结尾符,该字符串有7个字符,所以答案为C。30、若有以下程序段charstr[4][12]={"aa","bbb","ccccc","d"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];不能正确引用字符串的选项是A、str[0]B、strpC、strp[3]D、*strp标准答案:B知识点解析:本题考查字符串指针作为函数参数,本题中p作为字符串指针传入fun中,p指向的内容并没有发生变化,所以选项B正确。31、有以下程序#include#includevoidfun(char*s){chara[10];strcpy(a,"STRING");s=a;}main(){char*p="PROGRAM";fun(p);printf("%s\n",p);}程序运行后的输出结果是(此处□代表空格)A、STRINGB、STRING□□□□C、STRING□□□D、PROGRAM标准答案:D知识点解析:本题考查字符串指针作为函数参数,本题中p作为字符串指针传入fun中,p指向的内容并没有发生变化,所以选项D正确。32、有以下程序#includevoidfun(intn,int*s){intf;if(n==1)*s=n+1;else{fun(n-1,&f);*s=f;}}main(){intx=0;fun(4,&x);printf("%d\n",x);}程序运行后的输出结果是A、3B、1C、2D、4标准答案:C知识点解析:本题考查函数的递归调用,将函数参数带入函数中,一步步递归即可得到结果,结果为2,选项C正确。33、有以下程序#includemain(){charc[2][5]={"6938","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序运行后的输出结果是A、9284B、9824C、6982D、6385标准答案:D知识点解析:本题中首先是将二维字符数组c赋值指针数组p,然后遍历p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为6385。34、有以下程序#includevoidfun(int*s){staticintj=0;dos[j]+=s[j+1];while(++j<2);}main(){inti,a[10]={1,2,3,4,5};for(i=1;i<3;i++)fun(a);for(i=1;i<5;i++)printf("%d",a[i]);printf("\n");}程序运行后的输出结果是A、34756B、5745C、5795D、35745标准答案:B知识点解析:本题主要考查do…while语句,执行fun函数后,a数组里面的元素变为35745,输出后四个字符,所以结果为5745,选项B正确。35、若要求使p指向一个int35.有以下程序段int*p;p=_______malloc(sizeof(int));若要求使p指向一个int型的动态存储单元,在横线处应填入的是A、(int*)B、intC、int*D、(*int)标准答案:A知识点解析:本题考查malloc函数,题目中要求p指向一个int型的动态存储单元,那么就应该将分配的存储单元转化为int,所以选项A正确。36、有以下程序#include#defineSUB(X,Y)(X+1)*Ymain(){inta=3,b=4;printf("%d\n",SUB(a++,b++));}程序运行后的输出结果是A、25B、20C、12D、16标准答案:D知识点解析:本题考查宏定义,宏定义只是做个简单的替换,执行SUB(a++,b++)=(a+++1)*b++=16,选项D正确。37、有以下程序#includemain(){charc[2][5]={"6938","8254"},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=c[i];for(i=0;i<2;i++)for(j=0;p[i][j]>0;j+=2)s=10*s+p[i][j]-’0’;printf("%d\n",s);}程序运行后的输出结果是A、6938B、9824C、4528D、6385标准答案:D知识点解析:本题中首先是将二维字符数组c赋值指针数组p,然后遍历p找到两个字符串中的偶数位置的字符并组成一个数值输出,根据代码执行即可得到结果为6385。38、若有以下程序段structst{intn;structst*next;};structsta[3]={5,&a[1],7,&a[2],9,’\0’},*p;p=&a[0];则以下选项中值为6的表达式是A、p->nB、(*p).nC、p->n++D、++(p->n)标准答案:D知识点解析:本题考查结构体变量的引用,其中a为定义的结构体数组,D选项中p->n为5,++(p->n)为6,所以D选项正确。39、有以下程序#includemain(){inti=1;i=i^i;printf("%d\n",i);}程序运行后的输出结果是A、1B、-1C、0D、7标准答案:C知识点解析:本题考查位运算中按位异或运算符,异或运算只有在两个比较的位不同时其结果是1,否则结果为0,i^i运算符两边相同,所以结果为0,选项C正确。40、以下程序用来统计文件中字符的个数(函数feof用以检查文件是否结束,结束时返回非零)#includemain(){FILE*fp;longnum=0;fp=fopen("fname.dat","r");while(_______){fgetc(fp);num++;}printf("num=%d\n",num);fclose(fp);}下面选项中,填入横线处不能得到正确结果的是A、feof(fp)==NULLB、!feof(fp)C、feof(fp)D、feof(fp)==0标准答案:C知识点解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,while判断条件应是如果没有到达文件末尾,所以选项C不能得到正确的结果。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、对长度为n的线性表作快速排序,在最坏情况下,比较次数为A、nB、n-1C、n(n-1)D、n(n-1)/2标准答案:D知识点解析:快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+…+1=n(n-1)/2,选D。2、某二叉树共有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。3、下列叙述中正确的是A、线性表链式存储结构的存储空间一般要少于顺序存储结构B、线性表链式存储结构与顺序存储结构的存储空间都是连续的C、线性表链式存储结构的存储空间可以是连续的,也可以是不连续的D、以上说法均错误标准答案:C知识点解析:线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此C正确。4、下列叙述中正确的是A、算法的效率只与问题的规模有关,而与数据的存储结构无关B、算法的时间复杂度是指执行算法所需要的计算工作量C、数据的逻辑结构与存储结构是一一对应的D、算法的时间复杂度与空间复杂度一定相关标准答案:B知识点解析:算法的效率与问题的规模和数据的存储结构都有关,A错误。算法的时间复杂度,是指执行算法所需要的计算工作量,B正确。由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此数据的逻辑结构和存储结构不是一一对应的,C错误。算法的时间复杂度和空间复杂度没有直接的联系,D错误。5、结构化程序设计中,下面对goto语句使用描述正确的是A、禁止使用goto语句B、使用goto语句程序效率高C、应避免滥用goto语句D、以上说法均错误标准答案:C知识点解析:结构化程序设计中,要注意尽量避免goto语句的使用,故选C。6、下面不属于软件测试实施步骤的是A、集成测试B、回归测试C、确认测试D、单元测试标准答案:B知识点解析:软件测试主要包括单元测试、集成测试、确认测试和系统测试。7、下面不属于软件需求分析阶段主要工作的是A、需求变更申请B、需求分析C、需求评审D、需求获取标准答案:A知识点解析:需求分析阶段的工作可概括为4个方面:①需求获取。②需求分析。③编写需求规格说明书。④需求审评。8、一般情况下,当对关系R和S进行自然连接时,要求R和S含有一个或者多个共有的A、记录B、行C、属性D、元组标准答案:C知识点解析:自然连接是一种特殊的等值连接,它满足下面的条件:①两关系间有公共域;②通过公共域的等值进行连接,选C。9、以下叙述中错误的是A、数值型常量有正值和负值的区分B、常量可以用一个符号名来代表C、定义符号常量必须用类型名来设定常量的类型D、常量是在程序运行过程中值不能被改变的量标准答案:C知识点解析:数值型常量有整型常量,实型常量,不论是整型常量还是实型常量都有正值和负值之分,所以A正确。在C语言的预编译处理中,可以用符号名代表一个常量,定义时不必指定常量类型,所以C错误,B正确。常量的定义就是常量是在程序运行过程中值不能被改变的量,所以D正确。10、C语言主要是借助以下哪种手段来实现程序模块化A、定义函数B、定义常量和外部变量C、使用丰富的数据类型D、使用三种基本结构语句标准答案:A知识点解析:C语言程序的模块化通过函数来体现,所以选择A。11、以下选项中合法的常量是A、999B、2.7eC、0XabD、123E0.2标准答案:C知识点解析:A选项中含有非法的空格,所以错误。C语言中十六进制常量以0x开头,所以C正确。实型常量中e的前后必须均有数据,且其后必须为整数,所以B和D错误。12、C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是A、关键字可用作用户标识符,但失去原有含义B、预定义标识符可用作用户标识符,但失去原有含义C、在标识符中大写字母和小写字母被认为是相同的字符D、用户标识符可以由字母和数字任意顺序组成标准答案:B知识点解析:关键字不可用作C语言的标识符,所以A错误。在标识符中大写字母与小写字母作为不同字符处理,所以C错误。标识符由下划线、字母、数字组成,且必须以下划线和字母开始,所以D错误。13、以下叙述中正确的是A、每个后缀为.C的C语言源程序都可以单独进行编译B、每个后缀为.C的C语言源程序都应该包含一个main函数C、在C语言程序中,main函数必须放在其他函数的最前面D、在C语言程序中,只有main函数才可单独进行编译标准答案:A知识点解析:一个普通的C函数可以单独作为一个C的程序文件存在被包含到其他程序中,每个后缀为.C的C语言源程序都可以单独进行编译,所以B、D错误。main函数可以放在程序的开始,中间,最后,所以C错误。14、有表示公司和职员及工作的三张表,职员可在多家公司兼职。其中公司C(公司号,公司名,地址,注册资本,法人代表,员工数),职员S(职员号,姓名,性别,年龄,学历),工作W(公司号,职员号,工资),则表W的键(码)为A、公司号,职员号B、职员号,工资C、职员号D、公司号,职员号,工资标准答案:A知识点解析:由于职员可以再多加公司兼职,表W的键(码)应为公司关系和职员关系的主码,即公司号和职员号。15、若有定义和语句:inta,b;scanf("%d,%d,",&a,&b);以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是A、3,5,4B、3,5C、3,5,D、3,5标准答案:D知识点解析:scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配。所以在3和5之间必须输入逗号,不能有其他符号,才能保证a和b的正确赋值。所以选择D。16、C语言中char类型数据占字节数为A、1B、2C、3D、4标准答案:A知识点解析:每个字符变量被分配一个字节的内存空间。因此A选项正确。17、以下叙述中正确的是A、程序必须包含所有三种基本结构才能成为一种算法B、我们所写的每条C语句,经过编译最终都将转换成二进制的机器指令C、如果算法非常复杂,则需要使用三种基本结构之外的语句结构,才能准确表达D、只有简单算法才能在有限的操作步骤之后结束标准答案:B知识点解析:C语言程序可以不包含三种基本结构,也可以包含其中的一种或多种,所以A错误。三种基本结构可以表示任何复杂的算法,所以C错误。正确的算法,不管是简单算法还是复杂算法都可以在有限的操作步骤之后结束,这是算法的有穷性,所以D错误。18、下列关系表达式中,结果为"假"的是A、3<=4B、(3<4)==1C、(3+4)>6D、(3!=4)>2标准答案:D知识点解析:B选项中,关系表达式(3<4)==1即1==1,结果为真;C选项中,(3+4)>6即7>6,结果为真;A选项中,3<=4结果为真。D选项中,(3!=4)>2即1>2,结果为假。因此D选项正确。19、若以下选项中的变量a,b,y均已正确定义并赋值,则语法正确的switch语句是A、switch(a*a+b*b){default:break;case3:y=a+b;break;case2:y=a-b;break;}B、switch(a+b){case1:case3:y=a+b;break;case0:case4:y=a-b;}C、switch(a+9){casea:y=a-b;caseb:y=a+b;}D、switcha*b{case10:y=a+b;default:y=a-b;}标准答案:A知识点解析:switch语句,其一般形式为:switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}B选项中,case1和case2有错误,;C选项中,casea和caseb不正确,case后面应该跟常量表达式;D选项中,switcha*b,有误。因此A选项正确。20、有以下程序#includemain(){inta=-2,b=0;while(a++&&++b);printf("%d,%d\n",a,b);}程序运行后输出结果是A、0,2B、0,3C、1,3D、1,2标准答案:D知识点解析:本题重点考察while语句,变量a和b分别赋初值为-2和1,while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。a++即a参与运算后,a的值再自增1。++b即b自增1后再参与其它运算。当表达式的值为0时,退出循环,最后输出a和b的值为1和2。因此D选项正确。21、设有定义:intx=0,*p;紧接着的赋值语句正确的是A、*p=NULL;B、p=NULL;C、p=x;D、*p=x;标准答案:B知识点解析:题目中定义指针变量p,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。不允许把一个数赋予指针变量,被赋值的指针变量前不能再加"*"说明符,因此B选项正确。22、下列叙述中正确的是A、空字符串不占用内存,其内存空间大小是0B、两个连续的单引号(’’)是合法的字符常量C、可以对字符串进行关系运算D、两个连续的双引号("")是合法的字符串常量标准答案:D知识点解析:字符串常量是由一对双引号括起的字符序列。A选项描述不正确。B选项描述的不够完善;字符常量占一个字节的内存空间。D选项正确;字符常量是用单引号括起来的一个字符。C语言字符串比较不能直接用关系运算符进行正确比较。可以用字符串比较函数strcmp来实现,C选项是错误的;字符串常量占的内存字节数等于字符串中字节数加1。因此D选项正确。23、有以下程序#includemain(){chara=’H’;a=(a>=’A’&&a<=’Z’)?(a+32):a;printf("%c\n",a);}程序运行后的输出结果是A、HB、hC、AD、a标准答案:B知识点解析:条件运算符构成的选择结构的一般形式为:表达式1?表达式2:表达式3。其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。该题目中首先给字符变量a赋值为’H’。语句a=(a>=’A’&&a<=’Z’)?(a+32):a;即将大写字母变为小写字母。因此B选项正确。24、有以下程序#includeintf(intx);main(){inta,b=0;for(a=0;a<3;a+=1){b+=f(a);putchar(’A’+b);}}intf(intx){returnx*x+1;}程序运行后输出结果是A、ABEB、BCDC、BDID、BCF标准答案:C知识点解析:在函数main()中,第一次执行for循环时,b的值等于1,此时输出字母B;第二次执行for循环时,b的值等于3,此时输出字母D;第三次执行for循环时,b的值等于8,此时输出字母I。因此C选项正确25、设有定义:intx[2][3];则以下关于二维数组x的叙述错误的是A、元素x[0]可看作是由3个整型元素组成的一维数组B、数组x可以看作是由x[0]和x[1]两个元素组成的一维数组C、可以用x[0]=0;的形式为数组所有元素赋初值0D、x[0]和x[1]是数组名,分别代表一个地址常量标准答案:C知识点解析:x[0]可看作是由3个整型元素组成的一维数组,不可以用语句x[0]=0;为数组所有元素赋初值0。因此C选项正确。26、设p是指针变量,语句p=NULL;等价于A、p=’0’;B、p=’’;C、p="";D、p=0;标准答案:D知识点解析:p=NULL;等价p=0;因此D选项正确。27、有以下程序#includemain(){inta[]={10,20,30,40},*p=a,i;for(i=0;i<=3;i++){a[i]=*p;p++;}printf("%d\n",a[2]);}程序运行后的输出结果是A、10B、20C、30D、40标准答案:C知识点解析:因为指针变量p的初始值指向数组a,所以执行for循环语句后,数组a中的元素的值不变。因此C选项正确。28、有以下程序#include#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;i<N;i++){b[i]=a[i][0];for(j=1;j<N;j++)if(b[i]<a[i][j])b[i]=a[i][j];}}main(){intx[N][N]={1,2,3,4,5,6,7,8,9},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n");}程序运行后的输出结果是A、3,5,7B、1,3,5,C、2,4,8,D、3,6,9,标准答案:D知识点解析:函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。因此D选项正确。29、有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数)#include#includemain(){chara[10]="abc",b[10]="012",c[10]="xyz";strcpy(a+1,b+2);puts(strcat(a,c+1));}程序运行后的输出结果是A、a12xyzB、bc2yzC、a2yzD、12yz标准答案:C知识点解析:本题考查字符串处理函数strcpy和strcat,执行完strcpy(a+1,b+2);后,a变为a2,执行完strcat(a,c+1)后,a变为a2yz,所以答案为C选项。30、以下选项中,没有编译错误的是A、charstr3[]={’d’,’e’,’b’,’u’,’g’,’\0’};B、charstr1[5]="pass",str2[6];str2=str1;C、charname[10];name="china";D、charstr4[];str4="helloworld";标准答案:A知识点解析:B选项中,不能直接将字符数组名直接赋值给另一个字符数组名。C选项赋值错误,不能将一个字符串常量赋值给一个字符指针。D选项定义str4时需要定义其长度。31、有以下程序#includemain(){char*s="12134";intk=0,a=0;while(s[k+1]){k++;if(k%2==0){a=a+(s[k]-’0’+1);continue;}a=a+(s[k]-’0’);}printf("k=%da=%d\n",k,a);}程序运行后的输出结果是A、k=5a=15B、k=4a=12C、k=6a=11D、k=3a=14标准答案:B知识点解析:当k=0时,执行while一次,得到k=1,a为2;当k=1时,执行while一次,得到k=2,a为4;当k=2时,执行while一次,得到k=3,a为7;当k=3时,执行while一次,得到k=4,a为12;所以答案为B选项。32、有以下程序#includemain(){chara[5][10]={"one","two","three","four","five"};inti,j;chart;for(i=0;i<2;i++)for(j=i+1;j<5;j++)if(a[i][0]>a[j][0]){t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;}puts(a[1]);}程序运行后的输出结果是A、owoB、fwoC、twoD、fix标准答案:B知识点解析:考查二维数组元素的引用。当i为0时,代码处理结果为第一个字符串的第一个字符与第四个字符串的第一个字符调换,当i为1时,代码处理结果为第而个字符串的第一个字符与第五个字符串的第一个字符调换,所以a[1]为fwo。33、有以下程序#includeinta=1,b=2;voidfun1(inta,intb){printf("%d%d",a,b);}voidfun2(){a=3;b=4;}main(){fun1(5,6);fun2();printf("%d%d\n",a,b);}程序运行后的输出结果是A、5612B、3456C、1256D、5634标准答案:D知识点解析:fun1函数中的a、b为局部变量,fun2函数中的a、b为全局变量。执行fun1函数后输出5,6执行完fun2后a变为3,b变为4,所以结果为3,4D选项正确。34、有以下程序#includevoidfunc(intn){staticintnum=1;num+=n;printf("%d",num);}main(){func(3);func(4);printf("\n");}程序运行后的输出是A、45B、48C、35D、34标准答案:B知识点解析:本题中num为静态局部变量,执行fun(3)后,输出4,执行fun(4)后输出8,所以选项B正确。35、有以下程序#include#includevoidfun(int*p1,int*p2,int*s){s=(int*)calloc(1,sizeof(int));*s=*p1+*p2;free(s);}main(){inta[2]={1,2},b[2]={40,50},*q=a;fun(a,b,q);printf("%d\n",*q);}程序运行后的输出结果是A、42B、41C、1D、0标准答案:C知识点解析:本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C正确。36、有以下程序#includestructSTU{charname[9];charsex;intscore[2];};voidf(structSTUa[]){structSTUb={"Zhao",’m’,85,90};a[1]=b;}main(){structSTUc[2]={{"Qian",’f’,95,92},{"Sun",’m’,98,99}};f(c);printf("%s,%c,%d,%d,",c[0].name,c[0].sex,c[0].score[0],c[0].score[1]);printf("%s,%c,%d,%d\n",c[1].name,c[1].sex,c[1].score[0],c[1].score[1]);}程序运行后输出结果是A、Qian,f,95,92,Sun,m,98,99B、Qian,f,95,92,Zhao,m,85,90C、Zhao,m,85,90,Sun,m,98,99D、Zhao,m,85,90,Qian,f,95,92标准答案:B知识点解析:本题考查把数组名作为函数参数,执行f函数后,结构体数组c的第二个元素被改写,c[1].name为Zhao,选项B正确。37、以下叙述中错误的是A、用typedef可以说明一种新的类型名B、typedef的作用是用一个新的标识符来代表已存在的类型名C、可以用typedef说明的新类型名来定义变量D、typedef说明的新类型名必须使用大写字母,否则会出编译错误标准答案:D知识点解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,新类型可以使用小写,所以D选项错误。38、以下叙述中错误的是A、只要类型相同,结构体变量之间可以整体赋值B、函数的返回值类型不能是结构体类型,只能是简单类型C、可以通过指针变量来访问结构体变量的任何成员D、函数可以返回指向结构体变量的指针标准答案:B知识点解析:本题考查结构体相关知识,函数返回值可以是结构体,所以B选项错误。39、若有定义语句intb=2;则表达式(b<<2)/(3||b)的值是A、0B、2C、4D、8标准答案:D知识点解析:本题考查位运算<<、/,以及逻辑运算符||。b<<2为8,33||b为1,所以结果为8,所以D选项正确。40、有以下程序#includemain(){FILE*fp;inti,a[6]={1,2,3,4,5,6};fp=fopen("d2.dat","w+");for(i=0;i<6;i++)fprintf(fp,"%d\n",a[i]);rewind(fp);for(i=0;i<6;i++)fscanf(fp,"%d",&a[5-i]);fclose(fp);for(i=0;i<6;i++)printf("%d,",a[i]);}程序运行后输出结果是A、1,2,3,4,5,6,B、6,5,4,3,2,1,C、4,5,6,1,2,3,D、1,2,3,3,2,1,标准答案:B知识点解析:本题考查文件操作函数,fprintf和rewind函数,rewind函数将文件内部的位置指针重新指向一个流(数据流/文件)的开头,程序首先是将数组a的六个数写入d2文件中,然后又将a数组从后往前覆盖到d2中的内容,所以结果为6,5,4,3,2,1,选项B正确。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共39题,每题1.0分,共39分。)1、下列关于栈和队列的描述中,正确的是()。A、栈是先进先出B、队列是先进后出C、队列允许在队头删除元素D、栈在栈顶删除元素标准答案:D知识点解析:栈实际也是线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为栈顶,另一端为栈底。队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做队头,允许插入的一端叫做队尾。2、已知二叉树后序遍历序列是CDABE,中序遍历序列是CADEB,它的前序遍历序列是()。A、ABCDEB、ECABDC、EACDBD、CDEAB标准答案:C知识点解析:由于后序遍历的最后一个元素为E,所以E为根结点,所以它的前序遍历的首个元素为E,故排除A和D选项。由于中序遍历中,元素B在元素根结点E的后面,所以B为二叉树的右子树,并且该二叉树右子树只有一个元素,所以前序遍历的最后一个元素应为B,故选项C为正确选项,即该二叉树的前序遍历序列是EACDB。3、在数据流图中,带有箭头的线段表示的是()。A、控制流B、数据流C、模块调用D、事件驱动标准答案:B知识点解析:数据流图中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。4、结构化程序设计的3种结构是()。A、顺序结构,分支结构,跳转结构B、顺序结构,选择结构,循环结构C、分支结构,选择结构,循环结构D、分支结构,跳转结构,循环结构标准答案:B知识点解析:程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。5、下列方法中,不属于软件调试方法的是()。A、回溯法B、强行排错法C、集成测试法D、原因排除法标准答案:C知识点解析:软件调试主要采用以下三种方法:强行排错法:作为传统的调试方法,其过程可概括为设置断点、程序暂停、观察程序状态、继续运行程序。回溯法:该方法适合于小规模程序的排错、即一旦发现了错误,先分析错误征兆,确定最先发现“症状”的位置。原因排除法:原因排除法是通过演绎和归纳,以及二分法来实现。6、下列选项中,不属于模块间耦合的是()。A、内容耦合B、异构耦合C、控制耦合D、数据耦合标准答案:B知识点解析:耦合可以分为下列几种,它们之间的耦合度由高到低排列:内容耦合一一若一个模块直接访问另一模块的内容,则这两个模块称为内容耦合。公共耦合一一若一组模块都访问同一全局数据结构,则称为公共耦合。外部耦合一一若一组模块都访问同一全局数据项,则称为外部耦合。控制耦合——若一模块明显地把开关量、名字等信息送入另一模块,控制另一模块的功能,则称为控制耦合。标记耦合一一若两个以上的模块都需要其余某一数据结构的子结构时,不使用其余全局变量的方式而全使用记录传递的方式,这样的耦合称为标记耦合。数据耦合——若一个模块访问另一个模块,被访问模块的输入和输出都是数据项参数,则这两个模块为数据耦合。非直接耦合——若两个模块没有直接关系,它们之间的联系完全是通过程序的控制和调用来实现的,则称这两个模块为非直接耦合,这样的耦合独立性最强。7、下列特征中不是面向对象方法的主要特征的是()。A、多态性B、标识惟一性C、封装性D、耦合性标准答案:D知识点解析:面向对象设计方法与面向过程设计方法有本质的不同,其基本原理是:使用现实世界的概念抽象地思考问题从而自然地解决问题。其特点包括:标识惟一性、多态性、封装性、模块独立性、继承和多态性好。8、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:逻辑结构设计的任务:概念结构是各种数据模型的共同基础,为了能够用某一DBMS实现用户需求,还必须将概念结构进一步转化为相应的数据模型,这正是数据库逻辑结构设计所要完成的任务。它包括从E-R图向关系模式转换和逻辑模式规范化及调整、实现。9、在一棵二叉树上,第5层的结点数最多是()。A、8B、9C、15D、16标准答案:D知识点解析:根据二叉树的性质:二叉树第i(i≥1)层上至多有2i-1个结点。得到第5层的结点数最多是16个。10、下列有关数据库的描述,正确的是()。A、数据库设计是指设计数据库管理系统B、数据库技术的根本目标是要解决数据共享的问题C、数据库是一个独立的系统,不需要操作系统的支持D、数据库系统中,数据的物理结构必须与逻辑结构一致标准答案:B知识点解析:数据库设计的目的实质上是设计出满足实际应用需求的实际关系模型。数据库技术的主要目的是有效地管理和存取大量的数据资源,包括:提高数据的共享性,使多个用户能够同时访问数据库中的数据;减小数据的冗余,以提高数据的一致性和完整性;提供数据与应用程序的独立性,从而减少应用程序的开发和维护代价。11、以下关于C语言的叙述中正确的是()。A、预处理命令通常位于函数体外面,但也可以位于函数体中间B、C语言中的变量定义须在其他语句之前C、在C语言程序的书写中,一个语句必须单占一行D、一个C语言源程序可以由一个或多个源文件组成,每个源文件可由自己的main函数标准答案:A知识点解析:源程序中可以有预处理命令(include命令仅为其中的一种)。C语言中的变量可以在使用之前的任何位置进行定义。C语言程序的书写中,多个语句可以位于一行,但为了增强可读性,一般每行只有一条语句。一个C语言源程序可以由一个或多个源文件组成,但仅可以有一个main函数。12、下列叙述中错误的是()。A、用户所定义的标识符允许使用关键字B、用户所定义的标识符应尽量做到“见名知意”C、用户所定义的标识符必须以字母或下划线开头D、用户定义的标识符中,大、小写字母代表不同标识标准答案:A知识点解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。13、下列选项中可作为C语言合法常量的是()。A、-80B、-080C、-8e1.0D、-80.0e标准答案:A知识点解析:所谓常量是指在程序运行的过程中,其值不能被改变的量。在C语言中,有整型常量、实型常量、字符常量和字符串常量等类型。选项B中是以0开头,表示一个八进制数,而八进制数的取值范围是0~7,所以“-080”错误;在C语言中e后面的指数必须是整数,因此选项C和D也不正确。14、下列定义变量的语句中错误的是()。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语言的变量命名规定。15、下列关于函数的叙述中正确的是()。A、每个函数都可以被其他函数调用(包括main函数)B、每个函数都可以被单独编译C、每个函数都可以单独运行D、在一个函数内部可以定义另一个函数标准答案:B知识点解析:在C语言中,函数定义是平行的,函数不能嵌套定义,即函数之间没有从属关系。虽然函数之间可以相互调用,但main()函数不能被调用,选项A错误;C程序从main()函数开始执行,当main()函数执行完毕时,整个程序就结束了。C程序的执行必须从main()函数开始,选项C选项错误;函数不能嵌套定义,选项D错误。16、当a=1、b=2、c=3、d=4时,执行下面程序段后,x的值是()。if(a<b)if(c<d)x=1;elseif(a<c)if(b<d))x=2;elsex=3;elsex=6;elsex=7;A、1B、6C、3D、2标准答案:A知识点解析:本题考查的是if-else语句。第一个if语句,先判断条件,发现a<b条件成立,执行下面的语句。第二个if语句,先判断条件,发现c<d条件成立,执行下面的语句x=1。17、以下程序的输出结果是()。#include<stdio.h>main(){inta=4,b=3,c=2,d=1;printf(’’%d’’,a<b?a:d<c?d:b);}A、1B、3C、2D、4标准答案:A知识点解析:条件表达式的格式为:’’a?b:c’’,它的功能是:当a为真时,表达式的值等于b的值;当a为假时,表达式的值等于c的值。因为条件运算符的结合方向为“自右向左”。因此,当表达式中嵌套使用条件表达式时,应先计算右边的条件表达式,再计算左边的条件表达式。题中应先计算“d18、有以下程序#include<stdio.h>main(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;for(i=0;i<3;i++)for(j=2;j>=i;j--)t+=b[i][j];printf(’’%d\n’’,t);}程序运行后的输出结果是()。A、4B、3C、8D、9标准答案:C知识点解析:这道题主要考查的是二维数组的有关知识。在两层for循环语句中,累加上三角元素,所以程序执行的过程为“t=b[0][0]+b[0][1]+b[0][2]+b[1][1]+b[1][2]+b[2][2]=8”。19、以下程序:#include<stdio.h>main(){charstr[10];scanf(’’%s’’,&str);printf(’’%s\n’’,str);}运行上面的程序,输入字符串“howareyou”,则程序的执行结果是()。A、howB、howareyouC、hD、howareyou标准答案:A知识点解析:当从键盘输入“howareyou”时,由于scanf输入函数的特点是遇到空格时结束读入字符,因此,该程序只将how这3个字符送到了字符数组str中,并在其后自动加上结束符“\0”。20、设变量x和变量y都是int类型,且x=l,y=2,则printf(’’%d%d’’,x,y,(x,y))的输出结果是()。A、12B、122C、1,2D、输出值不确定标准答案:A知识点解析:本题考查printf函数的格式和逗号表达式。printf函数在输出时,是根据格式说明符的个数输出的,如果函数中有多余的项将不予输出;如果有输出项少于格式说明符,则出错,不能输出正确的结果。本题中逗号表达式(x,y)只返回y的值。此时格式说明的个数是2,而输出项的个数是3,因此printf函数只输出前两项。21、以下程序的输出结果是()。#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。22、定义如下变量和数组:inti,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是()。for(i=0;i<3;i++)printf(’’%d’’,x[i][2-i]);A、159B、147C、357D、369标准答案:C知识点解析:本题主要考查二维数组的使用。题中利用for循环来输出x数组中的指定元素:①当i=0时,输出x[0][2]=3;②当i=1时,输出x[1][1]=5;③当i=2时,输出x[2][0]=7。23、有下列程序段:typedefstructNODE{intnum;structNODE*next;}OLD;下列叙述中正确的是()。A、以上的说明形式非法B、NODE是一个结构体类型C、OLD是一个结构体类型D、OLD是一个结构体变量标准答案:C知识点解析:C语言允许用typedef说明一种新类型名,其一般形式为:typedef类型名标识符。typedef语句的作用仅仅是使“标识符”来代表已存在的“类型名”,并未产生新的数据类型。原有类型名依然有效。此题中,用typedef定义了新的类型OLD结构,所以OLD为结构体类型。24、下列数组定义中错误的是()。A、intX[][3]={0};B、intx[2][3]={{1,2},{3,4},{5,6}};C、intx[][3]={{1,2,3},{4,5,6}};D、intx[2][3]={1,2,3,4,5,6};标准答案:B知识点解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行的初始化;⑧部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。在选项B中赋值号左边定义了一个2行3列的二维数组,而右边用3行2列的数字进行赋初值。所以出现了边界的越界溢出错误。25、以下叙述错误的是()。A、变量的作用域取决于变量定义语句的位置B、全局变量可以在函数以外的任何部位进行定义C、局部变量的作用域可用于其他函数的调用D、一个变量说明为static存储类型是为了限制其他编译单元的引用标准答案:D知识点解析:本题考查函数调用的变量作用域。全局变量不在任何函数体内定义,作用域为整个文件;局部变量在函数体内定义,作用域仅为本次函数;static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部分:函数首和函数体,函数体包括花括号内的所有语句。26、若定义函数“int*func()”,则函数func的返回值为()。A、一个实数B、一个指向整型变量的指针C、一个指向整型函数的指针D、一个整型函数的入口地址标准答案:B知识点解析:本题考查函数返回值。fun函数的返回值类型为int*类型,即函数返回一个指向整型变量的指针。27、若有定义“inta[5],*p=a;”则正确引用数组元素的是()。A、*&a[5]B、*a+2C、*(p+5)D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。用指针引用数组有以下3种形式:①“(p+n)与(a+n)”表示数组元素a[n]的地址;②“*(p+n)与*(a+n)"表示数组元素a[n];③“p[n]=*(p+n)”,都表示数组元素a[n]。选项A、B没有这种引用形式;选项C,“*(p+5)”是引用数组的第6个元素,而数组一共有5个元素,出现越界;选项D,“*(a+2)”引用数组的第3个元素。28、以下对C语言中联合类型数据的正确叙述是()。A、定义了联合变量后,即可引用该变量或该变量中的任意成员B、一个联合变量中可以同时存放其所有成员C、联合中的各个成员使用共同的存储区域D、在向联合中的一个成员进行赋值时,联合中其他成员的值不会改变标准答案:C知识点解析:联合体的几个特点:①联合体所占用的内存空间为最长的成员所占用的空间;②各个成员分量全部是从低地址方向开始使用内存单元;③联合体中的空间在某一时刻只能保存某一个成员的数据;④联合体和结构体可以任意嵌套。29、有以下函数定义: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中第一个参数的表达式不正确,因此不能得到正确的结果。30、执行以下语句段后,xy的值是()。int*pt,xy;xy=200;pt=&xy;xy=*pt+30;A、200B、170C、260D、230标准答案:D知识点解析:本题考查指针的运用。通过pt=&xy,将pt指向xy所占的内存地址,而*pt是指针pt所指向内存单元中的内容,即200,所以最后xy的值为230。31、下述程序的输出结果是()。#include<stdio.h>voidmain(){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(j=0;i<4;i++){k=k+*p[i];}printf(’’%d’’,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。32、有以下程序:#include<stdio.h>#defineN8voidfun(int*x,inti){*x=*(x+i)+1;}main(){inta[N]={1,2,3,4,5,6,7,8},i;fun(a,2);for(i=0;i<N/2;i++){printf(’’%d’’,a[i]);}printf(’’\n’’);}程序运行后的输出结果是()。A、1313B、3234C、4234D、1234标准答案:C知识点解析:函数“fun(int*x,inti)”的功能是把数组元素x[i]的值加1赋给x[0]。所以在主函数中执行fun(a,2)后,数组元数a[0]的值等于4。然后在for循环语句中,输出数组a中的前4个元素的值,分别是4、2、3、4。33、下面程序的输出结果是()。#include<stdio.h>main(){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’。34、下面函数的功能是()。sss(s,t)char*s,*t;{while(*s);while(*t)*(s++)=*(t++);returns;}A、将字符串s复制到字符串t中B、比较两个字符串的大小C、求字符串的长度D、将字符串t续接到字符串s中标准答案:D知识点解析:本题考查指针变量的运用。本题中的函数实质上是将字符串t续接到字符串s中。35、下列程序的运行结果是()。#include<stdio.h>voidsub(int*s,int*y){staticintm=4;*y=s[m];m--;}voidmain(){inta[]={1,2,3,4,5},k,x;printf(’’\n’’);for(k=0;k<=4;k++){sub(a,&x);printf(’’%d,’’,x);}}A、5,4,3,2,1,B、1,2,3,4,5,C、0,0,0,0,0,D、4,4,4,4,4,标准答案:A知识点解析:本题考查的是静态变量以及函数的实参与形参之间的地址值传递。sub()函数中定义的变量m是一个静态变量,系统可为其分配固定的存储空间,重复使用时,变量的值保留:所以当main()函数中的for循环中语句“sub(a,&x)”;执行时,sub函数中m的值依次是4、3、2、1、0;因为变量x进行的是地址值传递,所以最后依次输出的是数组a的元素a[4]、a[3]、a[2]、a[1]、a[0]。36、设q1和q2是指向一个int型一维数组的指针变量,k为float型变量,下列不能正确执行的语句是()。A、k=*q1*(*q2);B、q1=k;C、q1=q2;D、k=*q1+*q2;标准答案:B知识点解析:本题考查指针变量的赋值操作。选项A是将指针q1和q2所指向的变量值相乘,然后赋给k;选项B中,float型数据和指针型数据之间不能进行赋值运算;选项C中,是两个指针变量之间的赋值;选项D中,是两个指针型变量所指向的两个int型数据相加。37、以下有关宏替换的叙述不正确的是()。A、使用宏定义可以嵌套B、宏定义语句不进行语法检查C、双引号中出现的宏名不替换D、宏名必须用大写字母表示标准答案:D知识点解析:本题考查宏替换的规则。宏替换有两类:简单的字符替换和带参数的宏替换。使用宏应注意:①宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标示符,宏名的定义通常用大写字母,但不是必须用大写;⑧双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。

温馨提示

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

最新文档

评论

0/150

提交评论