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

更新时间:2024-04-28 15:53:01 阅读量: 综合文库 文档下载

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

第一部分 C语言基础

一、 单项选择

1.以下不是C语言的特点的是( )。

(A) C语言简洁、紧凑 (B)能够编制出功能复杂的程序 (C) C语言可以直接对硬件进行操作 (D)C语言移植性好 2.下列浮点数的表示中正确的有( )。

(A)223 (B).719E22 (C ) e23 (D) 12e2.0 3.字符型常量在内存中存放的是( )。

(A)ASCII代码 (B)BCD代码 (C)内部码 (D)十进制码 4. “BB\\n\\\\\\123\\r”在内存中占的字节数是( ),此字符串的长度为( )。 (A)6 (B)7 (C)8 (D)9 (E)10 (F)11

5.对于语句scanf (“%f□%f,z=%f”,&x,&y,&z ); ,其合法的输入形式为( )。 (A)□14.7□2.0□15.3 (B)14.7,2.0,15

(C)14.7□□2.0,15.3 (D)14.7□□□2.0,z=15 6.下列运算符中,结合方向为自左向右的是( )。 (A)= (B) , (C)+= (D)――

7.若有int x ; 则sizeof(x)和sizeof(int )两种描述( ) 。 (A)都正确 (B)值不一样 (C)前者正确 (D)后者正确 8.整型变量x=1,y=3,经下列计算后,x的值不等于6的是( ) 。

(A)x=(x=1+2,x*2) (B)x=y>2?6:5 (C)x=9 - (- -y) - (- -y) (D)x=y*4.2/2 9.单精度变量x=3.0, y=4.0,下列表达式中y的值为9.0的是( ) 。

(A)y/=x*27/4 (B)y+=x+2.0 (C)y- =x+8.0 (D)y*=x-3.0 10.若整型变量i=3,j=4,作运算j=i+ + + j + i后,i的值为( ),j 的值为( ) 。 (A)10 (B)4 (C)3 (D)11

11.设有整型变量x=10,表达式(x&&1535)&(x|55&100)的值为( ) 。 (A)0 (B)1 (C)10 (D)11

12.设有整型变量x,其值为25,则表达式:(x&20>>1)|(x>10|7&x^33)的值为( ) 。 (A)35 (B)41 (C)11 (D)3

13有整型变量x,单精度变量y=5.5,表达式:x=(float)(y*3+((int)y)%4)执行后, x的值为 ( ) 。 (A)17 (B)17.500000 (C)17.5 (D)16

14.表达式:0?2:0,3/2,0= =3>=2?55:6.0,4%3的值为( ) 。 (A)1.3333333 (B)1 (C)6.0 (D)1.5 15.以下选项中属于C语言中数据类型的是( ) 。

(A) 复数型 (B) 逻辑型 (C)双精度型 (D) 集合型 16.在C语言中,不正确的int 类型的常数是( ) 。

(A) 32768 (B)0 (C)037 (D)0xAF

17.语句: printf( “ %d\\n”,(a = 2 ) && ( b = - 2 )); 的输出结果是( ) 。 (A) 无输出 (B) 结果不确定 (C)-1 (D) 1

18.当c 的值为0 时,在下列选项中能正确将c的值赋给变量a,b 的是( ) 。

(A) c = b = a ; B) ( a = c )|| (b = c ); (C) ( a = c ) && ( b = c ); (D) a = c = b ;

19.下列程序的输出结果是( ) 。

(A)3 (B)3.2 (C)0 (D)3.07 main( )

{ double d = 3.2; int x, y; x = 1.2; y= ( x + 3.8 ) /5.0; printf ( “%d \\n “, d * y ); }

20.下列变量定义中合法的是( )。

(A) short _a= 1 - .1e-1; (B) double b = 1+ 5e 2.5 ; (C ) long do = 0xfdaL; (D) float 2_and = 1 – e –3; 21.设 int x = 1, y = 1 ; 表达式( ! x || y -- ) 值是

(A) 0 (B) 1 (C) 2 (D) -1 22.下列程序执行后的输出结果是( )。

(A) G (B) H (C) I (D)J main( )

{ int x = ?f ? ; printf ( “ % c \\n “, ?A? + ( x – ? a ? + 1 )) ; } 23. 下列程序执行后的输出结果是( )。

(A) -32767 (B)FFFE (C)-1 (D) -32768 main( )

{ char x = 0xFFFF ; printf( “ %d \\n “ , x --) ; } 24.设有如下定义:

int i = 8 , k , a , b ; unsinged long w = 5;

double x = 1.42 , y = 5.2 ; 则以下符合C语言语法的表达式是:

(A) a + = a - = ( b = 4 )* ( a = 3 ) (B) x% ( - 3 )

(C) a = a * 3 = 2 (D) y = float ( i ) 25.以下程序的执行结果是( )。

int a=2,c=5; printf(“a=%%d,b=%%d\\n”,a,c);

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

