C语言程序设计试卷共28页第1页计算机学院2008-2009学年第2学期C语言程序设计考试试卷一、单项选择题(在下面每小题的A、B、C、D四个选项中,只有一个选项是正确的,请选择正确的选项并填写到括号内,选择正确得分。本大题共10小题,每小题1分,共10分。)1、ENUM是【b】A、合法标识符B、C语言的关键字C、合法的字符串D、既不是C语言的关键字,也不是合法的字符串或标识符2、下列数据中属于合法字符常量的是【d】A、'\'B、'\xag'C、'45'D、'\''3、下列数据中合法的浮点型常量是【c】A、E+10B、2E+1.5C、2E-10D、0x2.5E104、下列数据中与256等值的数为【】A、0256B、0400C、0x400D、0x2565、以下叙述中正确的是【】A、局部变量说明为static存储类型,其生存期将得到延长B、全局变量说明为static存储类型,其作用域将被扩大C、任何存储类型的变量在未赋初值时,其值都是不确定的D、形参可以使用的存储类型说明符与局部变量完全相同6、-127的16位补码的十六进制表示是【】A、0xff81B、0x807fC、0xff80D、0x80807、对于下面的数组声明,正确的是【】A、intx[][5];B、chart[]={‘a’,’b’,’c’,’\0’};C、intn=5,a[n];D、chars[5]=“abcde”;8、若有以下说明和语句,则在执行for语句后,*(*pt+2)表示的数组元素【】intt[3][3],(*pt)[3],k;for(k=0;k3;k++)pt=t+k;A、t[1][2]B、t[2][0]C、t[2][1]D、t[2][2]9、已知枚举类型定义:enuma{ONE=5,TWO=3,THREE};则THREE的值的是【】A、1B、2C、4D、010、设有以下说明和语句,则表达式z.y.a2的值的是【】structpacked{unsignedshorta1:2;unsignedshorta2:2;unsignedshorta3:4;unsignedshorta4:8;};union{shortx;structpackedy;}z;z.x=0xabab;A、11B、3C、2D、10二、多项选择题(下面每小题的A、B、C、D备选项中,有两个或两个以上的选项是正确的,请选择正确的选项并填写到括号内,多选、少选、错选均不得分。本大题共5小题,每小题2分,共10分。)1、以下选项可作为C语言合法整型常量的是:【】A、0xf9B、100UC、0XABCDE12LD、02872、对于下面关于数组声明,正确的是:【】A、intc[2,3];B、intb[’b’-’a’];C、intx,a[x][3];D、chard[11]=abc\ndef\n;3、设有声明:intk[2],*p1=k,*p2=p1;下面能够正确执行的语句有:【】A、k=p1;B、p2=k+1;C、p1=p2;D*p1*=*p2;4、设有说明:structT{intn[2];char*s;}t[2]={{{1,0},xy},{{0,1},yx}},*p=t;下面表达式之值为’x’(或其ASCII码值为120)的是:【】A、*(*p).sB、*++(++p)-sC、p-s[p-n[0]]D、(*++p).s[*(*p).n]-15、链表具备的特点是【】A、链表由一系列包含数据域和指针域的结点组成B、插入和删除不需要移动任何元素C语言程序设计试卷共28页第2页C、可随机访问任意一个结点D、所需存储空间与其长度成正比三、填空题(本大题共10小题,每小题1分,共10分。)本大题的第1题至第5题请参考下面的说明,请计算出表达式的值并填入各题后面的括号中,各题的表达式相互无关。shortx[]={-1,0,1},*p=x;unsignedshorty=8;【】1、*(p+1)?y+x[1]:y-x[1]【】2、y=~x[1]【】3、x[2]|0x10【】4、yx[2]【】5、~(*p3)本大题的第6题至第10题请参考下面的说明,请计算出表达式的值并填入各题前面的括号中,各题的表达式相互无关。structT{charc;char*s;intx;}a[]={{'A',123,0},{'B',321,1}},*p=a;【】6、(++p)-x【】7、p-c+(p+1)-x【】8、*(++p)-s【】9、++p-s[1]【】10、*p++-s++四、判断改错题(先判断下面各题中是否存在错误;如果存在错误,请改正之;否则不必改。本大题共5小题,每小题2分,共10分。)1、计算数学表达式(b2-4ac)/2对应的程序段如下:floata,b,c,delta;scanf(%f%f%f,&a,&b,&c);delta=(b*b-4*a*c)*(1/2);printf(%f,delta);2、本小题的程序段如下:int*p1;scanf(%d,p1);printf(%d\n,*p1);3、创建一个含有30个元素的动态数组table,元素类型为structREC的程序段如下:structREC{charname[8];charsex;intscore;}*table;table=(structREC*)malloc(sizeof(structREC));4、本小题的程序段如下:constchar*sp[2]={abc,123};sp[0]=ABC;5、将变量x按位左移n位的宏定义为:#defineROL(x,n)(x)=(n)C语言程序设计试卷共28页第3页五、简答题(本大题共5小题,每小题4分,共20分)1、设有声明intx=1,y=2,t;请写出一个C表达式将x、y值交换。2、请写一个C表达式,其结果是3个整型变量a、b、c中数值居中的那个变量的值。3、请写一个C表达式,将整数k的高字节作为结果的低字节,整数p的低字节作为结果的高字节,拼成一个新的整数。4、请解释声明语句char*(*(*pa)[8])(int(*)(int));所声明标识符pa的数据类型。5、设a是有2个元素的函数指针数组,数组中每个元素所指向的函数带有一个数组指针类型的形参,该形参指向有3个元素的整型数组,而函数返回值的类型与该形参类型相同;请写出相应的声明语句。六、阅读程序并写出其运行结果(本大题共5小题,每小题4分,共20分。)1、请写出下面程序的运行结果。#includestdio.hintx=10;voidmain(void){printf(x=%d\n,x++);{intx=1;printf(x=%d\n,x++);}printf(x=%d\n,x++);}2、请写出下面程序的运行结果。C语言程序设计试卷共28页第4页#includestdio.hvoidfun(intn){staticx=1;x*=n;printf(x=%d\n,x);}voidmain(void){inti;for(i=1;i8;i++)if(i%2)continue;elsefun(i);}3、请写出下面程序的运行结果。#includestdio.hchar*strmins(char*,char*);voidmain(void){chara[80]=,b[]=abcde;printf(%s\n,strmins(strmins(a,b),b));}char*strmins(char*s,char*t){inti,m=0,n=0;while(*(s+m++));m--;while(*(t+n))n++;for(i=m;i=m/2;i--)*(s+i+n)=*(s+i);for(i=0;in;i++)*(s+i+m/2)=*(t+i);returns;}4、请写出下面程序的运行结果。#includestdio.h#defineCHAR_BIT8typedefunsignedshortintUINT16;voidbit_print(int);voidbit_print(intx){UINT16i;UINT16n=sizeof(UINT16)*CHAR_BIT;UINT16mask=1(n-1);for(i=1;i=n;++i){putchar(!(x&mask)?'0':'1');x=1;if(!(i%CHAR_BIT)&&in)putchar('');}putchar('\n');C语言程序设计试卷共28页第5页}voidmain(void){UINT16x[3]={7,3,1},i,n=0;for(i=0;i3;i++){switch(i){case0:bit_print(x[n++]);break;case1:bit_print(x[n++]);default:bit_print(x[n]);}}}5、请写出下面程序的运行结果。#includestdio.hchar*f1(char*,char*);char*f2(char*,char*);voidmain(void){char*(*fp_ary[2])(char*,char*)={f1,f2};chara[80],b[]=Cisverypowerfultoolforprogramming!\n;char*p,c[]=Generallyspeaking,\n,d[80];p=(*fp_ary[0])(d,b);printf(%s,p);(*fp_ary[0])(a,c);printf(%s,a);p=(*fp_ary[1])(a,p);printf(%s,p);}char*f1(char*p1,char*p2){char*p=p1;while(*p++=*p2++);returnp1;}char*f2(char*p1,char*p2){char*p=p1;while(*p++);p--,p--;f1(p,p2);returnp1;}七、完善程序(本大题有2小题,给出的都是部分程序,通过填空来完善程序。本大题共10空,每空2分,共20分。)1、本大题第①、②、③、④、⑤空请参阅下面的部分程序。C语言程序设计试卷共28页第6页[程序说明]下面是通过命令行方式输入若干数字串,再将数字串转换成为对应的整数,然后对其进行排序和查找操作的部分程序test2009,请对其进行完善。如:在C:\提示符下输入test20096123810257136885并回车,程序对应的运行结果如下:61238102571368855681236387185102find=2请将下面程序中①、②、③、④、⑤空处应该完善的内容填写在本小题后①、②、③、④、⑤后面的下划线处。#includestdio.hintatoi(char*);voidshellsort(inta[],intn);intBinarySearch(inta[],intx,intn);/*atoi是将数字串转换为对应整数的函数*/intatoi(char*s){intj=0,num=0;for(;*(s+j)!='\0';j++)num=①;returnnum;}/*shellsort是shell法排序函数*/voidshellsort(inta[],intn){intgap,i,j,t;for(gap=n/2;gap0;②)for(i=gap;in;i++)for(j=i-gap;j=0&&a[j]a[j+gap];j-=gap){t=a[j];a[j]=a[j+gap];a[j+gap]=t;}}/*BinarySearch是二分查找函数*/intBinarySearch(inta[],intx,intn){intfront=0,back=n-1,middle;while(front=back){middle=__③;if(xa[middle])back=middle-1;elseif(xa[middle])front=middle+1;elsereturn(____④______);}return-