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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷47(共9套)(共255题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共25题,每题1.0分,共25分。)1、以下叙述中正确的是A、C程序中的每一行只能写一条语句B、简单C语句必须以分号结束C、C语言程序中的注释必须与语句写在同一行D、C语句必须在一行内写完标准答案:B知识点解析:C语言的书写格式自由,一行可写多条语句,一条语句也可写在不同行上。C语言注释是比较自由的,可以写在一行或者多行。C语言规定每条语句和数据定义的最后必须有一个分号,分号是C语句的必要组成部分。2、在长度为n的顺序表中查找一个元素,假设需要查找的元素有一半的机会在表中,并且如果元素在表中,则出现在表中每个位置上的可能性是相同的。则在平均情况下需要比较的次数大约为()。A、nB、3n/4C、n/2D、n/4标准答案:B知识点解析:在顺序表中查找,最好情况下第一个元素就是要查找的元素,则比较次数为1;在最坏情况下,最后一个元素才是要找的元素,则比较次数为n。这是找到元素的情况。如果没有找到元素,则要比较n次。因此,平均需要比较:找到元素的情况×+未找到元素的情况×=(1+2+…+n)/n×+n×=,大约为3n/4。3、下列叙述中错误的是A、在双向链表中,可以从任何一个结点开始直接遍历到所有结点B、在循环链表中,可以从任何一个结点开始直接遍历到所有结点C、在线性单链表中,可以从任何一个结点开始直接遍历到所有结点D、在二叉链表中,可以从根结点开始遍历到所有结点标准答案:C知识点解析:线性队列是一种线性单链表,对线性队列的遍历只能从队列的头开始,从中间的结点开始不能够遍历到所有的结点。选项C的描述是错误的。4、在软件设计中,不属于过程设计工具的是A、PDL(过程设计语言)B、PAD图C、N—S图D、DFD图标准答案:D知识点解析:PDL语言(PDLlanguage)一种设计性语言。它是软件设计中广泛使用的语言之一;PAD是问题分析图(ProblemAnalysisDiagr锄)的英文缩写,自1974年由日本的二村良彦等人提出的又一种主要用于描述软件详细设计的图形表示工具;数据流图(DataFlowDiagram):简称DFD,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法;N—S图也被称为盒图或CHAPIN图。由一些基本的框组成一个大的框,这种流程图又称为N—S结构流程图(以两个人的名字的头一个字母组成)。N—S图包括顺序、选择和循环三种基本结构。常见的过程设计工具有:图形工具:程序流程图,N—S,PAD,HIPO;表格工具:判定表;语言工具:PDL(伪码)。5、C语言规定,在一个C程序中,main()函数的位置()。A、必须在系统调用的库函数之后B、必须在程序的开始C、必须在程序的最后D、可以在任意位置标准答案:D知识点解析:每个C程序有且只有一个主函数(main),且程序必须从“main()”函数开始执行,而且“main()”函数可以放在程序中的任意位置。6、设二叉树的前序序列为ABDEGHCFIJ,中序序列为DBGEHACIFJ。则按层次输出(从上到下,同一层从左到右)的序列为A、ABCDEFGHIJB、DGHEBIJFCAC、JIHGFEDCBAD、GHIJDEFBCA标准答案:A知识点解析:前序遍历中,第一个字母是根结点,也就是A是根结点;在中序遍历中,根结点前面的是左子树、后面的是右子树。前序中,B在A的后面,中序中在左子树中,可知B为A的左结点。中序中D在B的前面,前序中在B的后面,可知D为B的左结点,GEH为B的右子树。前序中顺序为EGH,由此可知,E为B的右结点,G为E的左结点、H为E的右结点。右子树中,前序中C在最前,因为右子树根结点,也就是A的右结点,根据前序中的子树FIJ和中序中的IFJ子树可知F为C的右结点,I为F的左结点、J为F的右结点。由此可画出这个二叉树,然后根据二叉树7、公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员。则实体部门和职员间的联系是A、1:1联系B、m:1联系C、1:m联系D、m:n联系标准答案:C知识点解析:一个部门可以有多名员工,所以实体部门和职员间的联系是1:m联系。8、以下叙述中正确的是A、语句inta[]={0};是不合法的,遗漏了数组的大小B、语句chara[2]={"A","B"};是合法的,定义了一个包含两个字符的数组C、语句inta[8]={0};是合法的D、语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符标准答案:C知识点解析:当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储单元中并没有确定的值,可以在定义语句中为所定义数组的各个元素赋初值。数组初始化赋值是指在数组定义时给数组元素赋予初值。初始化赋值的一般形式为:类型说明符数组名[常量表达式]={值,值,…,值};需要注意的是当所赋初值多于所定义数组的元素个数时,在编译时将给出出错信息,在指定初值时,第一个初值必定赋给下标为0的元素,然后按这些数值的排列顺序赋初值,只能给元素逐个赋值,不能给数组整体赋值。如果给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。9、DOS文件系统的组织结构属于A、星形结构B、网形结构C、环形结构D、树形结构标准答案:D知识点解析:DOS中目录结构是层次的,由根目录到子目录形成一个树型结构。10、有以下结构体说明、变量定义和赋值语句:structSTD{charname[10];intage;charsex;}srs],*ps;ps=&g[0];则下列scanf函数调用语句有错误的是()。A、scanf("%s",s[0].name);B、seanf("%d",&s[0].age);C、scanf("%c",&(ps->sex));D、seanf("%d",ps->age);标准答案:D知识点解析:本题考查结构体的相关知识。题目中需要输入一个变量,scarff要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。11、设有定义charstr[]="Hello";则语句printf("%d%d",sizeof(str),strlen(str));的输出结果是A、66B、65C、55D、56标准答案:B知识点解析:sizeof主要用于测试变量所占的实际内存,而strlen函数主要测试字符串中实际字符的个数,字符串"Hello"占有内存6个字节,而字符串中共有5个字符。12、下列关系表达式中,结果为“假”的是A、(3<4)==1B、(3+4)>6C、(3!=4)>2D、3<=4标准答案:C知识点解析:关系表达式和逻辑表达式的结果为非零或者0,其中0表示假,而非零表示真,由于3!=4的结果为1,而1>2的结果为假。13、若有定义:inta,b;通过语句scanf("%d;%d",&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是A、3,5B、35C、3;5D、35标准答案:C知识点解析:在采用seanf这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,在两个整数之间加分号输入。14、若有定义语句:inta=3,b=2,c=1;以下选项中错误的赋值表达式是()。A、a=(b=4)=3;B、a=b=c+1;C、a=(b=4)+c;D、a=1+(b=c=4);标准答案:A知识点解析:不能将变量或常量赋给一个表达式,所以A选项中(b=4)=3是错误的。15、下列关于栈的叙述中,正确的是A、栈底元素一定是最后入栈的元素B、栈顶元素一定是最先入栈的元素C、栈操作遵循先进后出的原则D、以上说法均错误标准答案:C知识点解析:栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。栈的修改是按后进先出的原则进行的。因此,栈称为先进后出表,或“后进先出”表,所以选择C。16、有下列程序:structS{intn;inta[20];);voidflint*a,intn){inti;for(i=0;i<n-1;i++)a[i]+:i;)main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9});f(s.a,s.n);for(i=0;i<s.n;i++)printf(”%d,”,s.a[i]);)程序运行后的输出结果是A、3,4,2,7,9,8,6,5,11,10,B、2,3,1,6,8,7,5,4,10,9,C、2,4,3,9,12,12,11,11,18,9,D、1,2,3,6,8,7,5,4,10,9标准答案:C知识点解析:voidf(int*a,intn)函数的功能是对数组a[]的每一个元素加上其下标的值。所以在main()函数中f(s.as.n)语句会调用f(int*a,intn)函数,此时指针a指向数组s.a={2,3,l,6,8,7,5,4,10,9},n=10:然后执行for(i=0;i<n.1;i++)a[i]+=i;语句,也就是从0开始到8对数组s.a={2,3,1,6,8,7,5,4,10,9}中的每一个元素加上其下标值。17、若有以下程序#includeint*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}则程序的输出结果是A、3,5,5,3,5B、3,5,3,5,5C、5,3,5,3,5D、5,3,3,5,5标准答案:B知识点解析:在主函数中分别给整型变量i、j和指针型变量p、q赋初值,并声明指针变量r;调用f函数,并将实参变量p和q的值传递给形参变量s和t,并且f函数是指针型函数,即函数的返回值将是一个地址。在f函数中,如果条件成立,则将指针变量s和t互换,并且将指针s的地址返回主函数。最后输出i,j,*p,*q,*r的值,即3,5,3,5,5。因此B选项正确。18、有以下程序voidfun(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、1B、3C、4D、2标准答案:D知识点解析:函数fun为递归调用函数,如果n的值为1,那么后面形参指向的空间存放n+1,否则继续计算fun(n-1)的值。调用分析过程:fun(4,&x)→fun(3,&x)→fun(2,&x)→fun(1,&x)在回归的过程中,对于x内的数据并没有改动。19、有下列程序:voidf(intb[]){intI;for(i=2;i<6;i++)b[i]*=2;}main(){inta[10]={1,2,3,4,5,6,7,8,9,10},i;f(a);for(i=0;i<10,i++)printf("%d,",a[i]);}程序运行后的输出结果是A、1,2,3,4,5,6,7,8,9,10,B、1,2,3,4,10,12,14,16,9,10,C、1,2,6,8,10,12,7,8,9,10,D、1,2,6,8,10,12,14,16,9,10,标准答案:C知识点解析:函数voidf(intb[])的功能是对数组b[]中第2个到第5个元素的值逐个扩大2倍。所以在main()函数中,f(8)语句的作用是对数组a[10]中从a[2]到a[5]的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,9,10)。20、有以下结构体说明、变量定义和赋值语句structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句有错误的是A、scanf("d",&s[0].age);B、scanf("%c",&(ps->sex));C、scanf("%s",s[0].name);D、scanf("%d",ps->age);标准答案:D知识点解析:程序段定义了结构体变量数组s[5]和指针变量ps,然后ps指向数组s[5]中的第一个元素,因而ps->age用s[0].age。因为在输入scanf()函数中,第2个参数应该表示为地址变量,而选项A)表示的值,而不是一个地址值。21、一个栈的初始状态为空。现将元素1,2,3,A,B,C依次入栈,然后再依次出栈,则元素出栈的顺序是A、1,2,3,A,B,CB、C,B,A,1,2,3C、C,B,A,3,2,1D、1,2,3,C,B,A标准答案:C知识点解析:栈的修改是按后进先出的原则进行的,所以顺序应与入栈顺序相反,故选C。22、有以下程序#include<stdio.h>main()voidfun(int*a,int*b){intx=3,y=5,*p=&x,*q=&y;{int*c;fun(p,q);printf("%d,%d,",*p,*q);c=a;a=b;b=c;}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知识点解析:本题考查函数的调用与指针。p和q分别为指向x和y的指针,函数fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中,fun(p,q)、fun(&x,&y)的实参均为x与y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。23、有以下程序structS{inta,b;}data[2]={10,100,20,200};main(){structSp=data[1];printf("%d\n",++(p.a));}程序运行后的输出结果是A、11B、20C、21D、10标准答案:C知识点解析:在题目中定义了结构体S类型的数组变量data,并对其赋初值。在程序中定义了指向结构体S类型的变量p,并把数组data的第二个元素data[1]的值赋给它,所以此时成员变量p.a的值等于20,在输出时分别加1,所以输入结果为选项A。24、以下叙述中错误的是A、用typedef可以说明一种新的类型名B、typedef的作用是用一个新的标识符来代表已存在的类型名C、可以用typedef说明的新类型名来定义变量D、typedef说明的新类型名必须使用大写字母,否则会出编译错误标准答案:D知识点解析:本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,新类型可以使用小写,所以D选项错误。25、以下叙述中正确的是A、在C程序中的八进制和十六进制,可以是浮点数B、整型变量可以分为int型、short型、long型和unsigned型四种C、八进制数的开头要使用英文字母o,否则不能与十进制区分开D、英文大写字母X和英文小写字母x都可以作为二进制数字的开头字符标准答案:B知识点解析:C程序中的实型常量只有十进制一种数制,所以A错误。八进制数以0打头,所以C错误。C语言中整数只有十进制、八进制、十六进制三种没有二进制数制,所以D错误。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、在Windows环境下,若资源管理器左窗□中的某文件夹左边标有“+”,则表示A、该文件夹为空B、该文件夹中含有子文件夹C、该文件夹中包含有可执行文件D、该文件夹中包含系统文件标准答案:B知识点解析:若资源管理器左窗口中的某文件夹左边标有“+”号表示该文件夹包含子文件夹,单击该“+”号会变成“-”号,同时会展开该文件夹,列出其子文件夹。2、下列数据结构中,能够按照“先进后出”原则存取数据的是A、循环队列B、栈C、队列D、二叉树标准答案:B知识点解析:栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据;队列是“先进先出”(FIFO)或“后进后出”(LILO)的线性表。3、在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。A、O(n)B、O(n2)C、O(log2n)D、O(nlog2n)标准答案:C知识点解析:当有序线性表为顺序存储时才能用二分法查找。可以证明的是对于长度为n的有序线性表。在最坏情况下,二分法查找只需要比较log2n次,而顺序查找需要比较n次。4、一名教师可讲授多门课程,一门课程可由多名教师讲授。则实体教师和课程间的联系是()。A、1:1联系B、1:m联系C、m:1联系D、m:n联系标准答案:D知识点解析:因为一名教师可讲授多门课程,而一门课程又能由多名教师讲授,所以教师和课程之间是多对多的关系,可以表示为m:n,选择D。5、以下叙述中正确的是()。A、C语言函数可以嵌套调用,例如:fun(fun(x))B、C语言程序是由过程和函数组成的C、C语言函数不可以单独编译D、C语言中除了main函数外,其他函数不可作为单独文件形式存在标准答案:A知识点解析:C语言程序是由函数组成的,所以B选项错误。C语言函数可以单独进行编译,所以C选项错误。每个C程序中必须包含一个main函数,但不一定是每个C程序文件中都必须有,用户单独编写的某个函数也可以存储为一个C程序文件,所以D选项错误。6、算法的时间复杂度是指()。A、算法的长度B、执行算法所需要的时间C、算法中的指令条数D、算法执行过程中所需要的基本运算次数标准答案:D知识点解析:算法的时间复杂度,是指执行算法所需要的工作量,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。7、下列对软件测试和软件调试叙述中错误的是()。A、严格执行测试计划,排除测试的随意性B、软件调试的目的是改正软件错误C、软件测试不需要考虑测试成本D、正确的执行测试用例标准答案:C知识点解析:软件测试定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试的目的:发现错误而执行程序的过程,是评测软件质量的重要过程和手段。软件调试的目的是诊断并改正程序中的错误。测试必须对整个软件总体进行评估。软件测试需要考虑测试成本,软件测试成本也要计入软件开发成本中。故C选项不正确。8、下列程序的运行结果是()。#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]。9、以下选项中合法的常量是A、2.7eB、999C、123E0.2D、0Xab标准答案:D知识点解析:0xab是十六进制表示的常量。10、以下叙述中正确的是A、由&&构成的逻辑表达式与由‖构成的逻辑表达式都有“短路”现象B、C语言的关系表达式:0<xC、逻辑“非”(即运算符!)的运算级别是最低的D、逻辑“或”(即运算符‖)的运算级别比算术运算要高标准答案:A知识点解析:逻辑表达式的运算比较复杂,有短路现象,也就是首先计算“逻辑与”或者“逻辑或”运算的第一个运算量的值,根据表达式的值决定是否进行第二个量的值的计算。“逻辑与”和“逻辑或”运算低于关系运算和算术运算。但是“逻辑非”运算却高于算术运算。11、以下程序的输出结果是()。voidswap(char*x,char*y)main(){chart;{char*s1=’’abc’’,*s2=’’123**;t=*x;*x=*y;*y=t;swap(s1,s2);printf(’’%s,%s\n’’,s1,s2);}}A、321,cbaB、123,abcC、abc,123D、1bc,a23标准答案:D知识点解析:题目中函数voidswap(char*x,char*y)的功能是交换两个字符*x和*y中的内容。在主函数中字符指针s1指向字符串’’abc’’,s2指向字符串’’123’’。所以函数swap(s1,s2)的执行结果就是字符’a’和’1’相互交换。12、以下叙述中正确的是A、字符变量在定义时不能赋初值B、同一英文字母的大写和小写形式代表的是同一个字符常量C、字符常量可以参与任何整数运算D、转义字符用@符号开头标准答案:C知识点解析:一个字符常量代表ASCII字符集中的一个字符,在C程序中,字符常量可参与任何整数运算,转义字符以一个反斜线开头后跟一个特定的字符。13、有以下程序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、876543B、321678C、1098765D、345678标准答案:B知识点解析:函数fun(inta[],intn)的功能是实现整型数组a[]元素的逆置操作。在主函数中当执行fun(k,5)时,对k[10]中的子数组k[5]={1,2,3,4,5)的首尾元素进行逆置,此时k[10]={5,4,3,2,1,6,7,8,9,10}。所在循环语句中输出从第2~7个数组元素时,其值分别为321678。14、下列选项中,能够满足"只要字符串s1等于字符串s2,则执行ST"要求的是A、if(s1-s2==0)ST;B、if(s1==s2)ST;C、if(strcpy(s1,s2)==1)ST;D、if(strcmp(s2,s1)==0)ST;标准答案:D知识点解析:在C语言中要对两个字符串的大小进行比较,就需要调用字符串比较函数strcmp,如果这个函数的返回值等于0,说明两个字符串相等。因此D选项正确。15、有以下程序#include<stdio.h>voidmain(){ints;scanf("%d",&s);while(s>0){switch(s){case1:printf("%d",s+5);case2:printf("%d",s+4;break;case3:printf("%d",s+3);default:printf("%d",s+1);break;}scanf("%d",&s);}}运行时,若输入123450,则输出结果是A、66656B、6566456C、66666D、6666656标准答案:B知识点解析:这道试题主要考查了switch和break语句,当变量s的值为1时,执行case1、case2两条语句,输出65;当变量s的值为2时,执行case2语句,输出6;变量s的值为3时,执行case3、default两条语句,输出64;变量s的值为4时,执行default语句,输入5;变量s的值为5时,执行default语句,输出6;变量s的值为0时,程序运行结束。16、有以下程序(strcat函数用以连接两个字符串)#include<stdio.h>#include<string.h>main(){chara[201="ABCD\OEFG\0",b[]="IJK";strcat(a,b);printf("%s\n",a);}程序运行后的输出结果是A、ABCDE\0FG\0IJKB、ABCDIJKC、IJKD、EFGIJK标准答案:B知识点解析:在字符串中字符’\0’示字符串的结束标志,所以字符串a和b.相连接的结果为ABCDIJK。17、有以下程序main(){inta=3;a+=a-=a*a;printf("%d\n",a);}程序的输出结果是A、9B、3C、-12D、0标准答案:C知识点解析:对于表达式a+=a-=a*a相当于a=a-(a*a),然后计算a=a+a,a的初值为3,则表达式的值为-12。18、有以下程序#includemain()voidfun(inta,intb){intc[10]={1,2,3,4,5,6,7,8,9,0),i;{intt;for(i=0;i<10;i+=2)t=a;a=b;b=t;fun(c[i],c[i+1]);}for(i=0;i<10;i++)printf("%d,",c[i]);printf("\n");}程序的运行结果是A、2,1,4,3,6,5,8,7,0,9,B、0,9,8,7,6,5,4,3,2,1,C、1,2,3,4,5,6,7,8,9,0,D、O,l,2,3,4,5,6,7,8,9,标准答案:C知识点解析:C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。由此可知,在本题中,函数fun(inta,intb)的功能是实现形参整形变量a和b值的互换。当在主函数中调用fhn(c[i],c[i+1])时,把实参变量c[i]和c[i+1]的值赋给形参变量a和b,执行完函数劬(c[i],c[i+1])时,形参变量a和b的值发生了互换,实参变量c[i]和c[i+1]的值并没有发生互换,所以输出的值为1,2,3,4,5,6,7,8,9,0。19、有以下程序#includemain(){inta[]={2,4,6,8,10},x,*p,y=1;p=&a[1];for(x=0;x<3;x++)y+=*(p+x);printf("%d\n",y);}程序的输出结果是A、13B、19C、11D、15标准答案:B知识点解析:本题通过语句"p=&a[1]"将指针变量p指向了存储单元a[1],即使得p[0]的值为4,y的初始值为1,然后通过3次for循环,使得y的值分别加上p[0]、p[1]和p[2],那么y=1+4+6+8,所以输出的y的值为19。20、有以下程序#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正确。21、在软件开发中,需求分析阶段产生的主要文档是()。A、可行性分析报告B、软件需求规格说明书C、概要设计说明书D、集成测试计划标准答案:B知识点解析:A)错误,可行性分析阶段产生可行性分析报告。C错误,概要设计说明书是总体设计阶段产生的文档。D错误,集成测试计划是在概要设计阶段编写的文档。B正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。22、设有定义:char*c;以下选项中能够使c正确指向一个字符串的是A、charstr[]="string";c=str;B、scanf("%s",c);C、c=getchar();D、*c="string";标准答案:A知识点解析:A选项为正确用法,先将字符串存于字符数组中,然后将数组名赋给字符指针。(数组名代表数组首地址,定义数组时为其分配确定地址)。C选项错误,getchar()函数输入个字符给字符型变量,而不是字符指针。B选项和D选项有类似的错误,两个选项并无语法错误,但运行时可能会出现问题。因为在B选项和D选项中,字符指针没有被赋值,是个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。因此A选项正确。23、在学校里,每间宿舍住1到6名学生,每名学生只在一间宿舍居住,则实体宿舍与实体学生之间的联系是()。A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:一间宿舍可以住多名学生,一个学生只能在一个宿舍,则实体宿舍与实体学生间的联系是一对多。宿舍是一的一方,学生是多的一方。故本题答案为B选项。24、在关系数据库设计中,关系模式设计属于()。A、物理设计B、需求分析C、概念设计D、逻辑设计标准答案:D知识点解析:关系数据库设计有需求分析、概念设计、逻辑设计、物理设计、编码、测试、运行、进一步修改等几个阶段。在需求分析阶段形成需求说明书,概念设计阶段形成概念数据模型(E—R模型,作为进一步设计数据库的依据),逻辑设计阶段形成逻辑数据模型(从E—R图向关系模式转换、关系视图设计、模式规范化),物理设计阶段形成数据库内部模型(此时涉及具体软件硬件环境)。故本题答案为D选项。25、有以下程序#include<stdio.h>main(){FILE*fp;inti,a[6]={1,2,3,4,5,6},b[6];fp=fopen("d.dat","w+b");fwrite(a,sizeof(int),6,fp);for(i=0;i<6;i++)fwrite(&a[2],sizeof(int),1,fp);rewind(fp);fseek(fp,sizeof(int)*2,SEEK_CUR);fread(b,sizeof(int),6,fp);fclose(fp);for(i=0;i<6;i++)printf("%d,",b[i]);}程序执行后的输出结果是()。A、3,4,5,6,3,3,B、1,2,3,4,5,6,C、3,4,5,6,1,2,D、3,4,5,6,1,1,标准答案:A知识点解析:程序首先以读二进制文件的方式打开文件d.dat;然后使用fwrite函数将数组a中的6个元素写入d.dat文件中,并调用for循环将a[2]元素(值为3)6次写入d.dat文件中;接着使用rewind函数将文件指针fp移动到文件头;再使用fseek函数将fp从当前位置向后移动2个整数位置;最后使用fread函数从fp指向的位置向后读取6个整数。由此可知这6个整数分别是:3,4,5,6,3,3。故本题答案为A选项。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、算法的有穷性是指A、算法程序的运行时间是有限的B、算法程序所处理的数据量是有限的C、算法程序的长度是有限的D、算法只能被有限的用户使用标准答案:A知识点解析:算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。2、关于C语言标识符,以下叙述中错误的是()。A、标识符可全部由数字组成B、标识符可全部由下画线组成C、标识符可全部由小写字母组成D、标识符可全部由大写字母组成标准答案:A知识点解析:c语言标识符只能由字母、数字、下画线构成,且只能以字母、下画线开头,故选项A不正确。3、下列描述中正确的是A、软件交付使用后还需要再进行维护B、软件工具交付使用就不需要再进行维护C、软件交付使用后其生命周期就结束D、软件维护是指修复程序中被破坏的指令标准答案:A知识点解析:通常将软件产品从提出、实现、使用维护到停止使刚退役的过程称为软件生命剧期。软件生命周期分为软件定义、软件开发及软件运行维护三个阶段。已交付的软件投入运行后,应在运行使用中不断地维护,根据新提出的需要进行必要而且可能的扩充和删改。4、设有定义:inta;floatb;,执行seanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0<回车>,则a和b的值分别是()。A、87和6.0B、876和543.0C、87和543.0D、76和543.0标准答案:A知识点解析:在格式字符前加入一个整数可以指定输入数据所占的宽度,所以赋值时会将87赋给变量a,把6.0赋给float型变量b。5、有三个关系R、S和T如下:则由关系R和S得到关系T的操作是A、自然连接B、并C、交D、差标准答案:D知识点解析:由关系T中的数据可以看出,其数据由属于关系R但是不属于关系S的数据组成。所以关系T是由关系R和S通过差运算得到的。6、有以下程序:#includevoidmain(){chara[5][10]={“one”,“two”,“three”,“four”,“five”};inti,j;chart;for(i:0;i<5;i++)for(j=i+1;j<4;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、twoowoB、fixowoC、twofovD、owooff标准答案:A知识点解析:for循环完成的功能是把二维数组a的第一列的字母按从小到大排序,其他列的字母不变。7、若有以下程序main()finta=6,b=0,c=0;for(;a;){b+=a;a-=++c;}printf("%d,%d,%d\n",a,b,c);}则程序的输出结果是A、1,14,3B、0,18,3C、0,14,3D、0,14,6标准答案:C知识点解析:循环体执行三次,a初值6,第一次执行循环体,b=6,a=5。继续执行循环体,b=11,a=3,第三次执行循环体,b=14,a=0,循环退出。8、下列程序段中完全正确的是()。A、int*p;scanf(’’%d’’,&p);B、int*p;scanf(’’%d’’,p);C、intk,*p=&k;scanf(’’%d’’,p);D、intk,*p;*p=&k;scanf(’’%d’’,p);标准答案:C知识点解析:A选项中错在没有对指针进行初始化,无效指针,并且在scanf(’’%d’’,&p)中无须再进行取地址操作;B选项中没有对指针进行初始化,无效指针;D选项中语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。C选项正确。9、若有以下程序#include<stdio.h>main(){inta=0,b=0,c=0;c=(a-=++a),(a+=b,b+=4);printf("%d,%d,%d\n",a,b,c);}则程序的输出结果是A、0,4,4B、1,4,1C、0,4,0D、1,4,4标准答案:C知识点解析:表达式c=(a-=++a),(a+=b,b+=4)相当于逗号表达式,首先计算c=(a-=++a),其中a-=++a)等价于a=a-(++a),得到a的值0,c的值为0,在计算(a+=b,b+=4)时,a和b的初值为0,计算以后,a为0,b为4。10、若有定义语句:intx=12,y=8,z;在其后执行语句z=0.9+x/y;则z的值为A、1.9B、1C、2D、2.4标准答案:B知识点解析:由于x,y,z都是整型数据,所以x除以y的值为整型数值1.1和0.9相加得到1.9,再转换为整型数1赋给整型变量z。11、有以下程序#include<stdio.h>#include<stdlib.h>main(){int*a,*b,*c;a=b=c=(int*)malloc(sizeof(int));*a=l;*b=2,*c=3;a=b:printf(’’%d,%d,%d\n’’,*a,*b,*c);}程序运行后的输出结果是A、2,2,3B、3,3,3C、1,2,3D、1,1,3标准答案:B知识点解析:a=b=c=(int*)malloc(sjzeof(int));含义为中请了一个整型的存储空间,让指针a,b,c分别指向它,*a=1;*b=2;*c=3;语句的含义为所申请的整型存储空间的内容,*c=3最后执行导致存储空间的内容为3。12、若有以下程序#includemain(){inta=1,b=2,c=3,d=4,r=0;if(a!=1);elser=1;if(b==2)r+=2;else;if(c!=3)r+=3;else;if(d==4)r+=4;printf("%d\n",r);}则程序的输出结果是()。A、7B、10C、6D、3标准答案:A知识点解析:else总是与前面距离它最近的且未曾配对的if语句配对。"if(a!=1);elser=1;"执行的是空语句";"。"if(b==2)r+=2;else;"执行的是语句"r+=2",r值为2。"if(c!=3)r+=3;else;"执行的是空语句";"。"if(d==4)r+=4;"执行语句"r+=4",计算后r的值为7,输出结果为选项A)。13、有下列程序:yoidflintb[]){intI;for(i=2;i<6;i++)b[i]*=2;}main(){inta[10]={1,2,3,4,5,6,7,8,9,10},i;fla);for(i=0;i<10,i++)printf(’’%d,”,a[i]);}程序运行后的输出结果是A、1,2,3,4,5,6,7,8,9,10,B、1,2,3,4,10,12,14,16,9,10,C、1,2,6,8,10,12,7,8,9,10,D、1,2,6,8,10,12,14,16,9,10标准答案:C知识点解析:函数voidf(intb[])的功能是对数组b[]中第2个到第5个元素的值逐个扩大2倍。所以在main()函数中,f(a)语句的作用是对数组a[10]中从a[2]到a[5]的各个数字乘以2,因而数组a[10]的元素就变成了{1,2,6,8,10,12,7,8,9,10}。14、有以下程序段intj;floaty;charname[50];scanf("%2d%f%s",&j,&y,name);当执行上述程序段,从键盘上输入555667777abc后,y的值为A、55566.0B、7777.0C、566.0D、566777.0标准答案:C知识点解析:因为在输入格式控制符中指定变量j的输入格式控制符为“%2d”,即变量j所占的宽度为2,所以变量j只接收输入数据的前两位,从第三位开始直到空格之间的输入整数都会被保存到变量y中,因为y为浮点型数据,所以输出结果为选项C)。15、avg函数的功能是求整型数组中的前若干个元素的平均值,设数组元素个数最多不超过10,则下列函数说明语句错误的是A、intavg(int*a,intn);B、intavg(inta[10],intn);C、intavg(inta[],intn,);D、intavg(inta,intn);标准答案:D知识点解析:本题考查函数的定义。题目要求计算数组的平均值,因此函数必须获取数组的地址(指针),即函数必须要有一个指针类型的参数,选项D中函数参数都是整型,错误。16、有如下程序#includemain(){inti,k;intarray[4][2]={{1,2},{4,9},{6}};for(i=0;i<2;i++)for(k=0;k<4;k++){printf("%d,",array[k][i]);}printf("\n");}程序运行后的输出结果是()。A、1,4,6,0,2,9,0,0,B、1,2,4,9,6,C、2,9,0,0,1,4,6,0,D、2,9,6,1,4,标准答案:A知识点解析:定义语句"intarray[4][2]={{1,2},{4,9},{6}};"的作用是使array[0][0]=1,array[0][1]=2,array[1][0]=4,array[1][1]=9,array[2][0]=6,其余元素均为0,所以按列输出结果为答案A)。17、若有定义语句:chars[10]="1234567\0\0";则strlen(s)的值是A、8B、7C、9D、10标准答案:B知识点解析:字符串长度函数strlen(s)表示计算出以s为起始地址的字符串的长度,并作为函数值返回。这个长度值不包括串尾的结束标志’\0’。18、以下关于return语句的叙述中正确的是A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、定义成void类型的函数中可以有带返回值的return语句D、没有return语句的自定义函数在执行结束时不能返回到调用处标准答案:B知识点解析:return语句主要用于返回函数的值。在一个自定义函数中,可以根据不同的情况设置多条return语句返回函数的值。19、若有定义:inta,b;通过语句scanf("%d;%d",&a,&b);能把整数3赋给变量a,5赋给变量b的输入数据是A、3,5B、35C、3;5D、35标准答案:C知识点解析:在采用scanf这个函数输入数据时,要严格遵守其输入的规则定义。本题此函数定义的规则是,在两个整数之间加分号输入。20、以下叙述中正确的是A、用户自己定义的函数只能调用库函数B、不同函数的形式参数不能使用相同名称的标识符C、在C语言的函数内部,可以定义局部嵌套函数D、实用的C语言源程序总是由一个或多个函数组成标准答案:D知识点解析:一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之间没有主从关系,不能嵌套定义函数。21、若有以下程序#includeint*f(int*s,int*t){int*k;if(*s<*t){k=s;s=t;t=k;}returns;}main(){inti=3,j=5,*p=&i,*q=&j,*r;r=f(p,q);printf("%d,%d,%d,%d,%d\n",i,j,*p,*q,*r);}则程序的输出结果是()。A、3,5,3,5,5B、3,5,5,3,5C、5,3,5,3,5D、5,3,3,5,5标准答案:A知识点解析:考查指针与函数。被调函数为指针型函数,返回的是s这一指针型数据。虽然该函数进行的是地址传参,但只是改变了指针的指向,对原指向的数据并没有改变。并且若以指针作为操作单元,不涉及其指向的数据时,该函数仍然可以看做是值传递,即形参指针指向的变化不会影响到实参指针的指向。if语句将s指向*s、*t较大的数据的地址并返回。所以函数调用结束之后,i、j值不变,p的指向不变,r的指向和q的指向一致,输出结果为:3,5,3,5,5,答案选A。22、有以下程序#includemain(){ints[3][2]={1,2,3,4,5,6},*ps[3],k;for(k=0;k<3;k++){ps[k]=s[k];printf("%d",*(ps[k]+1));}}程序的运行结果是()。A、246B、135C、123D、456标准答案:A知识点解析:考查行指针。(*ps)[3]表示一个能存放三个整型元素首地址的一维数组的首地址。"ps[k]=s[k];"表示将ps指向s的第k行数据,所以"printf("%d",*(ps[k]+1));"输出的是二维数组s中的第二列数据,答案选A。23、有以下程序#include<stdio.h>main(){FILE*fp;charstr[10];fp=fopen("myfile.dat","w");fputs(”abc",f1));fclose(fp);rp。fopen("myfiIe.dat","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str);puts(str);fclose(fp);}程序运行后的输出结果是A、28cB、abc28C、abcD、因类型不一致而出错标准答案:B知识点解析:在程序中首先把字符串abc写入到文件myfile.dat中,然后再把整数28追加到字符串abc的后面,最后把文件myfiledat的内容读入到字符串str中,并把其内容输出。24、有以下结构体说明、变量定义和赋值语句structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];则以下scanf函数调用语句有错误的是A、scanf("%s",s[0].name);B、scanf("%d",&s[0].age);C、scanf("%c",&(ps->sex));D、scanf("%d",ps->age);标准答案:D知识点解析:本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。25、以下选项中正确的语句组是A、char*s;s={"BOOK!"};B、char*s;s="BOOK!";C、chars[10];s="BOOK!";D、chars[];s="BOOK!";标准答案:B知识点解析:A选项去掉大括号就正确了;C选项和D选项应在定义时赋初值。因此B选项正确。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、有以下程序:#include<stdio.h>main(){inta[]={2,3,5,4},i;for(i=0;i<4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]——;}break;ease1:a[i]=0;}for(i=0;i<4;i++)printf(″%d″,a[i]);printf(″\n″);}程序运行后的输出结果是()。A、3344B、2050C、3040D、0304标准答案:C知识点解析:main函数的函数体是一个for循环语句,for循环中包含一个switch语句,如果判断条件为0,则进入第二个switch语句,如果判断语句为1,则执行“a{i]=0”,最后将数组按顺序输出。所以程序功能是将数组的偶数项设为0,奇数项如果为奇数则减1,为偶数就加1,最后得到结果。2、以下选项中不合法的标识符是A、FORB、&aC、printD、00标准答案:B知识点解析:合法的标识符要满足组成字符为a~z以及A~Z,数字字符0到9和下划线,其中数字不开头,不能是关键字。选项B中,&不属于组成字符,是错误的。3、下列叙述中正确的是A、对长度为n的有序链表进行查找,最坏情况下需要的比较次数为nB、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)C、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)D、对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(nlog2n)标准答案:A知识点解析:本题主要考查的知识点为查找技术。顺序查找的使用情况:①线性表为无序表;②表采用链式存储结构。二分法查找只适用于顺序存储的有序表,并不适用于线性链表。4、有以下程序:#include#defineX5+6main(){inta=2,c;c=X*2:printf("%d:,c);}程序运行后的输出结果是()。A、17B、22C、16D、11标准答案:A知识点解析:define语句仅进行简单替换,因此c=5+6*2=17。5、下面不属于软件工程过程的4种基本活动A、软件规格说明B、软件开发C、软件演进D、软件测试标准答案:D知识点解析:软件工程过程的4种基本活动是:软件规格说明、软件开发、软件确认、软件演进。6、以下选项中,当x为大于1的奇数时,值为0的表达式是A、x/2B、x%2==0C、x%2!=0D、x%2==1标准答案:B知识点解析:因为x的值为大于1的奇数,所以x除以2的余数等于1。所以选项B)等于关系表达式的结果为假,即等于0。7、定义学生、教师和课程的关系模式S(S#,Sn,Sd,Dc,Sa)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄);C(C#,Cn,P#)(其属性分别为课程号、课程名、先修课);SC(S#,C#,G)(其属性分别为学号、课程号和成绩)。包含对非主属性部分依赖的关系是()。A、S(S#,Sn,Sd,Dc,Sa)B、C(C#,Cn,P#)C、SC(S#,C#,G)D、不存在标准答案:A知识点解析:关系S的主键是S#(学号),S#是主属性,但非主属性Sd(所在系)也可决定Dc(所在系的系主任),所以包含对非主属性部分依赖的关系是S。8、下列描述中错误的是()。A、在数据库系统中,数据的物理结构必须与逻辑结构一致B、数据库技术的根本目标是要解决数据的共享问题C、数据库设计是指在已有数据库管理系统的基础上建立数据库D、数据库系统需要操作系统的支持标准答案:A知识点解析:在数据库系统中,物理独立性是指数据的物理结构(包括存储结构、存取方式等)的改变。如存储设备的更换、物理存储的更换、存取方式改变等都不影响数据库的逻辑结构,从而不致引起应用程序的变化。9、在E-R图中,用来表示实体联系的图形是()。A、椭圆形B、矩形C、菱形D、三角形标准答案:C知识点解析:在E-R图中实体集用矩形,属性用椭圆,联系用菱形。10、待排序的关键码序列为(15,20,9,30,67,65,45,90),要按关键码值递增的顺序排序,采取简单选择排序法,第一趟排序后关键码15被放到第()个位置。A、2B、3C、4D、5标准答案:B知识点解析:选择排序的基本思想是扫描整个线性表,从中选出最小的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一个位置,元素15则被交换放在第三个位置。11、有以下程序#includemain(){inti,j,m=1;for(i=1:i<3;i++){for(j=3;j>0;j--){if(i*j>3)break;m*=i*j;}}printf("m=%d\n",m);}程序运行后的输出结果是A、m=2B、m=4C、m=5D、m=6标准答案:D知识点解析:这道题考查了for循环的嵌套应用。对于外层for循环来说,变量i从1增到2,循环执行2次。当变量i的值等于1时,对于内层for循环来说,变量i从3减到1,求得变量m的值等于6。当变量i的值等于2时,第一遍执行内层for循环,变量i的值等于3,那么i*i的值等于6,其值大于3,这时执行break语句,退出内层for循环的执行。所以程序输出变量m的值为6。12、有以下程序#include<stdio.h>intflintx,inty){retum((y-x)*x);}main(){inta=3,b=4,c=5,d;d=flfla,b),f(a,c));printf(’’%d\n’’,d);}程序运行后的输出结果是A、10B、8C、9D、7标准答案:C知识点解析:本题考查函数的嵌套调用。首先计算f(a,b)与f(a,C,f(a,b)=(b—a)*a=3,f(a,C=(c.a)*a=6,然后计算f(3,6)=(6-3)*3=9。13、设有定义:chars[81];inti=0;以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是A、while((s[i++]=getchar())?=’\n’)=s[i]=’\0’;B、scanf("%s",s);C、gets(s);D、do{scanf("%c",&s[i]);}while(s[i++]!=’\n’);s[i]=’\0’;标准答案:B知识点解析:本题考查标准输入输出函数和循环语句。gets(s)函数的作用是将输入的字符读入字符串s,直到遇到回车。而scanf7()函数接收字符串时的结束标志为回车或者空格。14、有以下程序:#include<stdio.h>main(){FILE*fp;charstr[10];fp=fopen("myfile.dat","w");fputs("abc",fp);felose(fp);fp=fopen("myfile.dat","a+");fprintf(fp,"%d",28);rewind(fp);fscanf(fp,"%s",str);puts(str);felose(fp);}程序的运行结果是()。A、abcB、28cC、ad9c28D、因类型不一致而出错标准答案:C知识点解析:本题考查文件操作函数:fprintf()函数。fprintf()函数向文件输出,将输出的内容输出到硬盘上的文件,或是相当于在文件的设备上执行两次fprintf后,文件中有abc28,所以C选项正确。15、有以下程序,程序运行后的输出结果是#include#defineSUB(X,Y)(X+1)*Ymain(){inta=3,b=4;printf("%d\n",SUB(a++,b++));}A、20B、12C、16D、25标准答案:C知识点解析:宏展开的结果(a+++1)*b++,后缀自加表达式参加运算,先用a和b的初值得到表达式的值,进行计算,然后a和b在自加。因此计算结果为16。16、有以下程序#includevoidfun(char*p,intn){charb[6]="abcde";inti;for(i=0,p=b;i<n;i++)p[i]=b[i];}main(){chara[6]="ABCDE";fun(a,5);printf("%s\n",a);}程序运行后的输出结果是A、abcdeB、ABCDEC、edcbaD、EDCBA标准答案:B知识点解析:本题考查数组名作为函数参数,执行f函数时,传进去的a指针被重新指向了b,所以原本a数组的地址内容不变,所以输出结果为ABCDE,答案为B选项。17、有以下程序main(){inta=-2,b=0;while(a++&&++b);printf("%d,%d\n",a,b);}程序运行后输出结果是A、0,3B、1,2C、1,3D、0,2标准答案:B知识点解析:循环体为空,共执行2次。第一次变量a初值为-2,b初值为0,表达式a++&&++b值为1,同时a的值为-1,b的值为1,第二次循环条件判断以后,a的值为0,b的值2,执行循环体空,第三次判断条件表达式值为0,不执行循环体,而a的值为1,但是表达式a++的值为0,因此不计算表达式++b的值,b的值仍为2。18、以下叙述中正确的是A、循环发生嵌套时,最多只能两层B、三种循环for,while,do-while可以互相嵌套C、循环嵌套时,如果不进行缩进形式书写代码,则会有编译错误D、for语句的圆括号中的表达式不能都省略掉标准答案:B知识点解析:在一个循环体内又完整包含了另一个循环,称为循环嵌套。循环的嵌套可以多层,但每一层循环在逻辑上必须是完整的。for循环、while循环、do-while循环可以互相嵌套,但每层循环在逻辑上必须完整。而在for语句中,for语句中的表达式可以部分或全部省略,但两个“;”不可省略。19、有以下程序(其中的strstr()函数头部格式为:char*strstr(char*p1,char*p2)确定p2字符串是否在p1中出现,并返回p2第一次出现的字符串首地址)#include#includechar*a="you";char*b="WelcomeyoutoBeijing!";main(){char*p;p=strstr(b,a)+strlen(a)+1;printf("%s\n",p);}程序的运行结果是()。A、toBeijing!B、youtoBeijing!C、WelcomeyoutoBeijing!D、Beijing!标准答案:A知识点解析:表达式"strstr(b,a);"返回的是字符串"you"在b指向的字符串中第一次出现的字符串首地址,即是&b[8],strlen(a)求得为字符串a的实际长度为3,所以语句"p=strstr(b,a)+strlen(a)+1;"计算得的p与&b[12]等价,所以答案选A。20、设文件指针fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是A、写操作结束后可以从头开始读B、可以在原有内容后追加写C、可以随意读和写D、只能写不能读标准答案:D知识点解析:在题目中函数fopen以“只写”方式打开文件file。21、在数据库设计中,将E-R图转换成关系数据模型的过程属于A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:E-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。22、以下叙述中正确的是A、N-S流程图只能描述简单的顺序结构的程序B、程序的算法只能使用流程图来描述C、结构化程序的三种基本结构是循环结构、选择结构、顺序结构D、计算机可以直接处理C语言程序,不必进行任何转换标准答案:C知识点解析:N-S流程图是可以描述循环结构、选择结构、顺序结构等多种结构的程序,所以A选项错误。程序的算法可以用流程图、伪代码、N-S结构图等方法表示,所以B选项错误。计算机只能处理二进制表示的目标程序,不能直接执行由C语言编写的源程序,所以D选项错误。23、有以下程序:#includeintfun(intx,inty){if(x!=y)return((x+y)/2);elsereturn(x);}main(){inta=4,b=5,c=6;printf("%d\n",fun(2*a,fun(b,c)));}A、6B、3C、8D、12标准答案:A知识点解析:本题中第一次调用为fun(8,fun(5,6)),因为fun(5,6)返回值为5,所以第二次调用为fun(8,5)=6。所以选择A)。24、以下程序拟实现计算sum=1+1/2+1/3+…+1/50。#include<stdio.h>main(){inti,doublesum;sum=1.0;i=1;do{i++;sum+=1/i;}while(i<50);printf("sum=%lf\n",sum);}程序运行后,不能得到正确结果,出现问题的语句是()。A、sum+=1/i;B、while(i<50);C、sum=1.0;D、i++;标准答案:A知识点解析:选项A中,“sum+=1/i.”中的i为整型,因此“1/i”是整型,当“1/i”有小数时,会被截断。因此“1/i”结果始终为0,导致结果出错。应该改为“sum+=1.0/i”。故本题答案为A选项。25、有以下结构体说明、变量定义和赋值语句:structSTD{charname[10];intage;charsex;}s[5],*ps;ps=&s[0];则下列scanf函数调用语句有错误的是()。A、scanf("%s",s[0].naine);B、scanf("%d",&s[0].age);C、scanf("%c",&(ps->sex));D、scanf("%d",ps->age);标准答案:D知识点解析:本题考查结构体的相关知识。题目中需要输入一个变量,scanf要求输入参数为指针,而D选项中“ps->age”为变量,不是指针。故本题答案为D选项。国家二级C语言机试(选择题)模拟试卷第5套一、选择题(本题共25题,每题1.0分,共25分。)1、设栈的存储空间为S(1:m),初始状态为top=m+1。经过一系列入栈与退栈操作后,top=m。现又在栈中退出一个元素后,栈顶指针top值为()。A、0B、m-1C、m+1D、产生栈空错误标准答案:C知识点解析:栈的顺序存储空间为s(1:m),初始状态top=m+1,所以这个栈是m在栈底(也可理解为开口向下的栈)。经过一系列入栈与退栈操作后top=m,则栈中有1个元素,若现在又退出一个元素,那么栈顶指针下移一位,回到m+1的位置。2、下面叙述中正确的是A、线性表是线性结构B、栈与队列是非线性结构C、线性链表是非线性结构D、二叉树是线性结构标准答案:A知识点解析:线性表是最简单的、最常用的一种线性结构。所谓线性链表指的是采用链式存储结构的线性表。栈和队列其实是一种特殊的线性表。树是一种简单的非线性结构,二叉树是树的一种。3、设循环队列存储空间为Q(1:50),初始状态为front=rear=50。经过一系列入队和退队操作后,front=rear=25,则该循环队列中元素个数为A、26B、25C、24D、0或50标准答案:D知识点解析:在循环队列中,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素为队列中的元素。在循环队列动态变化过程中,当循环队列满时有front=rear,而当循环队列空时也有front=rear。即在循环队列中,当front=rear时,不能确定是队列满还是队列空。所以对于这个题目来说,当front=rear=25,要么队列为空,队列中的元素个数为0;要么队列为满,队列中的元素个数为50,选项D正确。4、若输入“abcdef”、“abdef”,以下程序的输出结果为()。#include<stdio.h>#include<string.h>main(){intn;chars1[20],s2[20],*p1,*p2;scanf(’’%s’’,s1);scanf(’’%s’’,s2);p1=s1;p2=s2;n=strcmp(p1,p2);printf(’’%d\n’’,n);}A、-1B、0C、’’abcdef’’D、’’abdef’’标准答案:A知识点解析:本题考查两个知识点:①字符串比较函数strcmp(s1,s2),若s1>s2,则返回1;若s1=s2,则返回0;若s1<s2,则返回-1。②字符串依次比较的是它们相同位置上字符的ASCII码值。5、某二叉树共有7个节点,其中叶子节点只有1个,则该二叉树的深度为(假设根节点在第1层)()。A、3B、4C、6D、7标准答案:D知识点解析:根据二叉树的性质,度为0的节点(叶子节点)总是比度为2的节点多一个。题目中的二叉树的叶子节点为1,因此度为2的节点的数目为0。故该二叉树为7层,每层只有一个节点。6、对于循环队列,下列叙述中正确的是A、队头指针是固定不变的B、队头指针一定大于队尾指针C、队头指针一定小于队尾指针D、队头指针可以大于队尾指针,电可

温馨提示

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

评论

0/150

提交评论