admin管理员组

文章数量:1530874

2023年12月26日发(作者:)

第一部分 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. “BBn123r”在内存中占的字节数是( ),此字符串的长度为( )。

(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( “ %dn”,(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=%%dn”,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("%dn",a+(a-=a*a) ); }

)。

(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("%d %ld %f %f n", i,l,f,d);

}

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

X=213.82631; printf("%-4.2fn",x);

则以上程序运行结果为( )。

(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, %4d”, ”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(“%dn”,(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=%dn” , 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,%un”,i,i,i,i); }

12.# include “stdio.h”

main()

{short i=1; printf(“%d,%o,%x,%un”,i,i,i,i); }

13.# include “stdio.h”

main()

{ char c=‟A‟; printf(“%d,%o,%x,%cn”,c,c,c,c); }

14.# include “stdio.h”

main()

{float f=3.1415927; printf(“%f,%5.4f,%3.3fn”,f,f,f); }

15.# include “stdio.h”

main()

{float f=3.5; printf(“%f,%gn”,f,f); }

16.# include “stdio.h”

main()

{float f=31.41592; printf(“%f,%en”,f,f); }

17.# include “stdio.h”

main()

{ char c=‟A‟+10; printf(“%cn”, 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(“%2d %3d”,&a,&b); printf(“%d, %d n”, a,b,); }

20.以下程序输入ABC后的执行结果是:

# include “stdio.h”

main()

{ char c; scanf(“%3c”,&c); printf(“%c n”,c); }

21.以下程序输入100后的执行结果是:

# include “stdio.h”

main()

{ int n; scanf(“%o”,&n); printf(“%dn”,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 5.D 6.B 7.A 8.C 9.B 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* 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(“圆锥体积=%gn”,v);

}

2、main( )

{ int n; int a,b,c;

printf(“输入一个三位数:”); scanf(“%d”,&n);

a= n/100; b=n/10 %10; c=n%10;

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(“%dn”, &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 ( “abre„hi„yboun“);的输出结果是( )。

(A)abre‟hi‟ybou (B) abre‟hi‟ybou

(C) re‟hi‟you (D) abre‟hi‟ybou

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

(B) if ( a

min = 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

else

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("%d",null);}

程序的输出是( ).

(A) 0 (B) 变量无定义 (C) –1 (D) 1

18. 若有以下定义和语句:

int u=010,v=0x10,w=10; printf("%d,%d,%dn”,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("*n"); { case 1,2:printf("*n");

case 2.0:printf("**n"); case 3:printf("**n");

} }

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

{ case 1:printf("n"); { case 1:printf("*n");

case 1+2:printf("**n"); case 2:printf("**n");

} }

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,%08ld”,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(“%dn”,a);

else printf(“%dn”,b);

printf(“endn”);

}

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=%dn”,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=%dn”,s,t);

}

4.# include “stdio.h”

main()

{ int x=1,y=0;

switch(x)

{ case 1: switch(y)

{ case o: printf(“firstn”);break;

case 1: printf(“secondn”);break;

}

case 2: printf(“thirdn”);

}

}

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=%gn”,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&&year%100!=0)|| (year%400= =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(“truen”);

else printf(“falsen”);

}

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=%gn”,x,op,y,x+y); break;

case „-‟: printf(“%g%c%g=%gn”,x,op,y,x-y); break;

case „*‟: printf(“%g%c%g=%gn”,x,op,y,x*y); break;

case „/‟: if(y!=0.0)

