C语言程序设计试卷共12页第1页计算机学院2009-2010学年第1学期C语言程序设计考试试卷A卷(或B卷):A卷闭卷(或开卷):闭卷考试时间:2010年1月25日专业计算机科学与技术班级计0913学号学生姓名题号一二三四五六七总分核对人题分10101010202020100得分一、单项选择题(在下面每小题的A、B、C、D四个选项中,只有一个选项是正确的,请选择正确的选项并填写到括号内,选择正确得分。本大题共10小题,每小题1分,共10分。)1、语句z+=x+++y;中的词法元素(记号)的数目是【b】A、6个B、7个C、8个D、9个2、下列正确的转义字符是【d】A、'''B、'\18'C、'\0x12'D、'\\'3、-1的16位补码是【b】A、(fffe)16B、(ffff)16C、(8001)16D、(8000)164、以下叙述中不确的是【c】A、函数中的形式参数是局部变量B、在不同的函数中可以使用相同名字的变量C、在一个函数内定义的变量只在本函数范围内有效D、在一个函数内的复合语句中定义的变量在本函数范围内有效p5、下列数据中与1024等值的数为【c】A、0400B、01024C、0x400D、0x10246、以下叙述中正确的是【a】A、全局变量说明为static存储类型,其作用域将被缩小B、全局变量说明为static存储类型,其作用域将被扩大C、局部变量说明为static存储类型,其生存期将被缩短D、局部变量说明为static存储类型,其作用域将被扩大7、对于inta[3][5];的声明,下面与数组名a类型等价的声明是【d】A、int*p;B、int*p[5];C、int(*p)[3];D、int(*p)[5];8、设在main函数中有structList*p;的声明,如果被调用函数的形参pa能够修改p,则形参pa的声明是【d】A、structListpaB、structList*paC、structList(*pa)D、structList**pa9、二维数组元素a[i][j]用数组名形成的下标表示(包括a[i][j])和指针表示的形式共有【】A、5种B、4种C、3种D、2种10、设仅file1.c和file2.c可进行多文件编译,且file1.c中有如下关于全局变量的声明:intx;externcharch;则file2.c允许的关于全局变量的声明是【c】A、intx;charch;B、intx;externcharch;C、externintx;charch;D、externintx;externcharch;得分评卷人C语言程序设计试卷共12页第2页二、多项选择题(下面每小题的A、B、C、D备选项中,有两个或两个以上的选项是正确的,请选择正确的选项并填写到括号内,多选、少选、错选均不得分。本大题共5小题,每小题2分,共10分。)1、以下选项可定义为用户标识符的有【da】A、_123B、elseC、student.numD、_goto2、设有说明:inta=1,b=1,*p=&b;则下面表达式的值为0的有【acd】A、a--&&aB、a*b--||*pC、--*p,a*b(精辟)D、++a-(*p)--&&b3、设有说明:intx=0,y=1,*px=&x,*py=&y;则下面表达式的值为0的有【abc】A、x&yB、*py1|*pxC、~*py&yD、y2&~x4、对typedef的叙述中正确的是【ab】A、用typedef只是将一个类型表达式用一个标识符来代表B、用typedef可以定义各种类型表达式,但不能用来定义变量C、用typedef可以增加新类型D、typedefchar*STRING和#defineSTRINGchar*中命名的STRING使用上没有区别5、设有说明:structduint{unsignedcharc;unsignedintu;};【】union{unsignedlongintn;structduintx;}z={0x1234},*p=&z;则下面表达式的值非0的有A、z.x.c&0x0f-2B、z.x.c&0x0f-4C、p-n-z.x.cD、z.x.u-p-n三、填空题(本大题共10小题,每小题1分,共10分。)(本大题都按16位机考虑)本大题的第1题至第5题请参考下面的说明,请计算出表达式的值并填入各题后面的括号中,各题的表达式相互无关。inta=1,b=2,c=3;【4】(1)a1+c2【0?】(2)~a^a【3】(3)a|b&c【7】(4)a+=b+=!c+4【1】(5)b-a||b*c&&b/c本大题的第6题至第10题请参考下面的说明和赋值,请计算出表达式的值并填入各题前面的括号中,各题的表达式相互无关。structT{chars[5],*ps;intx[3],*px;}a[2]={{1357,NULL,{0,1,2},NULL},{2468,NULL,{-1,0,1},NULL}},*pa=a;a[0].ps=a[0].s;a[0].px=a[0].x;a[1].ps=a[1].s;a[1].px=a[1].x;【】6、(*pa).ps[2]【】7、*++pa-px【】8、++*(pa+1)-px【】9、(++pa)-ps[a[0].px[2]]【】10、pa-ps[*((pa+1)-px+2)+1]得分评卷人得分评卷人C语言程序设计试卷共12页第3页四、判断改错题(先判断下面各题中是否存在错误;如果存在错误,请改正之;否则不必改。本大题共5小题,每小题2分,共10分。)1、本小题的程序段如下:chars[5][10];inti,x[5];for(i=0;i5;i++)scanf(%d%s,&x[i],&s[i]);2、取一个变量a的低n位的宏定义如下:#defineGETNBIT(a,n)~(~0(n))&(a)3、规定循环体中不得用数组名,本小题的程序段如下:inti,j,k,n=0,x[2][3][4],*p=&x[0][0][0];for(i=0;i2;i++)for(j=0;j3;j++)for(k=0;k4;k++)*(*(*(p+i)+j)+k)=n++;4、用fopen函数以只读方式打开d盘test目录下的文本文件a.txt。fopen(d:\test\a.txt,r);5、将s字符数组中的源字符串拷贝到t字符数组中形成目标字符串的代码为:voidstrcpy(chart[],chars[]){intj=0;while(t[j++]=s[j++]);}五、简答题(本大题共5小题,每小题4分,共20分)1、请写一个C表达式,将短整型变量x的高低字节对换。得分评卷人得分评卷人C语言程序设计试卷共12页第4页2、设机器字长为16位,定义一个宏ROR(a,n),且n16。宏ROR(a,n)将变量a循环右移n位(即ROR(a,n)与将a的最低位移出并放置到a的最高位,并且重复n次的操作结果等价)。3、设机器字长为16位,请写一个C表达式修改无符号整型变量x的值。要求是将x高字节的高4位作为其低字节的高4位。4、请解释声明语句char(*(*a[2])(int*))[5];所声明标识符a的数据类型(即含义)。5、设a是一个有3个元素的函数指针数组,数组中每个元素所指向的函数有1个整型参数,且返回值是指向有2个元素的指针数组的指针。该指针数组的每个指针元素所指向的函数是无参函数,且返回值为整型值。请写出相应的声明语句。六、阅读程序并写出其运行结果(本大题共5小题,每小题4分,共20分。)1、请写出下面程序的运行结果。#includestdio.hvoidmain(){inti,j,t;for(i=1;i5;i++){t=1,j=1;do{t*=i;printf(%6d,t);得分评卷人C语言程序设计试卷共12页第5页}while(++j5);putchar('\n');}}2、请写出下面程序的运行结果。#includestdio.hinta=5;voidfun(int*b){staticinta=10;a+=10;(*b)++;printf(a=%d,*b=%d\n,a,*b);}voidmain(){intc=20,i;for(i=1;i=2;i++){fun(&c);a+=c++;}printf(a=%d,c=%d\n,a,c);}3、请写出下面程序运行中输入bythebeautifulsea并回车后的运行结果。#includestdio.h#includectype.h#defineMAXWORD100voidgetword(char*s){staticcharc='\0';if(c=='\n')*s++=c;elsewhile(!isspace(c=getchar()))*s++=c;*s='\0';}voidprn(void){C语言程序设计试卷共12页第6页charw[MAXWORD];getword(w);if(w[0]!='\n')prn();printf(%s,w);}voidmain(void){printf(Inputaline:\n);prn();}4、假设下面程序的可执行文件名为myfile.exe,输入命令行:myfile-r后回车,请写出运行结果。#includestdio.hintcmp1(intx,inty){return(xy);}intcmp2(intx,inty){return(xy);}voidfun(int*v,intn,int(*comp)(int,int)){inti,j,t;for(i=1;in;i++)for(j=0;jn-i;j++)if((*comp)(v[j],v[j+1]))t=v[j],v[j]=v[j+1],v[j+1]=t;}voidmain(intargc,char*argv[]){inta[8]={2,3,1,9,5,7,6,8},flag=1,i;if(argc1&&*argv[1]=='-'&&*(argv[1]+1)=='r')flag=0;fun(a,8,(flag?cmp1:cmp2));for(i=0;i8;i++)printf(%d\t,a[i]);}C语言程序设计试卷共12页第7页5、请写出下面程序的运行结果。#includestdio.hchar*f1(char*,char*);char*f2(char*,char*);char*f3(char*,char*);voidmain(void){char*s1[]={this,that,is,a,pen,book,.,?};chars2[80],*p,*(*pf[3])(char*,char*)={f1,f2,f3};inti;pf[1](s2,s1[2]);pf[0](s2,s1[0]);for(i=3;i8;i+=2)pf[0](s2,s1[i]);printf(%s\n,s2);for(i=0;i4;i+=2){p=pf[2](s2,s1[i]);printf(%s\n,p);}}char*f1(char*t,char*s){intj=0,k=0;while(*(t+j))j++;while((*(t+j++)=*(s+k++)));returnt;}char*f2(char*t,char*s){char*p=t;while(*t++=*s++);returnp;}char*f3(char*s,char*t){char*ps=s,*pt,*pc;while(*ps!='\0'){for(pt=t,pc=ps;*pt!='\0'&&*pt==*pc;pt++,pc++);if(*pt=='\0')returnps;ps++;}return0;}C语言程序设计试卷共12页第8页七、完善程序(本大题有2小题,给出的都是部分程序,通过填空来完善程序。本大题共10空,每空2分,共20分。)1、本大题第①、②、③空请参阅下面的部分程序。[程