C语言期末复习题及答案(全)

更新时间:2023-10-22 11:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计复习题及答案

第一部分 程序设计基本概念

1.1 在TRUBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是______。答案:.exe

1.2 C语言源程序文件的后缀是_____,经过编译后,生成文件的后缀是_____,经过连接后,生成文件的后缀是_____。 答案:.c .obj .exe

1.3 结构化程序由_____、_____、_____三种基本结构组成。答案:顺序、选择、循环 第二部分 C程序设计的初步知识

一、选择题

2.1 以下选项中正确的整型常量是

A)12. B)-20 C)1,000 D)4 5 6 答案:B 2.2 以下选项中正确的实型常量是

A)0 B)3. 1415 C)0.329×10(2)(10的2次方) D).871 答案:D 2.3 以下选项中不正确的实型常量是

A)2.607E-1 B)0.8103e 2 C)-77.77 D)456e-2 答案:B 2.4 以下选项中不合法的用户标识符是

A)abc.c B)file C)Main D)PRINTF 答案:A 2.5 以下选项中不合法的用户标识符是

A)_123 B)printf C)A$ D)Dim 答案:C 2.6 C语言中运算对象必需是整型的运算符是

A)% B)/ C)! D)** 答案:A 2.7 可在C程序中用作用户标识符的一组标识符是 A)void define WORD B)as_b3 _123 If C)For -abc case

D)2c DO SIG 答案:B

2.8 若变量已正确定义并赋值,符合C语言语法的表达式是

A)a=a+7; B)a=7+b+c,a++ C)int(12.3%4) D)a=a+7=c+b 答案:B 2.9 以下叙述中正确的是

A)a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。 B)在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。

C)执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为 0。

D)已有a=3,b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3。 答案:B

第三部分、顺序结构

一、选择题

3.1 若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是 A) a=b=c=100; B) d++; C) c+b; D) d=(c=22)-(b++); 答案:C 3.2 以下选项中不是C语句的是

A) {int i; i++; printf(\

B) ; C) a=5,c=10 D) { ; } 答案:C 3.3 以下合法的C语言赋值语句是

A) A=B=58 B) k=int(a+b); C) a=58,b=58 D) --i; 答案:D 3.4 以下程序的输出结果是

A) 0 B) 1 C) 3 D)不确定的值 main() {

int x=10,y=3;

printf(\

} 答案:C

3.5 若变量已正确说明为int类型,要给a、b、c输入数据,以下不正确的输入语句是 A) read(a,b,c); B) scanf(\

C) scanf(\答案:D

3.6 若变量已正确说明为float类型,要通过以下赋值语句给a赋予10、b赋予22、c赋予33,以下不正确的输入形式是 A) 10 22 33 B) 10.0,22.0,33.0 C) 10.0 22.0 33.0 D) 10 22 33 scanf(\答案:B

第1页——共17页

3.7 若变量以正确定义,要将a和b中的数进行交换,下面不正确的语句组是 A) a=a+b,b=a-b,a=a-b; B) t=a,a=b,b=t;

C) a=t; t=b; b=a; D) t=b; b=a; a=t; 答案:C 3.8 若变量已正确定义,以下程序段的输出结果是 A) 输出格式说明与输出项不匹配,输出无定值 B) 5.17000 C) 5.168000 D) 5.169000

x=5.16894;

printf(\答案:D 3.9 若有以下程序段,c3中的值是

A) 0 B) 1/2 C) 0.5 D) 1

int c1=1,c2=2,c3;

c3=c1/c2; 答案:A 3.10 若有以下程序段,其输出结果是

A) 0,0,-10 B) 0,0,5 C) -10,3,-10 D) 3,3,-10

int a=0,b=0,c=0;

c=(a-=a-5),(a=b,b+3);

printf(\答案:B

3.11 当运行以下程序时,在键盘上从第一列开始输入9876543210(此处代表Enter),则程序的输出结果是 A) a=98,b=765,c=4321 B) a=10,b=432,c=8765

