C语言程序设计习题及答案
更新时间:2024-04-28 15:53:01 阅读量: 综合文库 文档下载
- c语言程序设计考试题推荐度:
- 相关推荐
第一部分 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 {int a,b; char b; scanf(“- =”,&a,&b); printf(“%d, %d \\n”, a,b,); } 20.以下程序输入ABC { char c; scanf(“<”,&c); printf(“%c \\n”,c); } 21.以下程序输入100 { int n; scanf(“%o”,&n); printf(“%d\\n”,n); } 22.以下程序输入x=1.23,y=50 { 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 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| |90 (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 { 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. first { 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 { 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 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 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 { 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 { 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 程序输出结果什么? 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 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 {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 {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 { 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 { 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 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 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 {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 {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 { 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;}
正在阅读:
C语言程序设计习题及答案04-28
新教材PEP小学英语单词(默写本)02-02
2012年秋季六年级数学思维训练四09-29
实验四 α=β配合控制的有环流直流可逆调速系统仿真10-14
丰安党组发4号07-08
大学生职业生涯规划书10-26
机械制图理论试卷12-24
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题
- 程序设计
- 答案
- 语言