您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 习题/试题 > 2008年高级语言程序设计试卷答案
12008年(下)高级语言程序设计(-)试卷答案(考试时间150分钟〉注:选择题的正确选择用黑体字表示,而选择题的文字答案在本考卷的最后面。第一部分选择题一.单项选择题(本大题共15题,每小题2分,共30分)。l.在一个C语言程序中A.主函数只能有一个B.主函数可以有多个C.非主函数只能有一个D.主函数和非主函数都可以有多个注:P157,除了主函数之外,其他函数是不能独立运行的。2.正确定义无符号整型变量m的语句是A.intm;B.unsignedintm;C.signedintm;D.unsignedsignedm;注:P25,unsignedint类型的数值范围:0~65535(1-2016~)Int类型:-32768~+327673.不属于字符型常量的是A.”s”B.‘8’C.‘A’D.‘\n’注:P22~P23,P23中,每个字符串在内存中占用的字节数等于字符串长度加1,其中最后一个字节存放空字符,用转义字符‘\0’表示。单引号是字符标记,双引号是字符串标记,字符串长度要比有效字符个数多1个。内存中字符串结尾’\0’。4.设intx=2,y=4;值为非0的表达式是A.1/x*yB.l/(x*y)C.1.0/x/yD.1/x/(double)y注:P45,整形数相除取整,按照表达式计算时,数据类型转换原则,参加运算的各个数据都转换数据最长的数据类型。只有选择C,不是整型数,保留小于1的值。运算符优先级相同,其结合性从左到右。5.设inta=2,b=5;,结果为0的表达式是A.a%bB.a&bC.a=bD.a!=b注:P38,按位逻辑与,位逻辑运算符&,逻辑与,a=0000000000000010,b=0000000000000101.a和b两个数的每个对应二进制位上的0或1逐位进行逻辑与运算。6.设inta=0;,错误的语句是A.++a;B.a++;C.a=-a;D.(-a)++;2注:P30,增1,减1运算符都是单目运算符,用来对整型,字符型,指针型等变量进行算术运算,不能对表达式进行运算,其运算结果仍然是原来类型,并存回原来存储单元的运算对象。(-a)不是变量,是表达式,表达式没有存储单元,不能存放增1,减1的运算结果存放回原处,即(-a)处。7.设inta=1,b=2,c=3,d=4,f;;,执行语句f=(a!=b)?c++:d++;后f的值是A.2B.3C.4D.5注:P37,赋值运算符优先级最低,先计算条件运算符?:,条件运算符中的关系式a!=b为真,执行c++,然后执行赋值运算符,结果f=3;8.设intm=5;,语句while(m==0)printf(”%d”,m-=2);的循环体执行的次数是A.0B.lC.2D.无限注:P77,while循环,即当型循环,表达式:m==0为循环控制条件,表达式的值为真时,反复执行循环体,直到表达式为假时。当控制循环条件不满足时,停止执行循环体,当开始就不满足时,循环体一次也不执行。另一种循环结构:do-while循环,直到型循环,不管循环控制表达式为何值,循环体总是先执行一次。9.下列运算符优先级最高的是A.+=B.,C.!D.?:注:P33,P36,P37,逻辑运算符,对关系式或逻辑值(真,假)进行运算,运算结果是逻辑值。P34,逻辑非运算符,!优先于双目算术运算符优先于关系运算符优先于&&优先于||单目运算符!和单目算术运算符的优先级相同,结合性自右向左。10.定义二维数组并初始化,正确的是A.inta[3][]={{1,2,3},{4,5,6}};B.inta[][3]={{1,2,3},{4,5,6}};C.inta[3][3]=[{1,2,3},{4,5,6}];D.int[][]={1,2,3,4,5,6};注:看书:P110,P111,(6)若分行给所有行的前若干个元素赋初值,行长度可以忽略。(5)若给所有元素赋初值,行长度可以忽略。要有唯一的解释。1l.有关变量的叙述,正确的是A.形式参数是全局变量B.a和A在C语言中是同一个变量C.函数体内定义的变量为全局变量D.在所有函数之外定义的变量为全局变量注:P172,从变量的生存期来区分,生存期覆盖了定义点到整个程序结束的变量3称为全局变量,把生存期只覆盖某个函数或复合语句的变量称为局部变量。用户定义的标识符,即变量名,是区分大小写的。即intx;和intX是两个变量。但是,系统函数名,保留字(例如,int)都是小写字符。l2.若定义的函数为float*fun(){……},则函数的返回值是A.float型数据B.void型数据C.float型指针D.void型指针注:P178,指针型函数的定义,指针型函数的定义和有返回值函数定义的格式相同,不同的是,在函数名的前面加一个“*”,表示函数返回值是指针型函数。所谓指针函数,是指返回值是指针型的,这种函数的返回值是地址值,接收返回值的必须是指针变量,指针数组元素等能存放地址值的对象。*是指针运算符。函数的返回值是指针,是指向实型的指针。定义指针变量时也要使用*。没有*返回值是实型,有*是返回指向实型数据的指针。13.设inta[l0],*p=a;,数组元素a[4]的正确引用是A.*(p+4)B.p+4C.*p+4D.a+4注:P140中,*p和a[0]相同。指针运算符“*”按照地址取存储单元中的值。或,p[4];因为,p=a,即,a[4]*(p+4)与p[4]相同。p的内容是地址,等于a,*p内容是a[0]的值,等于a[0]。14.合法的用户标识符是A.defaultB.#defineC.a+bD.book注:P8~P9,保留字,标识符,保留字是小写字符组成,用户不能使用作为标识符。例如,+,#define,default等。标识符是用户定义,变量名,函数名,数组名。不能使用保留字作为标识符。只有book不是保留字,用户可以使用。15.使用系统函数sqrt()时,应在程序开头写上的编译预处理命令是A.#includestdio.hB.#includestring.hC.#includemath.hD.#includestdlib.h注:求正平方根函数doublesqrt()在头部文件math.h中。文件包含命令,#includemath.h第二部分非选择题二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答秦。错填、不填均无分。16.赋值运算符的结合性是(自右向左)。注:P35,算术运算符优先于关系运算符优先于双目运算符优先于赋值运算符,4赋值运算符的结合性自右向左。例3-24:n1=65;n4=n5=n6=-(--n1)n4=(n5=(n6=-(--n1)));n4=-64;17.设charch;,判断ch为数学字符的逻辑表达式是(ch=’0’&&ch=’9’)。注:P8,C语言字符集,C语言中允许出现所有基本字符。18.设typedeffloatREAL;REALx=1;,表达式x/2的值是(0.5)。注:P217,用户自定义类型符,C语言允许用户定义自己的类型符,来替代系统提供的基本类型符,数组类型符,指针类型。19.转义字符’\n’的含义是(回车换行)。注:P9,转义字符,表2-2,C语言中有一些不可显示的字符,例如,回车,Tab符号,C语言中使用所谓的转义字符在程序中表示这些做法。转义字符由反斜杠“\”开始后跟单个或多个字符组成。例如,’\n;,‘\t’,对应回车,Tab。20.设inta=l2;,语句printf(”%d\n”,(a/3,a%3,a/100));的输出结果是(1)。注:P36,由逗号运算符组成的表达式:(a/3,a%3,a/100)中的有三个运算,自左向右运算,其值等于右边表达式的值,即关系式a/100为真,结果为1。注意:a参加三次运算,结果都没有保存回变量a。21.函数中未指定存储类型的局部变量,其隐含的存储类型是(auto)。注:P170,自动型变量是分配在堆栈区。它在某个函数中定义,函数被调用时,在堆栈区为该变量分配内存,当函数调用(复合语句执行)结束时,即从堆栈区中收回分配给该变量的内存单元,以便重新分配给其他自动型变量。这样做的目的是节省内存。22.若全局整型变量未初始化,则默认的初始值是(0)。注:P172,无存储类型,或静态,static,生命周期从定义点到整个程序结束。23.设inta,*p=&a;,通过指针变量p为a输入值的scanf语句是(scanf(“%d”,p);)。注:P136,代替&a24.设char*s=”abc”;,语句for(;*s!=’\0’;s++)printf(”W”);的输出结果是()。注:s指向字符串“abc”的内存区域的首地址。用存放字符串的数组s控制循环,字符串数组的结束标记是’\0’。即数组s占用4个字节。P143~P14425.设structstudent5{charname[20];charsex.;,}stu;语句printf(”%d\n”,sizeof(stu));的输出结果是(21)。注:P9,sizeof()计算结构型变量stu的字节数,P37,长度运算符,表3-11,测试数据类型符,或变量占用的字节数,三、程序分析题(本大题共4小题,每小题4分,共16分)阅读下列程序,请将输出结果写到各题右侧的空白处。26.#includestdio.hvoidmain(){inti=11,j;j=i%3;switch(j){case1:case2:printf(”%d\n”,j);break;default:printf(”%d\n”,i);}}注:结果为:2,j=i%3;结果为j=2;执行case2语句组,break语句使得程序跳出switch结构,不执行default语句组。27.#includestdio.hIntfx(intn){ints;if(n==0)s=0;elses=n+fx(n-2);returns;}voidmain(){printf(”%d\n’,fx(8));}注:结果为:20;函数fx()的参量是:intn;解析:递归调用顺序:main()发出fx(8)调用,实参为8,给形参赋值n=8;在fx()中,执行else语句:s=8+fx(6),该语句产生调用f(6),(赋值n=6,);在fx()中,执行else语句,6+fx(4),该语句又产生调用f(4);赋值n=4,执行语句4+fx(2);又产生调用f(2);赋值n=2,执行:2+fx(0);产生调用f(0);在fx()中,执行返回语句,returns;而s=0,即fx(0)调用的结果是0:即fx(0)=0。然后执行递归,返回的过程是:6由:f(0)=0,得到:fx(2)=2+fx(0)=2;由f(2)=2,得到:fx(4)=4+fx(2)=6;fx(6)=6+fx(4)=12;fx(8)=8+fx(6)=2028.#includestdio.h#includestring.hvoidmain(){char*pa,a[20]=”Beijing2008”;/*其中a指向字符串首地址*/for(pa=a+7;*pa!=‘\0’;pa++)putchar(*pa);/*pa初始时刻指向字符‘2’,循环过程中,每循环一次指针向后移动一个字符,当指向’\0’时,循环结束。每个字符串最后都有一个结束标记’\0’。*/putchar(‘\n’);注:2008解析:初始时刻,因为a指向‘B‘,所以指针pa指向’2‘。29.#includestdio.h#denneN6voidmain(){inta[N]={2,5,-6,4,-9,l0},i;for(i=0;iN;i++){if(a[i]0)continue;/*当a[i]0时,这一次循环提前结束,返回执行下一次循环。*/printf(”%3d”,a「i]);}prif1tf(”\n”);}注:25410解析:语句:if(a「i]0)continue的功能是当a[i]小于0时
本文标题:2008年高级语言程序设计试卷答案
链接地址:https://www.777doc.com/doc-3085714 .html