printf(“%g%c%g=%gn”,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

y=0 ;

9.以下循环体的执行次数是

(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=%dn”, 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=%dn” , 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(“%dn”, 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%10;

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(“%dn”,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=%dn”,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=%dn”,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(“%4d”,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

for (i=0;i

}

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

a

b

cdef

程序输出结果什么?

8.运行下面程序段输出什么?

main( )

{ int i=0;

while (i<=5)

{ ++i; if ( i = = 3 ) continue ; printf("i=%dn",i); }

}

9.运行下面程序段输出什么?

main( )

{ int i= 0;

while ( i <= 5)

{ ++i; if ( i = = 3 ) break ; printf("%dn",i); }

}

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("Error"); break;

}

}

}

11.main()

{int i, j, k; printf("i j kn");

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

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

for(k=0; k<2; k++)

printf(%d %d %dn", i, j, k);

}

12.main()

{ int i,j;

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

{for (i=9;i

if (i>=j-1) printf("%d",j);

}

}

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("%d,i);"

}

}

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("%d",j);

}

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("Enter m,n:"); scanf("%d%d,&m,&n");

while (m!=n)

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

while (n>m) n-=m;

}

printf("m=%dn",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=%dn",x);

}

19.main( )

{int m=5;

if(m++>5) printf("%dn",m);

else printf("%dn",m--);

}

20.main( )

{ int y=10;

do

{y--;

} while (--y);

printf("%dn",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. *

**

***

****

=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 "math.h"

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("x0=%6.2fn",x0);

}

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("%6d,%6dn",a,b); }

}

printf("程序运行结束。n");

}

3.#include

main()

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

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

printf("%ldn",s);

}

4.#include

#include

main()

{ float s=0,a=81,i;

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

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

printf("%.3fn",s);

}

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("n%d:t10--%dt20--%dt50--%d",total,cnt1,cnt2,cnt5);

}

}

printf("n一共有%d种组合n",total);

}

6.#include

main()

{ int i,j,k,m,p,s,d;

for(d=200;d<300;d++)

{i=d/100; j = d/10%10; k=d%10; p=i*j*k; s=i+j+k;

if(p==42 && s==12) printf("***** D=%dn",d);

}

第五部分 数组

一、判断正误

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,则其返回值为_________________,

如果str1

如果str1>str2,则其返回值为_________________。

三、单项选择

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

A.static char word[ ]={„C‟, „h‟, „i‟, „n‟, „a‟, „0‟};

B.static char word[ ]={“China0”};

C.static char word[ ]= “China0”;

D.static char word[ ]= „China0‟;

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(“abc0def040”)的值是( )。

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=%dt count=%dn”,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=%dtsum2=%dn”,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(“%3d*%3d=%6d”,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("%7.2f",a[i][j]);

printf("n");

}

}

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

#include "stdio.h"

#include "math.h"

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("%.4f",sdim);

}

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

# include

main( )

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

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(“%.2ft”,a[i]);

}

printf(“n”);

}

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

#include

main( )

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

