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

下载本文档

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

文档简介

国家二级C语言机试(选择题)模拟试卷4(共9套)(共240题)国家二级C语言机试(选择题)模拟试卷第1套一、选择题(本题共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、C语言程序的模块化通过以下哪个选项来实现A、变量B、程序行C、函数D、语句标准答案:C知识点解析:用函数作为程序模块以实现C程序的模块化,程序有多个函数构成,每个函数可以实现一个具体的功能,实现程序的模块化设计。3、有以下程序:#includevoidfun(char(*P)[6]){int1;for(i=0;i<4;i++)printf(“%c”,P[i][i]);prinff(“\n”);}main(){charS[6][6]={.“ABCD”,“abcde”,“12345”,“FGHIJ”,“fghij”,“54321”};fun(s);}程序的运行结果是()。A、AalFB、Ab3IC、ABCDD、fghij标准答案:B知识点解析:函数fun的功能是输出s[i][i],所以结果会输出s[0][0]、s[1][1]、s[2][2],即Ab31。4、耦合性和内聚性是对模块独立性度量的两个标准。下列叙述中正确的是()。A、提高耦合性降低内聚性有利于提高模块的独立性B、降低耦合性提高内聚性有利于提高模块的独立性C、耦合性是指一个模块内部各个元素间彼此结合的紧密程度D、内聚性是指模块间互相连接的紧密程度标准答案:B知识点解析:耦合性是反映模块间互相连接的紧密程度,内聚性是指一个模块内部各个元素间彼此接合的紧密程序。提高模块的内聚性,降低模块的耦合性是有利于提高模块的独立性。5、以下选项中能用作数据常量的是()。A、115LB、0118C、1.5e1.5D、0115标准答案:A知识点解析:A选项中115L表示115是长整型数据,合法。B选项是八进制常量的表示方法,但是在八进制中不能含有数字8,所以B选项错误。C选项中e后面应该是整数,而不能是小数1.5,所以C选项错误。D选项中八进制常量应该是数字“O”开始,而不是字母“0”开始。6、结构化程序设计中,下面对goto语句使用描述正确的是A、禁止使用goto语句B、使用goto语句程序效率高C、应避免滥用goto语句D、goto语句确实一无是处标准答案:C知识点解析:滥用goto语句确实有害,应尽量避免:完全避免使用goto语句并非是明智的方法,有些地方使用goto语句会使程序流程更清楚、效率更高;争论的焦点不应该放在是否取消goto语句,而应该放在用在什么程序结构上。7、以下选项中不合法的标识符是()。A、&aB、FORC、printD、_00标准答案:A知识点解析:C语言中标识符南字母、下划线、数宁组成,且开头必须是宁母或下划线。另外,关键字不能作为标识符。因为C语言中区分大小写,所以B选项中的“FOR”可以作为标识符来用。A选项中含有非法字符&,所以其不合法。8、设一棵树的度为3,其中没有度为2的结点,且叶子结点数为5。该树中度为3的结点数为A、1B、2C、3D、不可能有这样的树标准答案:B知识点解析:树的度是指一棵树中,最大的结点的度称为树的度。本题中树的度为3,那么树中最少有一个结点的度为3。而树中没有度为2的结点,叶子结点数为5,度为1的结点下面只有一个叶子结点。因此,该树中含2个度为3的结点满足题目要求。9、当变量c的值不为2、4.6时,值为“真”的表达式是()。A、(c>=2&&c<=6)&&(c%21=1)B、(c==2)||(c==4)||(c==6)C、(c>=2&&c<=6)&&!(c%2)D、(c>=2&&c<=6)||(c!=3)||(c!=5)标准答案:D知识点解析:逻辑或运算符中只要有一个运算量为真,结果就是真,当c>=2&&c<=6条件不成立时,c的值肯定不是2、3、4、5、6,所以c!=3与c!=5均成立,所以D选项的结果一定为真。10、下列条件语句中,输出结果与其他语句不同的是()。A、if(a!=0)pfintf("%d\n",x);elsepfintf("%d\n",y);B、if(a==0)pfintf("%d\n",y);elseprintf("%d\n",x);C、if(a==0)pfintf("%d\n",x);elsepnnff("%d\n",y);D、if(a)pfintf("%d\n",x);elseprintf("%d\n",y);标准答案:C知识点解析:A、B、D选项的含义均为:a的值如果为0,打印y的值,否则打印x的值。而C选项的含义是:a的值为0时打印x的值,不为0时打印y的值,与其他选项正好相反。11、正确的结构体类型说明和变量定义是()。A、typedefstructf{intn;charc;}STR;STRt1,t2;B、structSTR;{intn;charC;};STRt1,t2;C、typedefstmctSTR;{intn=0;charc=’A’;}t1,t2;D、struct{intn;charc;}STR;STRt1,t2;标准答案:A知识点解析:定义结构体类型的一般形式为:struct结构体名{成员列表};struct结构体名后不能加“:”号。但定义完之后要在句末加分号,所以选项B、C有误,选项D中定义无名称的结构体类型同时定义结构体变量形式应为“stmctt1,t2;”。选项A为用户自定义类型,其为正确的定义形式。12、若有以下程序,则程序的输出结果是#includemain(){charc1,c2;el=’C’+’8’-’3’;c2=’9’-’0’;printf("%c%d\n",c1,c2);}A、H9B、H’9’C、F’9’D、表达式不合法输出无定值标准答案:A知识点解析:字符常量允许进行简单盼算术运算,则’C’+5表示H,而’9’-’0’则表示数值9。13、学生选修课程的关系模式为SC(S#,Sn,Sd,Sa,C#,G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩);C(C#,Cn,P#)(其属性分别为课程号、课程名、先选课)。关系模式中包含对主属性部分依赖的是A、S#→SdB、(S#,C#)→GC、C#→CnD、C#→P#标准答案:A知识点解析:在关系模式SC(S#,Sn,Sd,Sa,C#,G)(其属性分别为学号、姓名、所在系、年龄、课程号和成绩)中,主键为(S#,C#)。则存在S#Sd,即学号就可以决定非主属性Sd。所以非主属性Sd部分依赖主键(S#,C#)中S#。所以选项A正确。14、下列叙述中正确的是A、数据库系统减少了数据冗余B、经规范化后的数据库系统避免了一切冗余C、数据库系统比文件系统能管理更多的数据D、数据库系统中数据的一致性是指数据类型一致标准答案:A知识点解析:暂无解析15、若有定义语句:chars[10]="1234567\0\0";则strlen(s)的值是A、8B、7C、9D、10标准答案:B知识点解析:字符串长度函数strlen(s)表示计算出以s为起始地址的字符串的长度,并作为函数值返回。这个长度值不包括串尾的结束标志,’\0’。16、对于一个正常运行的C程序,以下叙述中正确的是A、程序的执行总是从程序的第一个函数开始,在main函数结束B、程序的执行总是从main函数开始,在程序的最后一个函数中结束C、程序的执行总是从程序的第一个函数开始,在程序的最后一个函数中结束D、程序的执行总是从main函数开始标准答案:D知识点解析:一个C语言源程序无论包括了多少函数,在正常情况下总是从main函数开始执行,从main函数结束。17、有以下程序#include<stdio.h>voidmain(){charb,c;inti;b=’a’;c=’A’;for(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("\n");}程序运行后的输出结果是A、ABCDEFB、aBcDeFC、abcdefD、AbCdEf标准答案:D知识点解析:循环变量i从0依次递增到5,依次输出字母A,b,C,d,E,f。18、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是()。A、函数的形参和实参分别占用不同的存储单元B、形参只是形式上的存在,不占用具体存储单元C、同名的实参和形参占同一存储单元D、函数的实参和其对应的形参共占同一存储单元标准答案:A知识点解析:函数传参过程中,其实是把实参的数据复制一份传给形参,实参和形参都是局部变量,在程序运行到相应的定义语句的时候才分配存储空间,所以两者占用不同的存储单元,所以答案选A。19、设有定义:inta;floatb;执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0则a和b的值分别是A、876和543.0B、87和6.0C、87和543.0D、76和543.0标准答案:B知识点解析:在输入函数scanf的输入格式符%2d%f中,2d表示输入的数据的宽度为2,所以当从键盘输入876543.0<CR>时,这时把输入数字串的前两位87赋给变量a,然后将紧接着将6按照格式控制符%f的形式赋给变量b,所以b的值为6.000000。20、若有定义语句:doublea,*p=&a;以下叙述中错误的是A、定义语句中的*号是一个说明符B、定义语句中的P只能存放double类型变量的地址C、定义语句中*p=&a把变量a的地址作为初值赋给指针变量PD、定义语句中的*号是一个间址运算符标准答案:D知识点解析:在指针定义语句doublea,*p=&a中,指针变量p前面的*号,只是一个说明符,说明变量p是指针类型的变量。21、下面结构体的定义语句中,错误的是A、structord{intx;inty;intz;);structorda;B、structord{intx;inty;intz;)structorda;C、structord{intx;inty;intz;}a;D、stmct{intx;inty;intz;)a;标准答案:B知识点解析:在选项B中,由于在定义完结构体后缺少分号“;”,所以这是一条不完整的语句,因而是错误的。22、下列函数的功能是voidfun(char*a,char*b){while((*b=*a)!=’\0’){a++;b++;}}A、使指针b指向a所指字符串B、将a所指字符串和b所指字符串进行比较C、将a所指字符串赋给b所指空间D、检查a和b所指字符串中是否有’\0’标准答案:C知识点解析:在while语句的条件中是把字符*a的值赋给字符*b,然后再判断字符*b的值是否等于字符串的结束字符(’\0’),当不等于结束字符(’\0’)时,把字符指针变量a,b分别加1,指它们的下一个字符,直到字符串a的结束。这样程序执行的结果就是把字符串a赋给了b所指的存储空间。23、下列叙述中正确的是A、两个连续的单引号(’’)是合法的字符常量B、可以对字符串进行关系运算C、两个连续的双引号("")是合法的字符串常量D、空字符串不占用内存,其内存空间大小是0标准答案:A知识点解析:两个连续的双引号:"",是一个字符串常量,称为“空串”。24、若有以下定义intx[10],*pt=x;则对x数组元素的正确引用是A、*(x+3)B、*&x[10]C、*(pt+10)D、pt+3标准答案:A知识点解析:本题考查指针的调用。x代表x[10]数组的首地址指针,pt是指向x[10]数组的首地址的指针,即两者指向同一内存单元。*(x+3)等同于x[3]。25、下面关于位运算符的叙述,正确的是()。A、&表示"按位与"的运算B、#表示"按位异或"的运算C、||表示"按位或"的运算D、~表示"按位异或"的运算标准答案:A知识点解析:以#开头的语句为编译预处理命令行,||为逻辑或运算符,~表示按位取反运算符,答案选A。国家二级C语言机试(选择题)模拟试卷第2套一、选择题(本题共40题,每题1.0分,共40分。)1、数据的存储结构是指A、存储在外存中的数据B、数据所占的存储空间量C、数据在计算机中的顺序存储方式D、数据的逻辑结构在计算机中的表示标准答案:D知识点解析:在对数据进行处理时,各数据元素在计算机中的存储关系,即为数据的存储结构。2、若有以下程序段doublex=5.16894;printf("%f\n",(int)(x*1000+0.5)/(double)1000);则程序段的输出结果是A、5.175000B、5.169000C、5.170000D、5.168000标准答案:B知识点解析:(int)(x*1000+0.5)/(double)1000表达式功能,保存数据x的后三何小数,把第四四舍五入。3、sizeof(double)是A、一个双精度型表达式B、一个整型表达式C、一个不合法的表达式D、一种函数调用标准答案:B知识点解析:sizeof关键字为C语言的运算符,用于测试()内类型其变量所占内存,表达式结果返回卜进制整数,因此为整型表达式,表明变量所占的内存字节数。4、对长度为n的线性表作快速排序,在最坏情况下,比较次数为A、nB、n-1C、n(n-1)D、n(n-1)/2标准答案:D知识点解析:假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n-1)/2。快速排序法也是一种互换类的排序方法,但由于它比冒泡排序法的速度快,因此,称为快速排序法。5、设二叉树的前序序列与中序序列均为ABCDEFGH,则该二叉树的后序序列为A、HGFEDCBAB、ABCDEFGHC、ABCDHGFED、DCBAHGFE标准答案:A知识点解析:前序遍历(DLR)是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根芹右;中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游,可记做左根右;后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,可记做左右根。根据题中前序和中序序列均为ABCDEFGH,可画出二义树,该二叉树是一个子结点全部在右侧二义树,然后根据后序遍历方法,可得出后序遍历为HGFEDCBA。6、若有如下说明,且int类型占两个字节,则正确的叙述为()。structstfinta;intb[2];}a;A、结构体变量a与结构体成员a同名,定义是合法的B、程序只在执行到该结构体时才为结构体st分配存储单元C、程序运行时为结构体st分配8字节存储单元D、类型名structst可以通过extern关键字提前引用标准答案:A知识点解析:本题主要考查结构体的用法:①结构体变量a与结构体成员a同名,定义合法;②在程序编译的时候结构的定义并不会使系统为该结构分配内存空间,只有在说明结构变量时才分配内存空间;③inta占2个字节,intb[2]占4个字节,共6个:④类型名“structst”不可以通过extern关键字提前引用。7、在数据库管理系统提供的数据语言中,负责数据模式定义的是()。A、数据定义语言B、数据管理语言C、数据操纵语言D、数据控制语言标准答案:A知识点解析:在数据库管理系统提供的数据语言中,数据定义语言负责数据模式定义的功能,答案选A。8、软件系统总体结构图的作用是A、描述软件系统结构的图形工具B、描述软件系统的控制流C、描述软件系统的数据流D、描述软件系统的数据结构标准答案:A知识点解析:软件系统总体结构图的作用是描述软件系统结构的图形工具。9、下列叙述中错误的是()。A、一个C语言程序只能实现一种算法B、C程序可以由多个程序文件组成C、C程序可以由一个或多个函数组成D、一个C函数可以单独作为一个C程序文件存在标准答案:A知识点解析:一个C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个C语言程序可以实现多种算法。答案选A。10、已定义以下函数intfun(int*P){return*P;}fun函数的返回值是()。A、一个整数B、不确定的值C、形参P中存放的值D、形参P的地址值标准答案:A知识点解析:返回值为指针变量指向的数据,该数据已被定义为整型,因此A选项正确。11、以下选项中,能用作用户标识符的是()。A、_0_B、8_8C、voidD、unsigned标准答案:A知识点解析:考查用户标识符。C语言规定,标识符由字母(A~Z,a~z)、数字(0~9)或者下划线(_)组成,并且第一个字符必须为字母或者下划线。用户自定义的标识符不能与关键字相同,而且尽量避免与预定义标识符相同。选项B)不能以数字开始;选项C)、D)为C语言关键字,不能作为用户标识符。答案选A)。12、以下选项中合法的标识符是A、1-1B、1_1C、_11D、1__标准答案:C知识点解析:本题考查标识符定义。合法标识符的要求是由下划线、英文大小写字母和数字组成的字符串,且第一个字符必须是字母或下划线。13、以下叙述中正确的是A、标识符的长度不能任意长,最多只能包含16个字符B、语言中的关键字不能作变量名,但可以作为函数名C、用户自定义的标识符必须“见名知义”,如果随意定义,则会出编译错误D、标识符总是由字母、数字和下划线组成,且第一个字符不得为数字标准答案:D知识点解析:标识符就是C语言中的变量名、函数名、数组名、文件名、类型名等。C语言合法标识符的命名规则是:①标识符由字母、数字和下划线组成;②第一个字符必须为字母或下划线;⑨大写字母与小写字母被认为是两个不同的字符;④C语言规定了一个标识符允许的字符个数,为32,超过的字符将不被识别。C语言的标识符可分为以下3类:①关键字,不能用于为自定义标识符命名。②预定义标识符。③用户标识符。由用户根据需要定义的标识符称为用户标识符,又称自定义标识符,一般用来给变量、函数、数组等命名,一般做到见名知义,但是没有特殊规定。14、已知大写字母A的ASCII码是65,小写字母a的ASCII码是97。以下不能将变量c中的大写字母转换为对应小写字母的语句是A、c=(’A’+C)26-’a’B、c=C+32C、c=C-’A’+’a’D、c=(C一’A’)%26+’a’标准答案:A知识点解析:由题意可知,小写字符a和大写字符A的ASCII代码相差为32,所以选项C能将大写字符C的ASCII代码转换为小写字符c的ASCII代码;选项D和C左侧的表达式都是大写字符C与大写字符A的差与’a’的ASCII代码的和就是小写字符c的ASCII代码。而选项A中应该是加上’a’,而不是减去’a’。15、设文件指针fp已定义,执行语句fp=fopen("file","w");后,下列针对文本文件file操作叙述的选项中正确的是()。A、只能写不能读B、写操作结束后可以从头开始读C、可以在原有内容后追加写D、可以随意读和写标准答案:A知识点解析:考查文件操作函数fopen的基础知识。以w方式打开文件时只能写不能读。16、读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是()。A、一个内存块的字节数B、一个整型变量,代表待读取的数据的字节数C、一个文件指针,指向待读取的文件D、一个内存块的首地址,代表读入数据存放的地址标准答案:D知识点解析:fread(void*buffer,sizetsize,sizetcount,FILE*stream)的功能是从一个文件流中读数据,读取count个元素,每个元素size字节,如果调用成功,返回count。buffer用于接收数据的内存地址,大小至少是size*count字节;size是单个元素的大小,单位是字节;count是元素的个数,每个元素是size字节;stream是输入流。17、以下能正确定义字符串的语句是A、charstr="\x43":B、charstr[]="\0";C、charstr=";D、charstr[]={’\064’};标准答案:B知识点解析:字符串常量是用一对双括号括起来的一串字符。它用字符数组来存放,不用一对大括号对括起来。18、设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为A、课号,成绩B、学号,成绩C、学号,课号D、学号,姓名,成绩标准答案:C知识点解析:关键字是指属性或属性的组合,其值能够唯一地标识一个元组,而在SC中学号和课号的组合可以对元组进行唯一的标识。19、C语言中double类型数据占字节数为A、4B、12C、8D、16标准答案:C知识点解析:double类型所占字节为8。20、以下函数按每行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)printf("\n");D、if(i%8==0)continue;标准答案:A知识点解析:本题考查判断语句与循环语句。欲使每行输出8个数据,则必然使用取余运算,当i%8==0时先输出一个换行符再输出字符。选项D中,continue语句的作用是停止执行本次循环位于continue后面的语句,而进入下一次循环。21、有以下程序#includevoidmain(){intc=0,k;for(k=1;k<3;k++)switch(k){default:c+=k;case2:c++;break;case4:c+=2;break;}printf("%d\n",c);}A、9B、7C、5D、3标准答案:D知识点解析:在这段程序中,整型变量c的初始值赋为0,在第一次执行for循环语句时,因为此时变量k的值等于1,所以在switch语句中首先执行default语句,给变量c的值加1,因为在default语句后面没有break语句,所以就会接着执行case2这条语句,再给变量c的值加1,其值变为2,这时退出switch语句块,进入第二次for循环,此时k的值等于2,就会执行switch语句块中的case2这条语句,再给变量c的值加1,这时变量c的值就是3,此时退出switch语句块,循环变量k的值加1,成为3,此时已不再满足循环条件,执行程序中的最后一条语句,把变量c的值在屏幕上输出。22、有以下程序#include#includevoidfun(chars[][10],intn){chart;inti,j;for(i=0;is[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个字符串。23、若有以下程序,则程序的输出结果是#ineludemain(){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。24、有以下程序#includeintfun(){staticintx=1;x*=2:returnx;)main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();pfintf("%d\n",s);}程序运行后的输出结果是A、0B、10C、30D、64标准答案:D知识点解析:本题考查了静态局部变量,该局部变量的值在函数调用结束后如果不消失而保留原值。函数fun的功能返回2的乘方,主函数fun函数调用3次,因此第一次s累乘2,第二次累乘4,第三次累乘8,即为2*4*8,值为64。25、有以下程序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)”这是一个递归函数t所以在主函数调用fun(7)的时候,其过程为:“fun(7)=7-fun(5)=7-(5-fun(3))=7-(5-(3-fun(1)))=7-(5-(3-3))=7.5=2”,所以最后的输出结果为2。26、以下叙述中正确的是A、对于变量而言,“定义”和“说明”这两个词实际上是同一个意思B、在复合语句中不能定义变量C、全局变量的存储类别可以是静态类D、函数的形式参数不属于局部变量标准答案:C知识点解析:用static说明符说明全局变量时,此变量可称作静态全局变量。静态全局变量只限于本编译单位使用,不能被其他编译单位所引用。在一个函数内部定义的变量(包括形参)是局部变量,它只在本函数范围内有效。不同函数中可以使用相同名字的局部变量,它们代表不同的对象,互不影响。在函数内部复合语句中也可以定义变量,这些变量都是局部变量,只在本复合语句中有效。27、以下数组定义中错误的是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知识点解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。在选项A中赋值号左边定义了一个3行2列的二维数组,而右边用2行3列的数字进行赋初值。所以出现了边界的越界溢出而出错。28、有以下程序#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中元素的值。29、若有走义语句:doublex[5]={1.0,2.0,3.o,4.0,5.0),*p=x;则错误引用x数组元素的是A、*pB、x[5]C、*(p+1)D、*x标准答案:B知识点解析:本题考查数组和指向数组的指针。x是一个一维double类型的数组,长度为5,下标范围是0-4,指针p指向数组x。选项A)中*p是取数组首元素x[0]的值;选项B)下标超出范围;选项C),p+1表示x[1]的地址,因此*(p+1)是取x[1]元素值;选项D)中,数组名x本身代表数组的首地址,因此*x表示取元素x[0]的值。30、有以下程序#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、5634B、3456C、1256D、5612标准答案:A知识点解析:在一个源文件中如果外部变量和局部变量同名,则在该局部变量的作用域内,该外部变量会被"屏蔽",所以函数fun1()输出的为局部变量a、b的值:56;fun2()改变的是全局变量a、b的值,输出结果为34,答案选A。31、有如下程序#includevoidconvert(charch){if(ch<’D’)convert(ch+1);printf("%c",ch);}main(){convert(’A’);printf("\n");}程序运行后的输出结果是()。A、DCBAB、ABCDC、AD、ABCDDCBA标准答案:A知识点解析:函数conver()的作用是输出ASCII码在字母′D′到字母ch之间的字符,答案选A)。32、有以下程序#include#includestructA{inta;charb[10];doublec;};voidf(structAt);main(){structAa={1001,"ZhangDa",1098.0};f(a);printf("%d,%s,%6.1f\n",a.a,a.b,a.c);}voidf(structAt){t.a=1002;strcpy(t.b,"ChangRong");t.c=1202.0;}程序运行后的输出结果是A、1002,ChangRong,1202.0B、1001,ChangRong,1098.0C、1001,ZhangDa,1098.0D、1002,ZhangDa,1202.0标准答案:C知识点解析:本题主要考查是的函数调用时参数之间的传递问题。在C语言中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。所以对于本题来说,在主函数中执行f(a),把结构体变量a的值复制一份传递给形参变量t,而实参变量a的值保持不变。33、若有以下程序#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、5,3,5,3,5B、3,5,5,3,5C、3,5,3,5,5D、5,3,3,5,5标准答案:A知识点解析:考查指针与函数。该函数进行的是地址传参,形参和实参指向的变量的值保持一致。函数f()中,如果(*s<*t)则将指针s、t中指向的变量的数据进行交换,s指向的地址中存放的是值较大的数据。函数调用结束后,p、q指向的值发生了改变,r和p的指向保持一致,所以答案选A。34、有以下程序#include<stdio.h>main()voidfun(char*c,intd){charb=’a’,a=’A’;{*c=*c+1;d=d+1;fun(&b,a);printf("%c,%c\n",b,a);printf("%c,%c,",*c,d);}}程序运行后的输出结果是A、b,B,b,AB、b,B,B,AC、a,B,B,aD、a,B,a,B标准答案:A知识点解析:本题中fun函数的参数传递方式,形参c是传地址,形参d是传值,所以在主函数中,执行胁时,把变量b的地址传给了c,把a的值传递给了d,经过运算,输出的值为b.B。在主函数的输出语句中,输出变量b的值为b,变量a的值为A。35、有以下程序段TypedefstructNODE{inthum;structNODE*next;}OLD;以下叙述中正确的是A、以上的说明形式非法B、NODE是一个结构体类型C、OLD是一个结构型类型D、OLD是一个结构变量标准答案:C知识点解析:本题考查结构体和typedf类型定义。本题的声明代码相当于两部分,首先定义structNODE,然后是一typedef定义OLD类型,因此OLD是结构体类型。选项C正确,其他选项错误。36、以下叙述中错误的是A、函数的返回值类型不能是结构体类型,只能是简单类型B、只要类型相同,结构体变量之间可以整体赋值C、可以通过指针变量来访问结构体变量的任何成员D、函数可以返回指向结构体变量的指针标准答案:A知识点解析:函数的返回值类型可以是结构体类型。结构体变量之间可以相互复制。37、在关系模型中,每一个二维表称为一个A、关系B、属性C、元组D、主码(键)标准答案:A知识点解析:关系模型采用二维表来表示,即每个二维表称为一个关系。38、有三个关系R,S和T如下:则由关系R和S得到关系T的操作是A、选择B、差C、交D、并标准答案:D知识点解析:关系T中的元素与关系R和关系S中不同元素的总和,因此为并操作。39、下列与队列结构有关联的是A、函数的递归调用B、数组元素的引用C、多重循环的执行D、先到先服务的作业调度标准答案:D知识点解析:队列的修改是依先进先出的原则进行的,D正确。40、以下叙述中正确的是A、复合语句在语法上包含多条语句,其中不能定义局部变量B、花括号对{}只能用来表示函数的开头和结尾,不能用于其他目的C、空语句就是指程序中的空行D、当用scanf从键盘输入数据时,每行数据在没按下回车键(Enter键)前,可以任意修改标准答案:D知识点解析:复合语句可以包含多条语句,在其中可以定义局部变量,所以A错误。花括号对{}不仅用来表示函数的开头和结尾,也可以用于表示复合语句,所以B错误。C语言中的语句必须以分号";"结束,所以空语句表示为";",不是空行,所以C错误。国家二级C语言机试(选择题)模拟试卷第3套一、选择题(本题共25题,每题1.0分,共25分。)1、深度为5的完全二叉树的结点数不可能是()。A、15B、16C、17D、18标准答案:A知识点解析:对于满二叉树,叶子结点的数目等于2n-1,n为深度,这里就是24=16。2、下列叙述中正确的是()。A、二分查找法只适用于顺序存储的有序线性表B、二分查找法适用于任何存储结构的有序线性表C、二分查找法适用于有序循环链表D、二分查找法适用于有序双向链表标准答案:A知识点解析:二分查找法(又称对分查找法)只适用于顺序存储的有序表。在此所说的有序表是指线性表的中元素按值非递减排列(即从小到大,但允许相邻元素值相等)。3、以下程序运行后的输出结果是()。#include<stdio.h>main(){inti=0,j=0,k=0,x=35;if(i)x--;elseif(j);if(k)x=3;elsex=4;prinff("%d\n",x);}A、4B、34C、3D、35标准答案:A知识点解析:本题是两个并列的if语句。当inti=0;j=0,k=0,x=35时,i的逻辑值为0,故第一个if语句的条件为假,执行else操作。又因j=0,故第二条if语句if(j)的条件仍为假,不执行任何操作。接着顺序执行至if(k)语句,由于k=0,此if语句的条件仍为假,执行其后的else语句,x=4,故最后x的值为4。4、设某棵树的度为3,其中度为3、2、1的结点个数分别为3、0、4。则该树中的叶子结点数为A、7B、8C、6D、不可能有这样的树标准答案:A知识点解析:树的度是指一棵树中,最大的结点的度称为“树的度”。根据题目可知本树中没有度为2的结点。树的总结点=(度1*个数+度2*个数…)+1,这里我们设总结点数为n,那么n=3*3+2*0+1*4+1=14。树的叶子结点数等于总结点减去所有度不为0的结点,也就是14.3-4=7。5、下列排序方法中,最坏情况下比较次数最少的是A、冒泡排序B、简单选择排序C、直接插入排序D、堆排序标准答案:D知识点解析:冒泡排序、简单选择排序和直接插入排序法在最坏的情况下比较次数为:n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为O(nlog2n)。其中堆排序的比较次数最少。6、表达式3.6-5/2+1.2+5%2的值是A、4.8B、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,因为除法运算符两边的数值类型均为整型,故运算结果的数值类型也被认定为整型。7、下列选项中不符合良好程序设计风格的是A、源程序要文档化B、数据说明的次序要规范化C、避免滥用goto语句D、模块设计要保证高耦合、高内聚标准答案:D知识点解析:一般来讲,程序设计风格是指编写程序时所表现出的特点、习惯和逻辑思路。程序设计风格总体而言应该强调简单和清晰,程序必须是可以理解的。可以认为,著名的“清晰第一、效率第二”的论点已成为当今主导的程序设计风格。良好的程序设计风格主要应注重和考虑下列几个因素:①源程序文档化,包括下列三个方面:A)符号的命名应具有一定的含义;B)正确的注释能够帮助读者理解程序;C)视觉组织,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。②数据说明的方法,包括下列三个方面:A)数据说明的次序规范化;B)说明语句中变量安排有序化;C)使用注释来说明复杂数据的结构。③语句的结构应该简单直接,不应该为提高效率而把语句复杂化。④输入和输出方式和风格应尽可能方便用户的使用。8、以下关于逻辑运算符两侧运算对象的叙述中正确的是A、只能是整数0或非0整数B、可以是结构体类型的数据C、可以是任意合法的表达式D、只能是整数0或1标准答案:C知识点解析:逻辑运算符两侧的运算对象叮以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。9、有以下程序main(){chara,b,c,d;Scanf("%C%c",&a,&b);c=getchar();d=getchar();printf("%c%c%c%c\n",a,b,c,d);}当执行程序时,按下列方式输入数据(从第1列开始,代表回车,注意:回车也是一个字符)1234则输出结果是A、12B、1234C、123D、1234标准答案:C知识点解析:scanf和getchar函数分别从键盘上读入一个字符,因此输入12空格34,则变量a中存放的为1,b中存放2,c中存放空格,d中存放3。10、不合法的C语言常量是()。A、3,141B、’314’C、314D、’\x7G’’标准答案:A知识点解析:选项A错误,多了逗号;选项B是字符常量;选项C是整型常量;选项D是字符常量。11、有以下函数:intaaa(char*s){char*t=s:while(*t++);t一一:return(t—s);}以下关于aalt函数功能叙述正确的是()。A、将串s复制到串tB、比较两个串的大小C、求字符串s的长度D、求字符串s所占字节数标准答案:C知识点解析:本题重点考查的知识点是while循环语句的应用。aaa.()函数中,首先定义了一个字符指针t指向形参s,然后通过一个while循环让指针t不断递增,直到t指向字符串结束标识处。当t指向结束标识处时,由了后缀++运算符的原因,它还会被再递增1,所以接下来的t一语句让它回到束标识处。最后返回t—s,s还是指向字符串第一个字符处,而t指向了字符串结尾,故返回值为字符串的长度值,因此C选项正确。12、若有以下程序:#include<stdio.h>voidfun(inta[],intn){inti,j,t;for(i=1;i<n;i+=2)for(j=i+2;j<n;j+=2)if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intc[10]={10,9,8,7,6,5,4,3,2,1},i;fun(c,10);for(i=0;i<10;i++)printf(″%d,″,c[i]);printf(″\n″);}则程序的输出结果是()。A、1,10,3,8,5,6,7,4,9,2,B、10,9,8,7,6,5,4,3,2,1,C、2,9,4,7,6,5,8,3,10,1,D、10,1,8,3,6,5,4,7,2,9,标准答案:D知识点解析:该题首先对一维数组进行初始化,c[0]到c[9]依次赋值为10到1。fun(c,10);语句调用fun函数,fun函数的功能是将一维数组偶数位元素的数值由小到大排序,最后将排好序的新的一维数组进行输出、故D选项正确。13、若有代数式(其中e仅代表自然对数的底数,不是变量),则以下能够正确表示该代数式的C语言表达式是()。A、sqrt(fabs(pow(n,x)+exp(X)))B、sqrt(fabs(pow(n,x)+pow(x,e)))C、sqrt(abs(n^x+e^x))D、sqrt(fabs(pow(x,n)+exp(x)))标准答案:A知识点解析:B选项中函数pow(x,e)错误,应该直接使用exp(x)函数。C选项中函数abs(n^x+e^x)错误,应该使用fabs()返回浮点数的绝对值。D选项中pow(x,n)参数顺序错误。14、下面选项中合法的字符常量是A、XB、’abc’C、’X’D、’\’标准答案:C知识点解析:在程序中用单引号把一个字符括起来作为字符常量。但是为了表示字符“\”要用两个“\\”表示一个反斜杠。15、有以下函数:intfun(char*x,char*y){intn=0;while((*x==*y)&&*x!=’\0’){x++;y++;n++:}returnn:}函数的功能是()。A、将y所指字符串赋给x所指存储空间B、查找x和y所指字符串中是否有’\0’C、统计x和y所指字符串中最前面连续相同的字符个数D、统计x和y所指字符串中相同的字符个数标准答案:C知识点解析:本题中由循环条件可知,遇到’\0’或x与y所指的字符的值不等中的一个条件时就结束,所以功能是统计x和y所指字符串中最前面连续相同的字符个数。16、设有定义:intk=1,m=2;floatf=7;,则以下选项中错误的表达式是A、k=k>=kB、-k++C、k%int(0D、k>=f=m标准答案:C知识点解析:本题考查了赋值表达式,在赋值表达式中,等号的左边必须是变量,等号右边可以是变量、表达式或者常量。选项A)是一个赋值表达式;选项B)是一个表达式:选项C)是计算余数表达式;选项D)错误,等号的左边不是变量。17、以下选项中不能作为c语言合法常量的是A、’cd’B、0.1e+6C、\aD、’\011’标准答案:A知识点解析:常量指的是在程序的运行过程中,其值不能被改变的量。在C语言中,包括整型常量、实型常量、字符常量和字符串常量等类型。选项B)0.1e+6是用指数形式表示的实型常量。在C语言中,用以“e”或“E”后一个整数来表示以10为底的幂数。以用这种形式表示实型常量时要注意C语言的语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数,并且在字母e或E的前后以及数字之间不得插入空格。选项C)中用双引号括起来表示的字符串“\a”。选项D)中’\011’表示用单引号括起来的转义字符八制进数011。选项A)表示的字符常量是非法的,在用单引号表示的字符常量中,只能包含一个字符,而选项A)中包含两个字符。18、以下叙述中正确的是A、由&&构成的逻辑表达式与由||构成的逻辑表达式都有“短路”现象B、C语言的关系表达式:0<xC、逻辑“非”(即运算符!)的运算级别是最低的D、逻辑“或”(即运算符||)的运算级别比算术运算要高标准答案:A知识点解析:逻辑表达式的运算比较复杂,有短路现象,也就是首先计算“逻辑与”或者“逻辑或”运算的第一个运算量的值,根据表达式的值决定是否进行第二个量的值的计算。“逻辑与”和“逻辑或”运算低于关系运算和算术运算。但是“逻辑非”运算却高于算术运算。19、有以下程序#includemain(){inta=0,b=0;/*给a赋值a=10;b=20;给b赋值*/printf("a+b=%d\n",a+b);/*输出计算结果*/}程序运行后的输出结果是A、出错B、a+b=30C、a+b=10D、a+b=0标准答案:D知识点解析:注释语句可以在一行也可以在多行,用/*……*/或//表示,。它不参与程序的运行,所以a与b的值仍然为0,所以打印的结果为a+b=0。20、有以下程序#includemain(){inti=1,k=0;for(;i<6;){switch(i%3){case0:k++;case1:k++;break;case2:k++;continue;}i+=1;}printf("%d\n",k);}程序的运行情况是()。A、形成无限循环B、输出6C、输出5D、输出4标准答案:A知识点解析:break语句用于循环体,可以跳出当前层循环,continue语句的作用则是跳过当前循环层余下未执行的语句,继续执行下一次循环。在该程序中当i为2的时候执行语句"case2:k++;continue;"跳过了i自加语句"i+=1;",所以i值不再变化,程序陷入死循环,答案选A。21、有下列程序:inta=4;intf(intn){intt=0;staticinta=5;if(n%2){inta=6;t+=a++;}else{inta=7;t+=a++;}returnt+a++;}main(){ints=a,i=0;for(;i<2;i++)s+=f(i);printf("%d\n",s);}程序运行后的输出结果是A、28B、24C、32D、36标准答案:A知识点解析:程序中定义了全局整型变量a=4。在intf(intn)函数中定义了局部静态整型变量并进行了初始化即staticinta=5。在intf(intn)函数中对n是否是偶数进行判断,如果n是奇数,则函数的返回值为11,局部静态整型变量a=6;如果n是偶数,则函数的返回值为12,局部静态整型变量a=6。所以在main()函数中循环首先执行s+=f(0)语句,而f(0)返回值12,所以第一次循环结束s的值等于4+12=16:第二次开始执行f(1)时,在f(1)中执行if(n%2){inta=6;t+=a++;}和returnt+a++;这两条语句,这时t=6,a=6(静态局部变量第一次循环后其值加1值不释放,执行第二次循环量,其值仍有效),所以f(1)的返回值等于12。再在主函数中执行s+=f(1)语句,即16+12=28。22、有以下程序#includeintfun1(doublea){return(int)(a*=a);}intfun2(doublex,doubley){doublea=0,b=0;a=fun1(x);b=fun1(y);return(int)(a+b);}main(){doublew;w=fun2(1.1,2.0);printf("%4.2f",w);}程序执行后输出结果是()。A、5.00B、5C、5.21D、0.0标准答案:A知识点解析:考查函数的嵌套调用。w=fun2(1.1,2.0)=(int)(a+b)=(int)(fun1(1.1)+fun1(2.0))=(int)(1.1*1.1+2.0*2.0)=5,所以答案选A。23、若变量已正确定义,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其输出结果是A、0,0B、1,1C、0,1D、程序进入无限循环标准答案:C知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语句。②计算while后一对圆括号中表达式的值。当值为非0时,转去执行步骤①;当值为0时,执行步骤③。③退出do…while循环。对于本题变量i的初始值等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。再判断while后面括号中表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已经变为1,所以再次输出i的值“1”。24、有以下程序voidfun(char*s){chara[10];main(){char*p="PROGRAM";strcpy(a,"STRING");fun(p);s=a;}printf("%s\n",p);}程序运行后的输出结果是(此处□代表空格)A、STRING□□□□B、PROGRAMC、STRING□□□D、STRING标准答案:B知识点解析:函数fun的主要功能是把字符串"STRING",存放到字符数组a中,s指向该字符串,函数调用结束以后,释放s和a指向的空间。主函数调用fun(p),并不能更改D的值,因此p的指向没有改变。25、C语言主要是借助以下哪种手段来实现程序模块化A、定义函数B、定义常量和外部变量C、使用丰富的数据类型D、使用三种基本结构语句标准答案:A知识点解析:C语言程序的模块化通过函数来体现,所以选择A。国家二级C语言机试(选择题)模拟试卷第4套一、选择题(本题共25题,每题1.0分,共25分。)1、下列叙述中正确的是A、循环队列是队列的一种链式存储结构B、循环队列是队列的一种顺序存储结构C、循环队列是非线性结构D、循环队列是一种逻辑结构标准答案:B知识点解析:本题主要考查循环队列的概念,循环队列作为队列的一种也应该是线性结构。队列是一种逻辑结构,而循环队列是一种顺序存储结构的队列。2、下列叙述中正确的是A、线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的B、线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构C、线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构D、以上都不正确标准答案:B知识点解析:线性表的存储分为顺序存储和链式存储。在顺序存储中,所有元素所占的存储空间是连续的。而在链式存储的方式中,将存储空间的每一个存储结点分为两部分,一部分用于存储数据元素的值,称为数据域;另一部分用于存储下一个元素的存储序号,称为指针域。所以线性表的链式存储方式比顺序存储方式的存储空间要大一些。3、设有定义:longx=745321L,则能正确输出变量x的语句是()。A、printf("x=%d\n",x);B、printf("x=%LD\n",x);C、printf("x=%d1\n",x);D、printf("x=%1d\n",x);标准答案:D知识点解析:本题考查C语言中长整型数据的输出。在题中格式控制符只有采用格式字符%1d,且必须是小写字母d,才能表示输出长整型数据x。4、在最坏情况下()。A、快速排序的时间复杂度比冒泡排序的时间复杂度要小B、快速排序的时间复杂度比希尔排序的时间复杂度要小C、希尔排序的时间复杂度比直接插入排序的时间复杂度要小D、快速排序的时间复杂度与希尔排序的时间复杂度是一样的标准答案:C知识点解析:在最坏情况下,快速排序、冒泡排序和直接插入排序所需要的比较次数为O(n2),希尔排序所需要的比较次数为O(n1.5),所以答案选C。5、下面程序的输出是()。main(){inti=9;for(;i>0;i--){if(i%3==0){printf("%d",--i);continue;}}}A、741B、852C、963D、875421标准答案:B知识点解析:本题考查continue的应用。程序中for循环体内有一个continue语句,它的功能是提前结束本次循环体(即循环体的后半部分不执行了),直接来到下一次循环的条件判断。本题中,当i值为3的倍数(9,6,3)时,表达式i%3值为0,输出--i(8,5,2),否则无输出。第6次循环结束后,i--使i得0,此时i>0为假,循环结束。6、若有定义语句:chars[10]="1234567\0\0";,则strlen(s)的值是A、7B、8C、9D、10标准答案:A知识点解析:本题考查字符串数组和字符串函数。数组s有7个数字,然后跟着结束符“\0”,因此数组s的长度为7。7、若有定义:doublea=22;inti=0,k=18;,则不符合C语言规定的赋值语句是()。A、i=(a+k)<=(i+k);B、i=a%11;C、a=a++,i++D、i=!a;标准答案:B知识点解析:取模运算符“%”、二元运算符具有左结合性,参与运算的量均为整型。B选项中的a变量是double实型,不符合规定。8、下列叙述中正确的是A、对象标识具有唯一性B、属性是对象的动态属性C、任何对象都必须有多态性D、对象是对象属性和方法的封装体标准答案:A知识点解析:每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。9、有以下程序#includeintfun(inta,intb){if(b==0)returna;elsereturn(fun(--a,--b));}main(){printf("%dha",fun(4,2));)程序的运行结果是A、1B、2C、3D、4标准答案:B知识点解析:由程序可知函数fun(inta,intb)是一个递归函数。所以当主函数中调用fun(4,2)时,其执行过程如下:fun(4,2)->fun(3,1)->fun(2,0),其返回值为2。10、以下关于C语言数据类型使用的叙述中错误的是A、若要保存带有多位小数的数据,可使用双精度类型B、若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型C、若只处理“真”和“假”两种逻辑值,应使用逻辑类型D、整数类型表示的自然数是准确无误差的标准答案:C知识点解析:在C语言中没有定义逻辑类型,而是用0代表假,用非零代表真。11、以下关于retum语句的叙述中正确的是A、一个自定义函数中必须有一条return语句B、一个自定义函数中可以根据不同情况设置多条return语句C、定义成yoid类型的函数中可以有带返回值的return语句D、没有retum语句的自定义函数在执行结束时不能返回到调用处标准答案:B知识点解析:retum语句土要用于返回函数的值。在一个自定义函数中,可以根据不同的情况设置多条retum语句返回函数的值。12、以下叙述中错误的是A、C程序在运行过程中所有计算都以二进制方式进行B、所有C程序都需要编译链接无误后才能运行C、C程序在运行过程中所有计算都以十进制方式进行D、C程序中字符变量存放的是字符的ASCII值标准答案:C知识点解析:计算机程序都是编译为二进制的代码,计算机才会执行。13、以下选项中表示一个合法的常量是(说明:符号□表示空格)A、123E0.2B、2.7e□C、0999□D、0Xab标准答案:D知识点解析:本题考查C语言中的常量。选项A字母E后面必须是整型数,浮点数错误:选项B字母e后面没有整型数:选项C以0开始表示8进制数,8进制数没有9;选项D是一个正确的16进制常数。14、以下合法的字符型常量是A、’\x13’B、’\081’C、’65’D、’/n’标准答案:A知识点解析:本题考查字符型常量。选项A)正确,使用了转义字符“\”,x13表示16进制的13;选项B)同样使用了转义字符,但081错误,以0开始表示8进制,8进制数字的范围是0.7,没有8;选项C)错误,65是一个字符串,不是字符;选项D)错误,换行符是“\n”。15、有以下程序#includemain(){inta=5,b=1,t;t=(a<<2)|b;printf("%d\n",t);}程序运行后的输出结果是()。A、1B、11C、6D、21标准答案:D知识点解析:本题考查位运算,以及按位或操作,将a左移一位相当于是将a乘以了4,所以a<<2等于20,二进制表示为00010100,与b按位或得到00010101,即21,所以选项D正确。16、有以下程序#includeintfun(char*s){char*p=s;while(*p!=0)p++;return(p-s);}main(){printf("%d\n",fun("goodbey!"));}程序的输出结果是A、6B、8C、0D、7标准答案:B知识点解析:函数fun的主要功能是计算字符串中实际字符的个数,因此"goodbey!"含有字符为8,返回值为8。17、以下叙述中正确的是A、函数名代表该函数的入口地址B、所有函数均不能接受函数名作为实参传入C、函数体中的语句不能出现对自己的调用D、如果函数带有参数,就不能调用自己标准答案:A知识点解析:函数形、实参传递的时候,要求对应位置类型一致即可,如果实参为函数名,可以定义相应的形参为指向函数的指针变量来获得该函数的入口地址,因此选项B)错误的,在C语言中允许进行递归调用,即自己调用自己,选项C)和选项D)是错误的。18、以下程序的主函数中调用了其前面定义的fun函数#include<stdio.h>……main(){doublea[15],k;k=fun(a);}则以下选项中错误的fun函数首部是A、doublefun(doublea[15])B、doublefun(double*a)C、doublefun(doublea[])D、doublefun(doublea)标准答案:D知识点解析:本题考查函数的定义和调用。根据对fun函数的调用可知,fun函数的返回值为double类型的,输入参数是一个double类型的地址(指针),因此选项D)错误。19、有下列程序:#include/*fun函数的功能是将a所指数组元素从大到小排序*/voidfun(int*a,intn)main(){intt,i,j;{intc[10]={1,2,3,4,5,6,7,8,9,0),j;for(i=0;iA、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}。20、有以下程序#include<stdio.h>intfuna(inta,intb){retuma+b;}intfunb(inta,intb){returna-b;}intsss(int(*t)(),intx,inty){retum((*t)(x,y));}main(){intx;X=SSS(funa,9,3);x+=sss(funb,8,3);printf("%d\n",x);}程序运行后的输出结果是A、17B、23C、24D、22标准答案:A知识点解析:函数funa的功能计算两个数据的和,funb的功能计算两个数据的差,函数sss中利用指向函数的指针作为函数的参数,可以在调用的时候,根据接收的函数地址来决定调用那一个函数。主函数中调用x=sss(funa,9,3),将funa函数的地址传递给t,因此sss函数成为求两个数据的和12,继续将funb函数地址传给t,求两个数据差为5,和s累加后结果为17。21、以下叙述中正确的是A、charca[3][5]={"A","BB","CCC"};是不合语法的B、字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组C、charca[][5]={"A","BB","CCC"};是不合语法的D、char*ca[3]={"A","BB","CCC"};是不合语法的标准答案:B知识点解析:字符串数组,也就是二维字符数组,其中每个元素为一个字符串,选项B)的说法正确。选项A)和C)对于ca的定义是正确的。选项D)定义一个指针数组,可以保存多个字符串的首地址。22、在数据库设计中,将E-R图转换成关系数据模型的过程属于()。A、需求分析阶段B、概念设计阶段C、逻辑设计阶段D、物理设计阶段标准答案:C知识点解析:E-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。23、有以下程序:#includemain(){chars[]="012xy\08s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=’0’&&s[i]<=’9’)n++;printf("%d\n",n);}程序运行后的输出结果是()。A、0B、3C、7D、8标准答案:B知识点解析:本题中遇到"\"字符循环结束,所以只统计"\"之前的数字字符,所以为3。24、数据库设计过程不包括A、概念设计B、逻辑设计C、物理设计D、算法设计标准答案:D知识点解析:数据库设计过程主要包括需求分析、、概念结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运行和维护阶段。答案为D选项。25、若有以下程序段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选项正确。国家二级C语言机试(选择题)模拟试卷第5套一、选择题(本题共25题,每题1.0分,共25分。)1、下列数据结构中,属于非线性结构的是A、循环队列B、带链队列C、二叉树D、带链栈标准答案:C知识点解析:根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分为两大类:线性结构和非线性结构。循环队列、带链队列和带链栈都是线性结构,而二叉树是非线性结构。2、设有定义:doublex=2.12;,则以下各项中不能完整输出变量x值的语句是()。A、prinff(″x=%5.0f\n″,x);B、printf(″x=%f\n″,x);C、printf(″x=%lf\n″,x);D、printf(″x=%0.5f\n″,x);标准答案:

温馨提示

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

评论

0/150

提交评论