C语言1~6章复习题
一、选择
1.假定a 和b都是int型变量,下列是正确的C语言语句。
A.a++b;B.a+++b;C.a++++b;D.a+++++b;
2.执行a=strlen(“\2389”) 后,变量a的值是。
A.2B. 3 C. 4 D. 5
3.若已声明int a=-30,b=-7;则表达式!a+a%b 的值是。
A.32B. 2 C.-2 D.28
4.若已有声明int a,b;long c;则下列不能算出正确的结果。
A.c=456*789/6;B.c=456L*789/6;C.c=456*789L/6;D.c=(long)(456*789)/6;5.假定a 和b都是int型变量,下列是正确的C语言语句。
A.a++b;B.a+++b;C.a++++b;D.a+++++b;
6.以下常量表示中错误的是 (1) 。A
A.e2 B.-2L C.2.5f D. 0xabcd
7.以下符号中不能用作标识符的是。C
A._256
B. scanf
C. void
D.Struct
8.以下关于变量的叙述中错误的是(3)。B
A.所有变量在使用前都必须声明
B.变量声明可放在函数体中任何位置
C.全局变量和局部变量可以同名
D.声明变量时必须给出变量的数据类型但可以缺省存储类型
9.要求两个操作数都必须是整数的运算符是 (4) 。D
A.== B.+ C./ D.%
10.若有声明“double t ;”,则表达式t=1,t+5,t++的值是。B
A. 0
B. 1.0
C.2.0
D. 6.0
11.已知有声明“int e;”,则以下表达式中与while(e)语句中的表达式e不等价的表达式是 (6) 。A
A.e==0 B.e>0 || e<0 C.!e==0 D. e!= 0
12.执行以下程序段后输出结果为(7)。C
A. 1,1,1
B. 2,2,2
C. 2,1,1
D. 1,2,2
main()
{
int x,y,z;
x=y=z=1;
if(++x||++y&&++z)
printf("%d,%d,%d",x,y,z);
}
13.为避免嵌套if语句的二义性,C语言规定与else配对的if是。D
A. 与else缩排位置相同的if
B. 与else在同一行上的if
C. else之后最近的if
D. else之前最近的未配对if
14..以下关于函数定义的叙述中错误的是 (12) . B
A.在函数体中可以声明与函数名同名的一个局部变量
B.在函数体中可以定义另一个函数
C.在函数体中可以调用函数自身
D.在函数体中可以没有return语句
15.下列C是错误的C语言常数。
A.020 B.1UL C.‘\0x41’D.0xfe
16.若已声明 int a=7;char b=1; float x=2.5 , y=4.7;则下列表达式的值不为2的是:D。
A. x+a%3*(int)(x+y)%2/4 B. sizeof ‘A’
C. b+1 D. sizeof b
17.若已声明 float a=1.0,b=2.0 ,r;则执行r = ++a+++a*b;语句后,变量r中的值为: D 。
A. 3 B. 4 C.9 D.7
18.下列程序执行后的输出是:。
#include
main( )
{
int w=0 , i;
for(i=0 ;i<3 ;i++)
switch(w++){
case 0:
case 1:
case 2:
case 3: printf("%d" , w++ );
}
}
A.13B.123 C.24 D.345
19.已知某程序中有以下片断:
#define p 2.5
main( )
{
float x;
x=p;
…….
}
则main函数中标识符p代表一个。
A、float型变量
B、double 型变量
C、float型常量
D、double 型常量对于20. 一个用户自定义函数,以下叙述中是不正确的。
A、函数体内任何位置声明的变量不能与该函数的函数名同名。
B、函数体中嵌入的复合语句内声明的变量可以与所在函数的形式参数同名。
C、同一函数体内不同的复合语句中声明的变量可以同名。
D、函数体内任何位置声明的变量都可以与在所有函数之外声明的变量同名。
21. 关于全局变量,以下叙述中正确的是。
A、可以在所有函数中对一个全局变量做赋值或引用操作。
B、全局变量不能与某个函数的形参变量同名。
C、全局变量声明语句可以放在源程序文件中的函数之外的任何位置。
D、全局变量的初值是不确定的。
22.如果一个函数只限于被同一源程序文件中的其它函数调用,不允许被其它源程序文件中的函数调用,则在定义该函数时应在其函数头部加上标识符。
A、static
B、extern
C、auto
D、register
23. 以下跳转语句中除外,其跳转的目的地都仅限于跳转语句所在的函数体内。
A、continue
B、break
C、goto
D、return
24. 已知有声明:
char c=…1? ;
int x=300 ;
float t=35000 ;
double d=3.1234567e10 ;
则以下表达式求值时除外,其结果都可能是不准确的。
A、x=t/c
B、t=d/x;m
C、t=d/1e5f
D、t=x+c
25. 设有定义float y=3.45678; int x; 则以下表达式中能实现将y中数值保留到小数点后2
位,第3位四舍五入的表达式是。
A、y=(y*100+0.5)/100.0
B、x=y*100+0.5, y=x/100.0
C、y=y*100+0.5/100.0
D、y=(y/100+0.5)*100.0
26. 以下程序中,输出值是。
#define M 3
#define N M+1
#define NN N*N/2
main( )
{
printf("%d\n“ , NN );
}
A、5
B、6
C、7
D、8
27.以下局部变量声明中,正确的是。
A、int 2x=1 , 2y=0;
B、auto float x=2 , y=sqrt(x);
C、char for=1;
D、double f?=1.0;
28. 若x、i、j 和k都是int型变量,则计算下面表达式x=(i=4, j=16 , k=32) 后,x 的值
为。
A、 4
B、16
C、32
D、 1
29. 以下常量中,是符合语法要求的。
①0218 ②?\0x1a? ③E-9 ④ 3.5f
⑤(1/2)e-2 ⑥3L ⑦0xFF
A、①②③
B、③⑤
C、②④⑦
D、④⑥⑦
30.以下语句的说法中,正确的是。
A、do-while语句的循环体至少会被执行1次。
B、while语句的循环体至少会被执行1次。
C、for语句的循环体至少会被执行1次。
D、在C语言中只能用while、do-while和for语句实现循环结构。
31. 以下程序运行时输出结果为。
#include
#define f 2.5
void main( )
{
printf("%d",sizeof(f));
}
A、 2
B、4
C、8
D、 2.5
32. 已有声明:int x=0 , y=0 , z=0; 以下表达式中与++x && y++ || ++z 的值不一样
的表达式是。
A、x += ++x || x++
B、x = y = z
C、!x
D、x >= y> z
33. 以下表达式中,可以正确地用于if ( e ) 语句中的条件达式 e 是。
A、x == ++(x+1)
B、x += ++x || x++
C、x+1 = z
D、x % 2.0 != 0
34. 以下单目运算符中要求操作数不能是常量(例如2)的是。
A、sizeof
B、!
C、(数据类型)
D、++
35. 以下描述不正确是。
A、在循环语句中使用break语句是为了使流程跳出循环体,提前结束循环。
B、c ontinue只能出现在循环结构中。
C、c ontinue只能出现在循环结构或switch结构中。
E、在循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环。
36. 若有:int w=1 , x=2 , y=3 , z=4; 则表达式w>x?x--:y A、4 B、3 C、 2 D、 1 37. 在内存中需个字节存储下列字符串:“\t\”Name\\Address\n” A、19 B、15 C、16 D、17 38. 若有: char c; scanf(“%c” , &c); 则以下表达式均用于判断c中存储的是否是字母编码,除外都是正确的。 A、c>=?A?&& c<=?z? B、>=?A?&& c<=?Z?||c>=?a?&& c<=?z? C、!(c<'A'||c>'Z'&&c<'a'||c>'z') D、c>=65 && c<=90||c>=97&&c<=122 二、填空 1.当一个用c语言开发的程序被运行时,首先被调用执行的函数main 。2.能获得x, y , z 三个变量中最大值的表达式是x>y&&x>z ? x : (y>x&&y>z ? y : z) 3.如果一个循环结构的循环体至少要执行一次,一般用do - while 语句实现。4.直接常量的书写形式反映了它所代表的值及数据类型。 5.算法的三种基本结构是顺序、选择、循环 6.一个用C语言编写的源程序中main函数是必不可少的。 7.C语言标准规定关键字不能用作用户定义的变量名。 8.已知变量声明: int x1; long x2;float x3; double x4 ; 程序中用scanf(“%d%ld,%f,%lf”,&x1,&x2,&x3,&x4);输入语句能将键盘输入的值: 1 回车>正确地送入到x1 , x2 , x3 , x4 各变量中。 9.数学式“ ”所对应的C语言表达式是fabs(exp(sqrt(x*x+y*y)))。 10.一个C语言源程序由一系列的函数定义、若干预处理命令及若干外部数据对象定义所组成。 11.C语言中标号标识符无值、无类型且不需要声明便可直接使用。 12. 若已声明: int x=1 , z=1 , y=1 , k ;则执行表达式k=x++||++y&&++z后,变量k,x,y,z 的值是1,2,1,1 13. 若用八进制常量表示C中的int型常量(16bits)的表示范围,则八进制数形式的数值表 示范围为0100000~0077777 。 14. 若已声明unsigned a = 30; ,则表达式 a = -a的值为65506。 15. 若已声明float a=3.14; ,则表达式36/printf( “%f\n” , a) 的值为4。 16. 若已声明 int a=1 , b=2 , c=3; ,则表达式 a++ , c*a*b 的值为12。 17. 若已声明int x = 1 , y=2 , z=3 ; 则执行语句x>y ? (z -= --x ) : (z+=++x );后,变量x , z 的值分别是2,5 。 18. 在C语言中,可缺省循环条件表达式的循环语句是for 。 19. 若已有声明float d = 1 ; double f=1 , long g ; 和语句printf(“”,g = 10+…i? +(int)g*f ) ; 为了正确地以十进制形式输出printf参数表中第二个参数的值,则在第一个参数中的下划线位置处应填写的格式转换说明符是%ld 。 20. 关键字case和default只能在switch语句中出现。设有如下声明和语句: int a=2, b, c=5 ; scanf( “%d” , &b) ; b = c-- || scanf (“%d” , & c ) && a++; 该程序段执行时,若从键盘上输入的数据是4?3 (?代表空格键) , 则变量 c 的值为 4 。 21. 在Turbo C 中, 若将实型常数1.5存储在内存中,它将占用8 个字节。 22. 若有定义: int b=17; float a=4.5, c=6.5; 则表达式a+(int)(b/3*(int)(a+c)/2)%4 的值 为7.5 。 23. 下列程序执行后的输出结果是0 。 main( ) { unsigned short x=65536; int y; printf(“%d\n”, y=x); } 24. 若有int x=11; 则表达式1/3*x++的值为0 。 25. 执行行语句printf(“%d” , (a=2)&&(b=-2) ); 后的输出是 1 。 26. 执行下列程序段后, 变量i 的值是16 。 int i=10 ; switch (i) { case 9: i+=0; case 10: i+=1; case 11: i+=2; default: i+=3; } 27.若用n表示年龄,则在C语言中表示1到16岁, 或高于60岁的逻辑表达式是 1 && n <= 16 || n>60 。 28. 执行下列程序段后, c 的值为880 。 #define a 80 #define b a+40 main( ) { int c; c=b*20; } 29.假定有:unsigned j; 那么对于:for (j=15 ; j<0 ; j-=2) { ……… } 循环体将执行0 次, 而对于for (j=15 ; j>0 ; j-=2) { ………} 循环体又将执行无数次。 30.循环语句for(i=10; i++<4; ) i-- ; 循环0 次。 三、阅读程序 1 在16位PC机中以下程序段执行后,x,y,c的值为:32768, -32768, …A?。 unsigned x=0x7f41; int y; char c; c=x;x+=0277;y=x; 2. 在16位PC机中以下程序片段执行后,a的值为:-32767。 long a;int b=32767; a=b+2; 3. 以下程序的输出是2, 1, 2, 1。 #include void main( ) { int x=0,y=1,z=2,w; if(x++) w=x; else if(x++&&y>=1) w=y; else if(x++&&z>1) w=z; printf(“%d,%d,%d,%d”,x,y,z,w); } 4、以下程序执行时输出结果为1011, 3 。 #include void main( ) { int a=13,b,s=0; while (a){ b=a%2; s=s+b;printf("%d",b);a=a/2; } printf(",%d\n",s);}; 5. 以下程序执行输出结果第一行为5, 7,第二行为11 #include #define P1 1 #define P2 2 void main( ) { int x; for(x=5;x<=10;x++){ switch(x%4) { case P1: printf("%d,",x++); case P2: x++;break; default: x++; } printf("%o\n",x); } } 6. 下列程序运行后的输出是1211。 main( ) { int x=1,z=1,y=1,k; k=x++||++y&&++z; printf(“%d %d %d %d\n” , k , x , y , z); }; 7. 下列程序运行后的输出是100100100。 int main( ) { int x=30; while(x++<33){ int x=100; printf(“ %d”, x++); } } 8. 下列程序运行后的输出是15 main( ) { float a=1.5; char b; printf(“%d”,sizeof a+sizeof 1.5+sizeof b+sizeof …A? ); } 9. 以下程序执行时输出结果为false #include void main( ) { if(“A”==“A”) printf("true"); else printf("false"); } 10. 若运行下面的程序时从键盘上输入:How are you?#[enter] ([enter]表示回车键), 则程序的输出结果为14,2 #include void main( ) { int v1=0,v2=0; char ch; while( (ch=getchar() )!= ?#? ) switch(ch) { case …o? : v2++; /* …o?为字母o*/ default: v1++; } printf("%o , %o\n", v1,v2); } 11. 执行以下程序后,输出的第一行是x=73 , 输出的第二行是y=5 。 main( ) { char x=?A?; int y=0; while(x++<68||++y<5){ int x=100; x++; } printf(“ x=%d\n y=%d\n”,x,y); } 12. 以下程序执行后,输出结果是41 。 #define N 100 main( ) { int i=0,sum=0; do{ if(i==(i/2)*2) continue; sum++; if(sum>40) break; }while(++i printf(“%d\n”, sum); } 13. 以下程序段执行后,将输出no 。 main( ) { unsigned char x ,a , b; x=0; a=x-1; b=x; if(a printf(“ok”); else printf(“no”); } 14. 以下程序执行时输出结果的第一数为3,最后一个数为4。 #define P1 1 #define P2 2 main( ) { int x; for(x=1;x<=3;) { switch(x){ case P1: x++; case P2: x++;break; case P1+P2: x++; } printf("%d\n",x); } } 15. 以下程序运行时,若输入23 ,则输出的第二行为0010,第三行为0011。(注意: 其中pow(x,y)计算x y) #include main( ) { int n,a,c=2,i; scanf("%d",&n); /* between 100 and 999*/ while(n>0) { a=n/(int)pow(10,c); for(i=3;i>=0;i--) { printf("%d",a/(int)pow(2,i)); a=a%(int)pow(2,i); } n=n%(int)pow(10,c); c--; printf("\n"); } } 16. 执行以下程序后,输出结果的第一行是77 , 第二行是30 ,最后一行是101 。 int main( ) { int x=30; { int x=77; printf(“ %d\n”,x); } printf(“ %d\n”,x); while(x++<33){ int x=100; x++; printf(“ %d\n”,x); } } 四、完善程序 #include #include void main( ) { float eps=0.00001, pi= 2.0, term= 0; do{ term= sqrt(2+term) ; pi*=2/term; }while( fabs(2/term-1)>=eps); printf("pi=%.5f",pi); }