C) a=98,b=765.000000,c=4321.000000 D) a=98,b=765,c=4321.0 main() {

int a; float b,c;

scanf(\

printf(\ } 答案:C 3.12 以下程序的输出结果是

A) a=%2,b=%5 B) a=2,b=5 C) a=%%d,b=%%d D) a=%d,b=%d main()

{ int a=2,b=5;

printf(\ } 答案:D

第四部分、选择结构

一、 选择题

4.1 下列运算符中优先级最高的运算符是

A) ! B) % C) -= D) && 答案:A 4.2 下列运算符中优先级最低的运算符是

A) || B) != C) <= D) + 答案:A 4.3 为表示关系x≥y≥z,应使用的C语言表达式是 A) (x>=y)&&(y>=z) B) (x>=y)AND(y>=z)

C) (x>=y>=z) D) (x>=y)&(y>=z) 答案:A

4.4 设a、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是

A) a&&b B) a<=b C) a||b+c&&b-c D) !((a

A) 0 B) 1 C) 2 D) 3 main()

{ int a=2,b=-1,c=2; if(a

if(b<0) c=0; else c+=1;

printf(\ } 答案:C

第2页——共17页

4.6 以下程序的输出结果是

A)1 B) 2 C) 3 D) 4

main()

{ int w=4,x=3,y=2,z=1;

printf(\ } 答案:A

4.7 若执行以下程序时从键盘上输入3和4,则输出结果是 A) 14 B) 16 C) 18 D) 20 main()

{ int a,b,s;

scanf(\ s=a;

if(a

printf(\ } 答案:B

4.8 下面的程序片段所表示的数学函数关系是 -1(x<0) A) y= 0(x=0) 1(x>0) 1(x<0) B) y= -1(x=0) 0(x>0) 0(x<0) C) y= -1(x=0) 1(x>0) -1(x<0) D) y= 1(x=0) 0(x>0)

y=-1;

if(x!=0) y=1; if(x>0) y=1;

else y=0; 答案:本题没有正确答案。程序片段所表示的数学函数关系应该是 0(x<0) y= 0(x=0) 1(x>0) 4.9 运行以下程序后,输出 A) **** B) &&&&

C) ####&&&& D) 有语法错误不能通过编译

main()

{ int k=-3;

if(k<=0) printf(\ else printf(\ } 答案:D

4.10 若a和b均是正整型变量,以下正确的switch语句是 A) switch(pow(a,2)+pow(b,2))

{ case 1: case 3: y=a+b; break; case 0: case 5: y=a-b; }

B) switch(a*a+b*b); { case 3:

case 1: y=a+b; break; case 0: y=b-a; break; }

C) switch a

{ default: x=a+b;

第3页——共17页

case 10: y=a-b; break; case 11: x=a*d; break; }

D) switch (a+b)

{ case10 : x=a+b; break; case11 : y=a-b; break; }

答案:没有正确答案。如果C选项改为: switch(a)

{ default: x=a+b;

case 10: y=a-b; break; case 11: x=a*b; break; }

则答案可以选择C

第五部分、循环结构

一、 选择题

5.1 以下程序段的输出结果是

A) 9 B) 1 C) 11 D) 10 int k,j,s;

for(k=2; k<6; k++,k++) { s=1;

for(j=k; j<6; j++) s+=j; }

printf(\

答案:D

5.2 以下程序段的输出结果是

A) 12 B) 15 C) 20 D) 25 int i,j,m=0;

for(i=1; i<=15; i+=4)

for(j=3; j<=19; j+=4) m++; printf(\ 答案:C

5.3 以下程序段的输出结果是 A) 10 9 8 B) 9 8 7 C) 10 9 8 7 D) 9 8 7 6

int n=10; while(n>7) { n--;

printf(\ }

第4页——共17页

答案:B

5.4 以下程序段的输出结果是

A) 1 B) 3 0 C) 1 -2 D) 死循环 int x=3; do

{ printf(\ while(!(--x));

答案:C

5.5 以下程序段的输出结果是

A) 15 B) 14 C) 不确定 D) 0 main()

{ int i,sum;

for(i=1; i<6; i++) sum+=sum; printf(\ }

答案:C

5.6 以下程序段的输出结果是

A) 741 B) 852 C) 963 D) 875421 main()