26.在16位C编译系统上,若定义long a; ,则能给a赋40000的正确语句是( (A) a=20000+20000; (B) a=4000*10; (C) a=30000+10000; (D) a=4000L*10L; 27.以下叙述正确的是

(A) 可以把define和if定义为用户标识符。

(B) 可以把define定义为用户标识符,但不能把if定义为用户标识符。 (C) 可以把if定义为用户标识符,但不能把define定义为用户标识符。 (D) define和if都不能定义为用户标识符。 28. 以下程序的输出结果是 main()

{ int a=3; printf(\ }

)。

(A) -6 (B)12 (C) 0 (D) –12 29.下列程序执行后的输出结果是(小数点后只写一位)

(A) 6 6 6.0 6.0 (B) 6 6 6.7 6.7 (C) 6 6 6.0 6.7 (D) 6 6 6.7 6.0 main()

{ double d; float f; long l; int i; i=f=1=d=20/3; printf(\ }

30. 已定义x为float型变量。

X=213.82631; printf(\ 则以上程序运行结果为( )。

(A).输出为-213.82 (B).输出为213.83

(C).输出为213.82 (D).输出格式描述符的域宽不够,不能输出 二、填空

1.C语言规定,标识符只能由_______ ,_______ , _______三种字符组成,而且,第一个字符必须是_____或______.

2. 一个C程序一般由若干函数构成的,程序中有且只有一个______. 3. 一个C函数是由_________和____________两部分组成的。 4.一个C程序总是从_______开始执行的.

5.C语言的基本数据类型有_______.________.________和实型数据,其中实型数据又分为_________和_________.

6.在内存中占据16位的无符号整型变量的范围是_______到_________. 7.在C语言中,八进制整常量以_____开头,十六进制整常量以_______开头.

8.十进制数7转化为八进制为________,十进制数 –2248转化为十六进制为________. 9.在C语言中,&运算符用作_________运算和_________运算,而 * 运算符用作________和_________运算.

10.将下列运算符按优先级从高到低顺序排列:> = ! = ! +&&( )| | >> % & 是_______________________.

11.?x?在内存中占_____字节,”x”在内存中占______字节,”\\101”在内存中占_____字节. 12.若x为整型变量,执行语句x= ?b? - ?A?;后,x的值为________.

13.浮点单精度变量x,执行表达式语句x =8.7 +123.7 * 6 – ?a?%7;后,x的值为______________.

14.整型变量i和j,i的初值为3,执行表达式语句j=(i++)+(i++)+(i++);后,变量i的值为_____,变量j的值为______.

15.整型变量a, b ,c它们的初值都是0,运行表达式:+ +a && b+ + && + + c后,a.b.c的值分别为:_____,______,_____.若在同样的初值的条件下,运行表达式: + +a | | b+ + | | + + c后,a ,b ,c的值分别为:_______, ______,________.

16.输出语句printf(“%-8.4s, %5.3f, M”, ”MAYAPP”, ”35.1753”, 12346);的输出结果为_______________________.

17.若x为单精度型变量,y为字符型变量,z为整型变量,执行如下的输入语句:scanf(%f%c%d”, &x,&y, &z);后,从键盘输入12.77A79A86.此时,变量x, y, z的值分别

为_______, _______, _______.

18.欲将一个16位二进制的整型变量的高8位清零,而只保留低8位,可用的方法是_______________________________________.

19.已知有a.b两个数,执行x=b; b=a; a=x操作后,执行的效果是____________. 20.位运算符_______(填能或不能)用于浮点数. 21.将下列数学式改写成C语言的表达式.

(1) ax3+bx2+cx+d写成____________________.

22a?b (2)

a*b

写成 22.分析下面的程序的运行结果. main( )

{ int x=0, y=0, z=0;

x= + +y+ (+ +z); print(“%d, %d,%d*”,x,y,z); x=y+ + +z+ +; printf(“%d,%d,%d*”,x,y,z); x= - -y + z - -; printf(“%d,%d,%d*”,x,y,z); }

程序结果为:_____________________.

23.由C语言编成的程序文件FILE1.C经编译后的文件名是 。

24.程序文件中若有语句getchar ( );该程序文件头应有予编译命令 。

25.若有说明语句 float x=8; int a[2]; 则表达式sizeof (x) = = sizeof (a)的值

是 。

26.整型变量a = 5, b = 7 ; 表达式 b/a * 100的值是 。 27.以下程序段运行的结果是 。 int a = 5, b = 3;

printf ( “ a+b = % 4d , ”, a+=b+= a+b); printf ( “ a –b=% 4d \\n”, a- =b- = a- b);

28.设有以下变量定义,并已赋确定的值

char w; int x ; float y ; double z ;

则表达式:w* x + z – y 所求得值的数据类型为 。

29.写出与代数式 (x+2)e x+2对应的C语言表达式: 。 30.写出“若char 类型变量ch是大写英文字母,改变ch为对应小写字母”的C表达

式:

三、判断正误

1. C语言程序设计是一种面向过程的结构化设计语言。 2. C语言程序是由函数构成的。

3. 任何C语言编写的文件必须至少包含一个main()函数。 4. 一个C语言程序可以在不同的文件中。 5. C语言程序不允许直接访问物理地址。 6. 函数的过程体实际是一个复合语句。

7. 用宏定义的符号型常量必须是用大写字母来表示。 8. void型数据类型是指数据不存在。 9. C语言中变量必须先定义,后使用。 10. C语言中,scanf与Scanf等同。

11. 当有如下定义unsigned int I ; 时,做如下赋 值 I =-1;是不允许的。 12. 有如下定义float x=1.2345;执行printf(“%f”,x) ; 结果输出为1.2345。 13. 如下定义 char c1=?a?,c2=?b?,c3=c1-c2;执行printf(“%c”,c3);结果为无任何显示。 14. 可以有如下定义:int a=b=c=0;

15. int x=4,y=5;float z=x/y;则z的值为0.8; 16.int i=4;x=(i++,i++);后,x的值为5;

17.空语句没有任何意义,所以在C程序中不应该出现空语句。

18.要求出某一变量占用内存空间的长度可以用函数sizeof(变量)实现。 19.要判断x,y,z的大小顺序可以用如下表达式x>y>z;

20.在do{ }while(P);结构中,当条件P成立时,结束循环。 21.Switch结构中必须要有defau l t 项。

22.在main()函数中若加入return语句,则编译出错。 23.for循环语句中括号内至少必须要有一个表达式。 24.各种循环结构可以相互替代。 25. if (i=1) i++;编译时不能通过。

26. 以下定义是否正确:int a = 120, b++=a ;

27. 以下语句是否正确:float a[10] ; int i = 0 ; while ( i++ <10 ) scanf( “%f “, a[i]); 28. 以下语句是否正确:int R = getchar ( ) & 0200;

29. 设有 int x= 11; 则表达式 x ++ * 1/3 ;的值是4 。

30.若有“int x ; float y=1.6, z = 2.4 ; ”则执行“x =(int)y+ z ;”后,x 的值是3。 四、阅读程序, 写出运行结果 1.#include “stdio.h” main()

{int a,b,d=241; a=d/100%9; b=(-1)&&(-1); printf(“%d,%d”,a,b); } 2.#include “stdio.h” main()

{int i,j,x,y; i=5; j=7; x=++i; y=j++; printf(“%d,%d,%d,%d”,i,j,x,y); } 3.#include “stdio.h” main()

{float f=13.8; int n; n=((int) f)%3; printf(“n=%d”,n); } 4.#include “stdio.h” main()

{int n=2; n+=n-=n*n; printf(“n=%d”,n); } 5.#include “stdio.h” main()

{int a,b,x; x=(a=3,b=a--); printf(“x=%d, a=%d, b=%d”,x,a,b); } 6.#include “stdio.h”

main()

{float f1,f2,f3,f4; int m1,m2; f1=f2=f3=f4=2;

m1=m2=1; printf(“%d\\n”,(m1=f1>=f2)&&(m2=f3

7.#include “stdio.h” main()

{int x=5,y=2; printf(“1:%d*”,!(y==x/2)); printf(“2:%d*”, y!=x%3)); printf(“3:%d*”,x>0&&y<0); printf(“4:%d”,x!=y||x>=y); }

8.#include “stdio.h” main()

{unsigned int b=65535; printf(“%d”,b); } 9.#include “stdio.h” main()

{ int x=10,y=9; int a,b,c;

a=(--x = = y++) ? - x: ++y; b=x++ ; c=y ; printf(“a=%d , b=%d , c=%d\\n” , a , b, c) ; }

10.#include “stdio.h” main()

{ int x=0,y=0,z=0;

x=++y+(++z); printf(“%d,%d,%d*”,x,y,z); x=y+++z++; printf(“%d,%d,%d*”,x,y,z); x=--y+z--; printf(“%d,%d,%d*”,x,y,z); }

11.# include “stdio.h” main()

{short i=-1; printf(“%d,%o,%x,%u\\n”,i,i,i,i); } 12.# include “stdio.h” main()

{short i=1; printf(“%d,%o,%x,%u\\n”,i,i,i,i); } 13.# include “stdio.h” main()

{ char c=?A?; printf(“%d,%o,%x,%c\\n”,c,c,c,c); } 14.# include “stdio.h” main()

{float f=3.1415927; printf(“%f,%5.4f,%3.3f\\n”,f,f,f); } 15.# include “stdio.h” main()

{float f=3.5; printf(“%f,%g\\n”,f,f); } 16.# include “stdio.h” main()

{float f=31.41592; printf(“%f,%e\\n”,f,f); } 17.# include “stdio.h” main()

{ char c=?A?+10; printf(“%c\\n”, c); } 18.# include “stdio.h” main()

{int a,c; char b; scanf(“%d%c%d”,&a,&b,&c); printf(“%d,%c,%d \\n”, a,b,c); } 19.以下程序输入123456后的执行结果是: # include “stdio.h” main()

{int a,b; char b; scanf(“- =”,&a,&b); printf(“%d, %d \\n”, a,b,); } 20.以下程序输入ABC后的执行结果是: # include “stdio.h” main()

{ char c; scanf(“<”,&c); printf(“%c \\n”,c); } 21.以下程序输入100后的执行结果是: # include “stdio.h” main()

{ int n; scanf(“%o”,&n); printf(“%d\\n”,n); } 22.以下程序输入x=1.23,y=50后的执行结果是: # include “stdio.h” main()

{ float x,y; scanf(“x=%f,y=%f”,&x,&y); printf(“x=%7.2f,y=%7.2f”, x, y); } 五、编写程序

1.编写一个程序从键盘输入圆锥体的半径r和高度h,并计算其体积。 2.输入一个三位数n (例如672)把他倒着输出(如:输出276)。 3.用两个不同的程序,实现变量a与变量b之间值的交换。

第一部分 参考答案

一、单项选择

1.B 2.B 3.A 4.BA 5.D 6.B 7.A 8.C 9.B 10.BA 11.A 12. B 13.A 14. B 15.C 16.A 17.D 18.B 19 . C 20.A 21.B 22.A 23.C 24.A 25.D 26.D 27.D 28.D 29.C 30.B 二、填空

1.字母,数字,下划线, 下划线, 字母 2. main函数 3. 函数,函数体 4. main函数

5.整型,字符型,实型,float,double 6. 0,216-1 7. 0,0x 8. 7, 9.按位与,取地址,乘,取值 10. ()、! 、% 、+ 、& 、>> 、> 、 11. 1,2,2 12. 33 13. 744.9 14. 6,9 15. 1,1,0 1,0,0 16. MAYA ,35.175,12346

17. 12.77,A,79 18. 与0x00ff按位与 19. 交换a,b的值

20. 不能 21. (1) a*x*x*x+b*x*x+c*x+a (2)sqrt ( (a*a+b*b) / (a*b)) 22. 2,1,1*2,2,2*3,1,1* 23.FILE1.OBJ 24. #include 25. 1 26 . 100 27. a+b=16 , a-b =10 28. double 29.(x+2)*exp(x+2) 30. tolower(ch) 三、判断正误

1.√ 2.√ 3.× 4.√ 5.× 6.√ 7.× 8.× 9.√ 10.×

11.× 12.× 13.√ 14.× 15.× 16.× 17.× 18.× 19.× 20.× 21.× 22.× 23.× 24.√ 25.× 26.× 27.× 28.√ 29.× 30.√ 四、阅读程序, 写出运行结果

1、2,1 2、6,8,6,7 3、n=1 4、n=-4 5、 x=3,a=2,b=3 6、0 7、1:0*2:0*3:0* 4:1 8、 –1 9、a=8,b=8,c=10 10、2,1,1*2,2,2*3,1,1* 11、 -1,177777,ffff,65535 12、1,1,1,1 13、 65,41,101,A

14、 3.141593,3.1416,3.142 15、 3.500000,3.5 16、 31.415920,3.14159e+01 17、 K 18、1, ,2 19、 12,345 20、 A 21、 64 22、 x= 1.23, y= 50.00 五.编程

1、 #include “stdio.h>

main( ) {

float r,h,pi=3.14.1,v

printf(“圆锥半径,高度:”); scanf(“%f,%f”,&r,&h); v=pi*r*r*h/3; printf(“圆锥体积=%g\\n”,v); }

2、main( )

{ int n; int a,b,c;

printf(“输入一个三位数:”); scanf(“%d”,&n); a= n/100; b=n/10 ; c=n; printf(“%d%d%d”,c,b,a); }

3、方法一、 main( ){ int a,b,t; a=10; b=20; t=a; a=b ; b=t; } 方法二、 main( ){ int a,b; a=10; b=20; a=a+b; b=a-b; a=a-b; }

第二部分 算法

一、 单项选择

1.一个程序应包括以下两方面内容:一是对数据的描述,即指定数据类型和组织形式;

二是对操作的描述,即操作步骤,也就是 。

A 算法 B 数据结构 C 排序 D 模块化

2.传统流程图中 框的作用是对一个给定的条件进行判断,根据条件是否成立决

定其后的操作,他有一个入口和两个出口。 A B C D 3.伪代码是用介于自然语言和 之间的文字和符号来描述算法。 A 英语 B 计算机语言 C 传统流程图 D N-S流程图

4.采用以下方法可保证得到结构化的程序:① 自顶向下;② ;③ 模块化设计;

④ 结构化编码。

A 自下而上 B 逐步积累 C 逐步细化 D 整体规划

5.一个结构化的算法是由一些 结构顺序组成的;在它们之间不存在向前或向后

的跳转,流程的转移只存在于一个基本结构范围之内。

A 顺序 B 选择 C 循环 D 基本 6.在传统流程图中,表示输入输出应该使用 框。

A B C D 7.三种基本结构的特点之一是:每种基本结构 。 A 有多个入口和出口 B 有一个入口多个出口 C 各有两个入口和出口 D 只有一个入口和出口 8.对于某一个问题,它的算法 。

A 只有1种 B 有2种 C有3种 D 不唯一

二、 判断正误

1. 计算机算法可分为两大类:数值运算算法和非数值运算算法。 2. 一个算法所包含的操作步骤可以是有限的,也可以是无限的。 3. 一个算法中的某一步可以是不确定的,含义可以不唯一。 4. 一个算法可以有多个输入或没有输入,但不能没有输出。

5. 当型循环和直到型循环都是先判断给定的条件是否成立,成立时执行循环体,不成

立时退出循环结构。

6. 三种基本结构(顺序、选择、循环)的共同特点之一是:结构内的每一部分都有机

会被执行到。

7. 三种基本结构中的选择结构有一个入口多个出口。

8. 若某一个问题可以用直到型循环解决,那么它一定能用当型循环解决。 9. 若一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。 10. 用传统流程图表示的算法一定是一个结构化的算法。 11. 用N-S图表示的算法一定是一个结构化的算法。

三、 用传统流程图表示求解以下问题的算法

1.输入两个不同的数分别赋给A和B(若相同则重新输入),若A>B 则输出A和B,若A

2.计算从1开始的连续若干个自然数之和赋给S,当S大于3600时停止计算,然后输出S。

3.将100和200之间的能被3和7整除的数输出。 4.输入10个数,输出这些数的平均值。

四、 用N-S结构化流程图表示求解第三题的算法

第二部分 算法 参考答案

一 单项选择

1A 2D 3B 4C 5D 6C 7D 8 D 二 判断正误

1√ 2× 3× 4√ 5× 6√ 7× 8√ 9√ 10× 11√ 三 用传统流程图表示的算法 1. 开始 2. 开始 S=0 输入A、B N=1

是 A=B S=S+N

N=N+1 否 A>B 否 否 S>3600 是 否 A 、 B 是 交换 输出S

输出

A、B 结束

结束

3. 开始 4.

K=100;

K 整除

3 和 7 否 是

输出K K=K+1; 否 K>200 是 结束

四、 用N-S结构化流程图表示的算法

1. 输入A、B 直到A不等于B A>B 是 否 交换A、B 输出A、B

3.

K=100 K整除3和7 且K<=200 输出K K=K+1

开始 S=0 ; N=1; 输入A S=S+A; N=N+1; N>10 否 是 S=S/10; 输出S 结束 2. S=0 N=1 S=S+N N=N+1 直到 S>3600 输出S 4. S=0 且 N=1 N<=10 输入A S= S+ A 输出 N=N+1 S 第三部分 简单程序设计及分支结构

一、单项选择

1.在如下程序段中if 语句中的! a等价于( )。 int a; if (! a) printf(“ok”);

(A)a! =0 (B)a= = 0 (C)a>0 (D)a>=0 2.C语言中,逻辑”真”等价于( )。

(A)大于零的数 (B)大于零的整数 (C)非零的数 (D)非零的整数 3.C语言中, switch后的括号内表达式的值可以是( )。

(A)只能为整型 (B)只能为整型,字符型,枚举型 (C)只能为整型和字符型 (D)任何类型 4.C语言的switch语句中case后( )。

(A)只能为常量 (B)只能为常量或常量表达式 (C)可为常量及表达式或有确定值的变量及表达式 (D)可为任何量或表达式 5.C语言的if语句中,用作判断的表达式为( )。

(A)任意表达式 (B)逻辑表达式 (C)关系表达式 (D)算术表达式 6.在如下程序段中,若输入3,则printf语句( )。

int x;

scanf(“%d\\n”, &x);

printf (x%2= =0? “even number %d”,x,x);

(A)输出odd number3 (B)输出even number3 (B)输出even number3odd number3 (D)格式不正确

7.有字符型变量str,判断str为大写字母或小写字母?如下方式能正确表达题意的是( (1) str> =65&&str< =90| |str> =97&&str< =122 (2) (str> =65&&str< =90)| |(str> =97&&str< =122) (3) 65< =str< =90| |97< =str< =122

(4) ! (str<65| |str>90&&str<97| |str>122) (5) ! (str<65| |90122)

(6) (str> =65| |str< =90)| |(str> =97| |str< =122)

(A)(1)(2) (B)(1)(2)(4) (C)(1)(4) (D)(2)(4) (E)(6) (F)(5)(6) (G)(1)(2)(3)(4)(5)(6) 8.在上题的逻辑表达式中,放入程序时将报错的是( )。

(A)都不会报错 (B)都报错 (C)(3)(5)报错 (D)(3)报错 9.下列程序执行后的输出结果是(小数点后只写一位)。

(A) 6 6 6.0 6.0 (B) 6 6 6.7 6.7 (C ) 6 6 6.0 6.7 (D) 6 6 6.7 6.0 main()

{ double d; folat f ; long l ; int i;

i= f = l = d = 20/3; printf ( “%d %ld %f %f \\n”, i,l,f,d); }

10.与“ y = ( x > 0 ? 1 : x < 0 ? –1 : 0 ) ; ”的功能相同的if 语句是( )。

)。

(A) if ( x > 0 ) y = 1 ; (B) if ( x )

else if ( x < 0 ) y = - 1 ; if ( x > 0 ) y = 1 ;

else y = 0 ; else if ( x < 0 ) y = - 1 ; else y = 0 ;

(C) y = - 1 ; (D) y = 0 ;

if ( x ) if ( x >= 0)

if ( x > 0 ) y = 1; if ( x > 0) y = 1; else if ( x = = 0) y = 0; else y = - 1 ; else y = - 1 ;

11.语句 printf ( “a\\bre\\?hi\\?y\\\\\\bou\\n“);的输出结果是( )。

(A)a\\bre\\?hi\\?y\\\\\\bou (B) a\\bre\\?hi\\?y\\bou (C) re?hi?you (D) abre?hi?y\\bou 12.以下程序的输出结果是( )。

(A)17,021,0x11 (B)17,17,17 (C)17,0x11,021 (D)17,21,11 main()

{ int x=17; printf(“%d, %o, %x”,x ,x, x); } 13.以下程序的输出结果是( )。

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

{ int a = -1 ,b = 1 , k ;

if ( ( ++ a < 0 ) && ! ( b - -< = 0 ) ) printf ( “ % d %d \\n “ , a ,b ) ; else printf ( “ %d %d \\n” , b , a ) ;

}

14.以下程序段中求较大数和较小数,语法、逻辑都正确的是( )。 (A)if ( a

else max = a ; min = b ; (C)max = min = a ;

if ( b < min ) min = b ; if ( a >max ) max = a ; (D)max = a; min = b;

if ( a<=b ) max = b ;

min = a ;

15.当a = 1 , b = 3 , c = 5 , d = 4 时, 执行下面一段程序后, x 的值为( )。

(A) 1 (B)2 (C) 3 (D) 6 if ( a < b )

if ( c

if ( a < c )

if ( b < d ) x = 2 ;

else x = 3 ; else x = 6 ; else x = 7 ;

16.以下叙述中正确的是( )。

(A)输入项可以是一个实型常量, 如:scanf ( “%f”, 3.5 ) ; (B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:scanf ( “a = %d,b = %d”); (C)当输入一个实型数据时,格式控制部分可以规定小数点后的位数, 例如:scanf ( “%4.2f”,&f);

(D)当输入数据时,必须指明变量地址,例如: scanf( “%f “ , & f) ; 17.现有如下程序: #include main( )

{ printf(\程序的输出是( ).

(A) 0 (B) 变量无定义 (C) –1 (D) 1 18. 若有以下定义和语句:

int u=010,v=0x10,w=10; printf(\”,u,v,w); 则输出结果是( ).

(A) 8,16,10 (B) 10,10,10 (C) 8,8,10 (D) 8,10,10 19. 若有以下定义: float x;int a,b;

则正确的switch 语句是( ).

(A)switch(x) (B)switch(x)

{ case 1.0:printf(\ case 2.0:printf(\ } }

(C)switch (a+b) (D) switch(a+b);

{ case 1:printf(\ case 1+2:printf(\ } }

20. 当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是( )。 (A) c=b=a; (B) (a=c) ‖(b=c) ; (C) (a=c) &&(b=c); (D) a=c=b; 二、填空 1. 在C语言中,实现循环的语句有:if – goto语句.______语句. ______语句和_______语句. 2. 多分支选择可以用嵌套的if语句和________语句来实现. 3. 结构化程序设计的基本结构有三种,分别是顺序结构.______结构和______结构. 4. 在嵌套的if语句中,为了保证在语法上不出现二义性,if 语句总是和_______的else语句相配. 5. break语句只能用于________语句和_________语句. 6. 在循环控制中,break 语句用于结束________, continue语句用于结束_________ . 7. 判断闰年的条件是:若此年是4的倍数但不是100的倍数同时又是400的倍数,

则是闰年,将此条改写成逻辑表达式为_____________________________. 8. 如下语句在编译时______(填”会”或者”不会”)报错.

float x ; printf(“%d”,x); 9. 如下语句在编译时_____(填”会”或者”不会”)报错. if(a=b)a+ +;

10. 有如下语句,在编译时_______(填”会”或者”不会”)报错,printf语句______(填”能”或”不能”)打印出正确的结果.

int x; x=1900L; printf(“x= %d”,x);

11. 有如下程序,在编译时_____(填”会”或者”不会”)报错,原因是_________. # include”stdio.h” main ( )

{ printf(“%c”,null); }

12. 有如下语句,该程序输出结果为__________________.

int k= -1; printf(“k1= %d, k2=%u” , k,k);

13. 有如下语句,该程序输出结果为_______________________. float x; double y; x=1234.5678; y=1234.5678; printf(”x=%5.3f, y= %7.3e” ,x, y);

14. 有如下语句,该程序输出结果为__________________________. char s; long int k; s=?A?; k=111; printf(“%d,%x,%o,ld”,s,s,k,k);

15. 若整数m=n>1, 则它们的关系可用表达式 表示。 16. 若 int a =1 ,b =2 ;

printf ( “%f “, a/b); 打印结果是 。

17. 若x为int 类型, 请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式 。

18. 若想通过以下输入语句使 a = 5.0 , b = 4 , c =3 , 则输入数据地形式应是 。

int b , c ; float a ;

scanf ( “% f , % d , c = % d “, & a , &b ,& c ) ; 三、阅读程序,指出运行结果: 1.# include “stdio.h” main()

{ int a, b, c; a=2; b=3; c=1; if (a>b)

if (a>c) printf(“%d\\n”,a); else printf(“%d\\n”,b); printf(“end\\n”); }

2.# include “stdio.h” main()

{int a,b,c,d,x; a=c=0; b=1;d=20;

if (a) d=d-10; else if (!b) if (!c) x=15; else x=25;

printf(“d=%d\\n”,d); }

3.# include “stdio.h” main()

{int s,t,a,b; scanf(“%d,%d”,&a,&b); s=1; t=1; if (a>0) s=s+1; if (a>b) t=s+t;

else if (a= =b) t=5; else t=2*s;

printf(“s=%d,t=%d\\n”,s,t); }

4.# include “stdio.h” main()

{ int x=1,y=0; switch(x)

{ case 1: switch(y)

{ case o: printf(“first\\n”);break; case 1: printf(“second\\n”);break; }

case 2: printf(“third\\n”); } }

5.分别写出以下程序在输入-10或5或10或30后的执行结果 # include “stdio.h” main()

{int x,c,m; float y; scanf(“%d”,&x); if (x<0) c=-1; else c=x/10; switch (c)

{ case -1: y=0; break; case 0: y=x; break; case 1: y=10; break; case 2:

case 3: y=-0.5*x+20; break; default: y=-2; }

if (y!=-2) printf(“y=%g\\n”,y);

else printf(“error!\\n”); }

6.# include “stdio.h” main()

{int a=2,b=7,c=5; switch (a>0)

{ case 1: switch (b<0)

{case 1: printf(“@”);break; case 2: printf(“!”);break; }

case 0: switch (c==5)

{case 0: printf(“*”);break; case 1: printf(“#”);break; default: printf(“$”);break; }

default: printf(“&”); }

printf(“\\n”); }

7.# include “stdio.h” main() {int n=0; while (n<=4) switch(n) {case 0: ;

case 1: printf(“%d”,n);

case 2: printf(“%d”,n++);break; default: printf(“**”,n++); } }

8.# include “stdio.h” main()

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

if (++a||b++&&c++) printf(“%d,%d,%d”,a,b,c);

else printf(“OK”); }

9.执行完下列程序段后,x,y的值为什么? int x=1,y=1; int m,n; m=n=1; switch(m)

{ case 0: x=x*2; case 1: { switch (n)

{ case 1: x=x*2;

case 2: y=y*2; break; case 3:x++; } }

case 2: x++;y++;

case 3: x*=2;y*=2;break; default : x++;y++; }

四、编程题

1、编写一程序,输入三个数,判断是否构成三角形。 2、编写一个程序,完成两个数的四则运算。

第三部分 参考答案

一、单项选择

1.B 2.C 3.B 4.B 5.A 6.D 7.C 8.A 9.A 10.A 11.C 12.D 14.C 15.B 16.D 17.B 18.A 19.C 20.C 二、填空

1. do{ }while(P); , for(表达式1;表达式2;表达式3 ), while(P){ }

2. switch 3. 分支,循环 4. 离它最近的下一个语句中 5. 循环,switch 6. 循环,循环体内continue以下语句的执行 7. (year%4= =0&&year0!=0)|| (year@0= =0) 8.不会 9.不会 10.不会,能 11.会,null不等于NULL 12. k1=-1,k2=65535 13. x=1234.568,y=1.23e+03 14. 65,41,157,00000111 15. m= = n && m>1

16. 0.000000 17. c!=0 18. 5.0,4,c=3 三、阅读程序,写出运行结果

1. end 2. D=20 3. s=2,t=3 4. firstthird 5. 0,5,10,5 6. #& 7.0,0,1,1,2,****. 8. 1,0,0 9. x=6,y=6 四.编程题 1.main()

{ float x,y,z; scanf (“%f%f%f”,&x,&y,&z);

if (a+b>=c && a+c>=b && b+c>=a ) printf(“true\\n”); else printf(“false\\n”); }

2.#include main()

{ float x,y; char op; printf (“输入表达式:”);

scanf (“%f%c%f”,&x,&op,&y);

13.B switch (op)

{ case ?+?: printf(“%g%c%g=%g\\n”,x,op,y,x+y); break; case ?-?: printf(“%g%c%g=%g\\n”,x,op,y,x-y); break; case ?*?: printf(“%g%c%g=%g\\n”,x,op,y,x*y); break; case ?/?: if(y!=0.0)

printf(“%g%c%g=%g\\n”,x,op,y,x/y); else

printf(“除0错误”); break;

default: printf(“表达式有误”); } }

第四部分 循环

一、单项选择

1.下面程序段中的循环执行( )次. int x=20;

do{ x/=2; } while (x - -);

(A)4次 (B)3次 (C)5次 (D)不确定 2.在1题中,若能退出循环,则退出循环后,x的值为( ) (A)0 (B)0.375 (C) – 0.625 (D) – 1 3.下面程序段中循环的循环体( ). int n=1;

do{ n=+ +n*5;} while(n=10);

(A)执行1次 (B)执行2次 (C)不执行 (D)执行无限次 4.执行下面程序后的输出结果为( ) int x , y, z; x=20;y=40;z=60; while(x

y - =4; z/=2; printf(“%d,%d,%d”,x,y,z);

(A)40,36,30 (B)32,28,7 (C)32,28,30 (D)32,28,7.5 5.下面程序段在执行完成后,a的值为( ) int j=0,k=0,a=0; while(j<2)

{ j+ +; a=a+1; k=0; while(k< =3) {k + +;

if (k%2! =0) continue; a=a+1; }

a=a+1; }

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

6.执行下面程序段后,x和y的值分别为( ) int x=1,y=1; int m,n; m=1;n=1; switch (m)

{case 0: x=x*2; case 1: {switch(n)

{ case 1:x=x*2;

case 2:y=y*2;break; case3:x+ +; } }

case 2 : x+ +; y+ +;

case 3 : x*=2;y*=2;break; default: x+ +;y+ +; }

(A)x=6,y=6 (B)x=2,y=1 (C)x=2,y=2 (D)x=7,y=7 7.下面说法中正确的是( )。

(A)编写C程序时,应该控制嵌套循环的重数. (B)编写C程序时,变量名越短越好.

(C)编写C程序时,应多用goto语句,以增加效率.

(D)编写C程序时,要尽可能的简洁而新颖,可理解性是第二位的.

8.若m>n且a>b,则y=2x,若m< =n则y=0,下面描述中正确的程序段是( ) (A)if (m>n) (B)if (m>n) (C)if (a>b) (D)if (a>b)

{if(a>b) y=2*x; if(m>n) {if (m>n) y=2*x;}

y=2*x; } if(a>b) ; y=2*x; else

else else else if(m< =n)

y=0; y=0; if(m

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

{int i,j ;

for ( i=0 ,j=1; i<=j+i; i+=2,j--) printf(“%d \\n”, i ) ; }

10.下列程序的输出结果是

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

{int i , j , m = 0 , n = 0 ; for ( i = 0 ; i < 2 ; i ++ ) for ( j = 0 ; j < 2 ; j ++ )

if ( j > = i ) m = 1 ; n ++ ; printf ( “ % d \\n ”, n ) ; }

11. 以下程序段的执行结果是( )。

(A) a= 12 y = 12 (B) a = 12 y = 12 a = 14 y = 16 a = 16 y = 28 a = 16 y = 20 a = 18 y = 24

(C) a = 12 y = 12 (D) a = 12 y = 12 a = 14 y = 26 a = 14 y = 44 int a , y ; a = 10 ; y = 0 ;

do{a + = 2 ; y + = a ;

printf (“a=%d y=%d\\n”, a ,y ) ; if ( y > 20 ) break ; } while ( a = 14 ) ;

12.以下程序的运行结果是( )。

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

{int n = 4 ;

while ( n--) printf(“%d ”, -- n ) ; }

13.运行以下程序后, 如果从键盘上输入china# <回车>,则输出结果为( )。 (A)2,0 (B)5,0 (C) 5,5 (D) 2,5 #include < stdio.h> main()

{ int v1 =0 , v2 = 0; char ch;

while ( ch =getchar ( ) ! =‘#‘ )

switch ( ch )

{ case ‘ a ‘ : case ‘ h ‘ : default : v1++ ;

case ‘ o ‘ : v2++ ; }

printf (“%d , %d \\n “ , v1, v2 ) ;

} 二、填空

1. 下面程序运行后,输出结果为____________.

# include main( ) { int x,y;

for(x=30,y=0;x>=10,y<20;x- - ,y++)

x/=2,y+=2; printf(“x=%d, y=%d\\n” , x, y); }

2. 下面程序段运行输出结果为_______________.

for (int i=0;i<8;i+ +) printf(“%d,”,+ +i); printf(“%d,” , i+ +);

3. 运行如下程序段,输出结果为______________.

int n=0;

for( ; n+4; n+ +)

{ if (n>5&&n%3= =1) { printf(“%d\\n”, n); break; } priintf(“%d,”, n++); }

4. 如下程序执行的输出结果为________________.

# include main( ) { int n=0; while (n<=4) swintch(n) {case 0:;

case 1: printf(“%d,” , n);

case 2: printf(“%d,” , n+ +);break; default:printf(“* *”);n+ + ; } }

5. 下面程序段输出结果为______________.

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

if (+ +a || b+ + && c+ +) printf(“%d,%d,%d”,a, b, c); else printf(“OK”);

6. 下面程序段,若输入整数12345,则输出为____________.

int x,y;

scanf(“%d”,&x); do

{ y=x;

printf(‘%d”,y); x/=10; }while(x);

7. 执行下段程序,则输出结果为_______。while循环的循环体共执行了________次。

int n=0; int sum=0; while (n+ +,n<50)

{ if (n= =(n/2)*2) continue; sum+ =n; } printf(“%d\\n”,sum);

8.下面程序段中,循环的循环体的执行次数为_______次.

int i=20;

do{ switch( i %4)

{case 0: i=i – 7; break;

case 1 : i=i +1;break; case 2: i=i+1; break; case 3: i=i+1; }

} while (i>=0);

9. 有如下程序:

# include main ( )

{ int x; scanf(“%d”,&x);

while (x>=10&&x<=30)

{ if ( ! (x%3)) { printf(“M”); scanf(‘%d”,&x); } else if (x%3= =1)

{ printf(“N”); scanf(“%d”,&x); continue; } else { printf(“Q”); scanf(“%d”,&x); } printf(“* * *”); } }

若输入为:11,12,28,22,24,25,31,则输出为_________________. 10. 运行如下程序段,输出结果为__________________.

int m=0,n=14; for (; m<2;m+ +)

{ for (; n>=0; n- - ,n- -)

if((m+n)%3) { - - n; printf(“&%d”, m+n); } else {n- =2; printf(“*%d”, m – n); }

printf(“% %”); }

11. 有如下程序段;

int x,y; scanf(“%d%d”, &x,&y); do{ x*=1.8; y/=3;

} while (y–x>=10);

将上述do- while 结构的程序段改写成为:

(1) while 结构______________.

(2) for 结构________________. 12. 若有 int x =0 , i = 3;

do { i- - ; printf (“*“); } while ( i= =x ) ;

则连续打印出的*的个数有 个。

13. 下面程序的功能是:计算1到10之间的奇数之和及偶数之和,请填空。 # include main()

{ int a, b, c , i; a = c = 0 ; for(i=0;i<=10;i+=2)

{ a+=i; ; c+=b; }

printf ( “ 偶数之和= %d \\n “, a ) ; printf ( “ 奇数之和= %d \\n “, c–11 ); }

14. 下面程序的功能是:输出100 以内能被3整除且个位数为6的所有整数,请填空:

main()

{ int i , j ;

for ( i = 0 ; ; i + + ) { j = i * 10 + 6 ;

if ( ) continue ; printf ( “ %d” , j ) ; } }

三、阅读程序,写出运行结果 1.# include “stdio.h” main()

{int s=0,k;

for (k=7;k>=0;k--) {switch(k) {case 1:

case 4:

case 7:s++;break; case 2: case 3:

case 6: break; case 0:

case 5:s+=2; break; } }

printf(“s=%d\\n”,s); }

2.#include “stdio.h” main() {int i,j;

for(i=4;i>=1;i--) {printf(“*”);

for(j=1;j<=4-I;j++) printf(“*”); printf(“\\n”); } }

3.# include “stdio.h” main()

{int i,j,sum,m,n=4; sum=0; for(i=1; i<=n; i++)

{m=1; for(j=1;j<=i;j++) m=m*j; sum=sum+m; }

printf(“sum=%d\\n”,sum); }

4.# include “stdio.h”

main() {int i;

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

{if (i%2) printf(“*”); else continue; printf(“#”); }

printf(“$\\n”); }

5.# include “stdio.h” main()

{int i,j,k;

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

{for (j=1;j<=20-2*i;j++) printf(“ “);

for (k=1;k<=i;k++) printf(“M”,I); printf(“\\n”); }}

6.下列程序段执行多少次?

x= -1

do{x=x*x; }while (!x); 7.# include “stdio.h” # define N 6 main()

{char c[N]; int i=0;

for ( ;i

程序运行时输入以下三行,每行从第一列开始: a b cdef

程序输出结果什么?

8.运行下面程序段输出什么? main( ) { int i=0;

while (i<=5)

{ ++i; if ( i = = 3 ) continue ; printf(\

}

9.运行下面程序段输出什么? main( ) { int i= 0;

while ( i <= 5)

{ ++i; if ( i = = 3 ) break ; printf(\

}

10.按下ESC后结果是什么? # include main() {char c;

while (c!=27) {c=getch(); switch (c)

{ case 'A': putchar(c); break; case 'B': putchar(c); break; default: puts(\ } } }

11.main()

{int i, j, k; printf(\ for (i=0; i<2; i++) for(j=0; j<2; j++) for(k=0; k<2; k++)

printf(%d %d %d\\n\ } 12.main()

{ int i,j;

for (j=10;j<11;j)

{for (i=9;i=j-1) printf(\ } } 13.main()

{int x,i;

for(i=1;i<=50;i) { x=i;

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

if (x%7= =0) printf(\ } }

14.假定a和b为int型变量,则执行以下语句后b的值为什么? a=1;b=10;

do { b-=a; a++; } while (b--<0);

15.设j为int型变量,则下面for循环语句的执行结果是什么?

for (j=10;j>3;j--) {if (j%3) j--;

--j;--j; printf(\ }

16.设x和y均为int型变量,则执行下面的循环后,y值为什么? for (y=1,x=1;y<=50;y++) {if (x>=10) break;

if (x%2==1) {x+=5;continue;} x-=3; }

17.运行以下程序后,如果从键盘上输入65 14<回车>,则输出结果为什么? main ( )

{int m,n; printf(\,n:\,&m,&n\ while (m!=n)

{ while (m>n) m-=n; while (n>m) n-=m; }

printf(\,m); }

18.main( )

{int i,j,x=0; for (i=0;i<2; i++) { x++;

for (j=0;j<3;j++)

{ if (j%2) continue; x++; } x++; }

printf(\,x); }

19.main( ) {int m=5;

if(m++>5) printf(\,m); else printf(\,m--); }

20.main( ) { int y=10;

do {y--;

} while (--y);

printf(\,y--); }

四、程序设计题

1、 请完成以下功能用二分法求解满足条件f(a)*f(b)<0的方程在[a,b]区间内的1个实

根。在区间[2,5]内,限差为0.00001用对分法求解方程x*x-5*sin(x)-4=0的根。 2、 在6至5000内找出所有的亲密数对,并将每对亲密数用语句说明:若a、b为1对亲

密数,则a的因子和等于b、b的因子和等于a、且a不等于b。 如:220、284是1对亲密数,284、220也是1对亲密数 3、 计算表达式1+2!+3!+...+10!的值

4、 数列第1项为81,此后各项均为它前1项的平方根,统计该数列前30项之和 5、 1分、2分、5分硬币组成1块钱,有多少种组合,每一种组合是什么 6、 求出200到300之间所有各位数字加和为12乘积为42的所有数字。

第四部分 循环 参考答案: 一、单项选择

1.A 2.D 3.D 4.A 5.C 6.A 7.A 8.A 9.B 10.C 11.B 12.A 13.C 二、填空

1. x=-1,y=21 2. 1,2,3,4,5,6,7,8,8 3. 0 2 4 6 8 10 4. 0,0,1,1,2,**** 5 . 1,0,0 6 . 54321 7 . 625,49 8. 17 9. Q ***M ***N N M ***N 10. &13&10&7&4&1%% 11. (1) int x,y;

scanf(“%d%d”,&x,&y); x*=1.8;y/=3; while(y-x>=10)

{ x*=1.8; y/=3; }

(2) int x,y; scanf(“%d%d”,&x,&y);

for(x*=1.8,y/=3; y-x>10; x*=1.8,y/=3); 12. 1 13. b = i + 1 14. i<= 9 j%3 != 0

三、阅读程序,写出运行结果,答案:

1.s=7 2. *

** *** ****

3.sum=33 4. *#*#*#$ 5.

1

2 2

3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6

6. 1 7. a b cd

8. i=1 i=2 i=4 i=5 i=6

9. i=1 i=2 10.结束 11.

i j k 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1

12. 10 13. 41 14. 8 15. 74 16. 6 17. m=1 18. x=8 19. 6 20. 0 四、程序设计题

1. #include \

main()

{float x0,x1=2,x2=5,fx0,fx1,fx2; do

{x0=(x1+x2)/2; fx0=2*x0*x0*x0-4*x0*x0+3*x0-6; if((fx0*fx1)<0)

{x2=x0; fx2=fx0; }

else

{ x1=x0; fx1=fx0; } }while(fabs(fx0)>=1e-5); printf(\

}

2.#include main()

{int i,a,b,c; printf(\程序正在运行,请稍等....\\n\ for(a=6;a<=5000;a++) {

/* 提示:求a的因子和b、b的因子和c并判断a、b是否为亲密数*/ b=1;

for(i=2;i<=a/2;i++) if(a%i==0) b+=i; if(b==a) continue; c=1;

for(i=2;i<=b/2;i++) if(b%i==0) c+=i; if(a==c)

{printf(\ }

printf(\程序运行结束。\\n\ }

3.#include

main()

{int i;long s=1,k=1;

for(i=2;i<=10;i++) {k*=i; s+=k;} printf(\ }

4.#include #include main()

{ float s=0,a=81,i; for(i=0;i<30;i++)

{s+=a; a=sqrt(a); } printf(\ }

5.main()

{int cnt1,cnt2,cnt5; int total=0;

for(cnt1=0;cnt1<=10;cnt1++) for(cnt2=0;cnt2<=5;cnt2++)

{ if(10-cnt1-2*cnt2>=0) cnt5=(10-cnt1-2*cnt2)/5; if((10-cnt1-2*cnt2)==5*cnt5) {total++;

printf(\ } }

printf(\一共有%d种组合\\n\ }

6.#include main()

{ int i,j,k,m,p,s,d; for(d=200;d<300;d++)

{i=d/100; j = d/10; k=d; p=i*j*k; s=i+j+k; if(p==42 && s==12) printf(\ }

第五部分 数组

一、判断正误

1.C编译程序不检查数组的下标是否越界。

2.C同一数组的不同元素可以是不同的数据类型。

3.定义数组时,指定各下标长度既可以使用常量,也可以使用变量。

4.对数组元素的引用既可以使用常量,也可以使用变量及表达式指出元素的位置。 5.只有对数组的全部元素进行初始化时,才能省略指出数组第一维的大小。 6.数组只有使用(如赋值)时,才分配内存单元。

7.C语言中的多维数组在内存中是线性存储,且引用其元素时,也可以以一维方式引用。 8.C语言规定,所有字符数组都必须以?\\0?(ASCII为0的字符)结束。

9.以字符串方式对字符数组进行初始化时,系统会自动在所定义的字符数组的后面加上

?\\0?(ASCII为0的字符)。

10.对数组初始化时,如果初始化表达式的个数小于下标长度时,只能对部分元素进行

初始化,相反,如果初始化表达式的个数大于下标长度时,则多余的初始化表达式忽略不计。

11.C语言规定,不可以把字符串常量赋值给一个字符数组,但可以在两个大小合适的

两个字符数组之间进行赋值。

12.字符串函数strlen返回不包括字符串结束标志(ASCII为0的字符)在内的全部的字

符个数。 二、填空

1.数组int a[5]的最后一个元素是_______________

2.定义数组时对数组元素赋值叫数组的_________,只有对_______和_________数组才能进行该操作,对一维数组的全部元素赋初值时,可以不指定数组的________。 3.静态整型数组不赋初值时,其各元素的初值为_________________。

4.对数组元素初始化时,若给定的初值个数小于定义的数组元素个数,则_________,若给定的初值的个数多于定义的数组元素个数,则____________。

5.数组在内存中占_________________的存储区,用_________________代表其首地址。 6.多维数组在内存中是_________________存放的,若有数组:A[下标1][下标2][下标3],按数组在内存中的顺序遍历此数组时,变化最快的下标是____________。

7.有如下定义,请写出与之完全等价但要求逐个字符赋初值的形式_____________。

static str[ ]= “China.”

8.有如下程序段,如果输入为:Programming Design ,则此字输出结果为_________________。 char str[30];

printf(“please input the string:\\n”);

scanf(“%s”,str); puts(str);

9.数组定义和输出语句如下,则输出结果为_________________ static char str[ ]= “abc efg!”; printf(“%4.5s”,str);

10.字符串比较函数strcmp(str1,str2),

如果str1=str2,则其返回值为_________________, 如果str1str2,则其返回值为_________________。 三、单项选择

1.下列数组定义错误的是( )。

A.static char word[ ]={?C?, ?h?, ?i?, ?n?, ?a?, ?\\0?}; B.static char word[ ]={“China\\0”};

C.static char word[ ]= “China\\0”; D.static char word[ ]= ?China\\0?; 2.下列数组定义正确的是( )。

A.int a[ ]= “string”; B.int a[5]={0,1,2,3,4,5}; C.char a= “string”; D.char a[]={0,1,2,3,4,5}; 3.函数strlen(“abc\\0def\\0\\40”)的值是( )。

A.8 B.9 C.3 D.4

4.若用数组名作为函数调用时的实参,则实际传递给开参的是( )。 A.数组的首地址 B.数组的第一个元素值 C.数组中全部元素的值 D.数组元素的个数

5.判断字符串str1与str2是否完全相同的,应用使用( )。

A.if(str1= =str2) B.if(str1=str2) C.if(strcpy(str1,str2)) D.if(!strcmp(str1,str2))

6.已知:int a[5];则对a数组元素的最正确的引用是( )。

A.a[5] B.a[2.5] C.a(3) D.a[5-5] 7.以下二维数组的定义正确的是( )。

A.int a[3][ ]; B.float b(3,4); C.int a[2][3]; D.float a[3,4]; 8.以下对二维数组不正确初始化是( )。

A.static int a[2][3]={0}; B.static int a[ ][3]={{1,2},{0}}; C.static int a[2][3]={{1,2},{3,4},{5,6}}; D.static int a[ ][3]={1,2,3,4,5,6} 9.在C语言中,二维数组元素在内存中的存放顺序是( )。

A.按行存放 B.按列存放 C.由用户自己定义 D.由编译器决定 10.已知:static int a[ ][3]={0,1,2,3,4,5,6};则数组的第一维大小是( )。 A.2 B.3 C.4 D.5

11.若二维数组a有m列,则在a[i][j]与数组第一个元素相差( )个数组元素。 A.j*m+i B.i*m+j C.i*m+j-1 D.i*m+j-1 12.已知:char a[20],b[20];则以下正确的输入语句是( )。 A.gets(a,b); B.scanf(“%s%s”,a,b);

C.scanf(“%s%s”,&a,&b) D.gets(“a”);gets(“b”); 13.下面说法正确的是( )。

A.两个字符串所包含的字符个数相同时,才能对其进行比较; B.字符个数多的字符串比字符少的字符串大;

C.字符串“SCHOOL”和字符串“SCHOOL ”(后有一空格)相等;

D.两个字符串比较大小,其大小关系它们之间第一个不相同的字符的ASCII决定。 14.下面程序段的运行结果是( )。 char str[5]={?a?, ?b?, ?\\0?, ?c?, ?\\0?}; printf(“%s”,c);

A.?a? ?b? B.ab C.ab c D.不同时间运行结果不相同 15.下面程序段的运行结果是( )。 char str1[7]= “abcdef”,str2[4]= “ABC”; strcpy(str1,str2); printf(“%c”,str1[5]);

A.\\0 B.e C.f D.空格 16.有以下变量说明语句,则下列说法正确的是( )。 static char str1[ ]= “abcdef”;

static char str2[ ]={?a?, ?b?, ?c?, ?d?, ?e?, ?f?}; A.字符数组str1和字符数组str2的长度相同

B.字符数组str1的长度大于字符数组str2的长度相同 C.字符数组str1的长度小于字符数组str2的长度相同 D.两个字符数组完全等价

17.若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是( )

A. &t[0][2] B. t[3] C. t[1] D. t[2][1]

18.已知有外部变量说明:int a[ ][4]={0,0};则下面叙述中错误的是( )。 A.数组a的每个元素都可得到初始值0 B.二维数组a的第一维大小为1

C.因为二维数组a中第二维大小的值除以初值个数的商为0,故数组a的行数为1 D.只有元素a[0][0],a[0][1]可得到初始值0,其余元素的值都不能确定。 19.已知:static int a[3][4];则数组中各元素( )。

A.可在程序的运行阶段行到初值0 B.可在程序的编译阶段行到初值0

C.不能得到确定的初值 D.可在程序的编译或运行阶段行到初值0 20.已知:char str1[10],str2[10]= “books”;则在程序中能够把字符串“books”赋予数组str1的正确语句是( )。

A.str1={“books”}; B.strcpy(str1,str2); C.str1= “books”; D.strcpy(str2,str1); 四、程序填空

1.程序读入20个整数,统计非负数的个数,并计算非负数之和。 #include “stdio.h” main()

{ int i,a[20],s,count; _______________;

for(i=0;i<20;i++) scanf(“%d”,__________); for(i=0;i<20;i++)

{if(a[i]<0) __________ s+=a[i]; count++

}

printf(“s=%d\\t count=%d\\n”,s,count);

}

2.下面的程序用来分别求出矩阵两条对角线上的各元素之和。 #include “stdio.h” main()

{ int a[3][3]={1,2,3,4,5,6,7,8,9};

int sum1,sum2,k,j; sum1=sum2=0; for(k=0;k<3;k++) ____________; for(k=0;k<3;k++)

for(j=2;_________;j--)

if(_________) sum2+=a[k][j];

printf(“sum1=%d\\tsum2=%d\\n”,sum1,sum2); } 3.函数int index(char string[ ],char substr[ ])用于检查字符串string中是否包含字符串substr,

如果包含则返回substr在string中的起始位置,即substr的第一字符在string中的下标值,否则返回-1。

int index(char string[ ], char substr[ ]) { int j,k,t;

for(j=0;string[j]!= ?\\0?;j++)

{for(k=j,t=0;_____________________;k++,t++) ; if(substr[t]== ?\\0?) __________________; }

___________________; }

4.函数delete_char(char str[ ],char ch)的功能从字符串str中删除所与的由ch指定的字符。 void delete_char(char str[ ],char ch) { int j,k;

for(j=k=0;_____________;j++)

if(str[j]!=ch) ________________; s[k]= ?\\0?; }

5.求所有不超过200的满足条件的数,该数的平方是具有对称性质的回文数。所谓回文

数是指一个数的左右是对称的,即最左边的数位和最右边的数位相同,次左边的数位与次右边的数位相同,依此类推,如121,12321。 #include “stdio.h” main( )

{int decs[10],n,j,t; unsigned a; for(n=10;n<200;n++) {a=n*n;

for(j=1;a!=0;j++)

{ ______________; a/=10; }

for(t=0;t

if(decs[t]!=decs[j-t-1]) ___________;

if(_________________) printf(“=*==m”,n,n,n*n); } }

6.下面的程序用于从键盘输入一行字符(规定一行字符最多只能80个字符),并将其中的空格字符都轮换为字符 ?*?,并存入数组str中,若是其他字符则原样存入数组str中。 #include “stdio.h” main( )

{int i; char ch,str[81];

for(i=0;________________;i++)

{ if((ch=getchar())= = ?\\n?) ____________________; if(ch= =?\\40?) _________________; str[i]=ch; }

str[i]= ?\\0?; puts(str); }

7.下面的程序用于将一个无符号整数转换为八进制表示(各数位用相应数字字符表示)存入字符数组中。 #include “stdio.h” main( )

{char oct[32],i=0,j,ch; unsigned long num; printf(“input an interger:”); scanf(“%lu”,&n); do

{ oct[i++]=___________; num/=8; }while(_______________); for(--i,j=i;j>i/2;j--)

{ch=oct[j]; oct[j]=oct[i-j]; oct[i-j]=ch; } ________________; puts(oct); }

8. 已知一矩阵,下面的程序实现将每行的各元素均除以该行上绝对值最大的元素。 #include

#include ______________ main()

{ float a[3][4]={{1.3,2.7,3.6,-2.1},{2,3,-6.2,4.7},{-5,3,4,1.27}}; int i,j; float max; for(i=0;i<3;i++)

{ ____________; for(j=1;j<4;j++) if(fabs(a[i][j])>fabs(max)) max=a[i][j];

for(j=0;j<4;j++) ________________; }

for(i=0;i<3;i++)

{for(j=0;j<4;j++) printf(\ printf(\ } }

9.x[i],y[i]表示点d(i)的平面坐标,求d(0)至d(1)、d(1)至d(2)、...、d(4) 至d(0)的连线所构成的5边形面积。 #include \ #include \ void main()

{int i; float s,a,b,c,sdim;

float x[5]={-4.5,0.5,4.2,2.7,-3}, y[5]={2.3,4.7,1.3,-2.5,-3.3}; _____________; for(i=2;i<5;i++)

{ a=____________________________________________________________; b=sqrt((x[0]-x[i-1])*(x[0]-x[i-1])+(y[0]-y[i-1])*(y[0]-y[i-1])); c=sqrt((x[i]-x[i-1])*(x[i]-x[i-1])+(y[i]-y[i-1])*(y[i]-y[i-1])); s=______________;

s=sqrt(s*(s-a)*(s-b)*(s-c)); sdim+=s; }

printf(\}

10.如下程序使用冒泡法对输入的10个浮点数从小到大进行排序。排好序的10个数分两行输出(即每行输出5个数)。程序如下: # include main( )

{float a[10], t ; int i , j ; printf(“Input 10 float numbers please\\n”);

for(i=0;i<10;i++) scanf(“%f”,&a[i]); printf(“\\n”); for(i=1; __________;i++) for(j=0; ________;j++)

if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }

printf(“The sorted 10 numbers:\\n”); for(i=0;i<10;i++)

{ if(______________) printf(“\\n”); printf(“%.2f\\t”,a[i]); }

printf(“\\n”); }

11.如下程序使用选择法排序对输入的10个浮点数从大到小进行排序。排好序的10个数分两行输出(即每行输出5个数)。程序如下: #include main( )

{float a[10]; int i,j,t;

printf(“Input 10 float numbers please\\n”); for(i=0;i<10;i++) scanf(“%f”,&a[i]); printf(“\\n”); for(i=0; i<9;i++) { ___________;

for(_________; j<10;j++)

if(a[j]>a[t]) t=j;

if(___________) { x=a[j]; a[j]=a[j+1];a[j+1]=x;}

printf(“The sorted 10 numbers:\\n”); for(i=0;i<10;i++)

{if(______________) printf(“\\n”); printf(“%.2f\\t”,a[i]); }

printf(“\\n”); }

五、阅读程序,写出程序运行结果 1.#include

main( )

{ int i,j; int a[6]={12,4,17,27,16}, b[6]={27,13,4,25,16}; for(i=0;i<6;i++)

{for(j=0;j<6;j++)

if(a[i]==b[j]) break; if(j<6) printf(“M”,a[i]);

}

printf(“\\n”); }

2.#include main( )

{ int a[8]={1,0,1,0,1,0,1,0},j;

for(j=2;j<8;j++) a[j]+=a[j-1]+a[j-2]; for(j=0;j<8;j++) printf(“]”,a[j]);

}

3.#include “math.h” main( ) { int i,j,r,c,

float a[3][4]={{1,3,4,2},{-10,9,12,0},{6,7,8,9}} , max;;

max=fabs(a[0][0]); r=0; c=0; for (i=0;i<3;i++) for (j=0;j<4;j++)

if (fabs(a[i][j])>max)

{max=a[i][j]; r=i; c=j; }

printf (“max=%0.2f,row=%d,column=%d\\n”,max,r,c); }

4. main( )

{ char str[20]= “Programming”; int i;

for(i=0;i

for(i-0;str[i]!= ?\\0?;i++) printf(“%c”,str[i]); printf(“\\n”); puts(str); printf(“%s\\n”,str); } 5.main( )

{int a[11]={1,4,6,9,10,15,28,40,100,120}; int t1,t2,num,end,i,j; printf(“original array is :”);

for(i=0;i<10;i++) printf(“]”,a[i]); printf(“\\n”); printf(“\\n”);

printf(“please enter a number\\n”); scanf(“%d”,&num); end=a[9];

if(num>end) a[10]=num; else {for (i=0;i<10;i++) {if (a[i]>num)

{ t1=a[i];a[i]=num; for (j=i+1;j<11;j++)

{ t2=a[j]; a[j]=t1; t1=t2;} break; } } }

for (i=0;i<11;i++) printf (“]”,a[i]); printf (“\\n”);

}

运行该程序并输入:5 6.main( )

{int a[5]={8,6,5,4,1},i,temp; printf (“\\n original array is :”)

for (i=0;i<5;i++) printf(“]”,a[i]); for (i=0;i<5/2;i++)

{temp=a[i]; a[i]=a[5-i-1]; a[5-i-1]=temp;}

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

Top