您好,欢迎访问三七文档
当前位置:首页 > 高等教育 > 习题/试题 > 2007年高级语言程序设计试卷答案
12007年(下)高等教育自学考试全国统一命题考试高级语言程序设计(-)试卷及参考答案(考试时间150分钟)一、单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1.可以作为自定义标识符的是()A.2xB.breakC.m-nD.m_n注:P9:表2-3保留字,也称关键字。标识符,标识符是用户自定义的字符序列,表示程序中的各种语法成分的名称,比如符号常量,变量名,数组名,函数名等。C语言规定,标识符是由字母或下划线开头的字母,数字,下划线(见P8,表2-1)组成的字符序列。C语言中的标识符是区分大小写的。注意:用户定义标识符,比如符号常量,变量名,数组名,函数名等,标识符中的字母是区分大小写的。系统保留字,P9:表2-3保留字,也称关键字,所有保留字都用小写字母表示,不允许用户使用,例如,字符类型符,int,长度运算符sizeof等,系统函数名,例如,printf()等。2.正确的变量定义是()A.unsignedlongd=1000;B.floatm1=m2=10.0;C.charc1=‘A’,c2=A;D.doublex=0.618,x=3.14;注:字符标记:’’。P9,表2-2,\ddd,1~3为8进制数对应的符号。\xhh,1~2位16进制数hh对应的符号。八进制数前面加一个数字:0。十六进制数前面加:0x。十进制数。符号唯一,不能重覆定义。注意:(1)由英文字母,数字,下划线组成,标识符的第一个字母不能是数字,必须是字母或下划线。(2)大小写英文字母含义不同。(3)标识符中允许包含的字符个数随编译系统而有所不同,通常是可以识别前面6个字符。3.表达式的值为0的是()A.5/5%5B.52.C.!4D.0x7&7注:双目运算符:*,/,%的优先级相同,结合性是自左向右。4.设inta=1,b=2;,则执行a=b+2,a++,.a+b;后a和b的值分别是()A.1和2B.3和2C.4和7D.5和2注:P31,++a和a++的运算结果相同。注意:P31,inta=3,b=3;表达式++a-1的值是3;a的值是4;先将a加1,后运算表达式的值。表达式b--+1的值是4;b的值是2;先运算表达式的值,后为b减1。5.设inta=2,b=3,c=4;,则表达式ab&&bc||b的值是()A.-1B.02C.1D.2注:P33,逻辑运算符!,&&,和||对关系式或逻辑值(真,假)进行运算,运算结果是逻辑值。对于已知数据,非0的数据和0来表示逻辑真和假。运算结果真为1,假为0。逻辑与优先于逻辑或,即&&优先于||逻辑运算符的优先级:P34••••!优先于双目算术运算符优先于关系运算符优先于&&优先于||•单目逻辑运算符!和单目算术运算符的优先级是相同的,结合性是自右向左。•!优先于双目算术运算符优先于关系运算符优先于&&优先于||•双目运算符的结合性自左向右。6.设inta=2,b=3,x,y;,则能正确执行的语句是()A.scanf(”%d,%d”,x-y,x+y);B.printf(”%d\n”,a%b);c.printf(”%f\n”,a+b);D.scanf(”%d,%d”,x,y),注:变量在使用之前要赋初值,而变量x,y没有赋初值。7.设chars[10]=”abcde”,t[]=”12345”;,则s和t在内存中分配的字节数分别是()A.6.和5B.6和6C.10和5D.10和6注:P115,字符串和字符数组,t[]=”12345”;其中必须有一个字符串结束标记’\0’。必须注意利用字符数组存储字符串时,需要的字节长度比有效字符数多1。注意:字符标记是单引号’’,字符串标记是双引号””。8.设inta=10,*p=&a;,则执行printf(”%d\n”,*p+a);的结果是()A.10B.20C.30D.40注:P136,*在指针运算中,表示指向的变量。在定义指针变量标识符时,标识符前面必须有“*”,表示定义的是指针变量,而不是一般变量。这里的,*p与a相同,都是变量a的值。*p表示指向的变量。p表示&a9.自定义函数中形式参数的作用域是()A.本文件B.本函数C.main函数D.整个程序注:P172,变量的作用域10.设intb[][5]={1,2,3,4,5,6,7};,则元素b[1][2]的值是()A.0B.2C.6D.7注:P108~P111,二维数组的初始化。只对前若干行若干个元素赋初值,此时,所有未赋初值的所有元素获得0值。11.对函数而言,叙述正确的是()A.函数中只能有一个return语句B.当函数的形参是数组时形实结合为值传递方式C.程序中只能有一个main函数D.无参函数的函数体内不能出现return语句3注:(1)一个函数可以有多个return语句,当执行到某个return语句时,程序的控制流程返回到调用函数,并将语句中的表达式的值作为函数值带回。(2)若函数体内没有return语句,就一直执行到函数体的末尾,然后返回到调用函数。12.执行下列程序段后输出的结果是()intx,y,z=1;for(x=1,y=-1;xy;x++,y--)z++;printf(”%d\n”,z);A.1B.2c.5D.6注:当型循环,循环条件xy不满足,一次也不执行,13.设staticinta[3]={1,2,3},int*p[]={&a[0],&a[1],&a[2]};则与数组元素a[1]等价的是()A.*p[1]B.p[1]C.*p+1D.p+1注:*p代表指向的变量,p的值是它指向变量的地址。14.设struct{charname[10];intages;}stu[2]={{”Tom”,25},{”Mary”,26}},*p=stu;则执行语句printf(”%s%d\n”,p-name,stu[1].age);后输出结果是()A.Tom25B.Tom26C.Mary25D.Mary26注:P29,指针运算时,*表示指向的变量。而定义变量时,*表示定义一个指针变量。P137,指针变量的定义和引用。15.设typedefdoubleDB;,则与DBu[5];的等价形式是()A.doubledb[5];B.doubleDB[5];C.doubleu;D.doubleu[5];注:P217,用户调研类型。DB成为自定义类型符。代表双精度类型符double第二部分非选择题二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。16.-个字符型变量所占内存的字节数是1。注:P25,表3-117.写出公式)(xyx5x21对应的C语言表达式(x+sqrt(x+y)/(5*x))/2.0或1.0/2×(x+sqrt(x+y)/(5*x))。注:注意分明中的5*x18.执行语句printf(”%s\n”,”World\0Wide\0Web”);后的输出结果是World。4注:P231下,P60,%s是输出一个字符串,而字符串结束标记是’\0’。19.设inta,b=5;,则执行表达式a=b-2==3后a的值是1。注:==是关系运算符,-是算术运算符,P32,算术运算符优先于关系运算符,先计算,b-2然后计算关系运算符==,b-2==3,运算结果为1,赋值运算符优先级最低。20.设chars[20]=”My”;,则执行strcat(s,”Sun!”)后s的内容是MySun!。注:P121,字符串连接函数。21.设floatx=23.65;,则执行语句printf(”%d\n”,(int)(x+0.5));后输出结果是24。注:P46,运算结果的强制性数据类型转换原则,(数据类型符)(表达式);22.若定义函数char*fun(){...},则该函数的返回值类型是字符型指针或字符型地址。注:P169,P178,指针型函数的定义,在函数名前面加一个*,表示函数返回值是指针类型,P178,例7-18,表示*fun()是指针型函数,其返回值是指针型数据。指针型函数的返回值是指针型数据。23.设intx=-9,y;,则执行y=x=0?x:-x;后y的值是9。注:P37,条件运算符”?:”的优先级如下,其他运算符优先于条件运算符预先于赋值,算术自反赋值运算符,优先于逗号运算符。本题中,按照优先级关系,先执行条件运算符?:后执行赋值运算符=。24.若函数调用语句为f(a,b,f(a+b,a-b,b));,则函数f的参数个数是3。25.设inta=10,则执行语句。a+=a-=a+a;后a的值是-20。注:算术运算符优先于关系运算符优先于双目运算符算术自反运算符。算术自反运算符和赋值运算符优先级相同,结合性自右向左的。按照优先级,执行a-=a+a,后,得到结果a=-10,再执行a+=a,结果a=-20三、程序分析题(本大题共14小题,每小题4分,共16分)阅读下列程序,请将输出结果写到各题右侧的空白处。26.main(){inta=1,b=2,c=3;if(a=c)if(b==c)printf(”a=%d\n”,a);elseprintf(”b=%d\n”,b);printf(”c=%d\n”,c);注:b=2c=327.intf(intn)5{staticintm=5;/*m是静态变量,函数第一次被调用时,执行初始化,以后再次被调用时,m等于上次调用的结果值*/return++m+n;main(){inti;for(i=0;i3;i++)printf(”%5d”,f(i));printf(”\n”);}注:循环体执行3次,m是静态变量,只有第一次赋初值,以后保存上一次运算的结果。m是静态变量只有第一次访问时赋初值5,因为++m运算,以后访问m的值是:第一次访问m=5,第二次m=6,第三次m=7。第一次循环,实参i与形参n的值传递,n=0,m=5,结果:++m+n=6,m=6第二次循环,实参i与形参n的值传递,n=1,m=6,结果:++m+n=8,m=7,第三次循环,实参i与形参n的值传递,n=2,m=7,结果:++m+n=10,m=8,6810m是静态变量只有第一次访问时赋初值,以后访问的是当前值。第一次访问m=5,第二次访问fwm=6,第三次访问m=7。28.#defineSIZE4main(){intn[SIZE]={8,3,4,1};inti,j;for(i=0;iSIZE;i++){printf(”%d”,n[i])for(j=1;j=n[i];j++)printf(”*”);printf(”\n”);}}注:P24,#define宏名一串符号。注意是一串符号,或字符串。循环控制条件:j=n[i],控制打印的*个数。8********3***4****1*29.intfm(inta,intb){if(b==-1)returna;elsereturna+fm(a,b-1);}main()6printf(”%d\n”,fm(4,3));}注:对于调用fm(4,3)的返回值是a+fm(4,2);对于调用fm(4,2),返回值是a+fm(4,1);对于调用fm(4,1),返回值是a+fm(4,0);对于调用fm(4,0),返回值是a+fm(4,-1);对于调用fm(4,-1),返回值是a=4;递归过程如下:a+fm(a,b-1)是返回值,其类型为int型。对于调用fm(4,3),返回值为:fm(4,3)=4+fm(4,2);该语句产生调用fm(4,2),对于调用fm(4,2)的返回值为:fm(4,2)=4+fm(4,1);对于调用fm(4,1)的返回值为:fm(4,1)=4+fm(4,0);对于调用fm(4,0)的返回值为:fm(4,0)=4+fm(4,-1);对于调用fm(4,-1)的返回值为:fm(4,-1)=a=4;利用fm(4,-1)=4,fm(4,0)的值为:fm(4,0)=4+fm(4,-1)=8;利用fm(4,0)=4,fm(
本文标题:2007年高级语言程序设计试卷答案
链接地址:https://www.777doc.com/doc-3080970 .html