{ int y=10;

for(; y>0; y--) if(y%3==0)

{ printf(\ }

答案:B

5.7 若x是int型变量,以下程序段的输出结果是 A) **3 ##4 **5 B) ##3 **4 ##5 C) ##3 **4##5 D) **3##4 **5

for(x=3; x<6; x++)

printf((x%2)?(\

答案:D

5.8 以下程序的输出结果是

A) *#*#*#$ B) #*#*#*$ C) *#*#$ D) #*#*$ main() { int i;

for(i=1; i<=5; i++)

{ if(i%2) printf(\ else contionue; printf(\ }

printf(\ }

答案:A

5.9 以下叙述正确的是

第5页——共17页

A) do_while语句构成的循环不能用其它语句构成的循环来代替。 B) do_while语句构成的循环只能用break语句退出。

C) 用do_while语句构成循环时,只有在while后的表达式为非零时结束循环。 D) 用do_while语句构成循环时,只有在while后的表达式为零时结束循环。 答案:D

5.10 以下程序的输出结果是

A) 39 81 B) 42 84 C) 26 68 D) 28 70 main()

{ int x,i;

for(i=1; i<=100; i++) { x=i;

if(++x%2==0)

if(++x%3==0) if(++x%7==0)

printf(\ }

printf(\ } 答案:D

二、 填空题

5.11 当执行以下程序段后,i的值是____、j的值是____、k的值是____。 int a,b,c,d,i,j,k;

a=10; b=c=d=5; i=j=k=0; for( ; a>b; ++b) i++; while(a>++c) j++;

do k++; while(a>d++); 答案:5、4、6

5.12 以下程序段的输出结果是____。 int k,n,m;

n=10; m=1; k=1; while(k<=n) m*=2; printf(\

答案:死循环

5.13 以下程序的输出结果是____。 main()

{ int x=2; while(x--);

printf(\ }

答案:-1

5.14 以下程序段的输出结果是____。 int i=0,sum=1;

do { sum+=i++; }while(i<5); printf(\ 答案:11

第六部分、字符型数据

第6页——共17页

一、选择题

6.1 C语言中的简单数据类型有

A) 整型、实型、逻辑型 B) 整型、实型、字符型

C) 整型、字符型、逻辑型 D) 整型、实型、逻辑型、字符型 答案:B 6.2 C语言中,字符(char)型数据在微机内存中的存储形式是

A) 反码 B) 补码 C) EBCDIC码 D) ASCII码 答案:D 6.3 设有语句char a=\\'\\'\\\\72\\'\\';,则变量a

A) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法 答案:A 6.4 C语言中不合法的字符常量是

A) \\'\\'\\\\0xff\\'\\' B) \\'\\'\\\\65\\'\\' C) \\'\\'&\\'\\' D) \\'\\'\\\\028\\'\\'

答案:本题A)和D)选项都是不合法的字符常量。若A)选项改为\\'\\'\\\\xff\\'\\',则正确。 6.5 C语言中不合法的字符串常量是

A) \答案:B 第七部分、函数

一、选择题

7.1 以下说法中正确的是

A) C语言程序总是从第一个定义的函数开始执行

B) 在C语言程序中,要调用的函数必须在main函数中定义 C) C语言程序总是从main函数开始执行

D) C语言程序中的main函数必须放在程序的开始部分 7.2 以下函数的类型是

A) 与参数x的类型相同 B) void类型 C) int类型 D) fff(float x)

{ printf(\

答案:C

7.3 以下函数调用语句中,含有的实参个数是 A) 1 B) 2 C) 4 D) 5 func( (exp1,exp2),(exp3,exp4,exp5)); 答案:B

7.4 以下程序的输出结果是

A) 11 B) 20 C) 21 D) 31 fun(int a,int b) { int c; c=a+b; return c; }

main()

{ int x=6,y=7,z=8,r;

r=func((x--,y++,x+y),z--); printf(\ }

答案:C

7.5 以下程序的输出结果是

A) -1 B) 0 C) 1 D) 2 main()

