《C语言程序设计课程期末复习练习小抄参考.doc》由会员分享,可在线阅读,更多相关《C语言程序设计课程期末复习练习小抄参考.doc(10页珍藏版)》请在三一办公上搜索。
1、C语言程序设计课程期末复习练习 一、单选题 1在每个C语言程序中都必须包含有这样一个函数,该函数的函数名为( )。 A. main B. MAIN C. name D. function 2每个C语言程序文件的编译错误分为( )类。 A. 1 B. 2 C. 3 D. 4 3. 字符串a+b=12n的长度为( )。 A. 6 B. 7 C. 8 D. 9 4. 在switch语句的每个case块中,假定都是以break语句结束的,则此switch语句容易被改写为( )语句。 A. for B. if C. do D. while 5. 在下面的do-while循环语句中,其循环体语句被执行的次
2、数为( )。 int i=0; do i+; while(i10); A. 4 B. 3 C. 5 D. 10 6. 将两个字符串连接起来组成一个字符串时,选用的函数为( )。 A. strlen() B. strcap() C. strcat() D. strcmp() 7. 若用数组名作为函数调用的实参,传递给形参的是( )。 A. 数组的首地址 B. 数组中第一个元素的值 C. 数组中全部元素的值 D. 数组元素的个数 8. 假定a为一个整数类型的数组名,整数类型的长度为4,则元素a4的地址比a数组的首地址大( )个字节。 A. 4 B. 8 C. 16 D. 32 9. 假定s被定义为
3、指针类型char *的变量,初始指向的字符串为Hello world!,若要使变量p指向s所指向的字符串,则p应定义为( )。 A. char *p=s; B. char *p=&s; C. char *p;p=*s; D. char *p; p=&s; 10. 从一个数据文件中读入以换行符结束的一行字符串的函数为( )。 A. gets() B. fgets() C. getc() D. fgetc() 11. 由C语言目标文件连接而成的可执行文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. c 12. 设有两条语句为“int a=12; a+=a*a;”,则执行结
4、束后,a的值为( )。 A. 12 B. 144 C. 156 D. 288 13. 带有随机函数调用的表达式rand()%20的值在( )区间内。 A. 119 B. 120 C. 019 D. 020 14. for循环语句“for(i=0; i0 & x=10)的相反表达式为( )。A. x10 B. x10C. x=0 | x0 & x10 23. 当处理特定问题时的循环次数已知时,通常采用( )循环来解决。 A. for B. while C. do-while D. switch 24. 假定i的初值为0,则在循环语句“while(ib | b=5的相反表达式为_。 6. 执行“t
5、ypedef int DataType;”语句后,在使用int定义整型变量的地方也可以使用_来定义整型变量。 7. 假定一维数组的定义为“char* a8;”,则该数组所占存储空间的字节数为_。 8. 假定二维数组的定义为“double aMN;”,则该数组的列下标的取值范围在_之间。 9. 存储一个空字符串需要占用_个字节。 10. strcpy函数用于把一个字符串_到另一个字符数组空间中。 11. 程序的编译单位是一个_。 12. 假定a是一个一维数组,则ai的指针访问方式为_。 13. 执行int *p=malloc(sizeof(int)操作得到的一个动态分配的整型对象为_。 14执行
6、“printf(%c,A+2);”语句后得到的输出结果为_。 15short int类型的长度为_。 16. 用类型关键字表示十进制常数3.26f的类型为_。 17. 假定y=10,则表达式+y*3的值为_。 18. 逻辑表达式(x=0 & y5)的相反表达式为_。 19若x=5,y=10,则x!=y的逻辑值为_。 20. 假定二维数组的定义为“int a35;”,则该数组所占存储空间的字节数为_。 21. 使用“typedef char BB1050;”语句定义_为含有10行50列的二维字符数组类型。 22. 字符串a:xxk数据的长度为_。 23假定p所指对象的值为25,p+1所指对象的值
7、为46,则*+p的值为_。 24. 假定一个数据对象为int*类型,则指向该对象的指针类型为_。 25假定一个结构类型的定义为 “struct Aint a,b; A* c;”,则该类型的长度为_。 26. 假定要访问一个结构对象x中的数据成员a,则表示方式为_。 27. 用于输出表达式值的标准输出函数的函数名是_。 28每个C语言程序文件在编译时可能出现有致命性错误,其对应的标识符为_。 29. 已知AZ的ASCII码为6590,当执行“int x=C+3;”语句后x的值为_。 30. 表达式(int)14.6的值为_。 31. 假定不允许使用逻辑非操作符,则关系表达式x+y5的相反表达式为
8、_。 32. 假定x=5,则执行“a=(x?10:20);”语句后a的值为_。 33. 假定一维数组的定义为“char* aM;”,则该数组所占存储空间的字节数为_。 34. 存储字符串a需要至少占用存储器的_个字节。 35. strlen()函数用于计算一个字符串的_。 36. 在C语言中,一个函数由函数头和_这两个部分组成。 37假定p所指对象的值为25,p+1所指对象的值为46,则执行表达式*(p+)后,p所指对象的值为_。 38. 假定p是一个指向整数对象的指针,则用_表示指针变量p的地址。 39. 与结构成员访问表达式p-name等价的访问表达式为_。参考解答:1. ;(或分号) 2
9、. # 3. void 4. 0x195. a=b & b!=5 6. DataType 7. 32 8. 0N-19. 1 10. 拷贝(复制) 11. 程序文件 12. *(a+i)13. *p 14. C 15. 2 16. float17. 33 18. (x!=0 | y=5) 或:(x | y=5) 19. 1 20. 60 21. BB 22. 1123. 46 24. int* 25. 12 26. x.a27. printf 28. error 29. 70 30. 1431. x+y=5 32. 10 33. 4*M 34. 235. 长度 360. 函数体 37. 46
10、38. &p39. (*p).name 三、写出下列每个程序运行后的输出结果 1. #include void main() int x=5; switch(2*x-1) case 4: printf(%d ,x); break; case 7: printf(%d ,2*x); break; case 10: printf(%d ,3*x); break; default: printf(%s ,default); printf(%sn,switch end.); 2. #include void main() int f1,f2,i; f1=1; printf(%d ,f1); for(i
11、=2;i=5;i+) f2=3*f1+1; printf(%d ,f2); f1=f2; printf(n); 3. #include void main() int a10=12,39,26,41,55,63,72,40,83,95; int i, i1=0, i2=0; for(i=0;i10;i+) if(ai%2=1) i1+; else i2+; printf(%d %dn,i1,i2); 4. #include #include void main( ) char s15=567891234; int i, n=strlen(s) ; for(i=0; in/2; i+) char
12、 c=si; si=sn-1-i; sn-1-i=c; printf(%sn,s); 5. #include int LB(int *a, int n) int i,s=1; for(i=0;in;i+) s*=*a+; return s; void main() int a=1,2,3,4,2,4,5,2; int b=LB(a,4)+LB(a+3,3); printf(b=%dn,b); 6. #include void main() int i,s=0; for(i=1;i6;i+) s+=i*i; printf(“s=%dn”,s); 7. #include #define N 6 v
13、oid main() int i,aN=2,5,8,10,15,21; for(i=0; iN; i+) if(ai%5) printf(%d ,ai); printf(n); 8. #include #include void main() int i; unsigned int len; char* a5=student,worker,cadre,soldier,zzeasan123; len=strlen(a0); for(i=1; ilen) len=strlen(ai); printf(%dn,len); 9. #include void main() int a,b; for(a=
14、2,b=3; b20;) printf(%d %d ,a,b); a=a+b; b=a+b; printf(%d %dn,a,b); 10. #include void LE(int* a, int* b) int x=*a; *a=*b; *b=x; void main() int x=15, y=26; printf(%d %dn,x,y); LE(&x,&y); printf(%d %dn,x,y); 11. #include void main() int i, s=0; for(i=1;i+) if(s30) break; if(i%2=0) s+=i; printf(s=%dn,s
15、); 12. #include void main() int a9=36,25,48,24,55,40,18,66,20; int i, b1, b2; b1=b2=a0; for(i=1; ib1) b1=ai; if(aib2) b2=ai; printf(%d %dn,b1,b2); 13. #include void SB(char ch) switch(ch) case A: case a: printf(WW ); break; case B: case b: printf(GG ); break; default: printf(BB ); break; void main()
16、 char a1=a,a2=B,a3=f; SB(a1);SB(a2);SB(a3); printf(n); 14. #include #define M 6 void main() int i,x; int aM=10,15,22,37,46,58; for(i=0; iM/2; i+) x=ai; ai=aM-1-i; aM-1-i=x; for(i=0; i6; i+) printf(%d ,ai); printf(n); 15. #include struct Worker char name15; int age; float pay; ; void main() struct Wo
17、rker x=wanghua,52,2350; struct Worker y, *p; y=x; p=&x; printf(%d %7.2fn, y.age+p-age, p-pay+20); 16. #include void main() int i,j,k=0; for(i=0; i5; i+) for(j=i; j5; j+) k+; printf(%dn,k); 17. #include void main() int x=60; int i=2, p=1; while(1) if(x%i=0) p*=i; x/=i; if(ix) i+; else break; printf(%
18、dn,p); 18. #include void main() int a8=76,63,54,62,40,75,90,58; int i; for(i=0; i70) printf(%d ,ai); printf(n); 19. #include void WF(int x, int y) x=x+y; y+=x; printf(%d %dn,x,y); void main() int x=3, y=8; WF(x,y); 20. #include int LA(int *a, int n) int i,s=0; for(i=0;in;i+) s+=ai; return s; void ma
19、in() int a5=3,4,6,10,20; int b=LA(a,5); int c=LA(a+2,3); printf(%d %dn,b,c); 参考解答: 1. default switch end. 2. 1 4 13 40 121 3. 6 4 4. 432198765 5. b=56 6. s=55 7. 2 8 21 8. 10 9. 2 3 5 8 13 21 10. 15 26 26 15 11. s=42 12. 66 18 13. WW GG BB 14. 58 46 37 22 15 10 15. 104 2370.00 16. 15 17. 30 18. 76 7
20、5 90 19. 11 19 20. 43 36 四、写出下列每个函数的功能 1. #include int SG(int x) /x为大于等于2的整数 int a=(int)sqrt(x); /sqrt(x)取x的平方根 int i=2; while(i=a) if(x%i=0) break; i+; if(idata; f=f-next; while(f) if(f-datax) x=f-data; f=f-next; return x; 假定struct IntNode的类型定义为: struct IntNode int data; struct IntNode* next; 3. #i
21、nclude int SA(int a, int b) if(ab) return 1; else if(a=b) return 0; else return -1; 4. void Output(struct IntNode *f) /f为单链表的表头指针 if(!f) return; while(f) printf(%d ,f-data);. f=f-next; printf(n); 假定struct IntNode的类型定义为: struct IntNode int data; struct IntNode* next; 5. int SC(int a, int b, int c) if
22、(a=b & a=c) return a; if(b=a & b=c) return b; return c; 6. int* LI(int n) int* a=malloc(n*sizeof(int); int i; for(i=0;in;i+) scanf(%d,a+i); return a; 7. int WC(int a, int n, int k) int i, c=0; for(i=0;i=k) c+; return c; 8. void QA(struct Worker a, int n) int i; for(i=0; ib则返回1,若a=b则返回0,若ab则返回-1。 4.
23、遍历并输出由f所指向的单链表中每个结点的值。 5. 求出a,b,c三个数中的最大值并返回。 6. 首先建立一个动态整型数组an,接着从键盘上输入n个整数到an中,最后返回数组an的首地址。 7. 统计并返回一维整型数组an中大于等于k的值的个数。 8. 从键盘上为具有struct Worker类型的数组an输入n个记录。 五、按题目要求编写程序或函数 1. 编写一个程序,输出50以内(含50)的、能够被3或者5整除的所有整数。 2. 编写一个递归函数“int FF(int a, int n)”,求出数组a中所有n个元素之积并返回。 3. 编写一个程序,利用while循环,计算并打印输出的值,其中正整数n值由键盘输入。假定求和变量用sum表示,计数变量用i表示,sum、i和n均定义为全局变量,sum和