C语言知识期末复习材料卷习题集.doc
/期末总复习(基础知识+程序设计部分)一 填空1已知char ch=A; 则下列表达式的值是: a Ch=(ch>=A && ch<=Z)? (ch+32):ch;2. 若x=1,y=2,z=3, 则表达式z+=+x+y+之值是 7 3 若x=2,y=3,则x%=y+3之值为 2 4. 若有定义int y=3; float z=5.2, x=4.8; 则表达式y+=(int)x+x+z的值为 17 5. 设x,y,z为int型变量,且x=3,y=-4,z=5,请写出下列各表达式的值 1)(x&&y)=(x|z) 1 2) !(x>y)+(y!=z)|(x+y)&&(y-z) 0 3)x+-y+(+z) 13 6. 设x,y,z为int型变量,请用C语言表达式描述下列命题 1)x和y中有一个小于z (x<z&&y>z|x>z&&y<z )=1 2) x,y和z中有两个为负数 (x<0&&y<0&&z>=0|z<0&&y<0&&x>=0|y<0&&x<0&&z>=0)=1 3)y是奇数y%2!=07. 下面for循环语句最多可执行 4 次 For (x=0,y=0;(y!=99)&&(x<4);x+)8. 设i,j,k均为int型变量,则执行以下for语句后,k的值是 10 for (i=0,j=10;i<=j;i+,j-) k=i+j;9若已知x,y,z,m,n均为int 型变量,则执行下面语句后,x的值为 7 y的值为 9 z的值为 7 m=10 ; n=5; x=(-m=n+)? -m : +n; y=m+; z=n;10. 若有说明语句: w=1,x=2,y=3,z=4; 则表达式w>x? w:z>y? z:x值是 4 11. 若定义的函数没有返回值时,则应该在该函数定义时加上类型说明符 void 12. 凡在函数中未指定存储类型的变量,其隐含的存储类别为 动态存储 13. 在C语言中,一个函数直接或间接地调用自身,编构成函数的 递归 14. 如果被调用的自定义函数和调用函数不再同一个文件中,则在应以函数的文件中应将该文件的存储类型定义成 型,在调用函数的文件中将该函数说明为 型。15. 对于所定义的二维数组a23,元素a12是数组的第 6 个元素。N*j+m+116.若有定义:char *str=”I am a student.”; 则字符串在存储单元中占 16 个字节。17. 在执行int a3=1,2,3,4;语句后,a12的值是 0 。18. 调用strlen(“abc0ef0g”)的返回值是 3 。0为停止符19. 设有定义:char s12=“string”; 则printf(“%dn”,strlen(s);的输出值是 6 20. 执行下列程序段后,*p等于 3 int a5=1,3,5,7,9; *p=a;p+;二 判断(true or false)1. 调用函数时,实参的类型、个数和顺序与函数定义时形参的类型、个数和顺序完全一致。T2. 函数可以嵌套定义F3. 函数必须有返回值,否则不能正确作用F4. C程序中有调用关系的所有函数必须放在同一源程序文件中。F5. 全局变量与函数体内定义的局部变量重名时,局部变量不起作用。F6. 函数定义时可以不制定形参的类型,函数调用时由实参的类型决定形参的类型F7. 当函数定义放在main()函数前面时,可以缺省函数声明。T8. C语言中允许函数嵌套调用T9. 局部静态变量是在编译时赋初值的,即只赋一次初值。T10. 外部变量必须定义在文件的开头部分F11. 字符0是字符串的结束标记,其ASCII码为0.T12. 若有说明:int a34=0;则数组a中每个元素的初值都为0.T13. 若有说明:int a24=0,0;则只有a00和a01的初值为0, 其余元素的初值均不为0. F14. 若有说明:int a34;则数组a中各元素可在程序的编译阶段达到初值0.F15. 若用数组名作为函数调用时的实参,则实际上传递给形参的是数组的第一个元素值。F16. 在两个字符串的比较中,字符个数多的字符串比字符少的字符串大。F17. 当需要接受用户从键盘上输入的含有空格的字符串时,应使用gets()函数。T18. 在C语言中,二维数组元素在内存中的存放顺序可以随意调整变化。F19. &b指的是变量b的地址处所存放的值;F20. 指针变量可用于保存同类型变量的地址值;F21. 存放地址的变量同其他类型的变量一样,可以存放任何类型的数据;F22. 指向同一数组的两指针p1,p2相减的结果与所指元素的下标相减的结果是相同的。F23. 如果定义函数时参数是指针变量,那么,调用函数时的参数就可以是同类型的指针变量,数组名或简单变量的地址T24. char *name5定义了一个一维指针数组,它有5个元素,每个元素都是指向字符数据的指针型数据。F25. 语句y=*p+;和y=(*p)+;是等价的。F26. 函数指针指向的是函数的入口地址。T27. int *p;定义了一个指针变量,其值是整型的。F28. 用指针作为函数参数时,采用的是“地址传送”方式.T三、 选择题 1下列变量名中哪些是合法的?p 2a a# C$ t3 _var q int2语言中用_表示逻辑值“真”。A) trueB) 整型值C) 非零整数值D) T3.下列合法的字符常量为_。 A) "a" B) n C) china D) a4. 设有语句char c=72; 则变量c_。 A) 包含1个字符 B)包含2个字符 C) 包含3个字符 D) 不合法5. 字符串"t"NameAddressn"的长度为_。 A) 19 B) 15 C) 18 D) 不合法6. 设a,b,c 为 int 型变量,且a = 3 ,b = 4 , c = 5,下面表达式值为的是_。A) a && b B) a <= b C) a | b+c && b-c D) !(a<b) && !c | 1)7. 若有以下定义:char a ;int b ;float c ;double d ;则表达式 a * b + d c 的值的类型为_A) float B) int C) char D) double8. 设有语句int a = 3; 执行了语句a += a -= a * a; 后,变量a的值是_。A) 3 B) 0 C) 9 D) -129. 设有语句int a = 3; 执行了语句printf("%d", -a +); 后,输出的结果是_C_,变量a的值是_D_。A) 3 B) 4 C) -3 D) -210. 将下列数学表达式表示为合法的C语言表达式。(1) (2) (3) (4) (5) (6) 12 下列可作为C语言赋值语句的是:_。A) x = 3, y = 5 B) a = b = cC) i - ;D) y = int ( x ) ;13. 以下程序的输出结果为:_。main() int a = 2, c = 5;printf("a = %d, b = %dn", a, c);A) a = %2, b = %5 B) a = 2, b = 5C) a=%d, b=%d D) a=%d, b=%d14. 在下面的条件语句中,只有一个在功能上与其它三个语句不等价(其中s1和s2表示它是C语句),这个不等价的语句是: 。A) if (a) s1; else s2;B) if (!a) s2; else s1;C) if (a != 0) s1; else s2;D) if (a = 0) s1; else s2;15. 设有声明语句:int a=1,b=0;则执行以下语句后输出为: 。switch (a) case 1: switch (b) case 0: printf("*0*");break; case 1: printf("*1*");break; case 2: printf("*2*");break;A) *0* B) *0*2* C)*0*1*2* D)有语法错误16 在while (x)语句中的x与下面条件表达式等价的是: 。A) x = 0 B) x = 1 C) x != 1 D) x != 017. 若int x;且有下面的程序片断,则输出结果为: 。for (x=3; x<6; x+) printf(x%2)=0? "*%d" : "#%dn", x);A) *3 B) #3 C) #3 D) *3#4#4 *4 *4#5 *5*5 #5 18. 以下能对外部的一维数组a(含有10个元素)进行正确初始化的语句是: 。A) int a10 = (0,0,0,0,0);B) int a10 = ;C) int a = 0;D) int a10 = 10*1;19. 以下能对外部的二维数组a进行正确初始化的语句是: 。A) int a2 = 1,0,1,5,2,3;B) int a3 = 1,2,1,5,2,3;C)2 int a24 = 1,2,1,5,2,6;D) int a3 = 1,0,2,2,3;20. 若二维数组a有m列,则在aij之前的元素个数为: 。A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+121. 已知:static int a34;则数组a 中各元素 。A) 可在程序运行阶段得到初值0 B) 可在程序编译阶段得到初值0C) 不能得到确定的初值 D) 可在程序的编译或运行阶段得到初值022. 判断字符串s1是否大于字符串s2,应当使用: 。A) if (s1 > s2) B) if (strcmp(s1, s2)C) if (strcmp(s2, s1) > 0) D) if (strcmp(s1, s2) > 0)23. .若用数组名作为函数调用时的实参,则实际上传递给形参的是: 。A) 数组的首地址; B) 数组的第一个元素值;C) 数组中全部元素的值; D) 数组元素的个数。24. 在函数调用时,以下说法中正确的是: 。A) 在C语言中,实参与其对应的形参各占独立的存储单元;B) 在C语言中,实参与其对应的形参共占同一个存储单元;C) 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元;D) 在C语言中,形参是虚拟的,不占存储单元。25. C语言中形参的缺省存储类别是: 。 A) 自动(auto) B) 静态(static) C) 寄存器(register)D)外部(extern)26. C语言规定:简单变量做实参时,它和对应形参之间数据的传递方式为: 。A) 地址传递; B) 单向值传递;C) 由实参传给形参,再由形参传回给实参; D) 由用户指定传递方式。27. (1) 阅读程序,选择程序的运行结果。#include <stdio.h>int Try(int n)if (n > 0)return(n*Try(n-2);elsereturn 1;main() int x;x = Try(5);printf("%dn", x);A. 15B. 120C. 1D. 前面三个答案都是错的(2)下面的函数f两次进行调用,请选择程序的运行结果。#include <stdio.h>int Fun(int m)static int n = 0;m /= 2;m =m * 2;if (m)n *= m;return(Fun(m-2);else return n;main() int a,i,j;for (i=0; i<2; i+)a = Fun(4+i);printf("%dn",a); 第一次输出的结果 A. 8 B. 0C. 64D. 4 第一次输出的结果 A. 8 B. 0C. 64D. 428. 设有语句:int a10, *p=a;,则在下面语句中,不正确的是 A) P=P+1 B)P0=*P+1 C)a0= a0+1 D)a=a+129. 指向变量的指针,其含义是指该变量的 A)值 B)地址 C)名 D)一个标志30. 若int(*p)5;,则其中p的含义是 A) 5个指向整形变量的指针 ; B) 指向5个整形变量的函数指针;C)一个指向具有5个整形元素的一维数组的指针;D)具有5个指针元素的一维数组指针,每个元素都只能指向整型量;31. 设有定义:int a=3,b,*p=&a;则下列语句中使b不为3的语句是 A) b=*&a; B)b=*P; C)b= a; D)b=*a;32. 设char *s;则以下表达式中,正确的是 A) s=”computer”; B) *s=”computer”; C) *s=”computer”; D)*s=s33. 设 char s10, *p=s;,以下表达式中不正确的是 A) p=s+5; B)s=s+p; C)s2=p4; D)*p=s0;34. 执行下列程序段后,*p等于 int a5=1,3,5,7,9, *p=a; p+A) 1; B)3; C)5; D)7;程序设计题1. 编程计算1*2*3 + 3*4*5 + 99*100*101的值。#include <stdio.h>int main()int i,j,k,sum=0;for(i=1,j=2,k=3;i<100,j<101,k<102;i+=2,j+=2,k+=2)sum=sum+i*j*k;printf("%dn",sum);2. 编程计算 a + aa + aaa + . + aa.a (n个a)的值,n和a的值由键盘输入。#include <stdlib.h>Void main()int n,a,i;int sum,na;printf("Please input n and a:");scanf("%d %d",&n,&a);sum=0;na=a;for(i=1;i<=n;i+)sum+=na;na=na*10+a; printf("sum=%dn",sum);3. 利用前100项之积计算。#include <stdio.h>int main()float a=2,b=1;double num=1;int i;for (i=1;i<=100;i+)num*=a/b;if(i%2=0)a+=2;else b+=2; num*=2;printf("=%.16lfn",num);4. 按如下格式打印100以内整数的平方根表。5. 编程计算的值。(m,k从键盘上输入,m>k)6. 用整数1-12依次表示1-12月,由键盘输入一个月份数,输出对应的季节英文名称(12-2月为冬季,3-5月为春季,6-8月为夏季,9-11月为秋季),要求输入输出表达的意义清楚明白。7. 编程打印以下图形1121123211234321123456789876543218. 用递归的方法求n的阶乘9. 编写求两个整数的最大公约数和最小公倍数的函数