2006年4月计算机等级考试二级C笔试试题5.doc_第1页
2006年4月计算机等级考试二级C笔试试题5.doc_第2页
2006年4月计算机等级考试二级C笔试试题5.doc_第3页
2006年4月计算机等级考试二级C笔试试题5.doc_第4页
2006年4月计算机等级考试二级C笔试试题5.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

2006年4月计算机等级考试二级C笔试试题(28)有如下程序 main() int x=3; do printf(d,x-); while(!x); 该程序的执行结果是_。 A)321 B)3 C)不输出任何内容D)陷入死循环 答案:B 评析:本题x赋初值为3,当执行printf(%d,x-);时,由于X-的作用是先运算x,再将x的值减l,所以,printf输出的x值为3,等输出后,x的值减1变为2,继续执行,判断条件!x为假,循环只被执行一次。 (29)设有声明语句:char a=72;则变量a_ A)包含1个字符B)包含2个字符 C)包含3个字符D)声明不合法 答案:A 评析:转义字符常量xx可以把后面的数字转换为对应的ASCII字符。 (30)有以下程序段: main() int a=5,*b,*c c=&b;b=&a; 程序在执行了c=b;b=&a;语句后,表达式ttc的值是_。 A)变量a的地址B)变量b中的地址 C)变量a中的值D)变量b的地址 答案:C 评析:指针变量是用来存放地址的。&:取地址运算符。+:指针运算符。*c为指针变量*c所指向的存储单元,*c为指针指针变量c所指向的存储单元,而c=&b表示c为变量b的地址,b=&a表示b为变量a的地址。表达式一c的值就是变量a中的值。 (31)有如下函数调用语句 func(recl,rec2+rec3,(rec4,rec5); 该函数调用语句中,含有的实参个数是_。 A)3B)4 C)5 D)有语法错误 答案:A 评析:(rec4,rec5)是逗号表达式,它的值是rec5的值。所以该函数调用语句含有的实参个数是3。 (32)有如下程序 main() char s115=tabc,de,fgh; printf(e,s26); 其输出为_。 A)不确定 B)编译错误 C)gD)输出null字符 答案:A 评析:由于s2116表示字符串已超出了数组s的表示范围,在c中不会对数组越界进行检查,当数组越界时,会得到一个不确定的值。 (33)有如下程序 int rune(ira a,int b) remm(a+b); main() int x=2,y=5,z=8,r; r=func(func(x,y),z); primf(dn,r); 该程序的输出结果是_。 A)12 B)13 C)14 D)15 答案:D 评析:调用函数func(x,y),返回x+y,即7;再调用函数func(7,z),返回7+z,即15。 (34)有如下程序段 int *p,a=10,b=l; p=&a;a=*p+b; 执行该程序段后,a的值为_。 A)12 B)11 C)10 D)编译出错 答案:B 评析:执行p=&a;后,p指向整数a,*p即p的目标变量,也就是a;所以a=*p+b等价于a=a+b,可知a的值最终为11。 (35)有以下程序: int*f(int*x,int*y) if(*x2)return(fib(n-1)+fib(n-2); else return(2); ) main() printf(ldn,fib(3); 该程序的输出结果是_。 A)2B)4 C)6D)8 答案:B 评析:函数舶内部有两个递归调用,当n=3时,fib(n-1)返回2,fib(n-2)也返回2,所以fib(n-I)+fib(n-21的值为4。 (37)下面程序的输出结果是_。 main() char str10,c=a; inti=0: for(;i5;i+) strI=c+; printf(s,str); A)abcde B)a C)不确定D)bcdef 答案:C 评析:字符串少一个结束标志,所以输出的结果不确定。(38)在c语言中,函数中变量的隐含存储类别是_。 A)autoB)static C)externD)无存储类别 答案:A 评析:函数中变量的存储类别包括auto,static,extern,其中auto为隐含存储类别,static为静态存储类别,register是寄存器存储类别。A 评析:函数中变量的存储类别包括auto,static,extern,其中auto为隐含存储类别,static为静态存储类别,register是寄存器存储类别。 (39)有如下程序 #definen2 #definemN+I #defineNUM 2*m+l main() int i; for(i=1;ib?a:b main() int a=5,b=6,c=4,d; d=c+Max(a,b); printf(d,d); 其输出结果为_。 A)10B)5 C)6 D)编译错误 答案:B 评析:在c语言中,宏定义是直接替换的,所以在c+ab?a:b这个条件表达式中,c+ab为真,所以用a的值作为整个表达式的值,而a的值为5,所以整个表达式的值为5。 (43)有如下程序段 inta=14,b=l 5,x; char c=A: x=(a&b)&(cB); 执行该程序段后,x的值为_。 A)trueB)false C)0 D)l 答案:D 评析:a&b的值为true,cB的值也为true,所以(a&b)&(cB)的值为true。但x是int型变量,所以(披&b)&(cB)的值最后要从bool型转换为int型赋给x。这样x的值应为l。(44)下述关于C语言文件的操作的结论中,正确的是_。 A)对文件操作必须先关闭文件 B)对文件操作必须先打开文件 C)对文件操作顺序无要求 D)对文件操作前必须先测文件是否存在,然后再打开文件。 答案:B 评析:在c中对文件操作必须先打开文件,待文件操作完毕后要关闭文件。对文件以读的方式进行打开操作时,同时会执行文件的检查文件是否存在,不存在将会返回空的文件指针,如果对文件以写的方式打开时,文件不存在,将会自动创建文件,因此在C中打开文件前不必对其检查文件是否存在,故答案为B。 (45)下列关键字中,不属于C语言变量存储类别的是_。 A)registerB)auto C)extem D)public 答案:D 评析:变量的存储类别具体包含四种:自动的(auto),静态的(statiC),寄存器的(register),外部的(extern)。 (46)有如下说明 im a10=l,2,3,4,5,6,7,8,9,10,*p=a; 则数值为9的表达式是_。 A)木p+9 B)半(p+8) C)牛p+=9D)p+8 答案:B 评析:p是指针,p+8是地址值,D是错的;*p是p的目标变量,即a0,值为1,所以+p+9的值是lO,而*p+=9值是重新给aO赋了值(1+9);所以A和C也是错的。p+8是地址值,指向a8,那么*(p+8)。的值就是a81的值,即9。 (47)若有以下定义:int t32;能正确表示t数组元素地址的表达式是_。 A)&t32B)t3 C)t1 D)*t2 答案:C 评析:A和B两个表达式都已越界了;*t2是目标变量,即一个整数,而不是地址值。 (48)下面程序运行后的输出结果是_。 struct abc int a,b,c; main() struct abc s2=1,2,3,4,5,6; int t=-s0a+s1b; printf(dn,t); A)5B)6 C)7D)8 答案:B 评析:在main函数中定义了一个struct abc类型的数组,同时分别利用1,2,3及4,5,6对数组中两个元素进行初始化。在该结构体,依次对其中的a,b,c三个变量进行初始化。故sOa=l,s1b=5,所以本题输出为6。 (49)有如下程序 main() int a31131。1,2,3,4,5,6,i,j,s=0; for(i=l;i3;i+) for(j=0;jnext;s-next:p;p-next=s; B)p=p-next;s-next:p-next;p-next=s; C)s-next:NULL;p=p-next;p-next:s; D)p=(*p)next;(*s)next=(*p)next;(*p)next=s; 答案:A 评析:在答案A中:p=p-next;s-next=p;p-next=s;s的确已插到了链表的末尾,但它的next却并没有为NULL,而是指向了它的直叫馨趋p,这样它就不是一个单向链表(单向链表最后一个结点的next指针一定是一个NULL)。 二、填空题(每空2分,共40分) 请将每一个空的正确答案写在答题卡的【1】至【20】序号的横线上,答在试卷上不得分。 (1)在运算过程中,能够使空表与非空表的运算统一的结构是【1】。 答案:【1】循环链表 评析:在链表的运算过程中,采用链接方式即循环链表的结构把空表与非空表的运算统一起来。循环链表具有两个特点: 在循环链表中增加了一个表头结点,其数据域为任意或根据需要来设置,指针域指向线性表的第一个元素的结点。循环链表的头指针指向表头结点。 循环链表中最后一个结点的指针不是空,而是指向表头结点。 (2)软件工程研究的内容主要包括:【2】技术和软件工程管理。 答案:【2】软件开发 评析:基于软件工程的目标,软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。 软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。 软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。 (3)与结构化需求分析方法相对应的是【3】方法。 答案:【3】结构化设计 评析:与结构化需求分析方法相对应的是结构化设计方法。结构化设计就是采用最佳的可能方法设计系统的各个组成部分以及各个成分之间的内部联系的技术。也就是说,结构化设计是这样一个过程,它决定用哪些方法把哪些部分联系起来,才能解决好某个具体且有清楚定义的问题。 (4)关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、【4】和自定义完整性。 答案:【4】参照完整性 评析:关系模型允许定义三类数据约束,它们是实体完整性、参照完整性以及用户定义的完整性约束,其中前两种完整性约束由关系数据库系统自动支持。 实体完整性约束要求关系的主键中属性值不能为空,这是数据库完整性的最基本要求,因为主键是惟一决定元组的,如为空则其惟一性就成为不可能的了。 参照完整性约束是关系之间相关联的基本约束,它不允许关系引用不存在的元组:即在关系中的外键要么是所关联关系中实际存在的元组,要么是空值。 自定义完整性是针对具体数据环境与应用环境由用户具体设置的约束,它反映了具体应用中数据的语义要求。 (5)数据模型按不同的应用层次分为三种类型,它们是【5】 数据模型、逻辑数据模型和物理数据模型。 答案:【5】概念 评析:数据模型按不同的应用层次分为三种类型,它们是概念数据模型、逻辑数据模型和物理数据模型。 概念数据模型简称概念模型,是一种面向客观世界、面向用户的模型;它与具体的数据库管理系统无关。 (6)表示整数x的绝对值大于5时值为真的C语言表达式是【6】 。 答案:【6】x5x-5或k5 评析:要使整数x的绝对值大于5,则x大于5或x小于-5,用c语言表示即为:x5x-5或者x5。 故本题答案为:x5x-5或者x5。 (7)以下程序的输出结果是【7】。 main() unsigned short a=65536;int b; printf(dn,b=a); 答案:【7】0 评析:对于一个unsigned short来说,它能取的最大值是65535。这里给a赋值65536,已经超出了它的取值范围,这样它的高位将被截掉,只把低位赋给它(全零)。所以a的值实际为0。 (8)若有定义:ira a=lO,b=9,c=8;,接着顺序执行下列语句,变量b中的值是【8】。 c=(a-=(b-5); c=(a11)+(b=3); 答案:【8】3 评析:这里:b-5=4,a=4之后a的值为6,并把它赋给c。此时b的值并未被改变。在第2个表达式中,也只有赋值表达式b=3改变了b的值。所以两行语句执行完毕,b的值应该为3。 (9)以下程序运行后的输出结果是【9】。 main() int p=30; primf(dn,(p3O?p10:p3); 答案:【9】3 评析:条件表达式的一般形式为:表达式17表达式2:表达式3条件运算符的执行顺序:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值;若表达式l的值为0(假)-,则求解表达式3,表达式3的值就是整个条件表达式的值。303=100,所以执行plO,结果为3。 (10)函数pi的功能是根据以下近似公式求n值: (*)6=1+1(2*2)+1(3*3)+1(n*n) 现在请你在下面的函数中填空,完成求n的功能。 #includemathH double s=00;long i; for(i=1;i=n;i+)s=s+【10】 ; retum(sqrt(6*s); 答案:【10】1O(i*i1或(double)l(i*i) 评析:表达式1+1(2*2)+l(3*3)+1(n*n)可写为:1(1*1)+1(2*2)+1(3*3)+1(n*n) n 即:l(ii) i-l 对应的c语言的表达式:s=s+1O(i*i)。注:必须要写成10的形式,否则1(i*i)返回值为其值截尾取整,即恒为O。 (11)函数pi的功能是根据以下公式近似求得的: pi*pi6=1+1(2*2)+1(3*3)+1(n*n) 请在下面的函数中填空,完成求pi的功能。 #include double pi(10ng n1 double s=OO,long i; for(i=1;i=n;I+)s=s+【11】 ; return(sqrt(6*s); 答案:【11】10ii或1O(i*i) 评析:由题面中提供的计算pi的公式可知:在第i项其值为1(i*i),考虑到运算结果为浮点数,故必须要将l转化为浮点数或采用1O(i*i)的形式。故本题应填1O(i*i)或其等效形式。 (12)若输入字符串:abcde,则以下while循环体将执行【12】 次。 while(ch=getchar()=e)printf(*); 答案:【12】0 评析:函数getchar()是从键盘得到用户输入的一个字符。用户输入的第1个字符是a,不管后面输入的是什么ch的值都是a,因此条件(ch=getchar()=e为假,这个循环不会被执行。 (13)以下函数用来求出两整数之和,并通过形参将结果传回,请填空。 voidfunc(intx,inty,【13】 z *z-x+y;, 答案:【13】int* 评析:从题中代码可知:z应该是一个整型指针,因此应填:int* (14)若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是【14】。 int w10=23,54,10,33,47,98,72,80,61,*p=w; 答案:【14】p5或*(p+5) 评析:98是数组w的第5个元素(最开始的为第O个),而通过*p=w已经将p指向了数组w,要想不移动指针p而引用98,可以有以下两种写法:p5、*(p+5)。 (15)设在主函数中有以下定义和函数调用语句,且fun函数为void类型;请写出fun函数的首部【15】 。要求形参名为b。 main() double s1022; intn: fun(s); 答案:【15】void fun(double b1011221 评析:本题答案:void fun(double b1022) (16)有以下程序: int f(int n) if(n=1)return 1; else return f(n-1)+1; main() int i j=0; for

温馨提示

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

评论

0/150

提交评论