printf(“Input 10 float numbers pleasen”);

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(“%.2ft”,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(“%4d”,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(“%5d”,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=%dn”,max,r,c);

}

4. main( )

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

for(i=0;i

printf(“n”);

for(i-0;str[i]!= „0‟;i++) printf(“%c”,str[i]);

printf(“n”); puts(str); printf(“%sn”,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(“%5d”,a[i]);

printf(“n”); printf(“n”);

printf(“please enter a numbern”); 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 (“%5d”,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(“%5d”,a[i]);

for (i=0;i<5/2;i++)

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

printf(“n the reversed array is :”);

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

printf(“n”);

}

7.#include “stdio.h”

main( )

{ int i,j,up,low,dig,spa,oth; char text[3][8]; up=low=dig=spa=oth=0;

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

{ printf(“n input the %dth linen”,i); gets(text[i]);

for(j=0;j<80 && text[i][j]!= „0‟;j++)

{ if(text[i][j]>=‟A‟ && text[i][j]<= „Z‟) up++;

else if(text[i][j]>= „a‟ && text[i][j]<= „z‟) low++;

else if(text[i][j]>= „0‟ && text[i][j]<= „9‟) dig++;

else if(text[i][j]==‟40‟) spa++;

else oth++;

}

}

for(i=0;i<3;i++) puts(text[i]);

printf(“the upper letter:%dt the lower letter:%dn”,up,low);

printf(“the space:%dt the digit:%dt others:%dn”,spa,dig,oth);

}

运行该程序并输入: abcdABCD

1*%gh

in the sentence 90

8. main( )

{char a[5]={ '*', '*' , '*' , '*' , '*' }; int i , j , k ; char space=' ';

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

{printf("n");

for(j=1;j<=3*i;j++) printf("%c",space);

for (k=0;k<=4;k++) printf("%3c",a[k]);

}

}

9. main()

{char s1[80],s2[40]; int i=0,j=0;

printf("n please input string1:"); scanf("%s",s1);

printf("n please input string2:"); scanf("%s",s2);

while (s1[i]!='0') i++;

while (s2[i]!='0') s1[i++]=s2[j++];

s1[i]='0';

printf("nthe result is : %s",s1);

}

运行该程序并输入: Programming

Design

10.#include

main()

{int i=0,result; char s1[100],s2[100];

printf("input string1:"); gets(s1);

printf("n input string2:"); gets(s2);

while ((s1[i]==s2[i]) && (s1[i]!='0')) i++;

if (s1[i]=='0' &&s2[i]=='0') result=0;

else result=s1[i]-s2[i];

printf(" %s and %s compare result is %d",s1,s2,result);

}

运行该程序时输入的string1是aid, string2是and。

六、编程题:

1.给定某年某月某日,求出该日期是这一年的第几天并输出。

2.编程求出1000以内的所有阿姆斯特朗数。所谓阿姆斯特朗数就是一个正整数等于其各位数字的立方和,如:407=43+03+73,所以407是一个阿姆斯特朗数。

3.找出一个二维数组中的鞍点,即该位置上的元素是该行上的最大值,同时也是该列上的最小值。二维数组也可能没有鞍点。

4.从键盘输入一个字符,用折半查找法找出该字符在已排序的字符串中的位置。若该字符在字符串中,则输出该字符在字符串首次出现的位置,否则给出不在该在字符串中的提示。

5.数组a包括N个整数(N是一个符号常数),请编程实现把a中所有后项除以它前面一项之的余数存入数组b,并输出数组b(要求每行输出4个元素)

6.用筛法求200以内的全部素数。

第五部分 数组 参考答案:

一、判断题:

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

二、填空题:

1.a[4] 2.初始化,静态,外部,长度

3.0 4.只给部分元素赋初值,出错

5.连续顺序,数组名 6.一维线性,下标3

7.static str[]={„C‟,‟h‟,‟i‟,‟n‟,‟a‟,‟0‟}

8. Programming 9.abc e 10.0,一负整数,一正整数

三、选择题:

1.D 2.B 3.C 4.A 5.D 6.D 7.C 8.C 9.A 10.B

11.B 12.B 13.D 14.B 15.C 16.B 17. C 18.D 19.B 20.B

四、程序填空:

1.s=count=0 &a[i] continue

2.sum+=a[k][k] j>=0 k+j= =2

3.substr[t]!=„0‟&&string[k]==substr[t]

return(j) return(-1);

4.str[j]!= „0‟ str[k++]=str[j]

5.decs[j]=a%10 break t>=j/2

6.i<80 break ch= „*‟

7.num % 8+ „0‟ num!=0 oct[i+1]= „0‟

8. max=a[i][0] a[i][j]/=max

9.sdim=0 sqrt((x[0]-x[Ii])*(x[0]-x[i])+(y[0]-y[i])*(y[0]-y[i])) (a+b+c)/2

10.i<9 j<9-i i%5==0

11.t=i j=i+1 t!=i i%5==0

五、读程序,并写出运行结果

1. 4 27 16 0

2. 1 0 2 2 5 7 13 20

3. max=12, row=1, column=2

4. Programming

Programming

Programming

Programming

5. original array is:1 4 6 9 13 16 19 28 40 100

please input a number: 5

4 5 6 9 13 16 19 28 40 100

6. original array is: 8 6 5 4 1

the latter array is : 1 4 5 6 8

7. the upper letter:4 the lower letter:18

the space:5 the digit:5 others:2

8. * * * * *

* * * * *

* * * * *

* * * * *

* * * * *

9. ProgrammingDesign

10. aid and and compare result is -5

六、编程题:

1.main()

{ int year,month,day,i,dayth=0;

int days[]={31,28,31,30,31,30,31,31,30,31,30,31};

printf("Enter the date(yyyy-mm-dd):");

scanf("%d-%d-%d",&year,&month,&day);

while(month>12||day>32)

{ printf("invalid date,please enter again(yyyy-mm-dd):");

scanf("%d-%d-%d",&year,&month,&day);

}

for(i=0;i

dayth+=day;

if((year%4==0&&year%100!=0||year%400==0)&&month>2) dayth++;

printf("%d-%d-%d is the %dth day in %dn",year,month,day,dayth,year);

}

2.main()

{ int num,i,t,p; int a[10],count=0;

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

{ num=0; t=i;

while(t!=0)

{p=t%10; num+=p*p*p; t/=10; }

if(num==i) a[count++]=num;

}

for(i=0;i

printf("n");

}

3.main()

{ int a[3][4],row,col,i,j,k,flag=1;

printf("enter the array n");

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

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

scanf("%d",&a[i][j]);

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

{ row=i;col=0;

for(j=1;j<4;j++)

if(a[i][j]>a[row][col])

{row=i; col=j; }

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

if(a[k][col]

if(k>=3)

{flag=0;printf("the andian is %d(%d,%d)n", a[row][col],row,col);}

}

if(flag) printf("no andiann");

}

4.#include "stdio.h"

#include "string.h"

main()

{char str[]="abcdefghij",ch; int low=0,high=strlen(str)-1,mid;

printf("enter a charactorn");

ch=getchar();

for( ;low<=high; )

{ mid=(low+high)/2;

if(ch==str[mid])

{ printf("'%c' is the %dth charactor of "%s"n",ch,mid+1,str);

break;

}

else if(ch>str[mid]) low=mid+1;

else high=mid-1;

}

}

5.#define N 10

main()

{ int a[N],b[N-1],i;

printf("input the elements of array a:n");

for(i=0;i

for(i=0;i

printf("the elements of array b:n");

for(i=0;i

{ if(i%4==0) printf("n"); printf("%5d",b[i]); }

printf("n");

}

6.main()

{ int a[200],i,j; int count=0;

for(i=0;i<200;i++) a[i]=i+1;

a[0]=0;

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

if(a[i]!=0)

for(j=i+1;j<200;j++)

if(a[j]%a[i]==0) a[j]=0;

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

if(a[i]!=0)

{ count++; printf("the %dth prime--%dn",count,a[i]);

}

}

第六部分 函数

一、判断正误

1.函数是C程序基本组成单位,其中有且仅有一个主函数(即main函数)。

2.一个C语言程序最多只能由一个程序文件组成,而一个程序文件却可以包含多个C语言程序。

3.C语言规定,函数不可以嵌套调用,但允许嵌套定义。

4.C系统所提供的标准函数是各个C语言版本所固有的,所以在任何情况下都可以调用。

5.C语言函数可以没有参数(即无参函数),但不允许没有可执行性语句。

6.一般情况下,C语言只能有一个返回值,但在使用数组名作为函数参数时,可以往主调函数带回多个值。

7.如果函数的形参是整型,而调用时的实参是浮点型,则调用结果会因为“类型不匹配”而产生错误。

8.在一个C语言函数中,可以包含多个return语句,但一次调用只执行其中某一个return语句。

9.如果被调用函数中不包含return语句,则函数没有返回值,即不可引用该函数的返回值。

10.调用无参函数时,可以省略函数名后的圆括号。

11.使用任何C语言提供的标准库函数时,都必须嵌入相应的头文件。

12.如果某函数的定义在其调用的后面,则在主调函数中必须对其进行函数声明。

13.外部变量可以在各个函数之间传递数据,但增加了各函数之间的联系,使得程序控制变得复杂,故应限制性的使用。

14.外部变量可以供其所在的程序文件中的任何函数使用。

15.定义在某函数中的静态局部变量,在程序中多处调用该函数时,前一处调用函数后,该局部变量的值会保留到后一处调用该函数时该变量的值。

16.静态外部变量(以static限制定义)与一般外部变量的区别是,前者只能供其定义所在的程序文件使用。

17.在主调函数中对被调用函数进行声明时,可以不指定形参的变量名,但一定要指出形参的类型名。

18.函数调用时,如果实参个数少于形参个数,则提示出错,但当实参个数多于形参个数时,则只是截去多余的实参,其结果依然正确。

19.C语言函数的可执行部分只能出现在说明部分之后。(分语句中的声明除外)

20.在C语言中调用函数时,只将实参的值传递给形参,而形参值的改变不会影响实参。

二、填空

1.C语言中,函数的标志是___________,函数体指包括在___________中C语句段。

2.当一个函数不需要返回任何值时,应该指定函数的返回值类型为____________,当函数的返回值类型是____________或___________时,可以省略指定函数返回值类型。

3.当一个函数有多个参数时,各参数之间用_________________分隔。

4.当在一个函数中需要调用标准函数fabs(),则应该嵌入头文件_________________,需要调用标准函数puts()时,则应该嵌入头文件_________________。

5.C语言中,函数有____________、____________及____________三种调用方式。

6.函数调用自身,称为______________,因其调用方式不同可以分为______________和_________________两种。

7.递归调用的两个要素是_________________和_________________。

8.从作用域角度,变量可以分为_________________和_________________两类,从变量存储属性可以分为_________________和_________________两类。

9.C语言中的函数一般包含_________________和_________________两个部分。

10.只能供其所在的程序文件调用的函数称为________________函数,相反,既可以供其所在程序文件调用,也能供其他程序文件调用的函数则称为________________函数,前者在定义时以________________修饰,不加修饰时的缺省的类型为________________。

三、单项选择

1.C语言程序由函数组成,以下说明正确的是( )。

A.主函数必须在其它函数之前定义,函数内可以嵌套定义函数

B.主函数可以在其它函数之前或之后定义,函数内不可以嵌套定义函数

C.主函数可以在其它函数之前或之后定义,函数内可以嵌套定义函数

D.主函数必须在其它函数之前定义,函数内不可以嵌套定义函数

2.下列说法正确的是( )。

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

B.在C语言程序中,要调用的函数必须在main()函数中进行定义

C.C语言程序总是从main()函数开始执行

D.C语言程序中的main()函数必须放在程序的开始部分。

3.以下关于函数调用的说法错误的是( )。

A.单独构成语句 B.出现在表达式中

C.做为函数的实参 D.做为函数的形参

4.已知函数fun1的定义如下, 则以下说明正确的是( )。

void fun1()

{ ………… }

A.函数fun1没有返回值 B.调用函数fun1,将不再返回主调函数

C.函数fun1的返回值类型不确定 D.以上说明都不对

5.以下说法错误的是( )。

A.函数的自动变量可以赋初值,但每调用一次则赋一次初值

B.函数调用时,实参和对应形参在类型上只需赋值兼容

C.外部变量的隐含类型是自动存储类别

D.函数形参的存储类型是自动(auto)类型的变量。

6.C语言中函数返回值的类型是由( )决定。

A.return语句中的表达式类型 B.调用该函数的主调函数类型

C.调用函数时临时 D.定义函数时所指定的函数类型

7.以下说法不正确的是( )。

A.不同函数中可以使用相同的变量名

B.形式参数是局部变量

C.一个函数内部定义的变量只能在本函数范围内有效

D.在一个函数内部的复合语句中定义的变量在本函数范围内有效

8.凡在函数内部定义且未指定存储类别的变量,其存储类别是( )。

A.自动(auto) B.静态(static) C.外部(extern) D.寄存器(register)

9.在一个C源程序文件中,若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要的存储类别是( )。

A.extern B.auto C.static D.register

10.以下叙述错误的是( )。

A.在所有函数之外定义的变量称为外部变量,外部变量是全局变量

B.在一个函数中既可以使用本函数中的局部变量,也可以使用外部变量

C.外部变量定义和外部变量说明的含义不同

D.若在同一个源文件中,外部变量与局部变量同名,但外部变量会屏蔽同名的局部变量

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

A.所有递归程序均可以采用非递归算法实现

B.只有部分递归程序可以用非递归算法实现

C.所有递归程序都不可以采用非递归算法实现

D.以上三种说法都不对

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

A.递归函数中的形式参数是自动变量 B.递归函数中的形式参数是外部变量

C.递归函数中的形式参数是静态变量

D.递归函数中的形式参数可以根据需要自己定义其存储类别

13.C语言的函数调用过程中,如果函数fun1调用了函数fun2,函数fun2又调用了函数fun1,这种调用关系( )。

A.称为函数的直接递归 B.称为函数的间接递归

C.称为函数的递归定义 D.C语言中不允许这样的调用形式,所以提示出错

14.在程序调用标准库函数putchar(),则必须在调用前嵌入的头文件是( )

A.stdio.h B.stdlib.h C.string.h D.iostream.h

四、程序填空

1.已知整型数组w中的元素已经由小到大排序,函数fun用以将整数x插入到数组w中,要求插入后的数组元素依然有序。其中n所指的存储单元中存放着数组元素的个数。

void fun(int w[ ], int x, int *n)

{ int k,p=0; w[*n]=x;

while (x>w[p]) ____________

for (k=*n;k>p;k--) w[k]=_________;

_______________; ++*n;

}

2.函数strlen用于确定一个给定字符串str的长度(不包括„0‟)。

strlen(char *str)

{ int num=0;

while(__________) ++num;

return(________);

}

3.以下是一个求字符串长度的函数的递归算法,请补充完整(不包括„0‟)

int strlen(char * str)

{ if (________) return(0);

else return(_____________);

}

4.已知:nx和ny的末3位数字相同,并且x≠y,x、y、n均为自然数,本程序的功能是:由键盘输入n,求满足上述条件的x、y,并使得x+y为最小

# include

last3( int n, int x)

{ int i, last;

for(last=1,i=1;i<=x;i++) last=_____________;

return(last);

}

main( )

{ int x, n, min, flag=1; scanf(“%d”,&n);

for (min=2;flag;min++)

for(x=1;x

if (_______ && last3(n,x)= =last3(n,min-x))

{ printf(“min=%d=%d+%dn”,min,x,min-x); ____________________; }

}

5.有n(<=20)个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数.

main()

{ int number[20],n,m,i;

printf("共有多少个数?"); scanf("%d",&n);

printf("后移多少个?"); scanf("%d",&m);

printf("请输入%d个数.n",n);

for(i=0;i

scanf("%d",&number[n-1]);

_________________;

printf("移动后顺序为:n");

for(i=0;i

printf("%dn",number[n-1]);

}

move (int array[ ],int n,int m)

{int *p, array_end ; array_end=*(array+n-1) ;

for (p=array+n-1; p>array; p--) *p=____________;

*array=____________; m--;

if (m>0) move (array,n,_________);

}

6.输入n的值,补充程序使之输出如下图所示规律的图形,如n=4时的图形如下:

本文标签: 函数程序数组变量输出