C理论自测题及参考答案(第3次).doc_第1页
C理论自测题及参考答案(第3次).doc_第2页
C理论自测题及参考答案(第3次).doc_第3页
C理论自测题及参考答案(第3次).doc_第4页
C理论自测题及参考答案(第3次).doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、单选题1.以下关于函数的叙述中,正确的是 。 A. 在函数体中可以直接引用另一个函数中声明为static类别的局部变量的值B. 在函数体中至少必须有一个return语句C. 在函数体中可以定义另一个函数D. 在函数体中可以调用函数自身2. 以下关于变量的叙述中,不正确的是 。 A. 一个变量的作用域完全取决于该变量声明的位置B. 全局变量可以在函数以外的任何位置声明C. 动态局部变量的生存期仅限于本次函数调用,无法将局部变量的值保存到函数下一次调用D. 用static声明一个变量是为了限制其他编译单位引用该变量3. 以下选项是一个自定义函数的头部,其中正确的是 。 A. int fun(int a, b) B. int fun(int a, int a)C. int fun(int a,int b) D. int fun(static int a,int b)4. 关于函数返回值,以下叙述中正确的是 。 A. 函数返回值的类型由函数体内return语句包含的表达式类型决定B函数返回值的类型由函数头部定义的函数类型决定C若函数体中有多个return语句,则函数返回值是排列在最后的return语句中表达式的值D若函数体内没有return语句,则函数没有返回值5. 以下程序中main函数需要调用fun函数,所给选项中正确的调用语句是 。A. fun(1,2); B. fun(1,2); C. f(); D. fun(fun(1);void fun (int c) printf(“%d”,c ); 6. 已知函数f定义如下:void f(void) printf(“ Thats great!”);则调用f函数的正确形式是 。 A. f; B. f(); C. f(void); D. f(1);7. 已知有函数f的定义如下: int f(int a, int b) if (ab)return (a,b); else return (b,a); 在main函数中若调用函数f(2,3),得到的返回值是 。A. 2 B. 3 C. 2和3 D. 3和28. 在以下程序中,需要在fun函数中声明一个int型的变量,所给选项中不能用作该变量名的是 。 A. x B. y C.a D. fun#includeint y;main() int a=1; fun(a);int fun(int x) /* int 型变量声明位置*/9. 若有程序:int x;int f(int y) return 标识符 ; #includeint w;main() int z=2; f(z); 则在函数f中,return语句后允许出现的标识符是 。 A. x或w B. x或y C. z或w D. NULL10. 在main函数体内部和外部均允许出现的实体是 。 A. 预处理命令 B. 操作语句 C另一函数的定义 D函数形式参数声明11. 设有下列程序段:static char b=2;void Y ( ) static float d=4;. int a=1;void X ( ) int c=3; . 关于程序段中各变量的属性,以下叙述中错误的是 。 A. a是全局变量,函数X可以访问,函数Y不能访问B.b是全局变量,函数X和函数Y都可以访问C.c是动态局部变量,函数X可访问,函数Y不可访问D. d是静态局部变量,函数X和函数Y都可以访问12. 对应main函数中的fun函数调用,以下给出的四个fun函数定义的首部中,错误的是 。 main() int a,n; fun(n,&a); Avoid fun(int m,int x) Bvoid fun(int s,int h41) Cvoid fun(int p,int *s) Dvoid fun(int n,int a)13. 下列全局变量声明中,正确的是 。 A auto int i=1; B. float a=1, b=0.5, c=a+b;C. char for=1; D. static char ch;14. 若有数组 A和B的声明“static char A = ABCDEF,B = A, B, C, D, E, F ;”,则数组A和数组B的长度分别是 。 A. 7,6 B. 6,7 C. 6,6 D. 7,715. 以下程序运行后的输出结果是 。 A.2 2 B.7 2 C. 7 5 D.6 2#includemain() char a7=a00a00; int i,j; i=sizeof(a); j=strlen(a); printf(%d %d,i,j); 16. 假定已有声明“char a30,*p=a;”,则下列语句中能将字符串This is a C program.正确地保存到数组a中的语句是 。 A. a30=This is a C program.;B. a=This is a C program.;C. p= This is a C program.;D. strcpy(p,This is a C program.);17. 以下数组声明中正确的是 。 A. int n=10, an; B. int a; C. int a23=1,2,3; D. int a3=1,2,3;18若有声明int a10,b33; 则以下对数组元素赋值的操作中,不会出现越界访问的是 。 A. a -1=0 B. a10=0 C. b30=0 D. b03=019.已有声明“int S23”,以下选项中 正确地引用了数组S中的元素。 A. S12!1) B. S20 C. S1 D. S20. 已知函数fun的定义如下:void fun(int x,int y) int k; for(k=0;ky;k+) xk+=y;若main函数中有声明int a10=10;及调用fun函数的语句,则正确的fun函数调用形式是 。 A. fun(a,a0); B.fun(a0,a0); C.fun(&a0,a0); D. fun(a0,&a0);21以下单目运算符均只需要一个操作数,其中要求操作数类型必须是指针型的选项是 。 A. & B. + C. ! D. *22已有声明“int a5;”,以下表达式中不能正确取得数组元素a1地址的选项是 。 A&a1B+aC&a0+1Da+123已知有声明:“int good=1;”, 若要使得表达式p=good+good在编译时不出现语法错和警告,p应当声明为 。 A.char p; B. char *p; C. int p; D. int *p;24下列程序段的输出结果是 。 int i,x33=9,8,7,6,5,4,3,2,1,*p=&x11; for(i=0;i4;i+=2)printf(%d , *(p+i); A. 5 2 B. 5 1 C. 5 3 D. 9 7 25若有以下声明和定义,如果在main函数中需要调用fun函数,以下调用语句中错误是 。A. fun(1); B. (*a)(1); C. b=fun; (*b)(1); D. c=a;(*c)(1);void fun (int c) printf(“%d”,c ); main () void (*a)(int)=fun , *b(int), (*c)(int); /*调用fun函数语句位置*/void *b(int c) 26若有声明“int a4=1,2,3,4,5,6,7,8,9,10,*p=*(a+1);”,则值为9的表达式是 . A.p+=3,*p+ B. p+=4,*(p+) C. p+=4,*+p D. p+=4,+*p27. 已知某程序中有声明int a4,j;及语句for(j=0;j4;j+)pj=a+j;,则标识符p正确的声明形式应为 。 Aint p4; Bint *p4; Cint *p4; Dint (*p)4;参考答案:15:DDCBB 610:BBABA 1115:DDDAB 1620:DDDAC2125:DBBCC 2627:BB二、多选题1. 在定义一个函数时,下列选项中 (21) 可以缺省。 A. 函数名之前的数据类型 B. 函数名之后一对圆括号 C. 函数名 D. 形式参数声明 E. 函数体中的语句2. 以下程序中需要在main函数之后定义一个函数,在所给的选项中不能用作该函数名的标识符是 。 A.x B.y C. p D.a#define p 1int y;main() int a=1; 函数名(a);int 函数名(int x) return x*x;3. 若已定义一个无返回值的函数,则以下关于调用该函数的叙述中错误的是 。A函数调用可以作为独立的语句存在B函数调用可以出现在表达式中C函数调用可以作为一个函数实参D函数调用可以作为一个函数形参参考答案:1.ADE 2. BCD 3.BCD三、填空题1. 以下程序运行后输出结果是 。 #includefun (int k) static int i; int j=0; return(+k*(+i+(+j);main( ) int i,n; for (i=0;i3;i+) printf(%3dt,fun(i); 2. 以下程序运行后输出结果是 。 void fun1(int);void fun2(void);main() extern int x; printf(%d ,x+=2); fun1(2);int x=1;void fun1(int x) printf(%d ,x+); fun2();void fun2(void) printf(%d ,x); while(1) int x=5; printf(%d ,x); break; 3. 以下程序运行后输出结果是 。int x=1;main() int y,k; y=f(3); printf(%d,%d,x,y);int f(int x) if(x=3) int x=2; return x; elseb return x;4. 下列程序运行后输出结果是 。 #includetrans(int m, int n ) int q; if(mn) q=m; else q=m%n; trans( m/n, n ); if(q10) printf(%d, q ); else printf( %c, a+q-10 );main() trans( 30, 4);5. 下列程序运行后输出结果是 。 #includeint fun(int n);main() printf(%d,fun(5);int fun(int n) if(n=1)return 1; return n-fun(n-1);6.以下程序运行后的输出结果是 。 void fun(int x, int y, int *z) y=x*x; *z=x*x*x;void main( ) int a=2, b=0, c=0; fun(a, b, &c); printf(%d %d %d , a,b,c );7. 以下程序运行后输出结果中第一行为 (1) ,第二行为 (2) 。#include int fun(int a,int n,int b) int i=0,j,m=0,c,x; for(i=0;in;i+) x=ai;c=1; for(j=i+1;j=n)i=j; if(c=1) bm+=x; else bm+=-c; bm+=x; return m;void main() int x=4,4,4,4,4,4,4,4,1,2,y10,i,j,n=10; n=fun(x,n,y); for(i=0;in;i+) if(i%2=0)printf(n); printf(%5d,yi); 8以下程序运行后输出结果第一行是 (1) ,第二行是 (2) 。 #includeint convert(char s1,char s2) int i=0,j,s; char tab84=000,001,010,011,100,101,110,111; for(i=0,j=0;s1i!=0;i+,j=j+3) strcpy(&s2j,tabs1i-0); for(i=0,s=0;istrlen(s2);i+) s=s*2+s2i-0; return s;main() char ss1=15,ss280; int y; y=convert(ss1,ss2); printf(%dn%s,y,ss2);9以下程序运行后输出结果第一行是 (1) ,第二行是 (2) 。main() int a33=1,2,3,4,5,6,7,8,9,m,k,t; for(m=0;m3;m+) for(k=0;k=m;k+) if(m+k)%2) t=amk,amk=akm,akm=t; for(m=0;m3;m+) for(k=0;k3;k+) printf(%d ,amk); printf(n); 10.以下程序运行后输出结果第一行是 (1) ,第三行是 (2) 。#includevoid mat_change(int b44) int i,j,m,n,k,c66; for(i=0;i6;i+) for(j=0;j6;j+)cij=1; for(i=1;i5;i+) for(j=1;j5;j+)cij=bi-1j-1; for(i=1;i5;i+) for(j=1;j5;j+) if(cij=0) k=0; for(m=-1;m=1;m+) for(n=-1;n=1;n+) if(!(m=0&n=0)k=k+ci+mj+n; if(k=8)cij=1; for(i=1;i5;i+) for(j=1;j5;j+) bi-1j-1=cij;main() int i,j,a44=0,1,1,1,1,1,0,1,0,1,0,1,1,1; mat_change(a); for(i=0;i4;i+) for(j=0;j4;j+)printf(%d ,aij); printf(n); 11.已知某程序中有如下片段:int i; float f; /* p的声明 */p=&i; p=&f; 若要保证该段程序没有任何语法错误,p应当声明为 。 12. 以下程序运行时输出结果是 。main() int i,a6= 1,2,3,4,5,6; fun(a,a+5); for(i=0; i6; i+) printf(%2d,ai);fun(int *p1 , int *p2)int t; if(p1p2) t=*p1; *p1=*p2; *p2=t; fun(p1+=2, p2-=2); 13. 以下程序运行时输出结果第一行是 (1) ,第二行是 (2) 。 void swap(int *a,int *b) int c; c=*a;*a=*b;*b=c;main() int i,j,a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) for(j=0;j2-i;j+) if(i=j)swap(&aij,&ai+2j+2); else swap(&aij,&ai+1j+1); for(i=0;i3;i+) for(j=0;j3;j+) printf(%d ,aij); printf(n); 14. 以下程序运行时输出结果第一行是 (1) ,第二行是 (2) ,第三行是 (3) 。#include #include long fun(char *s) long n, sign, base=10,t; for(; isspace(*s);s+); sign=(*s=-)?-1:1; if(*s=+|*s=-) s+; if(*s=0&s+) if(*s=x|*s=X) base=16; s+; else base=8; for(n=0,t=1;t &(isdigit(*s)|isalpha(*s);s+) switch(base) case 10: n=n*base+*s-0;break; case 8: if(*s =0& *s =A & toupper(*s)x & iright) i+ ; while(sjleft)j-; if( i=j) y=si; si=sj ;sj=y; i+; j-; while( i=j );main() char str16=abcde,str27=25134; q(str1,0,4); puts(str1); q(str2,1,4); puts(str2); 参考答案:1. 2 6 12 2. 3 2 3 5 3. 1,2 4. 132 5. 3 6. 2 0 8 7. (1) -8 4 (2) 1 2 8. (1)13 (2)001101 9. (1)1 4 3 (2)2 5 8 10. (1)1100 (2)0111 11. void *p; 12. 6,2,4,3,5,1 13. (1)9 6 3 (2) 8 5 2 14. (1) 31 (2) 32 (3) -33 15. (1) edcba (2) 25431 四、完善程序1、以下程序中函数sort的功能是把a、b数组中的数据从大到小有序归并到c数组中,m保存a数组中数据的个数,n保存b数组中数据的个数,函数返回归并到c数组的数据个数。算法提示:首先将b数组中数据倒序,再将a、b数组有序合并到c数组中。#include void swap(int *a,int *b) int c; c=*a,*a=*b,*b=c;int sort(int *a,int m,int *b,int n,int *c) int i,j,k,x; for(i=0;in/2 ;i+) swap(&bi, (1) ); i=0; j=0; k=0; while(im & jn) if( (2) ) x=ai; i+; else x=bj; j+; ck=x ; k+; while(km+n) if(jn) ck=bj ; k+; j+; else if(im) (3) ; k+; i+; return m+n;void main() int i,n,c9,a5=12,10,5,3,1,b4=4,6,8,15; n=sort(a,5,b,4,c); for(i=0;in;i+) printf(%3d,ci); printf(n);2程序功能: 合并两个已经按照升序排列的一维数组。insert函数功能:将m插入x指向的含有n个元素的数组中,数组中n个元素已按升序排列,插入m后的n+1个元素仍保持有序。void insert(int x,int n,int m);main() int a10=1,3,5,7,9,b5=2,4,8,16,32,k; for(k=0;k5;k+) insert(a, (1) ,bk); for(k=0;kxn-1) (2) =m; else for(i=0; (3) ;i+); for(j=n;j=i;j-) xj= (4) ; xi=m; 3、 以下程序在已知n个人原始排列顺序的情况下,计算他们按以下规则出列的顺序。设有n个人站成一个队列,每人有一个惟一的编号I(1In),从左往右“1,2,1,2,”报数,报到“1”的人出列,报到“2”的人立即站到队伍的最右端;报数过程反复进行,直到n个人都出列为止。例如,当n=8时,若初始编号序列为1,2,3,4,5,6,7,8,则出列顺序为1,3,5,7,2,6,4,8。算法提示:声明数组pn+1,将n个人的初始编号序列1n依次存入p1pn中,这里把p0pn看作是一个循环队列,pf为队首元素,pr为队尾元素,令队首初始下标f=1,队尾初始下标r=0。反复执行下列操作直到队列为空(f=r):(1)输出队首元素并删除队首元素,(2)把队首元素插到队尾并删除队首元素。#include#define n 8void main() int pn+1 ; int f,r; for(f=1;f=n;f+)pf=f ; f=1; r=0; do printf(%3d,pf) ; f= (1) ; pr=pf; r= (2) ; f=(f+1)%(n+1) ; while( (3) ); 4. 以下程序中,函数encrypt的功能是对第一个形参指向的字符串做加密处理,函数返回已加密字符串的首地址。加密算法:判断字符串中每个字符是否为英文字母,若不是字母则保持原字符不变;若是大写字母,则用字母表中该大写字母对应的小写字母之后的第n个小写字母取代原字母;若是小写字母,则用字母表中该小写字母对应的大写字母之后的第n个大写字母取代原字母。大写字母表和小写字母表均被看作是首尾相连的环形表。例如,当n=3时,若原字符是a,则加密后该字符被D取代;若原字符是Y,则加密后该字符被b取代。#include #includechar *encrypt( (1) , int n) int i,t; for(i=0;ai!=0;i+) if(isalpha(ai) t=(toupper(ai)-A+n)%26; ai= (2) ? A+t :a+t; (3) ; void main()char *s2=dLLA,hQYG; printf(%sn, encrypt(s0,3); /* 输出Good */ printf(%sn, encrypt(s1,4); /* 输出Luck */ 5. 以下程序的功能是:对于一个长度不超过50的字符串S,按输入的命令进行删除、插入字符的操作。删除和插入命令的格式如下:1)删除命令格式:D a (a表示被删除的字符) 命令功能:从字符串S中删除字符a,若S串中有多个a,只删除第一个。 例如:S字符串为“This is a book.”,执行命令“D s”后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论