{ int i=2,p; p=f(i,i+1); printf(\ }

int f(int a, int b) { int c; c=a;

if(a>b) c=1;

第7页——共17页

答案:C 无法确定 else if(a==b) c=0; else c=-1; return(c); }

答案:A

7.6 以下程序的输出结果是

A) 0 B) 1 C) 6 D) 无定值 fun(int a,int b,int c) { c=a*b; } main() { int c;

fun(2,3,c);

printf(\ }

答案:D

7.7 以下程序的输出结果是

A) 5.500000 B) 3.000000 C) 4.000000 D) 8.25 double f(int n)

{ int i; double s; s=1.0;

for(i=1; i<=n; i++) s+=1.0/i; return s; }

main()

{ int i,m=3; float a=0.0; for(i=0; i

二、 填空题

7.8 以下程序的输出结果是____。 unsigned fun6(unsigned num) { unsigned k=1; do

{ k*=num; num/=10; } while(num); return k; }

main()

{ unsigned n=26;

printf(\ }

答案:12

7.9 以下程序的输出结果是____。

double sub(double x,double y,double z) { y-=1.0; z=z+x; return z; }

main()

{ double a=2.5,b=9.0;

printf(\ }

第8页——共17页

答案:9.000000

7.10 以下程序的输出结果是____。 fun1(int a,int b) { int c;

a+=a; b+=b; c=fun2(a,b); return c*c; }

fun2(int a,int b) { int c; c=a*b%3; return c; }

main()

{ int x=11,y=19;

printf(\ } 答案:4

第八部分 指针

一、 选择题

8.1 若有定义:int x,*pb; 则以下正确的赋值表达式是

A) pb=&x B) pb=x C) *pb=&x D) *pb=*x 8.2 以下程序的输出结果是

A) 因变量无定义输出不定值 B) 0 C) -1 D) 1 #include main()

{ printf(\

答案: B 8.3 以下程序的输出结果是

A) 5,2,3 B) -5,-12,-7 C) -5,-12,-17 D) 5,-2,-7 void sub(int x,int y,int *z) { *z=y-x; } main()

{ int a,b,c;

sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(\ }

答案: B 8.4 以下程序的输出结果是

A) 4 B) 6 C) 8 D) 10

main()

{ int k=2,m=4,n=6; int *pb=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); printf(\ }

答案: C

8.5 已知指针p的指向如图8.5所示,则执行语句*p++; 后,*p的值是 A) 20 B) 30 C) 21 D) 31 8.6 已知指针p的指向如图8.5所示,则表达式*++p的值是

A) 20 B) 30 C) 21 D) 31 8.7 已知指针p的指向如图8.5所示,则表达式++*p的值是

第9页——共17页

答案: A 答案: B 答案: B

A) 20 B) 30 C) 21 D) 31 答案: C 8.8 以下程序的输出结果是

A) 23 B) 24 C) 25 D) 26

void prtv(int *x)

{ printf(\ main()

{ int a=25; prtv(&a); }

答案: D 8.9 以下程序的输出结果是

A) 运行出错 B) 100 C) a的地址 D) b的地址

main()

{ int **k, *a b=100; a=&b; k=&a;

printf(\ }

答案: B 8.10 以下程序的输出结果是

A) 4,3 B) 2,3 C) 3,4 D) 3,2

void fun(float *a,float *b) { float w; *a=*a+*a; w=*a; *a=*b; *b=w; }

main()

{ float x=2.0,y=3.0; float *px=&x,*py=&y; fun(px,py);

printf(\

} 答案: C 8.11 以下程序的输出结果是

A) 9.000000 B) 1.500000 C) 8.000000 D) 10.500000

void sub(float x,float *y,float *z) { *y=*y-1.0; *z=*z+x; }

main()

{ float a=2.5,b=9.0,*pa,*pb; pa=&a,pb=&b; sub(b-a,pa,pa); printf(\

} 答案: C

二、 填空题

8.13 以下程序段的输出结果是_____。 int *var,ab;

ab=100; var=&ab; ab=*var+10; printf(\答案:

100 8.14 以下程序的输出结果是_____。

int ast(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }

第10页——共17页

本文来源:https://www.bwwdw.com/article/096f.html

Top