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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷5(共9套)(共270题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共40题,每题1.0分,共40分。)1、下列描述中不属于软件特点的是()。A、软件是一种逻辑实体,具有抽象性B、软件在使用中不存在磨损、老化问题C、软件复杂性高D、软件使用不涉及知识产权标准答案:D知识点解析:软件不像硬件一样具有实物的特性,而是一种逻辑实体,具有抽象性;开发复杂性高,成本昂贵;在运行、使用期间不存在磨损、老化问题。故A、B和C选项正确。由于软件是一种知识产品,受知识产权法的保护,所以D选项不正确。2、下列叙述中正确的是A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、以上三项均正确标准答案:B知识点解析:线性表的存储分为顺序存储和链式存储。在顺序存储中,所有元素所占的存储空间是连续的。而在链式存储的方式中,将存储空间的每一个存储结点分为两部分,一部分用于存储数据元素的值,称为数据域;另一部分用于存储下一个元素的存储序号,称为指针域。所以线性表的链式存储方式比顺序存储方式的存储空间要大一些。3、按照“后进先出”原则组织数据的数据结构是A、队列B、栈C、双向链表D、二叉树标准答案:B知识点解析:栈是限定在一端进行插入与删除的线性表。在栈中,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,也是最先被删除的元素;栈底元素总是最先被插入的元素,也是最后才能被删除的元素。即栈是按照“后进先出”(LastInFirstOut,简称LIFO)或“先进后出”(FirstInLastOut,简称FILO)的原则组织数据的。因此,栈也称为“后进先出表”或“先进后出”表。4、有二又树如下图所示:则前序序列为()。A、ABDEGCFHB、DBGEAFHCC、DGEBHFCAD、ABCDEFGH标准答案:A知识点解析:前序遍历首先访问根结点,然后遍历左子树,最后遍历右子树;在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。故本题前序序列是ABDEGCFH。中序遍历首先遍历左子树,然后访问跟结点,最后遍历右子树;在遍历左、右子树时,仍然先遍历左子树,然后访问跟结点,最后遍历右子树。故本题的中序序列是DBGEAFHC。后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点;在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点。故本题的后序序列是DGEBHFCA。5、以下叙述中正确的是()。A、如果企图通过一个空指针来访问一个存储单元,将会得到一个出错信息B、即使不进行强制类型转换,在进行指针赋值运算时,指针变量的基类型也可以不同C、设变量p是一个指针变量,则语句p=0;是非法的,应该使用p=NULL;D、指针变量之间不能用关系运算符进行比较标准答案:A知识点解析:空指针意味着该指针没有指向任何具体的变量,所以不能访问一个存储单元,选项A正确。指针的赋值运算只能在同一数据类型之间进行,故选项B错。语句p=0和p=NULL是一样的,都是把一个空指针赋给指针变量p,故选项C错。指针之间能进行关系运算,比较的是地址值的大小,选项D错。答案选A。6、下列叙述中正确的是A、栈是一种先进先出的线性表B、队列是一种后进先出的线性表C、栈与队列都是非线性结构D、以上三种说法都不对标准答案:D知识点解析:栈是先进后出的线性表,队列是先进先出的线性表,二者均为线性结构。7、设顺序表的长度为16,对该表进行简单插入排序。在最坏情况下需要的比较次数为()。A、120B、60C、30D、15标准答案:A知识点解析:简单插入排序在最坏情况下,即初始排序序列是逆序的情况下,比较次数为n(n-1)/2,移动次数为n(n-1)/2。本题中n=16,16×(16-1)÷2=8÷15=120。8、下列数据结构中,能用二分法进行查找的是A、顺序存储的有序线性表B、线性链表C、二叉链表D、有序线性链表标准答案:A知识点解析:二分法查找只适应于顺序存储的有序表。有序表是指线性表中的元素按值非递减排序(即从小到大,但允许相邻元素值相等)的表。9、下列结构中为非线性结构的是A、树B、向量C、二维表D、矩阵标准答案:A知识点解析:线性结构是一个有序数据厄素的集合。常用的线性结构有:线性表,栈,队列,双队列,数组,串。常见的非线性结构有:二维数组,多维数组,广义表,树二叉树等),图。10、设表的长度为n。在下列结构所对应的算法中,最坏情况下时间复杂度最低的是A、堆排序B、有序链表查找C、希尔排序D、循环链表中寻找最大项标准答案:D知识点解析:在循环链表中寻找最大项算法是,首先取出第一个数作为最大数,然后和后面的所有项进行比较查找。因此,比较次数为n-1。11、若有以下定义,则对数组元素的正确引用是()。inta[5],*p=a;A、*&a[5]B、(*a)+2C、*p+4D、*(a+2)标准答案:D知识点解析:本题考查通过指针引用数组元素。选项A)、C)没有这种引用形式;选项B),(*a)+2与*a+2相同,表示第一个元素的值加2;选项D),*(a+2)引用数组的第3个元素。12、与数学表达式x≥y≥z对应的C语言表达式是A、(x>=y>=z)B、(x>=y)&&(y>=z)C、(x>=y)!(y>=z)D、(x>=y)‖(y>=x)标准答案:B知识点解析:若要表示x大于等于y.同时y大于等于z,需要用逻辑与表达式连接。13、若变量已正确定义,则语句s=32;s^=32;pfintf("%d",s);的输出结果是()。A、-1B、0C、1D、32标准答案:B知识点解析:本题考查逻辑异或运算。异或运算只有在两个比较的位不同时其结果为1,否则结果为0,题目中两个值相同,所以结果为0。14、数据库设计过程不包括A、概念设计B、逻辑设计C、物理设计D、算法没汁标准答案:D知识点解析:数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计。15、以下叙述中错误的是()。A、书写风格良好的程序执行效率高B、书写风格良好的程序易读性好C、C程序可以在一行上写多条语句D、C程序允许将一条语句分写在多行上标准答案:A知识点解析:程序的执行效率和程序的时间复杂度和空间复杂度有关,而良好的书写风格仅能增加程序的可读性,所以答案选A。16、以下选项中不能用作C程序合法常量的是A、’\123’B、1,234C、123D、\X7D标准答案:B知识点解析:选项B)中的1,234在两侧加双引号才是C程序的合法字符串常量。17、由关系R1和:R2得到关系R3的操作是A、等值连接B、并C、笛卡尔积D、交标准答案:A知识点解析:等值连接是关系运算一连接运算的一种常用的连接方式。是条件连接(或称θ连接)在连接运算符为“=”号时,即θ=0时的一个特例。18、有以下程序,程序运行后的输出结果是#includemain(){intx,y,z;x=y=1;z=x*,y*,*y;printf("%d,%d,%d\n",x,y,z);}A、2,3,1B、2,3,2C、2,3,3D、2,2,1标准答案:A知识点解析:在程序中,整型变量x、y的初值都为1,赋值语句z=x++,y++,++y右边的“x++,y++,++y”是一个逗号表达式,所以逗号表达式的值为++y的值。执行逗号表达式“x++,y++,++y”后,x的值为2,y的值为3,z取逗号表达式的值,为1。19、设有定义:inta=1,b=2,c=3;以下语句中执行效果与其它三个不同的是A、if(a>b)c=a;a=b;b=c;B、if(a>b){c=a,a=b,b=c;}C、if(a>b)c=a,a=b,b:c;D、if(a>b){c=a;a=b;b=c;}标准答案:A知识点解析:在C语言中,用分号表示一条语句的结柬;用f}把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B)、C)、D)表示的功能相同,而选项A)表示的是一条if语句,两条赋值语句。20、以下叙述中错误的是A、用户定义的函数中可以没有return语句B、用户定义的函数中若没有return语句,则应当定义函数为void类型C、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值D、函数的return语句中可以没有表达式标准答案:C知识点解析:函数值通过return语句返回,return语句的形式如下:return表达式或return(表达式);当程序执行到return语句时,程序的流程就返回到调用该函数的地方,并带回函数值。在同一函数内,可以根据需要,在多处出现return语句,在函数体的不同部位退出函数。无论函数体中有多少个return语句,return语句只可能执行一次,返回一个函数值。return语句中也可以不含有表达式,这时必须定义函数为void类型,它的作用只是使流程返回到调用函数,并没有确定的函数值。函数体内可以没有return语句,这时也必须定义函数为void类型,程序的流程就一直执行到函数末尾的“}”,然后返回调用函数,也没有确定的函数值带回。21、有以下程序#includeintfun(intn){inta;if(n==1)return1;a=n+fun(n-1);return(a);}main(){printf("%d\n",fun(5));}程序的输出结果是A、14B、10C、15D、9标准答案:C知识点解析:函数fun为递归定义的函数,当调用fun(5)→5+fun(4)→5+4+fun(3)→5+4+3+fun(2)→5+4+3+2+fun(1),因此最后的结果为15。22、以下叙述中正确的是A、C语言程序总是从最前面的函数开始执行B、C语言程序总是从main函数开始执行C、C语言程序中main函数必须放在程序的开始位置D、C语言程序所调用的函数必须放在main函数的前面标准答案:B知识点解析:C语言中一个源程序都有一个且只能有一个main函数,即主函数;C语言规定必须用main作为主函数名。其后的一对圆括号中可以是空的,但不能省略。程序中的main()是主函数的起始行,也是C程序执行的起始行。每一个程序都必须有一个且只能有一个主函数。一个C程序总是从主函数开始执行,到main函数体执行完后结束,而不论main函数在整个程序中的位置如何。而调用函数的定义位置和调用没有直接关系。23、若有以下程序#includecharf(charx){returnx*x+’a’;}main(){chara,b=0;for(a=0;a<4;a+=1){b=f(A(;putchar(B);}}则程序的输出结果是A、abcdB、ABEJC、abejD、ABCD标准答案:C知识点解析:该题目首先初始化变量a和b,通过for循环语句使a取值为0、1、2、3,f函数的功能是将a*a+’a’的值返回给b,即b为a、b、e、j。最后通过字符输出函数putchar()将b输出。因此C选项正确。24、有以下程序#ineludevoidfun(inta,intb){intt;t=a;a=b;b=t;}main(){intc[10]={1,2,3,4,5,6,7,8,9,0),i;for(i=0;i<10;i+=2)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、0,1,2,3,4,5,6,7,8,9,标准答案:C知识点解析:C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留并维持原值。由此可知,在本题中,函数fun(inta,intb)的功能是实现形参整形变量a和b值的互换。当在主函数中调用fun(c[i],c[i+1])时,把实参变量c[i]和c[i+1]的值赋给形参变量a和b,执行完函数fun(c[i],c[i+1])时,形参变量a和b的值发生了互换,实参变量c[i]和c[i+1]的值并没有发生互换,所以输出的值为1,2,3,4,5,6,7,8,9,0。25、关于算法,以下叙述中错误的是A、某个算法可能会没有输入B、某个算法可能会没有输入C、一个算法对于某个输入的循环次数是可以事先估计出来的D、任何算法都能转换成计算机高级语言的程序,并在有限时间内运行完毕标准答案:D知识点解析:算法的特征:①有穷性:一个算法(对任何合法的输入)在执行有穷步后能够结束,并且在有限的时间内完成。②确定性:算法中的每一步都有确切的含义。③可行性:算法中的操作能够用已经实现的基本运算执行有限次来实现。④输入:一个算法有零个或者多个输入,零个输入就是算法本身确定了初始条件。⑤输出:一个算法有一个或者多个输出,以反映出数据加工的结果。所以选择D选项。26、有以下程序#include<stdio.h>#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N-1-i];}voidmain(){intx[N][N]={{1,2,3,4),{5,6,7,8),{9,10,11,12),{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf("%d,",y[i]);printf("\n")A、-12,-3,0,0,B、-3,-1,1,3,C、0,1,2,3,D、-3,-3,-3,-3,标准答案:B知识点解析:fun函数的功能足求出二维数组a中第i行第i个元素与第N-1-i元素的差,赋给b[i]。在主函数中,把实参二维数组x和一维数组y传递给形参a和b,最后输出一维数组y中元素的值。27、有以下程序#includevoidfun(int*a,int*b){int*c;c=a;a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y;fun(p,q);printf("%d,%d,",*p,*q);fun(&x,&y);printf("%d,%d\n",*p,*q);}程序运行后的输出结果是A、3,5,5,3B、3,5,3,5C、5,3,3,5D、5,3,5,3标准答案:B知识点解析:本题考查函数的调用与指针。p和q分别为指向x和y的指针,函数fun()的两个形参均为指针型,主要功能为交换两个指针的指向,当调用结束以后,该操作不能返回主函数。而主函数中,fun(p,q)、fun(&x,&y)的实参均为x与y的地址,因此,两者结果相同,并且两者指针指向的值不能变化。28、若有以下程序voidflintx)main(){intz=123456;{if(x>=10)f(z);}{printf("%d-",x%10);f(x/10);}elseprintf("%d",x);}则程序的输出结果是A、6-5-4-3-2-1B、6-5-4-3-2-1-C、1-2-3-4-5-6D、1-2-3-4-5-6-标准答案:A知识点解析:函数f的主要功能为逆置输出整数x的每一位数据,如果z的值为123456,逆置输出的结果为6-5-4-3-2-1。29、下面选项中关于编译预处理的叙述正确的是A、凡是以#号开头的行,都被称为编译预处理命令行B、预处理命令行必须使用分号结尾C、预处理命令行不能出现在程序的最后一行D、预处理命令行的作用域是到最近的函数结束处标准答案:A知识点解析:在C语言中,凡是以“#”号开头的行,都称为编译预处理命令行。这些预处理命令组成的预处理命令行必须在一行的开头以“#”号开始,每行的末尾不能用“;”号结束。以区别于C语句、定义和说明语句。根据需要,命令行可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾。30、以下叙述中正确的是()。A、全局变量的存储类别可以是静态类B、对于变量而言,"定义"和"说明"这两个词实际上是同一个意思C、在复合语句中不能定义变量D、函数的形式参数不属于局部变量标准答案:A知识点解析:全局变量可以用static修饰,限制该变量只能在当前文件有效而不能被其他文件访问,选项A)正确;变量的说明只是向编译程序描述变量类型,但不为该变量分配存储空间,变量的定义才为该变量分配存储空间,选项B)错误;在语句块内可以定义变量,定义的变量为局部变量,选项C)错误;函数的形参相当于在函数内部定义的一个变量,属于局部变量,选项D)错误;答案选A)。31、若有定义语句:doublex,y,*px,*py;执行px=&x;py=&y;正确的输入语句是()。A、scanf("%lf%le",px,py);B、scanf("%f%f"&x,&y);C、scanf("%f%f",x,y);D、scanf("%lf%lf",x,y);标准答案:A知识点解析:scanf函数的一般形式为scanf("格式控制字符串",输入项1,输入项2,…),其中,输入项由地址运算符"&"后跟变量名组成,取地址运算符"&"不可以省除非输入项为一指针,本身代表一个地址。另,若要输入双精度浮点数,"格式控制字符串"部分应为为"%lf",所以答案选A。32、有以下程序#includevoidfun(char*c,intd){*c=*c+1;d=d+1;printf("%c,%c,",*c,d);}main(){charb=’a’,a=’A’;fun(&b,a);printf("%c,%c\n",b,a);}程序运行后的输出结果是()。A、b,B,b,AB、b,B,B,AC、a,B,B,aD、a,B,a,B标准答案:A知识点解析:计算字符常量时一般使用其ASCII码进行运算。’a’+1=’b’,fun()中的第一个参数为地址传参,形参的变化会影响实参的变化,所以两次输出的b值都为字符’b’;第二个参数为值传参,形参变化不会影响实参,所以在函数fun()体内输出字符’B’,函数fun()体外输出结果为字符’A’,所以答案选A。33、一个栈的初始状态为空。现将元素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。34、有以下程序#includemain(){FILE*f:f=fopen("filea.txt","w");fprintf(f,"abc");fclose(f);}若文本文件filea.txt中原有内容为:hello,则运行以上程序后,文件filea.txt中的内容为A、abcloB、abcC、helloabcD、abchello标准答案:B知识点解析:本题考查文件打开方式。格式:文件指针名=fopen(文件名,使用文件方式)需要注意的是:用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。35、有以下函数intfun(char*s){char*t=s;while(*t++);return(t-s);}该函数的功能是A、比较两个字符串的大小B、计算s所指字符串的长度C、计算s所指字符串占用内存字节的个数D、将s所指字符串复制到字符串t中标准答案:C知识点解析:在函数fun(char*s)中,首先用字符指针变量t指向s,而循环语句while(*t++);的功能是使指针变量t指向字符串变量s的末尾,这时退出循环,因而语句return(t-s);返回的就是字符串s所指字符串的长度。36、若有以下程序段charstr[4][12]={"aa","bbb","ccccc","d"},*strp[4];inti;for(i=0;i<4;i++)strp[i]=str[i];不能正确引用字符串的选项是()。A、strpB、str[0]C、strp[3]D、*strp标准答案:A知识点解析:指针strp为一个指针数组,str为一个二维数组名。语句"strp[i]=str[i];"将str数组中第i+1个字符串的首地址赋值给strp[i],所以str[i]与strp[i]、*(strp+i)、*(str+i)等价,选项B)、C)、D)正确,而strp为指针数组所占内存的首地址,不能引用字符串,所以答案选A)。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、6385B、9824C、4528D、6938标准答案:A知识点解析:第一个for循环将数组中每个字符串的首地址赋值给了指针数组p的元素,所以p[i][j]与c[i][j]等价。第二个嵌套for循环中外层循环i从0到1,内层循环j为偶数且从0递增,语句"s=10*s+p[i][j]-?0?;"用一个整数s记录数组c中列下标为偶数的所有数字,并按照其先后顺序放置于整数s的不同位上,所以计算得到的结果为6385,答案选A。38、设有定义:intx=0,*p;紧接着的赋值语句正确的是A、*p=NULL;B、p=NULL;C、p=x;D、*p=x;标准答案:A知识点解析:定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址。39、若有以下程序typedefstructstu{charname[10],gender;intscore;}STU;voidf(char*p){strcpy(p,"Qian");}main(){STUa={"Zhao",’m’,290},b;b=a;f();b.gender=’f’;b.score=350;printf("%s,%c,%d,",,a.gender,a.score);printf("%s,%c,%d\n",,b.gender,b.score);}则程序的输出结果是A、Zhao,m,290,Zhao,m,290B、Qian,f,350,Qian,f,350C、Zhao,m,290,Qian,f,350D、Zhao,m,290,Zhao,f,350标准答案:C知识点解析:主函数中结构体变量定义同时赋初值。执行b=a;语句后,b的数据和a的数据相同,调用函数f(),形参指针p接收实参的地址,此时p和指向同一个存储空间,流程转到f执行,p指向的存储空间存放字符串"Qian",流程结束返回主函数。主函数中变量b的其他成员存放数据。因此a的数据{"Zhao",’m’,290},b的数据为{"Qian",’f’,350}。注意本题结构体STU类型变量a和b中的name成员为数组,不是指针,它具有自己的存储空间。40、以下叙述中正确的是A、在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B、在使用scanf函数输入整数或实数时,输入数据之间只能用空格来分隔C、在printf函数中,各个输出项只能是变量D、使用printf函数无法输出百分号%标准答案:A知识点解析:scanf函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,所以A正确。scanf()的格式控制串可以使用其他非空白字符,如逗号,但在输入时必须输入这些字符,以保证匹配就可以,所以B错误。Printf函数可以输出常量也可以输出变量,所以C错误。Prinf函数可以用"\%"来输出百分号%,所以D错误。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、以上都不正确标准答案:B知识点解析:线性表的存储分为顺序存储和链式存储。在顺序存储中,所有元素所占的存储空间是连续的。而在链式存储的方式中,将存储空间的每一个存储结点分为两部分,一部分用于存储数据元素的值,称为数据域;另一部分用于存储下一个元素的存储序号,称为指针域。所以线性表的链式存储方式比顺序存储方式的存储空间要大一些。2、若变量已正确定义为int型,要通过语句scanf("%d,%d,%d",&a,&b,&c);给a赋值1、给b赋值2、给c赋值3,以下输入形式中错误的是(注:□代表一个空格符)A、□□□1,2,3B、1,□□□2,□□□3C、1,2,3D、1□2□3标准答案:D知识点解析:本题t要考查scanf函数的输入格式问题。scanf函数的一般形式为:scanfi(格式控制字符串,地址1。地址2,…);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:①格式说明符由“%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以“%”字符为标志。②普通字符,是需要用户在输入时原样输入的字符。在本题中格式控制字符串为“%d,%d,%d”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符。3、若变量已正确定义为int型,要通过语句scanf("%d,%d,%dtt,&a,&b,&c);给a赋值1、给b赋值2、给C赋值3,以下输入形式中错误的是(注:口代表一个空格符)A、□□□1,2,3B、1,□□□2,□□□3C、1,2,3D、1□2□3标准答案:D知识点解析:本题主要考查scanf函数的输入格式问题。scanf函数的一般形式为:scanf(格式控制字符串,地址1,地址2,…);格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:①格式说明符由“%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以“%”字符为标志。②普通字符,是需要用户在输入时原样输入的字符。在本题中格式控制字符串为“%d,%d,%d”,表示按十进制输入三个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符。4、若以下选项中的变量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){casel:case3.4y=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常量表达式l:语句1:break;case常量表达式2:语句2:break;case常量表达式n:语句n:break;default:语句n+1:break;}switch语句的执行流程是:首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句:若圆括号中表达式的值与所有ease后面的常量表达式都不等,则执行default后面的语句n+1,然后退出switch语句。对于选项B),case语句和常量之间没有空格,而选项C)中的case后面为变量,选项D)中switch后面没给出圆括号。5、有以下函数:intfun(char*s){char*t=s:while(*t++);return(t-s);}该函数的功能是()。A、计算s所指字符串的长度B、比较两个字符串的大小C、计算s所指字符串占用内存字节的个数D、将s所指字符串复制到字符串t中标准答案:C知识点解析:首先char*s接受一个字符型数组的首地址,并将这个首地址赋给另一个字符型指针char*t,while(*t++)不断循环直到*t为’\0’,循环结束,此时指针t指向结束标记’\0’后,所以return(t-s)返回的是字符串s所占的字节数。6、下列各项中不属于软件设计阶段任务的是()。A、制订软件确认测试计划B、数据库设计C、软件总体设计D、算法设计标准答案:A知识点解析:软件设计阶段的主要任务包括两个:一是进行软件系统的可行性分析,确定软件系统的建设是否值得,能否建成;二是进行软件的系统分析,了解用户的需求,定义应用功能,详细估算开发成本和开发周期。7、软件生存周期中,解决软件“做什么”的阶段是A、需求分析B、软件设计C、软件实现D、可行性研究标准答案:A知识点解析:暂无解析8、有以下程序#include<stdio.h>main(){inta[]={10,20,30,40},*p=a,i;for(i=0;i<=3;i++){a[i]=*p;p++;)printf(’’%d\n’’,a[2]);}程序运行后的输出结果是A、20B、30C、10D、40标准答案:B知识点解析:因为指针变量p的初始值指向数组a,所以执行for循环语句后,数组a中的元素的值不变。9、对软件系统总体结构图,下面描述中错误的是A、深度等于控制的层数B、扇入是一个模块直接调用的其他模块数C、扇出是一个模块直接调用的其他模块数D、V一定是结构图中位于叶子结点的模块标准答案:B知识点解析:在软件工程中,模块的扇入是指有多少个上级模块调用它;模块的扇出是指该模块直接调用的下级模块的个数。10、以下叙述中正确的是A、下面的语句用赋初值方式来定义字符串,其中,’\0’是必须的charstrl[]={’s’,’t’,’r’,’1’,’\0’);B、有定义语句:charstr1[]=’’str1’’,数组str1将包含4个元素C、字符串常量’’str1’’的类型是:字符串数据类型D、字符数组的每个元素可存放~个字符,并且最后一个元素必须是’\0’字符标准答案:B知识点解析:选项B中除了字符串中实际字符之外,还要存储字符串结束标志,应为5个元素。在C语言中没有字符串数据类型,因此选项C不正确,选项D字符数组不一定必须存放字符串,因此没有规定最后一个元素为字符串结束标志。11、表达式3.6-5/2+1.2+5%2的值是A、4.18B、3.3C、3.8D、4.3标准答案:C知识点解析:表达式的计算过程为:3.6-5/2+1.2+5%2=3.6-2+1.2+1=3.8。此题要注意5/2的结果是2,而不2.5,因为除法运算符两边的数值类型均为整型,故运算结果的数值类型也被认定为整型。12、以下关于逻辑运算符两侧运算对象的叙述中正确的是A、只能是整数0或非0整数B、可以是结构体类型的数据C、可以是任意合法的表达式D、只能是整数0或1标准答案:C知识点解析:逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。13、若有以下程序#includemain(){inta=-2,b=0;while(a++)++b;printf("%d,%d\n",a,b);}则程序的输出结果是()。A、1,2B、0,2C、1,3D、2,3标准答案:A知识点解析:自增自减运算符后置时(a++),a是先参与运算后再自增1。while循环结束条件是表达式"a++"为0,此时a=0,从-2到0,b一共自增了2次,所以b=2。表达式"a++"计算完毕后a=1,所以答案选A。14、有以下程序#includemain(){FILE*fp;charstr[10];fp=fopen("myfile.dat","w");fputs("abc",fp);fclose(fp);fp=fopen("myfile.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的后面,最后把文件myfile.dat的内容读入到字符串str中,并把其内容输出。15、流程图是描述算法的很好的工具,一般的流程图中由几种基本图形组成。其中判断框的图形是()。A、菱形B、长方形C、平行四边形D、椭圆型标准答案:A知识点解析:绘制流程图中,习惯用圆角矩形表示"开始"与"结束";用矩形表示行动方案、普通工作环节;用菱形表示问题判断或判定(审核/审批/评审)环节;用平行四边形表示输入输出;箭头代表工作流方向。答案选A。16、有以下程序#includemain(){inti,j,m=55;for(i=1;i<=3;i++)for(j=3;j<=i;j++)m=m%j;printf("%d\n",m);}程序的运行结果是A、0B、1C、2D、3标准答案:B知识点解析:在程序中,内层循环判断条件为“i<=i”,而j的初值为3,故当外层循环变量i的值为1和2时,内层循环体都不会被执行。只有当i和j都等于3时循环才会执行一次。因为m的值为55对3求余结果为1。17、以下定义数组的语句中错误的是A、intnum[][3]:{{1,2},3,4,5,6};B、intnum[]={1,2,3,4,5,6};C、intnum[][4]={1,2,3,4,5,6};D、intnum[2][4]={{1,2},{3,4},{5,6}};标准答案:D知识点解析:在选项D)的数组定义中,赋值号左边定义了一个2行4列的二维数组,而在右边定义了一个3行2列的二维数组。18、若有以下程序#include<stdio.h>int*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,j9*p,*q,*r);}则程序的输出结果是A、3,5,5,3,5B、5,3,5,3,5C、5,3,3,5,5D、3,5,3,5,5标准答案:D知识点解析:本题考查了返回值为指针的函数,函数f的主要功能为第一个参数小于第二个参数,那么交换指针的指向,这对于实参指向的数据时没有影响的。最后返回比较大的元素的地址。主函数中p指向i,q指向j,调用r=f(p,q)。返回q的地址,因此*p=3,*q=5,*r=5。19、有以下程序,程序运行后的输出结果是#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。20、有以下程序#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、23B、26C、43D、46标准答案:A知识点解析:定义二维数组的语句为"intaa[3][3]={{2},{4},{6}}"表明aa[0][0]=2,aa[1][0]=4,aa[2][0]=6,指针p指向二维数组aa的第一个元素。第一次循环,i值为0,则计算aa[0][1]的值为*p+1=aa[0][0]+1=3,输出*p的值为2;第二次循环,p指针移动,指向aa[0][1],输出结果为3。答案选A。21、若有函数声明voidfun(floatarray[],int*ptr);以下叙述正确的是()。A、函数参数array,ptr都是指针变量B、函数参数array不是指针变量,ptr是指针变量C、调用函数时,实参数组的值将一一复制给array数组D、调用函数时,array是按值传送,ptr是按地址传送标准答案:A知识点解析:数组名表示该数组的首地址,是一个地址常量,作为函数参数时传递的是数组的首地址,属于地址传参,所以答案选A。22、有下列程序:#include<stdio.h>voidfun(int*a,intn)/*fun函数的功能是将a所指数组元素从大到小排序*/{intt,i,j;for(i=0;i<n-1;j++)for(j=i+1;j<n;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intc[10]={1,2,3,4,5,6,7,8,9,0},i;fun(c+4,6);for(i=0;i<10;i++)printf("%d,",c[i]);printf("\n");}程序的运行结果是A、1,2,3,4,9,8,7,6,5,0,B、0,9,8,7,6,5,1,2,3,4,C、0,9,8,7,6,5,4,3,2,1,D、1,2,3,4,5,6,7,8,9,0,标准答案:A知识点解析:fun()函数的功能是对数组a[]的元素从大到小进行排序。所以在主函数执行fun(c+4,6)语句时,将从数组c的第5个元素开始的后6个元素进行从大到小排序。排序之后,数组c的内容变为{1,2,3,4,9,8,7,6,5,0}。23、一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是A、一对一B、一对多C、多对多D、多对一标准答案:C知识点解析:因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。24、下面关于"EOF"的叙述,正确的是A、EOF的值等于0B、EOF是在库函数文件中定义的符号常量C、文本文件和二进制文件都可以用EOF作为文件结束标志D、对于文本文件,fgetc函数读入最后一个字符时,返回值是EOF标准答案:B知识点解析:在C语言中,或更精确地说成C标准函数库中表示文件结束符(endoffile)。在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放。我们知道,ASCII代码值的范围是0~255,不可能出现-1,因此可以用EOF作为文件结束标志。25、有以下程序#includemain(){intsum,pad,pAd;sum=pad=5;pAd=++sum,pAd++,++pad;printf("%d\n",pad);}程序的输出结果是A、5B、6C、7D、8标准答案:B知识点解析:C语言区分大小写,pad与pAd是两个不同的变量。首先将5赋值给两个变量,由于赋值运算符的优先级高于逗号运算符,所以计算pAd=++sum,此时pAd为6,sum也为6,然后计算pAd++,pAd的值变为7,++pad,pad的值变为6,所以选择B。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共40题,每题1.0分,共40分。)1、算法的空间复杂度是指A、算法在执行过程中所需要的计算机存储空间B、算法所处理的数据量C、算法程序中的语句或指令条数D、算法在执行过程中所需要的临时工作单元数标准答案:A知识点解析:算法的空间复杂度是指执行这个算法所需要的内存空间。这个内存空间包括算法程序所占的空间,输入的初始数据所占的仃储空间以及算法执行过程中所需要的额外空间。2、有以下程序:#include<stdio.h>main(){inti=0,a=0;while(i<20){for(;;){if((i%5)==0)break;elsei--;}i+=13,a+=i;}printf(’’%d\n’’,a);}程序的输出结果是()。A、62B、63C、23D、36标准答案:D知识点解析:本题考查while循环。当i<20时,进入while循环体,循环体内的for循环实现的功能是,当i值是0或5的倍数时,执行“i+=13;a+-i;”这两条语句;若i值不是5的倍数则一直执行for循环。①当i=0时,执行“i+=13;a+=i;i=13,a=13”;②判断“i=13<20”,进入while循环体,i=10时,跳出for循环,执行“i+=13;a+i;i=23,a=36”;③判断“i=23>20”,循环结束。3、下列叙述中正确的是A、栈是“先进先出”的线性表B、队列是“先进后出”的线性表C、循环队列是非线性结构D、有序线性表既可以采用顺序存储结构,也可以采用链式存储结构标准答案:D知识点解析:本题主要考查了栈、队列、循环队列的概念,栈是先进后出的线性表,队列是先进先出的线性表。根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。有序线性表既可以采用顺序存储结构,又可以采用链式存储结构。4、下列叙述中正确的是()。A、算法的效率只与问题的规模有关,而与数据的存储结构无关B、算法的时间复杂度是指执行算法所需要的计算工作量C、数据的逻辑结构与存储结构是一一对应的D、算法的时间复杂度与空间复杂度一定相关标准答案:B知识点解析:算法的时间复杂度是指执行算法所需要的计算工作量,与数据的存储结构有关,与算法的空间复杂度没有关系。数据的逻辑结构与存储位置无关,即与存储结构无关,所以选择B。5、以下选项中不能用作C程序合法常量的是A、’\123’B、1.234C、123D、\x7D标准答案:B知识点解析:选项B中的1,234在两侧加双引号才是C程序的合法字符串常量。6、下列链表中,其逻辑结构属于非线性结构的是A、二叉链表B、循环链表C、双向链表D、带链的栈标准答案:A知识点解析:二叉链表作为树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。7、下列叙述中正确的是A、有一个以上根结点的数据结构不一定是非线性结构B、只有一个根结点的数据结构不一定是线性结构C、循环链表是非线性结构D、双向链表是非线性结构标准答案:B知识点解析:在数据结构中,树这类的的数据结构只有一个根结点,但它不是线性结构。8、下面对对象概念描述正确的是()。A、对象间的通信靠消息传递B、对象是名字和方法的封装体C、任何对象必须有继承性D、对象的多态性是指一个对象有多个操作标准答案:A知识点解析:对象是面向对象方法中最基本的概念。操作描述了对象执行的功能,通过消息传递,还可以为其他对象使用。操作过程是被封装在对象中,用户看不到,称之为对象的封装性。对象的多态性是指同一个操作可以是不同对象的行为。不是所有的对象都必须有继承性。9、下面不属于软件测试实施步骤的是()。A、集成测试B、回归测试C、确认测试D、单元测试标准答案:B知识点解析:软件测试实施的步骤有单元测试、集成测试和确认测试。10、两个或两个以上的模块之间关联的紧密程度称为()。A、耦合度B、内聚度C、复杂度D、连接度标准答案:A知识点解析:耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素间彼此结合的紧密程度的度量。11、有以下程序#includevoidmain(){intn=2,k=-1;while(!(k>0‖n++));printf("%d%d\n",k,n);}程序运行后的输出结果是()。A、02B、13C、57D、12标准答案:D知识点解析:在程序中整型变量n的初始值等于2,整型变量k的初始值等于1,在执行while语句时,由于表达式k的值大于0为真,所以不再需要判断“n++”是否为真,“(k>0∥n++)”表达式的值为真。“!(k>0∥n++)”表达式的值为假,所以while语句中的条件不满足,循环语句不会执行,变量n的值也不会加1,所在输出变量k和n的值是1和2。12、有以下程序#includemain(){intx;scanf("%d",&x);if(x<=3);elseif(x!=10)printf("%dkn"x);}程序运行时,输入的值在哪个范围才会有输出结果A、不等于10的整数B、大于3或等于10的整数C、小于3的整数D、大于3且不等10的整数标准答案:D知识点解析:题目中,虽然else和第二个if不在同一行上,但等价于在同一行上,因此,程序的意思是当x大于3且不等于10时打印出来。13、若有定义语句:doublex,y,*px,*PY;执行px=&x;py=&y;正确的输入语句是A、scanf(’’%f%f’&x,&y);B、scanf(’’%f%f’,x,y);C、scanf(’’%1f%1e’’,px,py);D、scanf(’’%1f%1f’’,x,y);标准答案:C知识点解析:本题考查scanf语句。scanf()函数的一般格式为:scanf(“格式字符串”,输入项首地址表),对于double类型数据,输入时候要加上l修饰,否则会产生错误的输入信息,同时输入项必须是地址,可以使保存变量地址的指针变量。14、设文件指针fp已定义,执行语句fp=fopen(″file″,″w″);后,以下针对文本文件file操作叙述的选项中正确的是()。A、只能写不能读B、写操作结束后可以从头开始读C、可以在原有内容后追加写D、可以随意读和写标准答案:A知识点解析:文件打开方式为“w”表示只写不读,选项A正确。15、数据字典(DD)所定义的对象都包含于()。A、软件结构图B、方框图C、数据流图(DFD图)D、程序流程图标准答案:C知识点解析:数据字典(DD)是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各元素做出详细的说明。16、以下叙述中正确的是A、continue语句的作用是:使程序的执行流程跳出包含它的所有循环B、break语句只能用在循环体内和switch语句体内C、在循环体内使用break语句和continue语句的作用相同D、break语句只能用于switch语句体中标准答案:B知识点解析:只能在循环体内和switch语句体内使用break语句。continue语句的作用是结束本次循环,即跳过本次循环体中continue语句后面的语句,立刻进行下一次的循环条件判断,可以理解为仅结束本次循环。而break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体。17、设有定义“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选项中,字符指针没有被赋值,是个不确定的值,指向一个不确定的内存区域,这个区域可能存放有用的指令或数据。在这个不确定的区域重新存放字符串,可能会发生无法预知的错误。18、有以下程序:#include<stdio.h>struetS{intn;inta[20];};voidf(streetS*p){inti,j,t;for(i=0;i<p->n-1;i++)for(j=i+1;j<p->n;j++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}}main(){inti:structSs={10,{2,3,1,6,8,7,5,4,10,9}};f(&s);flor(i=0;i<s.n;i++)printf("%d,",s.a[i]);}程序的运行结果是()。A、2,3,1,6,8,7,5,4,lO,9,B、10,9,8,7,6,5,4,3,2,1,C、1,2,3,4,5,6,7,8,9,10,D、10,9,8,7,6,1,2,3,4,5,标准答案:C知识点解析:本题中子函数f的功能是对结构体变量s中第二个成员数组中的所有数据进行从小到大的冒泡排序,所以结果是C选项。19、当变量c的值不为2、4、6时,值为"真"的表达式是()。A、(c>=2&&c<=6)||(c!=3)||(c!=5)B、(c==2)||(c==4)||(c==6)C、(c>=2&&c<=6)&&!(c%2)D、(c>=2&&c<=6)&&(c%2!=1)标准答案:A知识点解析:逻辑或运算符的两个运算对象中,只要有一个值为真,整个逻辑表达式的值就为真;逻辑与运算符的两个运算对象的值均为真,整个逻辑表达式的值才为真。选项A)中,只要c的值不为3或者不为5或者在2和6之间,这个表达式就为真,所以答案选A)。20、有以下程序main(){chara[5][10]={"one","two","three","four","five");inti,j;Chart;for(i=0;i<4;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、fwoB、owoC、twoD、fix标准答案:A知识点解析:这个程序的执行过程是当i=0时,j=1,a[0][0]=0a[3][0]=f;置换a[2][0]=f,a[3][0]=t;此时,a[2][0]=Ca[1][0]=t,再置换a[2][0]=t,a[1][0]=f,;当i=3时,j=4,a[3][0]=f=a43][0]=f;不置换;所以a[1]的结果为fwo。21、若有定义语句:doublex,y,*px,*py;执行px=&x;py=&y;正确的输入语句是A、scanf("%f%f"&x,&y);B、scanf("%f%f",x,y);C、scanf("%1f%1e",px,py);D、scanf("%1f%1f",x,y);标准答案:C知识点解析:本题考查scanf语句。scalaf()函数的一般格式为:scanf("格式字符串",输入项首地址表),对于double类型数据,输入时候要加上1修饰,否则会产生错误的输入信息,同时输入项必须是地址,可以使保存变量地址的指针变量。22、以下选项中,当x为大于1的奇数时,值为0的表达式是A、x/2B、x%2!=0C、x%2=0D、x%2==1标准答案:C知识点解析:由于x为大于1的奇数,因此x%2取余的值为1,和0不相等。23、以下选项中合法的标识符是A、1-1B、1_1C、_11D、1__标准答案:C知识点解析:本题考查标识符定义。合法标识符的要求是由下划线、英文大小写字母和数字组成的字符串,且第一个字符必须是字母或下划线。24、有以下程序#includemain(){intk,j,s;for(k=2;k<6;k++,k++){s=1;for(j=k;j<6;j++)s+=j;}printf("%d\n",s);}程序运行后的输出结果是()。A、10B、6C、24D、40标准答案:A知识点解析:嵌套循环,外层循环k从2循环到5,每次自增2,。内层循环j从k到5,每次自增1,s为在s的基础上累加当前内层循环所有的j值。程序输出的是最后一次外层循环时s的统计值,即k=4时,j的取值为4、5,所以s=10,答案选A。25、若有以下程序#include<stdio.h>main(){inta=-11,b=10;a/=b/=-4;printf("%d%d\n",a,b);}则输出结果是A、-1-2B、5-2C、4-3D、5-3标准答案:B知识点解析:对于语句“a/=b/=-4;”相当于“a=a/Co=b/-4.);”a初值为-11,b的初值为10,则运算以后10/-4值为-2,-11/-2值为5。26、有以下程序structs{intn;inta[20];};voidf(structs*p){inti,j,t;for(i=0;in-1;i++)for(j=i+1;jn;j++)if(p->a[i]>p->a[j]){t=p->a[i];p->a[i]=p->a[j];p->a[j]=t;}}main(){inti;structSs={10,{2,3,1,6,8,7,5,4,10,9}};f(&s);for(i=0;iA、10,9,8,7,6,5,4,3,2,1,B、2,3,1,6,8,7,5,4,10,9,C、10,9,8,7,6,1,2,3,4,5,D、1,2,3,4,5,6,7,8,9,10,标准答案:D知识点解析:voidf(structS*p)函数的功能使用了结构体指针变量实现对一维数组的元素从小到人排序。用关系表达式p->a[i]>p->a[j]实现一维数组中相邻元素两两比较,大的元素向后移,小的元素向前移。在主函数中语句f(&s);的功能实现对结构体变量s中一维数组的元素从小到大的排序,所以循环语句的输出结果为1,2,3,4,5,6,7,8,9,10。27、有以下程序#includevoidfun(int*a,int*b){int*c;c=a;a=b;b=c;}main(){intx=3,y=5,*p=&x,*q=&y;fun(p,q);printf("%d,%d,",*p,*q);fun(&x,&y);printf("%d,%d\n",*p,*q);}程序运行后的输出结果是A、3,5,3,5B、3,5,5,3C、5,3,3,5D、5,3,5,3标准答案:A知识点解析:fun函数的功能是交换形式参数的值,即交换指针变量a和b的值,但是fun函数并不能够交换实参的值,因此fun(p,q)不能交换p和q的值,所以第一个printf语句的输出为3,5。第二个fun函数对x和y的地址进行了操作,同样不能交换x和y的值,并不能影响p和q指针指向的数据,因此第二个printf语句的输出也是3,5。因此A选项正确。28、在以下给出的表达式中,与while(E)中的(E)不等价的表达式是A、(E>0‖E<0)B、(!E==0)C、(E!=0)D、(E==0)标准答案:A知识点解析:在while(E)中,表达式E可以是C语言中任意合法的条件表达式,但不能为空,由它来控制循环体是否执行。在选项A)中表达式E>0‖E<0是一个逻辑表达式。29、有以下程序#include#defineN3voidfun(inta[][N],intb[]){inti,j;for(i=0;iA、3,6,9,B、1,3,5,C、2,4,8,D、3,5,7标准答案:A知识点解析:考查数组名作为函数参数。数组名作为函数参数属于地址传参,形参和实参为同一数组,变化同步。函数fun()中,用两层循环寻找a中每一行数据的最大值,并将其赋值给b,函数调用结束后,数组y[N]中存储的就是x[N]中每一行的最大值,分别是:3、6、9,答案选A。30、以下选项中不属于C语言程序运算符的是A、sizeofB、<>C、()D、&&标准答案:B知识点解析:C语言中的不等于符号用"!="表示,没有符号"<>",所以选择B。31、有以下程序fun(intx)main(){intp;{if(x==0‖x==1)return(3);printf("%d\n",fun(7));p=x-fun(x-2);}returnp;}执行后的输出结果是A、3B、7C、0D、2标准答案:D知识点解析:因为在函数fun(intx)中,如果参数x等于0或等于1时,返回值为“3”。否则“p=x-fun(x-2)”这是一个递归函数,所以在主函数调用fun(7)的时候,其过程为:“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3.3))=7.5=2”,所以最后的输出结果为2。32、有以下程序段int*p;p=_______malloc(sizeof(int));若要求使P指向一个int型的动态存储单元,在横线处应填入的是A、(int*)B、intC、int*D、(*int)标准答案:A知识点解析:ANSIC标准规定malloc函数返回值的类型为void*。使用形式为:malloc(size),其中size的类型为unsignedint。malloc函数用来分配size个字节的存储区,返回一个指向存储区首地址的基类型为void的地址。若没有足够的内存单元供分配,函数返回空(NULL)。可以通过强制类型转换将返回值转换为需要类型的地址。33、有下列程序:main(){inti,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2)s+=*(t+i);printf("%d\n",s);}程序执行后的输出结果是A、20B、45C、36D、25标准答案:D知识点解析:本题在主函数中定义了一维整型数组t[]={1,2,3’4,5,6,7,8,9};然后在for循环语句中自变量i从0开始,每次自加2,执行s+=*(t+i)语句,因为C语言规定数组名代表数组的首地址,也就是第一个元素的地址。因此*(t+i)代表数组的第i+1个元素。所以程序运行的结果是1+3+5+7+9_25,即变量s的值等于25。34、执行以下程序后,test.txt文件的内容是(若文件能正常打开)#includemain(){FILE*fb;char*s1="Fortran",*s2="Basic";if((fb=fopen("test.txt","wb"))==NULL){printf("Can’topentest.txtfile\n");exit(1);}fwrite(s1,7,1,fb);/*把从地址s1开始的7个字符写到fb所指文件中*/fseek(fb,OL,SEEK_SET);/*文件位置指针移到文件开头*/fwrite(s2,5,1,fb));fclose(fb);}A、BasicanB、BasicFortranC、BasicD、FortranBasic标准答案:A知识点解析:本题主要考查文件的基本操作。在main函数中,首先打开text.txt文件,然后通过fwrite函数把s1字符串写到文件中,接下来通过fseek函数把文件指针移动到文件开始,再调用fwrite函数把s2字符窜写到文件中,s2的长度小于s1的长度,因此第二次写的时候会覆盖第一次写的部分内容,程序运行后test.text中内容为Basican。35、若变量已正确定义for(x=0,y=0;(y!=99&&x<4);x++)则以上for循环A、执行3次B、执行4次C、执行无限次D、执行次数不定标准答案:B知识点解析:本题重点考察for语句的循环次数,for(x=0,y=0;(y!=99&&x<4);x++),y!=99&&x<4即循环条件当y不等于99以及x<4时,执行循环语句,当有一个条件不成立时,均结束循环,因此循环4次,B选项正确。36、有以下程序#include#defineSQR(X)X*Xmain(){inta=10,k=2,m=1;a/=SQR(k+m)/SQR(k+m);printf("%d\n",a);}程序的输出结果是A、0B、1C、9D、10标准答案:B知识点解析:本题考查宏定义,宏定义只是做个简单的替换,执行SQR(k+m)/SQR(k+m)=k+m*k+m/k+m*k+m=15/2,a/=SQR(k+m)/SQR(k+m)的结果为1,选项B正确。37、软件需求规格说明书的作用不包括A、软件验收的依据B、用户与开发人员对软件要做什么的共同理解C、软件设计的依据D、软件可行性研究的依据标准答案:D知识点解析:软件需求规格说明书是需求分析阶段的最后成果,是软件开发的重要文档之一。软件需求规格说明书有以下几个方面的作用。①便于用户、开发人员进行理解和交流,B正确;②反映出用户问题的结构,可以作为软件开发工作的基础和依据,C正确;③作为确认测试和验收的依据,A正确。38、有如下程序#includestructperson{charname[10];intage;}main(){structpersonroom[4]={{"Zhang",19},{"Li",20},{"Wang",17},{"Zhao",18}};printf("%s:%d\n",(room+2)->name,room->age);}程序运行后的输出结果是()。A、Wang:19B、Wang:17C、Li:20D、Li:19标准答案:A知识点解析:结构体为用户自定义的一种构造类型,其用法和C语言基本数据类型一致,所以(room+2)->name与room[2].name等价,room->age与room[0].age等价,输出结果为选项A)。39、一间宿舍可住多个学生,则实体宿舍和学生之间的联系是()。A、一对一B、一对多C、多对一D、多对多标准答案:B知识点解析:因为一间宿舍可以住多个学生即多个学生住在一个宿舍中,但一个学生只能住一间宿舍,所以实体宿舍和学生之间是一对多的关系。40、有以下程序:#includemain(){intx[3][2]={0},i;for(i=0;i<3;i++)scanf("%d",x[i]);printf("%3d%3d%3d\n",x[0][0],x[0][1],x[1][0]);}若运行时输入:246<回车>,则输出结果为()。A、204B、200C、240D、246标准答案:A知识点解析:本题中输入的3个数据2,4,6分别赋值给了x[0][0],x[1][0],x[2][0]。x[0][

温馨提示

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

评论

0/150

提交评论