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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷39(共9套)(共240题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共25题,每题1.0分,共25分。)1、计算机能直接执行的程序是A、目标程序B、可执行程序C、汇编程序D、源程序标准答案:B知识点解析:把由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”(后缀名为.obj),由汇编语言编写的程序称为“汇编程序”。为了把源程序转换成机器能接受的目标程序,软件工作者编制了一系列软件,通过这些软件可以把用户按规定语法写出的语句一一翻译成二进制的机器指令。这种具有翻译功能的软件称为“编译程序”,每种高级语言都有与它对应的编译程序。C源程序经过C编译程序编译之后生成一个后缀为.obj的二制进文件(称为目标文件),这个目标程序要和C语言的库函数相链接生成一个后缀为.exe的文件,这个文件可以在操作系统中直接执行,称为可执行程序。2、下列叙述中正确的是()。A、一个算法的空间复杂度大,则其时间复杂度也必定大B、一个算法的空间复杂度大,则其时间复杂度必定小C、一个算法的时间复杂度大,则其空间复杂度必定小D、算法的时间复杂度与空间复杂度没有直接关系标准答案:D知识点解析:算法的复杂度主要包括时间复杂度和空间复杂度。算法的时间复杂度是指执行算法所需要的计算工作量,算法的工作量用算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数,即算法的工作量=f(n),其中n是问题的规模;算法的空间复杂度,一般是指执行这个算法所需要的内存空间。一个算法所占用的存储空间包括算法程序所占用的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。根据各自的定义可知。算法的时间复杂度与空间复杂度并不相关。3、下列各组的排序方法中,最坏情况下比较次数相同的是A、冒泡排序与快速排序B、简单插入排序与希尔排序C、堆排序与希尔排序D、快速排序与希尔排序标准答案:A知识点解析:最坏情况下冒泡排序需要比较n(n-1)/2次,即序列逆序的情况。简单插入排序,无论是否最坏情况,都需要n(n-1)/2次。直接插入排序,最坏情况需要比较次n(n-1)/2次。堆排序,无论是否最坏都要比较O(nlog2n)次。快速排序,最坏情况退化为冒泡排序,需要比较n(n-1)/2次。在最坏情况下,希尔排序所需要的比较次数为O(n1.5)。4、下列叙述中正确的是A、栈是一种先进先出的线性表B、队列是一种后进先出的线性表C、栈与队列都是非线性结构D、栈与队列都是线性结构标准答案:D知识点解析:栈是先进后出,队列是先进先出。栈和队列都是一种线性表,属于线性结构。5、对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为A、9B、10C、45D、90标准答案:C知识点解析:线性表的长度为n,最坏情况下冒泡排序需要比较的次数为n(n-1)/2。6、在数据库管理技术的发展中,数据独立性最高的是()。A、人工管理B、文件系统C、数据库系统D、数据模型标准答案:C知识点解析:在人工管理阶段,数据无法共享,冗余度大,不独立,完全依赖程序;在文件系统阶段,数据共享性差;在数据库系统阶段,共享性好,独立性高。7、下列叙述中正确的是()。A、循环队列属于队列的链式存储结构B、双向链表是二叉树的链式存储结构C、非线性结构只能采用链式存储结构D、有的非线性结构也可以采用顺序存储结构标准答案:D知识点解析:循环队列属于队列的顺序存储结构,选项A)错误;二叉树的存储结构为二叉链表,选项B)错误;非线性结构也可以采用顺序存储结构,因此选项C)错误,选项D)正确,答案为D)。8、以下不合法的字符常量是A、’\"B、’\\’C、’\018’D、’Lxcc’标准答案:C知识点解析:在C语言中,一个字符常量代表ASCII字符集中的一个字符,在程序中用单引号把一个字符括起来用为字符常量。转义字符常量也是必须括在一对单引号内,以一个反斜线开头后跟一个特定的字符,用来代表某一个特定的ASCII字符。在选项C中,’\018’是用八进制数来代表,一个字符常量,所以其中的数字只能小于8,并不包括8。9、若有说明intx,y=2,*p=&x;,则能完成x=y赋值功能的语句是()。A、x=*p;B、x=&y;C、x=**p;D、*p=*&y;标准答案:D知识点解析:由于*p与x等价,*&y与y等价,选项A)表示的是x=x;选项B)、C)将地址赋给整型常量是错误的;只有选项D)可以实现赋值。10、以下叙述中正确的是A、对于逻辑表达式:a++&&b++,设a的值为0,则求解表达式的值后,b的值会发生改变B、对于逻辑表达式:a++‖b++,设a的值为1,则求解表达式的值后,b的值会发生改变C、关系运算符的结果有三利1:0,1,-1D、else不是一条独立的语句,它只是if语句的一部分标准答案:D知识点解析:else不能单独使用,和if匹配使用,要注意逻辑与运算和逻辑或运算出现的短路现象,关系运算结果仅有0和1。11、下面程序运行后的输出结果是()。#include<stdio.h>main(){inta[5]={1,0,4,2,0},b[5]={1,2,3,4,5},i,s=0;for(i=0;i<5;i++)s=s+b[a[i]];printf(’’%d\n’’,s);}A、12B、15C、11D、8标准答案:A知识点解析:这道题目是计算一维数组b中某些元素的和。这些元素的下标值是一维数组a中元素值。s=0+b[1]+b[0]+b[4]+b[2]+b[0]=2+1+5+3+1=12。12、以下叙述中正确的是()。A、char,c1,c2,*c3,c4[40];是合法的变量定义语句B、数组下标的下限由数组中第一个非零元素的位置决定C、数组下标的下限由数组中第一个被赋值元素的位置决定D、数组下标的下限是1标准答案:A知识点解析:A选项正确,charc1,c2,*c3,c4[40]表示定义了两个字符变量c1、c2,一个字符指针c3,一个字符数组c4。数组的下限永远为0,选项B、C、D错,答案选A。13、有以下程序#includemain(){intx=l,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}程序运行后的输出结果是A、a=1,b=1B、a=1,b=0C、a=2,b=1D、a=2,b=2标准答案:C知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入case1中进行嵌套判断,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。14、关于“while(条件表达式)循环体”,以下叙述正确的是A、循环体的执行次数总是比条件表达式的执行次数多一次B、条件表达式的执行次数与循环体的执行次数一样C、条件表达式的执行次数总是比循环体的执行次数多一次D、条件表达式的执行次数与循环体的执行次数无关标准答案:C知识点解析:while语句中表达式是循环条件,语句为循环体。while语句中当表达式计算的值为真(非0)时,执行循环体语句。因此条件表达式执行的次数总是比循环体多一次。15、下列叙述中正确的是A、在switch语句中必须使用defaultB、break语句必须与switch语句中的case配对使用C、在switch语句中,不一定使用break语句D、break语句只能用于switch语句标准答案:C知识点解析:break为C语言关键字,又称间断语句。break语句的功能是跳出正在执行的条件语句或循环语句。它可以出现在switch语句中,也可以出现在循环语句中。default是关键字,起标号的作用,代表所有case标号之外的那些标号。default标号可以出现在语句体中任何标号位置上。在switch语句体中也可以没有default标号。16、在黑盒测试方法中,设计测试用例的根据是A、数据结构B、程序调用规则C、模块间的逻辑关系D、软件要完成的功能标准答案:D知识点解析:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。17、若函数调用时的实参为变量,下列关于函数形参和实参的叙述中正确的是()。A、函数的形参和实参分别占用不同的存储单元B、形参只是形式上的存在,不占用具体存储单元C、同名的实参和形参占同一存储单元D、函数的实参和其对应的形参共占同一存储单元标准答案:A知识点解析:本题重点考查的是函数的形参和实参。在定义函数时,函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元,因此A选项正确。18、以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)A、printf("%c\n",’a’-32);B、printf("%d\n",’A’);C、printf("%c\n",65);D、printf("%c\n",’B’-1);标准答案:B知识点解析:在选项B)的输出函数中,大写字符’A’以整型数据的形式输出。19、下列叙述中正确的是A、数据库系统减少了数据冗余B、经规范化后的数据库系统避免了一切冗余C、数据库系统比文件系统能管理更多的数据D、数据库系统中数据的一致性是指数据类型一致标准答案:A知识点解析:数据库主要特点:实现数据共享、减少数据的冗余度、数据的独立性、数据实现集中控制、数据一致性和可维护性,以确保数据的安全性和可靠性和故障恢复。所谓数据一致性,就是当多个用户试图同时访问一个数据库,它们的事务同时使用相同的数据时,可能会发生以下四种情况:丢失更新、未确定的相关性、不一致的分析和幻想读。20、可在C程序中用作用户标识符的一组标识符是A、and_2007B、Datey-m-dC、HiDr.TomD、caseBig1标准答案:A知识点解析:本题考查用户标识符,C语言中,用户标识符只能由字母、下划线和数组组成,且必须以字母或者下划线开始。选项A)正确;选项B)中使用了字符“-”;选项C)使用了字符“.”;选项D)中的case是C语言关键字,不能作为用户标识符。21、以下选项中,当x为大于1的奇数时,值为0的表达式是A、x/2B、x%2!=0C、x%2==0D、x%2==1标准答案:C知识点解析:由于x为大于1的奇数,因此x%2取余的值为1,和0不相等。22、若有定义语句:intyear=2009,*p=&year;以下不能使变量year中的值增至2010的语句是A、(*p)++;B、*p++;C、++(*p);D、*p+=1;标准答案:B知识点解析:由于自加运算符++的运算级别高于间接运算*的运算级别,所以B选项的表达式*p++不能使变量year中的值增至2010。因此B选项正确。23、下面选项中的程序段,没有编译错误的是A、char*sp,s[10];sp="Hello";B、char*sp,s[10];s="Hello";C、charstr1[10]="computer",str2[10];str2=str1;D、charmark[];mark="PROGRAM";标准答案:A知识点解析:本题考查字符数组的初始化以及指向字符串的指针,B选项不能直接将字符串赋值给数组名,C选项不能将两个字符数组直接互相赋值,D选项中不能这样定义charmark[],必须指定长度或者直接初始化。24、以下叙述中错误的是A、gets函数用于从终端读入字符串B、getchar函数用于从磁盘文件读入字符C、fputs函数用于把字符串输出到文件D、fwrite函数用于以二进制形式输出数据到文件标准答案:B知识点解析:本题考查的是输入输出函数的使用,gets和getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入,fputs用于把字符串输出到文件,fwrite用于以二进制形式输出数据到文件。25、以下语句中存在语法错误的是()。A、charss[6][20];ss[1]="right?";B、charss()[20]={"right?"};C、char*ss[6];ss[1]="right?";D、char*ss()={"right?"};标准答案:A知识点解析:数组定义后,不可以对数组整体赋值,s是二维数组,因ss[1]是一维字符数组,即字符串,字符串赋值可以使用strcpy(ss[1],"right");这样的形式,而选项A中对二维数组中的第"1"维(相当于一个一维数组)赋值,是不可以的。选项B和D是定义时对数组初始化,这是可以的。选项C中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是()。A、在栈中,栈顶指针的动态变化决定栈中元素的个数B、在循环队列中,队尾指针的动态变化决定队列的长度C、在循环链表中,头指针和链尾指针的动态变化决定链表的长度D、在线性链表中,头指针和链尾指针的动态变化决定链表的长度标准答案:A知识点解析:在栈中,通常用指针top来指示栈顶的位置,用指针bottom指向栈底。栈顶指针top动态反应了栈中元素的变化情况。在循环队列中,队头指针和队尾指针的动态变化决定队列的长度。链式存储结构中,各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致,故头指针和尾指针或栈顶指针无法决定链表长度。2、以下叙述中正确的是A、可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行B、C语言程序将从源程序中第一个函数开始执行C、main的各种大小写拼写形式都可以作为主函数名,如:MAIN,Main等D、C语言规定必须用main作为主函数名,程序将从此开始执行标准答案:D知识点解析:C语言规定必须以main作为主函数名。程序中的main()是主函数的起始行,也是C程序执行的起始行。每一个可执行的C程序都必须有一个且只能有一个主函数。一个C程序中可以包含任意多个不同的函数,但只能有一个主函数。程序要从main()函数开始执行,最后在main()函数中结束。3、在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是A、O(n)B、O(n2)C、0(log2n)D、O(nlog2n)标准答案:C知识点解析:对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次,而顺序查找需要比较n次。4、对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为()。A、9B、10C、45D、90标准答案:C知识点解析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要比较的次数为n(n一1)/2。5、已知下面的程序段,正确的判断是()。#defineM2#defineN(m)((M+1)*m)……x=3*(M+N(5));A、程序错误,不允许嵌套定义B、x=51C、x=25D、程序错误,宏定义不允许有参数标准答案:B知识点解析:C语言中的宏定义允许嵌套定义,也允许带变量。在对源程序编译时,先有一个预处理过程,其中一个任务就是替换宏定义。预处理程序扫描源程序若干遍,能够识别出嵌套的宏定义和带参数的宏定义。将参数代入整理得x=51。6、若有定义:intx[10],*pt=x;,则对x数组元素的正确引用是()。A、pt+3B、&x[10]C、*(pt+10)D、*(x+3)标准答案:D知识点解析:没有A选项的引用形式。*与&放在一起作用抵消,所以B选项错误。最大只能引用到x[9],而*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。D选项正确。7、设intk=0:以下选项的四个表达式中与其他三个表达式的值不相同的是()。A、k++B、k+1C、++kD、k+=1标准答案:A知识点解析:选项B、C、D都是对k的值加1,选项A的语句k++表示先利用k的值进行运算,然后k值才加1。8、有以下程序#includemain(){inta=7;while(a-);printf(’’%dkn’’,a);}程序运行后的输出结果是A、0B、1C、.1D、7标准答案:C知识点解析:在while语句中,先判断while后面的表达式是否为0,如果为0,则退出循环,否则执行循环体。在本题中,当变量a的值经过几次循环后,其值等于0时,退出while循环语句,变量a再执行自减运算,所以其值等于-1。9、有下列程序:#include<stdio.h>yoidfun(int*a.intn)/*fun函数的功能是将a所指数组元素从大到小排序*/{intt,i’j;for(i=0;i<n-1;j++)for(j=i+1j<nj++)if(a[i]<a[j]){t=a[i];a[i]=a[jl;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++)pfintf(’’%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}。10、在一个C源程序文件中所定义的全局变量,其作用域为A、由具体定义位置和extern说明来决定范围B、所在程序的全部范围C、所在函数的全部范围D、所在文件的全部范围标准答案:A知识点解析:全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。在同一编译单位内用extern说明符扩展全局变量的作用域(当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序:该变量是一个己在外部定义了的全局变量,已经分配了存储单元,不需要再为它分配存储单元。这时全局变量的作用域从extern说明处起,延伸到该函数末尾)。当一个程序由多个编译单位构成,并且在每个文件中均需要引用同一个全局变量,这时只在其中一个文件中定义所有的全局变量,而在其他用到这些全局变量的文件中用extem对这些变量进行说明。11、有如下程序#include#includemain(){printf("%d\n",strlen("0\n011\1"));}程序运行后的输出结果是()。A、6B、8C、9D、4标准答案:A知识点解析:字符串"0\n011\1"中共有两个转义字符,分别是?\n?、?\1?,各代表一个字符,strlen()计算的是字符串的实际长度(不包含结束标识符),所以输出结果为6,答案选A。12、已知字符’A’的ASCII代码值是65,字符变量c1的值是’A’,c2的值是’D’。则执行语句printf("%d,%d",c1,c2-2);的输出结果是A、A,68B、A,BC、65,66D、65,68标准答案:C知识点解析:在C语言中,字符常量在内存中占一个字节,存放的是字符的ASCII码值。所有的字符常量都作为整型量来处理。在本题中输出语句用整型格式输出字符时,输出的是其ASCII码值。因为字符’A’和’D’的ASCII码倩分别为65和68,所以c2-2=68-2=66。13、变量a=01011101,变量b=11110000,若要求将a的高4位取反,低4位不变,所要执行的运算是()。A、a∧bB、a&bC、a<<2D、a|4标准答案:A知识点解析:题目要求将a的高4位取反,低4位不变,即操作完成之后a的值应为10101101。选项A使用异或运行,相同为0,相异为1,计算结果为10101101;选项D使用位或运算,计算结果为11111101;选项B使用位与运算,计算结果为01010000;选项C是把a左移4位,计算结果为11010000。14、有以下程序,程序的输出结果是main(){charc1=’A’,c2=’Y’;printf("%d,%dha",c1,c2);}A、输出格式不合法,输出出错信息B、65,90C、65,89D、A,Y标准答案:C知识点解析:C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。15、以下叙述中正确的是A、结构体类型中的成分只能是C语言中预先定义的基本数据类型B、在定义结构体类型时,编译程序就为它分配了内存空间C、结构体类型中各个成分的类型必须是一致的D、一个结构体类型可以由多个称为成员(或域)的成分组成标准答案:D知识点解析:结构体类型,它是由若干“成员”组成,每一个成员可以是一个基本数据类型或者是一个构造类型。在说明和使用之前必须先定义它,也就是构造它。定义一个结构的一般形式为:struet结构名{成员列表};成员列表由若干个成员组成,对每个成员也必须作类型说明,其形式为:类型说明符成员名:可以说明类型不同的各个成员。16、有以下程序fun(intx,intY){staticintm=0,i=2;i+=m+1;m=i+x+y;returnm;}main(){intj=1,m=1,k;k=fun(j,m);printf("%d,",k);k=fun(j,m);printf("%d\n",k);}执行后的输出结果是A、5,5B、5,11C、11,11D、11,5标准答案:B知识点解析:子函数fun(intx,inty),将变量m和i声明为局部静态变量,因此第1次调用主函数后,局部静态变量m和i的值为5和3,第1次函数调用结束时,它们的值不释放保持不变,所以第2次调用时,局部静态变量m和i的初始值分别为5和3,即在执行“i+=na+1”时,i的值为9,因此最终m的值为11。17、下面结构体的定义语句中,错误的是A、structord{intx;inty;intz;};structorda;B、structord{intx;inty;intz;}structorda;C、structord{intx;inty;intz;}a;D、struct{intx;inty;intz;}a;标准答案:B知识点解析:在选项B中,由于在定义完结构体后缺少分号“;”,所以这是一条不完整的语句,因而是错误的。18、若要求从键盘读入含有空格字符的字符串,应使用函数A、getc()B、gets()C、getchar()D、scanf()标准答案:B知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的一个字符赋给变量ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入Enter键时,读入才开始执行。gets()函数的调用形式为:gets(stradr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets()函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。19、有以下程序:#includevoidfun(char*c){while(*c){if(*c>=’a’&&*c<=’z’)*c=*c一(’a’-’A’);C++;}}voidmain(){chars[81];gets(s);fun(s);puts(s);}当执行程序时从键盘上输入HelloBeijing<回车>,则程序的输出结果是A、HELLOBEIJINGB、HelloBeijingC、helloBeijingD、hELLOBeijing标准答案:A知识点解析:子函数fun的功能是把小写字母转换成大写字母,所以程序的输出结果为选项A一20、有以下程序#include<stdio.h>intf(intx,inty){return((y-x)*x);}main(){inta=3,b=4,c=5,d;d=f(f(a,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。21、若有以下程序#includeint*f(int*s,int*t){intk;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标准答案:C知识点解析:函数f为返回值为指针的函数,主要功能是返回s和t指向空间值大的数据的地址,同时如何s指向空间数据大于t指向空间的数据,那么交换。主函数p和q指向i和j,值为3和5.i的值人于i的值,因此调用函数f以后,返回j的地址,r指向j,同时i和.j的值交换,i=5,j=3,p和q的指向不变,p指向i,q指向j。22、设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为A、’\0’B、0C、NULLD、非0值标准答案:D知识点解析:ANSIC提供的feof函数的功能是判断fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则feof函数的值为1,否则为0,表示文件尚未结束。23、下列关于C语言文件的叙述中正确的是A、文件由结构序列组成,可以构成二进制文件或文本文件B、文件由一系列数据依次排列组成,只能构成二进制文件C、文件由数据序列组成,可以构成二进制文件或文本文件D、文件由字符序列组成,其类型只能是文本文件标准答案:C知识点解析:在C语言中,对输入、输出的数据都按“数据流”的形式进行处理。数据可以按文本形式或二进制形式存放在介质上,因此文件可以按数据的仔放形式分为文本文件和二进制文件。24、有以下程序#includestructlink{intdata;structlink*next;};main(){structlink*h,a,b;h=&a;a.data=10;a.next=&b;b.data=20;┋}程序运行时不能输出10,20的语句是()。A、printf("%d,%d\n",h->data,a.next.data);B、printf("%d,%d\n",a.data,(*a.next).data);C、printf("%d,%d\n",h->data,(*a.next).data);D、printf("%d,%d\n",a.data,a.next->data);标准答案:A知识点解析:语句"h=&a;"将指针h指向了链表结点a的地址,所以h->data与(*h).data、a.data等价为10,语句"a.next=&b;"将结点b连接到了结点a的后面,a.next->data与b.data等价为20,选项A)中引用语句不正确,应该为a.next->data,所以答案选A)。25、若fp已定义为指向某文件的指针,且没有读到该文件的末尾,则C语言函数feof(fp)的函数返回值是A、EOFB、非0C、-1D、0标准答案:D知识点解析:本题考查文件的定位,feof函数的用法是从输入流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值,否则为0,所以选项D正确。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、下列关于线性链表的叙述中,正确的是()。A、各数据节点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B、各数据节点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C、进行插入与删除时,不需要移动表中的元素D、以上都不正确标准答案:C知识点解析:线性表的链式存储结构称为线性链表。在链式存储结构中,存储数据结构的存储空间可以不连续,各数据节点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。2、在一个容量为15的循环队列中,若头指针front=6,尾指针rear=9,则循环队列中的元素个数为A、2B、3C、4D、5标准答案:B知识点解析:循环队列中,rear表示尾指针,front表示头指针,当有元素入队时,rear=rear+1,而元素出队的时候,front=front+1,当rear值大于front值时,队列中的元素个数为rear-front,当rear的值小于front时,列队中的元素个数为rear—front+m(m表示队列的容量)。3、有以下程序:#includemain(){charx=2,y=2,z;z=(Y<<1)&(x>>1);prinff(“%d\n”,z);}程序的输出结果是()。A、1B、0C、4D、8标准答案:B知识点解析:本题考查位运算<<和&。y<<1为4,x>>1为1,二者与运算后为0,故B选项正确。4、定义学生、教师和课程的关系模式S(S#,Sn,Sd,Dc,Sa)(其属性分别为学号、姓名、所在系、所在系的系主任、年龄);C(C#,Cn,P#)(其属性分别为课程号、课程名、先修课);SC(S#,C#,G)(其属性分别为学号、课程号和成绩),则该关系为()。A、第一范式B、第二范式C、第三范式D、BCNF范式标准答案:B知识点解析:本题中关系S中的“学号”列可决定“所在系”列,“所在系”列又可决定“所在系的系主任”,存在传递函数依赖,不满足第三范式。5、在软件开发中,需求分析阶段产生的主要文档是A、软件集成测试计划B、软件详细设计说明书C、用户手册D、软件需求规格说明书标准答案:D知识点解析:在软件开发过程中,需求分析阶段产生的主要文档是软件需求规格说明书。6、若有定义语句:intx=10;,则表达式x-=x+x的值为()。A、0B、-20C、-10D、10标准答案:C知识点解析:算术运算符+的优先级高于-=,且-=的结合方向为自右向左,所以表达式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,选择C选项。7、下列条件语句中,输出结果与其他语句不同的是A、if(a==0)printf("%d\n",x);elseprintf("%d\n",y);B、if(a==0)printf("%d\n",y);elseprintf("%d\n",x);C、if(a!=0)printf("%d\n",x);elseprintf("%d\n",y);D、if(a)printf("%d\n",x);elseprintf("%d\n",y);标准答案:A知识点解析:选项B、C、D这三条语句都是在变量不等于0的情况下,输出x;等于0的情况下输出y,而选项A则正好相反。8、在一棵二叉树上,第5层的结点数最多是()。A、8B、9C、15D、16标准答案:D知识点解析:根据二叉树的性质:二叉树第i(i≥1)层上至多有2i-1个结点。得到第5层的结点数最多是16个。9、下列叙述中错误的是()。A、用户定义的函数中可以没有return语句B、用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值C、用户定义的函数中若没有return语句,则应当定义函数为void类型D、函数的return语句中可以没有表达式标准答案:B知识点解析:本题重点考查函数返回值的相关知识。函数的值只能通过return语句返回主调函数,在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。不返回函数值的函数,可以明确定义为“空类型”,类型说明符为void。因此选择B选项。10、有以下程序#includemain(){inta=3;a+=a-=a*a;printf("%d\n",a);}程序的输出结果是()。A、-12B、9C、3D、0标准答案:A知识点解析:表达式"(a+=a-=a*a)",先计算表达式"a-=a*a",即"a=a-a*a",结果为"a=-6"然后计算"a+=a"即"a=a+a",得a=-12,所以输出结果为A)。11、程序中对fun函数有如下说明void‰();此说明的含义是A、fun函数无返回值B、fun函数的返回值可以是任意的数据类型C、fun函数的返回值是无值型的指针类型D、指针fun指向一个函数,该函数无返同值标准答案:A知识点解析:本题主要考察函数的声明,voidfun()表示fun函数没有输入参数,函数返回void表示函数无返回值。12、以下函数按每行8个输出数组中的数据:voidfun(int*w,intn){inti;for(i=0;iA、if(i%8==0)printf("\n");B、if(i/8==0)continue;C、if(i/8==0)pfintf("\n");D、if(i%8==0)continue;标准答案:A知识点解析:本题考查判断语句与循环语句。欲使每行输出8个数据,则必然使用取余运算,当i%8=0时先输出一个换行符再输出字符。选项D)中,continue语句的作用是停止执行本次循环位于continue后面的语句,而进入下一次循环。13、以下叙述中正确的是A、字符常量在内存中占2个字节B、转义字符要用双引号括起来,以便与普通的字符常量区分开C、字符常量需要用单引号括起来D、字符常量是不能进行关系运算的标准答案:C知识点解析:在程序中用单引号把一个字符括起来作为字符常量。转义字符又称反斜线字符,这些字符常量总是以一个反斜线开头后跟一个特定的字符,用来代表某一个特定的ASCII字符,这些字符常量也必须括在一对单引号内,和整型常量一样,字符常量也可以进行关系运算的。14、设有宏定义:#defineIsDIV(k,n)((k%n==1)?1:0)且变量m已正确定义并赋值,则宏调用:IsDIV(m,5)&&IsDIV(m,7)为真时所要表达的是A、判断m是否能被5和7整除B、判断m被5或者7整除是否余1C、判断m被5和7整除是否都余1D、判断m是否能被5或者7整除标准答案:C知识点解析:本题考查宏定义和三目运算符。三目运算符的格式为:test?语句1:语句2其中,test可以是任何Boolean表达式。语句1,当test是true时执行该语句,可以是复合语句;语句2,当test是false时执行该语句,可以是复合语句。isDIV(k,n)要表达的是当k除n的余数是1时表达式的值为1,否则为0,所以题中要表达的是m被5和7整除是否都余1。15、学校的每个社团都有一名团长,且一个同学可同时担任多个社团的团长,则实体团长和实体社团间的联系是A、一对多B、多对多C、多对一D、一对一标准答案:A知识点解析:一对多关系是关系数据库中两个表之间的一种关系,该关系中第一个表中的单个行可以与第二个表中的一个或多个行相关,但第二个表中的一个行只可以与第一个表中的一个行相关。本题中,一个团长可以对应多个社团,一个社团只有一个团长,因此是一对多关系。16、有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y--)if(y%3==0)printf("%d",--y);}程序的运行结果是A、963B、852C、741D、875421标准答案:B知识点解析:y的值的初值为9,所以在for循环中,当y的值为9、6或3时,if语句的条件成立,执行输出句,输出表达式--y的值。因为自减符号在y的前面,所以首先y的自减1,然后再输出y的值,故输出结果为852。17、若有以下程序#includemain(){inta=0,b=0,c=0c=(a+=++b,b+=4);printf("%d,%d,%d\n",a,b,c);}则程序的输出结果是A、1,5,1B、1,5,5C、-1,4,4D、-1,4,-1标准答案:B知识点解析:逗号运算符的结合性从左到右,因此逗号表达式将从左到右进行计算,且逗号运算符的优先级最低?先计算a+=++b,结果a为1,b为1,然后计算b+=4,b的值为5,逗号表达式的值为其中最后一个表达式的值,所以将5赋给变量c,即a为1,b为5,c为5,所以选择B。18、设已有定义:floatx:则以下对指针变量P进行定义且赋初值的语句中正确的是A、int*p=(float)x;B、float*p=&x;C、floatp=&x;D、float*p=1024;标准答案:B知识点解析:定义指针变量的一般形式为:类型名*指针变量名1,*指针变量名2,……;。对一个指针变量赋值要通过求地址运算符(&)获得变量的地址值,然后把此地址值赋给指针变量。因而在选项A的表达式中,赋值号的左边表示定义了指针变量p,而右边表示求变量x的地址值。19、有以下程序structS{inta;intb;);main(){structSa,*p=&a;a.a=99;pfintf("%d\n",_________);)程序要求输出结构体中成员a的数据,以下不能填入横线处的内容是A、a.aB、*p.aC、p->aD、(*p).a标准答案:B知识点解析:如果p指向结构体,那么下面三种形式都可以访问结构体的成员:结构体变量.成员名、(*p).成员名、p->成员名。20、以下叙述中正确的是A、结构体类型中的各个成分均不能是数组或指针B、结构体类型的变量,不能在声明结构体类型组成时一起定义C、使用typedef定义新类型名后,新类型名与原类型名实际上是等价的D、元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义标准答案:C知识点解析:C语言允许用tyoedef说明一种新类型名,typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原有类型名依然有效。结构体变量定义有下面三种形式;(1)先定义结构,再说明结构变量。(2)在定义结构类型的同时说明结构变量。(3)直接说明结构变量。21、若要求从键盘读入含有空格字符的字符串,应使用函数A、getc()B、gets()C、getchar()D、scanf()标准答案:B知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所以用scanf()函数不能输入空格;getchar()函数用于输入字符,其调用形式为:ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的一个字符赋给变量ch。在输入时,空格、回车符都将用于字符读入,而且只有在用户敲入Enter键时,读入才开始执行。gets()函数的调用形式为:gets(str_adr),其中str_adr是存放输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变量。gets()函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为止。getc()函数的调用形式为:ch=getc(pf)其中pf是文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作为函数值返回。22、以下叙述中错误的是()。A、可以通过typedef增加新的类型B、可以用typedef将已存在的类型用一个新的名字来代表C、用typedef定义新的类型名后,原有类型名仍有效D、用typedef可以为各种类型起别名,但不能为变量起别名标准答案:A知识点解析:typedef为类型定义符,使用的一般形式为"typedef原类型名新类型名;",它用于给已知类型取别名,作用仅仅是用"新类型名"代替"原类型名",并没有产生新的数据类型,答案选A。23、以下叙述中错误的是A、C程序必须由一个或一个以上的函数组成B、函数调用可以作为一个独立的语句存在C、若函数有返回值,必须通过return语句返回D、函数形参的值也可以传回给对应的实参标准答案:D知识点解析:形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在C语言中,实参向形参传送数据的方式是"值传递"。因此D选项正确。24、有下列程序#include<stdio.b>main(){intx=3,y=5,z1,z2;z1=y^x^y;z2=x^y^x;printf("%d,%d\n",z1,z2);}程序执行后的输出结果是()。A、7,7B、5,3C、8,8D、3,5标准答案:D知识点解析:“^”异或运算,其功能是参与运算的两个数,按位异或,如果两个相应位相同,结果为0,否则为1;异或运算满足如下规则:1:满足交换律;2:一个数与0异或的结果仍是原数;3:一个数与1异或的结果是原数按位取反;所以题意中,y^x^y等价于y^y^x,等价于0^x,等价于x,即z1=x;x^y^x等价于x^x^y,等价于0^y,等价于y,即z2=y;输出结果为:3,5;本题答案为D。25、下列语句组中正确的是()。A、char*s;s="Olympic";B、chars[7];s="Olympic";C、char*s;s={“Olympic"};D、chars[7];s={"Olympic"};标准答案:A知识点解析:字符型指针变量可以用A选项的赋值方法:char*s;s="Olympic"。C选项的写法:char*s,s={"Olympic"};是错误的。字符数组可以在定义的时候初始化:chars[]={’Olympic”};或者chars[]="Olympic",但是不可以在定义字符数组后对数组名赋值(数组名是常量,代表数组首地址),所以B选项和D选项都是错误的。对于本例,B、D选项中字符数组s的大小至少为8,才能存放下字符串(字符串的末尾都有结束标志’\0’),同时此时s为字符数组的地址,是常量,不能为其赋值。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、设循环队列的存储空间为Q(1:m),初始状态为空。现经过一系列正常的人队与退队操作后,front=m,rear=m-1,此后从该循环队列中删除一个元素,则队列中的元素个数为()。A、m-1B、m-2C、0D、1标准答案:B知识点解析:在循环队列中,如果rear-front>0,则队列中的元素个数为rear-front个;如果rear-front<0,则队列中的元素个数为rear-front+m。该题中m-1<m,即rear-front<0,则该循环队列中的元素个数为(m-1)-m+m-1。此后从该循环队列中删除一个元素,则队列中的元素个数为m-1-1=m-2。2、以下叙述正确的是A、C语言程序是由过程和函数组成的B、C语言函数可以嵌套调用,例如:fun(fun(x))C、C语言函数不可以单独编译D、C语言中除了main函数,其他函数不可作为单独文件形式存在标准答案:B知识点解析:在C语言中,允许函数的嵌套调用,即递归调用。在C语言中不存在过程的概念,在C语言中函数允许单独编译,可以作为单独的文件形式存在。3、下列关于栈的叙述中,正确的是A、栈底元素一定足最后入栈的元素B、栈顶元素一定是最先入栈的元素C、栈操作遵循先进后出的原则D、以上三种说法都不对标准答案:C知识点解析:栈是限定只能在表的一端进行插入和删除操作的线性表,必须按“后进先出”的规则操作元素。4、以下选项中,合法的一组C语言数值常量是A、12.0Xa234.5e0B、028.5e-3-0xfC、.1774e1.50abcD、0x8A10.0003.e5标准答案:A知识点解析:八进制数其开头必须是数字“0”,其数字包括0~7,而在选项B中,028是错误的。浮点数据的指数形式表示常量中,C语言规定字母e或E之前必须要有数字,且e或E之后的指数必须为整数,而选项C中4e1.5是错误的。在选项D中,整型数据10,000的表示形式是错误的。5、表达式3.6-5/2+1.2+5%2的值是()。A、4.3B、4.8C、3.3D、3.8标准答案:D知识点解析:计算5/2,结果取整数值2。计算3.6-2,结果与高精度数据保持一致,即为1.6。计算1.6+1.2,结果为2.8。计算5%2,结果为1。计算2.8+1结果为3.8。所以选择D选项。6、一个教师讲授多门课程,一门课程由多个教师讲授。则实体教师和课程问的联系是A、1:1联系B、1:m联系C、m:1联系D、m:n联系标准答案:D知识点解析:一个教师可讲授多门课程,一门课程可由多个教师讲授,则实体教师和课程的联系是多对多的联系。7、下面叙述中错误的是A、软件测试的目的是发现错误并改正错误B、对被调试的程序进行“错误定位”是程序调试的必要步骤C、程序调试通常也称为DebugD、软件测试应严格执行测试计划,排除测试的随意性标准答案:A知识点解析:软件测试是为了发现错误而执行程序的过程。软件测试要严格执行测试计划,排除测试的随意性。程序调试通常也称Debug,对被调试的程序进行“错误”定位是程序调试的必要步骤。8、以下程序段中,与语句k=a>b?(b>c?1:0):0;功能相同的是()。A、if((a>b)||(b>c))k=1;elsek=0;B、if((a>b)&&(b>c))k=1;elsek-0;C、if(a<=b)k=0;elseif(b<=c)k=1;D、if(a>b)k=1;elseif(b>c)k=1;elsek=0;标准答案:B知识点解析:条件表达式的含义是,如果表达式1成立,结果为表达式2的值,如果不成立,则为表达式3的值。所以题干中k的值这样取值:如果a>b且b>c,k值结果为1,如果a>b且b<c,则值为0。如果a<b,k值为0,也就是只要a>b与b>c中只要有一个条件不成立,k的值就为0,所以选择B选项。9、设有如下关系表。则下列操作中正确的是A、T=R∩SB、T=R∪SC、T=R×SD、T=R/S标准答案:B知识点解析:关系代数的并运算是指:设关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组组成的集合,记为R∪S。形式定义为:R∪S≡{t|t∈R∧t∈S},式中t是元组变量。本题中关系T是由属于关系R的或者属于关系S的元组组成,所以T是R∪S的结果。10、若有以下程序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,循环退出。11、假定已建立以下链表结构,且指针p和q已指向如图所示的节点。则下列选项中可将q所指节点从链表中删除并释放该节点的语句组是()。A、p->next=q->next;free(q);B、p=q->next;free(q);C、p=q;free(q);D、(*p).next=(*q).next;free(p);标准答案:A知识点解析:本题考查删除链表中的节点操作。其方法是将要删除节点的上个节点的下个节点指向要删除节点的下个节点,然后释放该要删除的节点,所以选项A正确。12、有以下程序#include#defineN2#defineMN+1#defineNUN(M+1)*M/2main(){printf("%d\n",NUN);}程序运行后的输出结果是A、4B、8C、9D、6标准答案:B知识点解析:宏展开以后NUM为(2+1+1)*2+1/2,计算以后值为8。注意在进行宏展开的时候.千万不要试图计算,展开以后再进行计算。13、设有以下函数:voidfun(intn,char*s){……}则下面对函数指针的定义和赋值均正确的是A、void*pf();pf=fun;B、void(*pf)(int,char*);pf=fun;C、void*pf0;*pf=fun;D、void(*pt)(int,char);pf=&fun;标准答案:B知识点解析:函数指针的定义形式是:数据类型标识符(*指针变量名)();void(*pf)()定义了一个没有返回值的函数指针pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给pf给赋值时,把函数名fun赋给pf即可。14、设有关系表学生S(学号,姓名,性别,年龄,身份证号),每个学生学号唯一。除属性学号外,也可以作为键的是A、姓名B、身份证号C、姓名,性别,年龄D、学号,姓名标准答案:B知识点解析:候选键是是二维表中能唯一标识元组的最小属性集。一个二维表有多个候选码,则选定其中一个作为主键供用户使用,学生学号与身份证号均是唯一的,都可以作为主键,B选项正确。15、若有定义语句:doublea,*p=&a;以下叙述中错误的是A、定义语句中的*号是一个说明符B、定义语句中的P只能存放double类型变量的地址C、定义语句中*p=&a把变量a的地址作为初值赋给指针变量PD、定义语句中的,*号是一个间址运算符标准答案:D知识点解析:在指针定义语句doublea,*p=&a中,指针变量p前面的*号,只是一个说明符,说明变量p是指针类型的变量。16、有以下程序main(){inta=1,b=2,c=3,x;x=(a^b)&c;printf("%d\n",x);}程序的运行结果是A、1B、2C、3D、0标准答案:C知识点解析:1、2、3的二进制形式分别为00000001、00000010、00000011。首先计算1与2的或运算,即1^2=(00000001)^(00000010)=00000011,再将其与3进行“与”运算,结果为(00000011)&(00000011)=00000011,即十进制数3。17、以下选项中叙述错误的是A、在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内B、C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值C、C程序函数中定义的自动变量,系统不自动赋确定的初值D、C程序函数的形参不可以说明为static型变量标准答案:B知识点解析:在函数定义的静态变量,只需要赋值1次,即可保存初始值,不需要每次调用时都赋初始值。18、有以下程序#includemain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf("a=%d,b=%d\n",a,b);}程序运行后的输出结果是A、a=1,b=1B、a=1,b=0C、a=2,b=1D、a=2,b=2标准答案:C知识点解析:本题考查的是用switch语句实现多分支选择结构,首先进入第一个switch(x)判断,进入case1中进行嵌套判断,如果switch(y)也成立,a自加1,遇到break,退出嵌套,接着执行case2,a自加为2,b自加为1,遇到break,结束循环,此时a=2,b=1。19、有以下程序#include#includevoidfun(chars[][10],intn){chart;inti,j;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(s[i][0]>s[j][0]){t=s[i][0];s[i][0]=s[j][0];s[j][0]=t;}}main(){charss[5][10]={"bcc","bbcc","xy","aaaacc","aabcc"};fun(ss,5);printf("%s,%s\n",ss[0],ss[4]);}程序的运行结果是A、aaaacc,xyB、bcc,aabccC、xy,aaaaccD、aabcc,bcc标准答案:C知识点解析:函数fun(chars[][10],intn)通过两重for循环语句,比较二维字符数组s[][10]的每个字符串的首字符大小,如果前一个字符串首字符大于后一个字符串的首字符,则交换这两个字符串的首字符。在主函数中,语句fun(ss,5)的作用是对二维字符数组ss[5][10]的5个字符串的首字符进行从小到大的排序,不影响各个字符串另外的字符。所以排序结束后,5个字符串的第一个字符依次变为a、a、b、b和x;最后输出第1个和第4个字符串。20、有以下程序#include<stdio.h>voidmain(){chars[]={"012xy"};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’a’a&&s[i]<=’z’)n++;printf("%d\n",n);}程序运行后的输出结果是A、0B、3C、5D、2标准答案:D知识点解析:这段程序的功能求出字符串s中字符在小写字符a到z之间字符的个数。在程序中字符串s的值为“012xy”,所以在字符串s中符合要求的字符的个数等于2。21、有以下程序#include<stdio.h>#include<string.h>voidfun(char*w,intm){chars,*p1,*p2;p1=w;p2=w+m-1;while(p1<p2){s=*p1;*p1=*p2;*p2=s;p1++;p2--;}}main(){chara[]="123456";fun(a,strlen(a));puts(a);}A、116611B、161616C、654321D、123456标准答案:C知识点解析:函数fun的功能是将字符串w中的元素从大到小进行排列,所以在主函数中调用函数fun后,字符串a的元素从大到小进行了排列。22、有以下程序main(){inta=1,b=2,c=3,x;x=(a^b)&c;printf("%d\n",x);}程序的运行结果是A、1B、2C、3D、0标准答案:C知识点解析:1、2、3的二进制形式分别为00000001、00000010、00000011。首先计算1与2的或运算,即1^2=(00000001)^(00000010)=00000011,再将其与3进行“与”运算,结果为(00000011)&(00000011)=00000011,即十进制数3。23、以下选项中不合法的标识符是()。A、&aB、FORC、printD、00标准答案:A知识点解析:C语言中标识符由字母、下划线、数字组成,且开头必须是字母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B)选项中的"FOR"可以作为标识符来用。A)选项中含有非法字符&,所以选择A)。24、以下选项中不能用作C程序合法常量的是()。A、123B、‘\123’C、1,234D、"\x7D"标准答案:C知识点解析:C选项中不能含有逗号,所以“1,234”不能用作C程序的合法常量。B选项表示的是八进制的常量,D选项表示的是十六进制的常量。25、以下选项中是非转义字符的是()。A、’\d’B、’\t’C、’\b’D、’\r’标准答案:A知识点解析:C语言中,转义字符又称反斜线字符,这些字符常量总是以一个反斜线开头后跟一个特定的字符,题意中,’\t’表示横向跳若干格,’\b’表示退格符,’\r’表示回车符,选项B、C、D正确,选项A错误。故本题答案为A选项。国家二级C语言机试(选择题)模拟试卷第5套一、选择题(本题共25题,每题1.0分,共25分。)1、若执行下述程序时,若从键盘输入6和8,结果为()。main(){inta,b,s;scanf(’’%d%d’’,&a,&b);S=a:if(s=b)s*=s:printf(’’%d’’,s);}A、36B、64C、48D、以上都不对标准答案:B知识点解析:首先通过scanf函数把从键盘读入的数据赋给变量a和b,if语句判断如果a和b不等,执行s=s*s=64。2、关系模型中的关系模式至少应是()。A、1NFB、2NFC、3NFD、BCNF标准答案:A知识点解析:关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同的范式。满足最低要求的叫第一范式,简称1NF。在满足第一范式的基础上,进一步满足更多要求规范则是第二范式。然后在满足第二范式的基础上,还可以再满足第三范式,以此类推。对于关系模式,若其中的每个属性都已不能再分为简单项,则它属于第一范式。若某个关系R为第一范式,并且R中每一个非主属性完全依赖于R的某个候选键,则称其为第二范式。第二范式消除了非主属性对主键的部分依赖。如果关系R是第二范式,并且每个非主属性都不传递依赖于R的候选键,则称R为第三范式。(传递依赖:在关系模式中,如果Y→X,X→A,且X不决定Y和A不属于X,那么Y→A是传递依赖。)比第三范式更高级的BCF’范式,它要求所有属性都不传递依赖于关系的任何候选键。3、若有“doublea;”,则正确的输入语句是()。A、scanf("%lf",a);B、scanf("%f",&a);C、scanf("%lf",&a)D、scanf("%le",a);标准答案:C知识点解析:scanf函数的调用形式是:scanf(“格式字符串”,输入项地址表)。其中,“格式字符串”是要输入的变量的格式符;“输入项地址表”是要输入的变量的地址。a是double型数据,格式字符串可以用“%lf”,“%f”是浮点型。题中定义变量a为双精度型变量,双精度变量的格式符为“%1f”;变量的地址用取地址符“&”加变量名表示,变量a的地址为“&a”。4、设二叉树的前序序列与中序序列均为ABCDEFGH,则该二叉树的后序序列为A、HGFEDCBAB、ABCDEFGHC、ABCDHGFED、DCBAHGFE标准答案:A知识点解析:前序遍历(DLR)是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右;中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游,可记做左根右;后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,可记做左右根。根据题中前序和中序序列均为ABCDEFGH,可画出二叉树,该二叉树是一个子结点全部在右侧二叉树,然后根据后序遍历方法,可得出后序遍历为HGFEDCBA。5、以下叙述中正确的是A、对于“for(表达式1;表达式2;表达式3)循环体”首先要计算表达式2的值,以便决定是否开始循环B、对于“for(表达式1;表达式2;表达式3)循环体”,只在个别情况下才能转换成while语句C、只要适当地修改代码,就可以将do.while与while相互转换D、如果根据算法需要使用无限循环(即通常所称的“死循环”),则只能使用while语句标准答案:C知识点解析:while和do…while语句和for语句很容易进行相互转换。对于for循环的执行过程如下:①计算表达式1。②计算表达式2。若其值为非0,转步骤③;若其值为0,转步骤⑤。③执行一次for循环体。④计算表达式3,转向步骤②。⑤结束循环。任何循环都有可能成为死循环。6、计算机能直接执行的程序是A、目标程序B、可执行程序C、汇编程序D、源程序标准答案:B知识点解析:把由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”(后缀名为.obj),由汇编语言编写的程序称为“汇编程序”。为了把源程序转换成机器能接受的目标程序,软件工作者编制了一系列软件,通过这些软件可以把用户按规定语法写出的语句一一翻译成二进制的机器指令。这种具有翻译功能的软件称为“编译程序”,每种高级语言都有与它对应的编译程序。C源程序经过C编译程序编译之后生成一个后缀为.obj的二制进文件(称为目标文件),这个目标程序要和C语言的库函数相链接生成一个后缀为.exe的文件,这个文件可以在操作系统中直接执行,称为可执行程序。7、关于“while(条件表达式)循环体”,以下叙述正确的是()。A、条件表达式的执行次数与循环体的执行次数无关B、条件表达式的执行次数与循环体的执行次数一样C、条件表达式的执行次数总是比循环体的执行次数多一次D、循环体的执行次数总是比条件表达式的执行次数多一次标准答案:C知识点解析:while语句中表达式是循环条件,语句为循环体。while语句执行时,先计算表达式,当表达式计算的值为真(非0)时,执行循环体语句,若表达式为假则不执行循环体。因此条件表达式执行的次数总是比循环体多一次。8、下列语句组中正确的是()。A、char*s;s={"BOOK!"};B、char*s;s="BOOK!";C、char*s[10];s="BOOK!";D、chars[];s="BOOK!";标准答案:B知识点解析:A选项去掉大括号就正确了;C选项和D选项应在定义时赋初值。B选项正确。9、在一个C源程序中所定义的全局变量,其作用域为A、所在文件的全部范围B、所在程序的全部范围C、所在函数的全部范围D、由具体定义位置和extern说明来决定范围标准答案:D知识点解析:本题考查C语言的作用域规则。在C语言中,全局变量的有效范围从定义变量的位置开始到本源文件结束。如果需要在其他源文件中使用该全局变量,则可以在其他源文件中使用extem关键字来声明该全局变量,这样该全局变量的作用域就被扩展到以extern声明了该全局变量的位置开始到此源文件结束。10、设有定义: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、iffa>b)c=a,a=b,b=c;D、if(a>b){c=a;a=b;b=c;)标准答案:A知识点解析:在C语言中,用分号表示一条语句的结束,用{}把几条语句放在一块表示一个语句块,其整体表示一个功能。因而在题目给出的四个选项中,选项B)、C)、D)表示的功能相同,而选项A)表示的是一条if语句,两条赋值语句。11、C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是A、关键字可用作用户标识符,但失去原有含义B、在标识符中大写字母和小写字母被认为是相同的字符C、用户标识符可以由字母和数字任意顺序组成D、预定义标识符可用作用户标识符,但失去原有含义标准答案:D知识点解析:预定义标识符是C语言中的标识符,在C语言中也有特定的含义,如函数printf、sca

温馨提示

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

评论

0/150

提交评论