2010春C考试试题 |
|
2010春 第二部分C语言程序设计 一、选择题(用答题卡答题,答案依次填在21~30答题号内,共l0分) 21.C语言规定,在一个源程序中main函数的位置 _____(21)_____ 。 A.必须在最开始 B.必须在最后 C.必须在预处理命令的后面 D.可以在其他函数之前或之后 22.以下选项中,______(22)______ 是C语言关键字 A.printf B.include C.fun D.default 23.已知有声明"int a=3,b=4,c;",则执行语句"c=1/2*(a+b);"后,c的值为__(23)___ 。 A.0 B. 24.设指针变量占2个字节的内存空间,若有声明"char *p="123";int c;",则执行语句"c=sizeof(p);"后,c的值为__(24)___ A.1 B. 25.已知有声明"int a=3,b=4;",下列表达式中合法的是 (25) A.a+b=7 B.a=|b| C.a=b=0 D.(a++)++ 26.已知有声明"char s[20]="Hello";",在程序运行过程中,若要想使数组s中的内容修改为"Good",则以下语句中能够实现此功能的是 (26) 。 A.s="Good"; B.s[ C.strcat(s,"Good"); D.strcpy(s,"Good"); 27.已知有声明"int a[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16)};",若需要引用值为12的数组元素,则下列选项中错误的是( 27 ) 。 A.*(a+2)+3 B.*(*(a+2)+3) C.*(a[2]+3) D.a[2][3] 28.已知有声明"int n;float x,y;",则执行语句"y=n=x=3.89;"后,y的值为 ( 28 ) 。 A.3 B.3. 29.已知有声明"int a=12,b=15,c;",则执行表达式"c=(a||(b-=a))"后,变量b和c的值分别为( 29 ) A.3,1 B.15, 30.下列叙述中,正确的是 _____(30)______ 。 A.C语言中的文件是流式文件,因此只能顺序存取文件中的数据。 B.调用fopen函数时若用"r"或"r+"模式打开一个文件,该文件必须在指定存储位置或默认存储位置处存在。 C.当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到该文件中的第1个数据 D.无论以何种模式打开一个已存在的文件,在进行了写操作后,原有文件中的全部数据必定被覆盖 二、填空题(将答案填写在答题纸的相应答题号内,每个答案只占一行,共30分) ● 基本概念 1. 数学式 2. 已知有声明"char ch='g';",则表达式ch=ch-'a'+'A'的值为字符 (2) 的编码。 3. 在C语言系统中,如果一个变量能正确存储的数据范围为整数-32768~32767,则该变量在内存中占_____(3)_____个字节。 ' 4. 已知有声明"int a[3][2]={{1,2),{3,4},{5,6}},*p=a[0];",则执行语句"printf("%d\n",*(p+4));"后的输出结果为__(4)___ 。 5. 已知有声明和语句"int a;scanf("a=%d",&a);",欲从键盘上输入数据使a中的值为3,则正确的输入应是 _____(5)_____ 。 • 阅读程序 6. 以下程序运行时输出到屏幕的结果为 (6) 。 #include #define MAX(A,B) A>B?2*A:2*B void main() {int a=1,b=2,c=3,d=4,t; t=MAX(a+b,c+d); printf("%d\n",t); } 7.以下程序运行时输出到屏幕的结果是 (7) 。 #include void main() {int a=1,b=2; a+=b; b=a-b; a-=b; printf("%d,%d\n",a,b); } 8.以下程序运行时输出到屏幕的结果是 (8) 。 #include void swap(int a,int b) {int t; if(a>b)t=a,a=b,b=t; } void main() {int x=13,y=11,z=12; if(x>y)swap(x,y); if(x>z)swap(x,z); if(y>z)swap(y,z); printf("%d\t%d\t%d\n",x,y,z); } 9•以下程序运行时输出到屏幕的结果第一行是 (9) ,第二行是 (10) ,第三行是(11) 。 #include int g(int x,int y) { return x+y; } int f(int x,int y) { {static int x=2; if(y>2) { x=x*x; y=x; } else y=x+1; } return x+y; } void main() {int a=3; printf("%d\n",g(a,2)); printf("%d\n",f(a,3)); printf("%d\n",f(a,2)); } 10.以下程序运行时输出到屏幕的结果是 (12) 。 #include void fun(int m,int n) {if(m>=n) printf("%d",m); else fun(m+1,n); printf("%d",m); } void main() { fun(1,2); } 11.以下程序运行时输出到屏幕的结果第二行是 (13) ,第四行是 (14) 。 #include #define N 6 void main() {int i,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;j a[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) 。 #include void fun(char *p1,char *p2); void main() {int i; char a[]="54321"; puts(a+2); fun(a,a+4); puts(a); } void fun(char *p1,char *p2) {char t; while(p1 {t=*p1;*p1=*p2;*p2=t; p1+=2,p2-=2; } } 13.以下程序运行时输出至到屏幕的结果第一行是(17) ,第二行是(18) 。 #include typedef struct{int x,y;}direction; int visible(direction s,direction A,direction B,direction C) {direction p1,p2; int d; 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); return d>0; } void main() {char *ss[]={"invisible","visible"}; direction s={1,1},T={1,1},A={0,0},B={2,1}; puts(ss[visible(s,T,A,B)]); } • 完善程序 14.以下程序的功能是:统计一个字符串中数字字符"0"到"9"各自出现的次数,统计结果保存在数组 count中。例如,如果字符串为"lenterschar4543123564879ffgh",则统计结果为:1:2 2:1 3:2 4:3 5:2 6:1 7:1 8:1 9:1。试完善程序以达到要求的功能。 #include void fun(char *t,int count[]) { char *p=t; while( _____(19)_____ ) { if(*p>='0' && *p<='9') count[_____(20)_____]++; p++; } } void main() {char s[80]="1enterschar4543123564879ffgh";int count[10]={0},i; fun(s,count); for(i=0;i<10;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 #define N 7 void sort(int a[],int n) {int i,j,min,max,t; for(i=0;i<___(21)___;i++) { ______(22)______ ; for(j=i+l;j else if(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;} } } void main() {int a[N]={8,4,9,3,2,1,5},i; sort(a,N); printf("sorted:\n"); for(i=0;i printf("\n"); } 16.下列程序中函数find_replace的功能是:在s1指向的字符串中查找s2指向的字符串,并用s3指向 的字符串替换在s1中找到的所有s2字符串。若sl字符串中没有出现s2字符串,则不做替换并使 函数返回0,否则函数返回1。试完善程序以达到要求的功能。 #include #include int find_replace(char s1[],char s2[],char s3[]) { int i,j,k,t=0; char temp[80]; if(s1[0]=='\0'||s2[0]=='\0')return t; 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; } } return t; } void main() {char line[80]="This is a test program and a test data."; char substr1[10]="test",substr2[10]="actual"; int k; k=find_replace(line,substr1,substr2); if(______(26)_______) puts(line); else printf("not found\n"); } 17.设hl和h2分别为两个单链表的头指针,链表中结点的数据结构为: typedef struct node {int data; struct node *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)__) return h1; 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; else ph->next=q; } __(30)__ ; }
|
|