2010春C考试试题2010春第二部分C语言程序设计一、选择题(用答题卡答题,答案依次填在21~30答题号内,共l0分)21.C语言规定,在一个源程序中main函数的位置_____(21)_____。A.必须在最开始B.必须在最后C.必须在预处理命令的后面D.可以在其他函数之前或之后22.以下选项中,______(22)______是C语言关键字A.printfB.includeC.funD.default23.已知有声明inta=3,b=4,c;,则执行语句c=1/2*(a+b);后,c的值为__(23)___。A.0B.3C.3.5D.424.设指针变量占2个字节的内存空间,若有声明char*p=123;intc;,则执行语句c=sizeof(p);后,c的值为__(24)___A.1B.2C.3D.425.已知有声明inta=3,b=4;,下列表达式中合法的是(25)A.a+b=7B.a=|b|C.a=b=0D.(a++)++26.已知有声明chars[20]=Hello;,在程序运行过程中,若要想使数组s中的内容修改为Good,则以下语句中能够实现此功能的是(26)。A.s=Good;B.s[20l=Good;C.strcat(s,Good);D.strcpy(s,Good);27.已知有声明inta[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16)};,若需要引用值为12的数组元素,则下列选项中错误的是(27)。A.*(a+2)+3B.*(*(a+2)+3)C.*(a[2]+3)D.a[2][3]28.已知有声明intn;floatx,y;,则执行语句y=n=x=3.89;后,y的值为(28)。A.3B.3.0C.3.89D.4.029.已知有声明inta=12,b=15,c;,则执行表达式c=(a||(b-=a))后,变量b和c的值分别为(29)A.3,1B.15,12C.15,1D.3,1230.下列叙述中,正确的是_____(30)______。A.C语言中的文件是流式文件,因此只能顺序存取文件中的数据。B.调用fopen函数时若用r或r+模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。C.当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第1个数据D.无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,共30分)●基本概念1.数学式所对应的c语言表达式为pow(x,__(1)__)。2.已知有声明charch='g';,则表达式ch=ch-'a'+'A'的值为字符(2)的编码。3.在C语言系统中,如果一个变量能正确存储的数据范围为整数-32768~32767,则该变量在内存中占_____(3)_____个字节。'4.已知有声明inta[3][2]={{1,2),{3,4},{5,6}},*p=a[0];,则执行语句printf(%d\n,*(p+4));后的输出结果为__(4)___。5.已知有声明和语句inta;scanf(a=%d,&a);,欲从键盘上输入数据使a中的值为3,则正确的输入应是_____(5)_____。•阅读程序6.以下程序运行时输出到屏幕的结果为(6)。#include#defineMAX(A,B)AB?2*A:2*Bvoidmain(){inta=1,b=2,c=3,d=4,t;t=MAX(a+b,c+d);printf(%d\n,t);}7.以下程序运行时输出到屏幕的结果是(7)。#includevoidmain(){inta=1,b=2;a+=b;b=a-b;a-=b;printf(%d,%d\n,a,b);}8.以下程序运行时输出到屏幕的结果是(8)。#includevoidswap(inta,intb){intt;if(ab)t=a,a=b,b=t;}voidmain(){intx=13,y=11,z=12;if(xy)swap(x,y);if(xz)swap(x,z);if(yz)swap(y,z);printf(%d\t%d\t%d\n,x,y,z);}9•以下程序运行时输出到屏幕的结果第一行是(9),第二行是(10),第三行是(11)。#includeintg(intx,inty){returnx+y;}intf(intx,inty){{staticintx=2;if(y2){x=x*x;y=x;}elsey=x+1;}returnx+y;}voidmain(){inta=3;printf(%d\n,g(a,2));printf(%d\n,f(a,3));printf(%d\n,f(a,2));}10.以下程序运行时输出到屏幕的结果是(12)。#includevoidfun(intm,intn){if(m=n)printf(%d,m);elsefun(m+1,n);printf(%d,m);}voidmain(){fun(1,2);}11.以下程序运行时输出到屏幕的结果第二行是(13),第四行是(14)。#include#defineN6voidmain(){inti,j,a[N+1][N+1];for(i=1;i=N;i++){a[i][i]=1;a[i][1]=1;}for(i=3;i=N;i++)for(j=2;ja[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i=N;i++){for(j=1;j=i;j++)printf(M,a[i][j]);printf(\n);}}12.以下程序运行时输出到屏幕的结果第一行是(15),第二行是(16)。#includevoidfun(char*p1,char*p2);voidmain(){inti;chara[]=54321;puts(a+2);fun(a,a+4);puts(a);}voidfun(char*p1,char*p2){chart;while(p1{t=*p1;*p1=*p2;*p2=t;p1+=2,p2-=2;}}13.以下程序运行时输出至到屏幕的结果第一行是(17),第二行是(18)。#includetypedefstruct{intx,y;}direction;intvisible(directions,directionA,directionB,directionC){directionp1,p2;intd;p1.x=B.x-A.x;p1.y=B.y-A.y;p2.x=C.x-A.x;p2.y=C.y-A.y;d=s.x*p1.x*p2.x+s.y*p1.y*p2.y;printf(M\n,d);returnd0;}voidmain(){char*ss[]={invisible,visible};directions={1,1},T={1,1},A={0,0},B={2,1};puts(ss[visible(s,T,A,B)]);}•完善程序14.以下程序的功能是:统计一个字符串中数字字符0到9各自出现的次数,统计结果保存在数组count中。例如,如果字符串为lenterschar4543123564879ffgh,则统计结果为:1:22:13:24:35:26:17:18:19:1。试完善程序以达到要求的功能。#includevoidfun(char*t,intcount[]){char*p=t;while(_____(19)_____){if(*p='0'&&*p='9')count[_____(20)_____]++;p++;}}voidmain(){chars[80]=1enterschar4543123564879ffgh;intcount[10]={0},i;fun(s,count);for(i=0;i10;i++)if(count[i])printf(%d:%d,i,count[i]);}15.下列程序的功能是对a数组a[0]~a[n-1]中存储的n个整数从小到大排序。排序算法是:第一趟通过比较将n个整数中的最小值放在a[0]中,最大值放在a[n-1]中;第二趟通过比较将n个整数中的次小值放在a[1]中,次大值放在a[n-2]中;......,依次类推,直到待排序序列为递增序列。试完喜程序以达到要求的功能。#include#defineN7voidsort(inta[],intn){inti,j,min,max,t;for(i=0;i___(21)___;i++){______(22)______;for(j=i+l;jif(a[j]elseif(a[j]a[max])max=j;if(min!=i){t=a[min];a[min]=a[i];a[i]=t;}if(max!=n-i-1)if(max==i){t=a[min];a[min]=a[n-i-1];a[n-i-1]=t;}else{t=a[max];a[max]=a[n-i-1];a[n-i-1]=t;}}}voidmain(){inta[N]={8,4,9,3,2,1,5},i;sort(a,N);printf(sorted:\n);for(i=0;iprintf(\n);}16.下列程序中函数find_replace的功能是:在s1指向的字符串中查找s2指向的字符串,并用s3指向的字符串替换在s1中找到的所有s2字符串。若sl字符串中没有出现s2字符串,则不做替换并使函数返回0,否则函数返回1。试完善程序以达到要求的功能。#include#includeintfind_replace(chars1[],chars2[],chars3[]){inti,j,k,t=0;chartemp[80];if(s1[0]=='\0'||s2[0]=='\0')returnt;for(i=0;s1[i]!='\0';i++){k=0;j=i;while(s1[j]==s2[k]&&s2[k]!='\0'){j++;___(23)_________;}if(s2[k]=='\0'){strcpy(temp,&s1[j]);___________(24)________;i=i+strlen(s3);_______(25)_________;t=1;}}returnt;}voidmain(){charline[80]=Thisisatestprogramandatestdata.;charsubstr1[10]=test,substr2[10]=actual;intk;k=find_replace(line,substr1,substr2);if(______(26)_______)puts(line);elseprintf(notfound\n);}17.设hl和h2分别为两个单链表的头指针,链表中结点的数据结构为:typedefstructnode{intdata;structnode*next;}NODE;.sea_del函数的功能是:删除hl指向的链表中首次出现的与h2指向的链表中数据完全匹配的若干个连续结点,函数返回hl指向链表的头指针。例如,初态下,hl指向链表和h2指向链表如下图所示:试完善函数sea_del以达到要求的功能。NODE*sea_del(NODE*h1,NODE*h2){NODE*p,*ph,*q,*s;ph=NULL;p=q=h1;s=h2;if(h1==NULL||__(22)__)returnh1;while(p!=NULL&&s!=NULL){while(q-data==s-data&&q&&s){q=q-next;s=__(28)__;}if(s!=NULL)/*失配时,h1起始结点后移,h2从首结点开始*/{ph=p;p=q=p-next;s=__(29)__;}else、if(ph==NULL)h1=q;elseph-next=q;