东北农业大学网络教育学院
C语言程序设计网上作业题第一章C语言概述一、填空
1. *C语言中任何程序的运行总是从主函数开始,在( )函数中结束。
2.*一个C语言程序总是从( )函数开始执行。
3.*C语言源程序的扩展名为( )。
4.*C语言源程序的扩展名为*.C、目标文件的扩展名为( )、可运行文件的扩展名为( )。
5.*C语言属于面向( )语言。
6.*C语言程序的注释可以出现在程序的任何地方,它总是以( ) 符号作为开始标记,以( )符号作为结束标记。
7.*C语言中规定标识符只能由字母、数字、下划线组成,且第一个字符必须是( )或( )。
8.*结构化设计中的三种基本结构是( )、( )和循环结构。
9.* *程序开发的四个步骤是( )、 ( )链接和执行。二、单项选择题
1.*在C程序中所用的变量使用前( )
(A)可以不定义 (B)先定义后使用 (C)随时定义随时用 (D) 其他
2.**C语言程序从main()函数开始执行,所以这个函数要写在( )。
A) 程序文件的开始 B) 程序文件的最后C) 它所调用的函数的前面 D) 程序文件的任何位置
3. * *下列关于C语言的叙述错误的是( )
A) 大写字母和小写字母的意义相同
B) 不同类型的变量可以在一个表达式中
C) 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型
D) 同一个运算符号在不同的场合可以有不同的含义
4. *一个C程序的执行是从( )。 8 R! y/ O0 a- \
A)本程序的main函数开始,到main函数结束
6 s5 n v; l- J/ q$ ^- e B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
/ [" J5 X1 ^! k2 E( O/ M C)本程序的main函数开始,到本程序文件的最后一个函数结束
6 G$ t4 b" o4 H& @4 L5 \. Q D)本程序文件的第一个函数开始,到本程序main函数结束
5. * *以下叙述正确的是( )。
7 ]5 L6 n0 c% F* \' HA)在C程序中,main函数必须位于程序的最前面 B)C程序的每行中只能写一条语句
2 {/ Z# R$ p3 K4 t2 }C)C语言本身没有输入输出语句 D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误
6. * *以下叙述不正确的是( )。 ' Y- V7 g1 T/ u
A)一个C源程序可由一个或多个函数组成 B)一个C源程序必须包含一个main函数
# m! m0 G! l& p+ nC)C程序的基本组成单位是函数 D)在C程序中,注释说明只能位于一条语句的后面 * x$ k* ^' W4 {
7. *一个C语言程序是由( ) 。
A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成第三章数据类型、运算符与表达式一、填空
1、* *x=2,y=-3,z=3,则表达式x||y+z&&y-z的值为 ( )。
2、*在C语言中实型变量分为两种类型,它们是( )和 ( )。
3 * *、十进制11转化为八进制的值为( )。
4、* *十进制数159转换为八进制数是( )
5、* *已知int x=6; 表达式x%2+(x+1)%2的值是( )。
6、*C语言中char型变量在内存中占( ) 个字节的内存单元
7、*C语言的变量名:TEA与tea是( )同的。
8、* *设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为( )。
9、* *表达式( 5<3) && (2 || 8<4 ) 的值是( )。
10、* *十六进制数2a转换为十进制数是( )。
11、* *计算 x 、 y 之和的平方,表达式应写作 ( ) 。
12、* *执行语句“ a=5+(c=6); ”后,变量 a 、 c 的值依次为( ) 。
13、* *设x是个实型变量。满足数学式|x|>4的c语言表达式是( )。
14、* *若s 是整型变量,则计算表达式 s=22/3%2 后s的值为( ) 。
15、*C语言用( )号括起来的单个或多个字符表示字符串常量。
16、*float x, y, z;是将x, y, z; 定义为 ( )
17、*目前常用C语言的一个整型变量的存储容量为( )个字节。
18、*无符号基本整型的数据类型符为( ),双精度实型数据类型符为( )。
答案:unsigned int、double
19、* *定义变量的完整语句格式是: ( ) ( ) 变量名1=初值1,变量名2=初值2,...;。
20、* *设有下列运算符:<
21、** “ = ” 是( )符号,不是等号。在C语言中等于号用 “( ) ” 表示。
22、* *表达式10/3的结果是( ),10.0/3的结果是( )。
23.* *表达式10%3的结果是( ),3%10的结果是( )。
24. * *定义int x,y;执行y=(x=1,++x,x+2);语句后,x的值是( ),y的值是( )。二、单项选择题
1、*( )是不正确的字符常量。
(A)'n' (B)'1' (C)"a" (D)'/101'
2、 *( )把x、y定义成float类型变量,并赋同一初值3.14。
(A)float x, y=3.14; (B)float x, y=2*3.14; (C)float x=3.14, y=x=3.14; (D)float x=y=3.14;
3、* *若有以下定义和语句:7 J, u1 O- Q5 {2 R# F! m! ^
int u=010,v=0x10,w=10;' ?0 B1 H$ D1 p. D4 Z: p+ T& w, V) n
printf(″%d,%d,%d\n″,u,v,w);
5 e1 y' n4 L. A1 ]则输出结果是( )。
(A)8,16,10 (B)10,10,10 (C)8,8,10 (D) 8,10,10
4、*以下正确的字符常量是( )
(A)“x” (B) ‘W’ (C)‘’ (D)‘XYZ’
5、 * 在C语言的算术运算符中只能用于整型数的运算符是( )
(A)++ (B)/ (C) % (D)*
6、 *已知 int a; 那么 &a表示( )
(A)变量名 (B)变量a的地址 (C)变量a的值 (D)其他
7、*不正确的标识符是( )
(A)_a2 (B)2ai (C)a2_i (D)Int
8、*已知 int a=2,b=5; 则表达式a+5>b+3的值是( )
(A)0 (B)1 (C)不确定 (D)表达式错误
9、* *若变量已正确定义并赋值,下面符合C语言语法的表达式是
(A) a:=b+1 (B) a=b=c+2 (C) int 18.5%3 (D) a=a+7=c+b
10、 * *若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是
(A) 1 (B) 2 (C) 2.0 (D) 2.5
11、*若变量a、i已正确定义,且i已正确赋值,合法的语句是
(A) a==1 (B) ++i; (C) a=a++=5; (D) a=int(i);
12、* *以下不是c语言规定保留字的是( )。
(A)float (B)integer (C)signed (D)unsigned
13 *、下列不正确的转义字符是
(A)'\\' (B)'\" (C) '074' (D) '\0
14、* *若有以下定义:; c# I, p. h) g; |/ p$ j+ a
char a; int b;: g7 m7 s6 x! D3 _ \/ z
float c; double d;; x+ E7 @; D- h% L5 F0 [2 y
则表达式a*b+d-c值的类型为
0 c, O& L$ I& S* P (A) float (B)int (C) char (D) double
15、* *常数的书写格式决定了常数的类型和值, 0x1011 是 ( )
(A) 8 进制整型常量 (B)字符常量 (C) 16 进制整型常数 (D)2 进制整型常数
16、* *在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为
* A& b0 c$ Z4 d+ b6 v! C: @A)char
$ A% S# |0 L4 b8 G' P3 Y1 H8 NC)char
17、*若x,i,j和k都是int型变量,则执行下面表达式后x的值为 / p$ a' D2 P5 L( j, S3 c# r
x=(i=4,j=16,k=32)
/ I* J5 f4 a# q$ g A)4 B)16 C)32 D)52
18、*假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是: 8 X: [* T8 a |) X
A)7 B)8 C)6 D)2
19、* *下列四组选项中,均不是C语言关键字的选项是
3 [6 M; G' m2 k1 Z/ p* `8 t7 e. bA)define B)getc C)include D)while
9 g7 R4 F( A3 R8 g IF char scanf go) t6 j7 ]5 e6 Q7 o6 r8 z, v# a
type printf case pow
20、*下面四个选项中,均是C语言关键字的选项是 ! E* _; i" u9 f& n7 Y
A)auto B)switch C)signed D)if
* r; s' s; d$ f/ W6 T3 }% X' U$ y enum typedef union struct
2 s: Q; d# h( y: P3 V) |7 S: D y1 Q include continue scanf type
21、* *下面四个选项中,均是不合法的用户标识符的选项是。
) r+ Z7 B% i/ ]2 x+ H9 q) v A) A B)float C)b-a D)一123 2 ?. j, v/ R9 t8 D
P_0 1a0 goto temp, I3 h5 U0 e5 C- [" B
do 一A int INT
22、*下面不正确的字符串常量是。
" _/ P) _; p+ ?( [ A)'abc' B)"12'12" C)"0" D)""
23、* *若有代数式3ae/bc,则不正确的C语言表达式是:
2 Y u' ^& n# S- H2 U; m: A& X; z A) a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3
24、* *以下不正确的叙述是 6 D% z7 b' ^( F! h% D; |8 f. g, Y( R
A)在C程序中,逗号运算符的优先级最低 ' p p6 r$ ^9 u" T, s! f8 Q
B)在C程序中,APH和aph是两个不同的变量
) m, @# o1 F) c; I9 SC)若a和b类型相同,在执行了赋值表达式a=b后b中的值将放人a中,而b中的值不变。 - y. t5 o# E* d1 B- j: n8 I
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值。
25、* *以下正确的叙述是: 3 I- U5 u2 r/ Q2 K
A)在C程序中,每行中只能写一条语句 , _, U, Q7 ?( }6 A
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数 9 u- e. m5 X7 `
C)在C程序中,无论是整数还是实数,都能被准确无误地表示
0 [ ]4 S: N* q& ID)在C程序中,%是只能用于整数运算的运算符
26 、* *以下符合C语言语法的赋值表达式是 5 n; u# N4 `( I5 X5 I3 q0 w
A)d=9+e+f=d+9 B) d=9+e,f=d+9 C)d=9十e,e++,d十9 D)d=9十e++=d十7
27、* *已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2='A'十'6'一'3';后,c2中的值为 : B) V% ]4 y s1 v2 Z1 e
A)D B)68 C)不确定的值 D)C
28、* *设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为
3 l- e8 F0 v0 S A)int B) float C) double D)不确定
29、*设有说明: char w; int x; f1oat y; double z;则表达式w* x+z一y值的数据类型为:
: M5 B) A5 {: n% dA)float B)char C)int D)double
30、* *若有以下定义,则能使值为3的表达式是:
+ r4 i0 J1 k. I f4 v$ e, dint k= 7,x =12; + l: B$ L. D# I6 f& \3 `& |
A) x%=(k%= 5) B) x%=(k一k%5) C) x%=k- k%5 D) (x%=k)一(k%=5)第四章顺序程序设计一、填空
1、*在屏幕上输出整型变量a,b值,每个数占5位,输出数据前有说明字符的 printf()函数为( )。
2、 *设char c=’A’,则语句printf(″%c″,c+32)结果为( ) 。
3、*通过键盘输入整型变量a的scanf()函数为( )。
4、*已知 int a,b,c; a或者b两个中间有一个小于c的表达式是( )。
5、* *已知 int x; 如果用scanf(“%f”,&x);给x赋值,错误的原因是( )。
6、*float a=3.54; printf("% 2.3f ",a);的输出结果是( )
7、* * * 若有定义语句 “ inta=25,b=14,c=19; ” ,以下语句的执行结果是( )。
if(a++<=25&&b--<=2&&c++)printf("***a=%d,b=%d,c=%d\n",a,b,c);
else printf("###a=%d,b=%d,c=%d\n",a,b,c);
8、* * *以下程序输入1 2 3后的执行结果是( )。
#include
main()
{ inta,c;
charb;
scanf("%d%c%d",&a,&b,&c);
printf("a=%d,b=%c,c=%d\n",a,b,c);
}
9、* *以下程序输入123456后的执行结果是( )。
#include
main()
{ inta,b;
scanf("%2d%3d",&a,&b);
printf("a=%d,b=%d\n",a,b);
}
10、* *若有说明int i,j,k;则表达式i=10,j=20,k=30,k*=i+j的值为( )。二、单项选择题
1、 *设变量定义为“int a, b;”,执行下列语句时,输入( ),则a和b的值都是10。
scanf("a=%d, b=%d",&a, &b);
(A)10 10 (B)10, 10 (C)a=10 b=10 (D)a=10, b=10
2、*若t为int类型,表达式t=1,t+5,t++的值是( )。
(A)1 (B)6 (C)2 (D)1
3、**设x、y均为整型变量,且x=10 ,y=3,则以下语句的输出结果是( )
) Z% C3 \ i0 ?. y3 S/ Cprintf("%d,%d\n",x--,--y);
(A) 10,3 (B) 9,3 (C) 9,2 (D)10,2
4、 ** 阅读以下程序,当输入数据的形式为:25,13,10,正确的输出结果是( )
main()
{intx,y,z;
scanf(“%d%d%d”,&x,&y,&z);
printf(“x+y+z=%d\n”,x+y+z);
}
(A)x+y+z=48 (B)x+y+z=35 (C)x+z=35 (D)不确定值
5、**已知 int a=5,y;y=a++; 问a,y=? ( )
(A)a=6 , y=5 (B)a=6 , y=6 (C)a=6 , y=7 (D)a=5 , y=6
6、*已知 int a =5; 赋值表达式a+=a*a的值为( )
(A)5; (B)10; (C)30; (D)50;
7、**若有以下程序段,
int c1=1,c2=2,c3;
c3=1.0/c2*c1;
则执行后,c3中的值是
(A) 0 (B) 0.5 (C) 1 (D) 2
8、*putchar函数可以向终端输出一个: ( )
* G( t* }8 `& @( j3 h7 d) X( xA)整型变量表达式值 B)实型变量值 C)字符串 D)字符或字符型变量值
9、**printf函数中用到格式符%5s ,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式 ( )0 L( a: }8 T8 Y" }
A)从左起输出该字串,右补空格 B)按原字符长从左向右全部输出 ; y3 `$ K9 H: F/ d: `
C)右对齐输出该字串,左补空格 D)输出错误信息 / \5 l( \9 I# y" e1 x* u; w0 C! C
10、**已有定义 int a=-2;和输出语句:printf("%8lx",a);以下正确的叙述是: ( )
+ _5 [) d1 j Q0 f& `4 ]% {. \A)整型变量的输出格式符只有%d一种 4 {8 @. J! l1 G5 m% L
B)%x 是格式符的一种,它可以适用于任何一种类型的数据
" @ k% y, z* Y& V% fC)%x 是格式符的一种,其变量的值按十六进制输出,但%8lx 是错误的
3 h0 w1 O5 ?9 [D)%8lx 不是错误的格式符,其中数字8规定了输出字段的宽度
11、**若x ,y均定义为int型,z定义为double型,以下不合法的scanf函数调用语句是:( )
$ ^6 U. U5 |! wA) scanf(" %d%lx,%le",&x,&y,&z); B) scanf("%2d * %d%lf"&x,&y,&z ); , y/ K( }. V2 u# r
C) scanf("%x %* d%o",&x,&y); D) scanf("%x%o%6.2f",&x,&y,&z);
12、**已有如下定义和输入语句 ,若要求a1,a2,c1,c2值分别为10,20,A和B,当从第一列开始输入数据时,正确的数据输入方式是 ( )
% c( Y5 Y. V3 C7 R& H( p7 Uint a1,a2; char c1,c2; 2 \& J3 a2 ?$ V1 K- W/ x* c
scanf("%d%c%d%c",&a1,&c1,&a2,&c2); 1 g6 W; y4 x1 e+ k7 U/ u
A)10A 20B< CR> B)10 A 20 B C)10A20 D)10A20 B。
13、**已有定义int x; f1oat y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345 678(回车),则x 的值为( )
$ K6 L' B) N) ]2 s# K/ TA)12345 B)123 。 C) 45 D) 345
14、**已有定义int x; f1oat y;且执行scanf("%3d%f",&x,&y);语句,若从第一列开始输入数据12345 678(回车),则y 的值为: ( )
# t; r" N' v' X! y- ~A)无定值B)45.0000 C) 678.000000 D) 123.00000
15、**已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A,B,当从第一列开始输入数据时,正确的数据输入方式是: ( )
& t- s$ g2 K1 Lint a1,a2; char c1,c2;
5 s7 l( L# M0 Q$ @& k$ [ cscanf("%d%d",&a1,&a2);
U' t) q6 Z) h. Tscanf("%c%c",&c1,&c2); 9 Z+ G6 q" _$ j6 G" v% [
A) 1020AB B)10 20AB C)10 20 AB D)10 20AB
16、*已有程序段和输入数据的形式如下,程序中输入语句的正确形式应当为( ) # _' K+ U9 E8 @7 q: ^
main()
. M$ S8 e. _( J1 r4 _- R{int a;float f;
8 [( r9 Y l9 m2 t# T$ k# U printf("\nInput number:");
4 D% Y4 L3 W9 `: t7 G: I 输入语句
/ a# \" S1 v6 e, a" N# Z7 i- S8 N" B Y printf("\nf=%f,a= %d\n ,f,a); 2 z, Z4 r+ z" o. D/ D
}
5 u' C, D5 @& g$ wInput number: 4.5 2 ' j/ @" W6 \# P& Q$ J- b
A )scanf("%d,%f",&a,&f); B)scanf("%f,%d",&f,&a)
9 Q) j; _: g c2 B# T4 i1 f* ~C)scanf("%d%f",&a,&f); D)scanf("%f%d",&f,&a);( o8 Z9 o+ S/ S, p
17、*以下能正确地定义整型变量a,b和c 并为其赋初值5的语句是 ( )0 r, t1 f% T$ u, w Z
A)int a=b= c= 5; B) int a,b, c= 5;
8 U; R+ U, U7 s. W8 G C)a= 5,b=5,c=5; D) a= b= c=5;
18、*已知ch是字符型变量,下面不正确的赋值语句是 ( )
! P2 i2 F% p" ]- k' m/ l8 b/ g7 G9 hA)ch='a+b'; B)ch='\0'; C)ch='7'+'9'; D) ch=5+9;
19、已*知ch是字符型变量,下面正确的赋值语句是 ( )
2 d5 I2 E ^5 o7 W% UA) ch= '123'; B) ch= '\xff'; C) ch= '\08'; D) ch="\";
20、**若有以下定义,则正确的赋值语句是: , W, |, K/ e! u; O3 w) d" _7 i
int a,b;float x;8 b2 n7 a5 R+ a- _9 U
A) a=1,b=2, B)b++; C) a= b= 5 D) b= int(x);
21、*设x 、y均为f1oat型变量,则以下不合法的赋值语句是( ) # e8 Z9 j' k; c) S
A)++x; B)y=(x%2)/10; C) x*=y+8; D)x=y=0;
22、**x,y,z均为int型变量,则执行语句x=(y=(z=10)+5)一5;后,x 、y 和之的值是: ( )
( Z e. `8 K- t" W+ n A) x=10 B) x=10 C) x=10 D) x=10
" V7 k% c- |, q' @% Y y=15 y=10 y=10 y=5 - O/ e0 o7 `6 G9 a
z=10 z=10 z=15 z=10
/ o D4 j; o8 Y9 u6 G23、*逻辑运算符两侧运算对象的数据类型( )。
. X; Y) A U8 f% r2 ^0 B8 M A)只能是0或1 B)只能是0或非0正数 + R/ O0 }/ A/ }+ s
C)只能是整型或字符型数据 D)可以是任何类型的数据
24、***下关于运算符优先顺序的描述中正确的是( )。
( v' C0 S4 Q* R& ~A)关系运算符< 算术运算符< 赋值运算符< 逻辑与运算符 , C4 F! t3 ~. Z0 p* `
B)逻辑 运算符< 关系运算符< 算术运算符< 赋值运算符
/ A" v, } w+ {& T# E3 J. rC)赋值运算符< 逻辑与运算符< 关系运算符< 算术运算符
3 g, C% t" a: D! a8 m* ]' {! bD)算术运算符< 关系运算符< 赋值运算符< 逻辑与运算符
25、*下列运算符中优先级最高的是( )。 ; F' Z" M6 W: h
A)
1、*main()
{int a=1,b=2;
a=a+b;b=a-b;a=a-b;
printf("%d,%d\n",a,b);
}
2、*main()
{ intx=7,a=2,b=2,c;
c=x/a%b;
printf(c=%d\n”,c);}
3、**以下程序输入100后的执行结果是( )。
#include
main()
{ int n;
scanf("%o",&n);
printf("n=%d\n",n);
}
4、**以下程序输入x=1.23,y=50后的执行结果是( )。
#include
main()
{ float x,y;
scanf("x=%f,y=%f",&x,&y);
printf("x=% 7.2f ,y=% 7.2f \n",x,y);
}
5、***阅读下列程序,写出程序的输出结果。
main()
{ intx=100,a=10,b=20,ok1=5,ok2=0;
if (a
if(b!=15)
if (!ok1)
x=1;
elseif(ok2)
x=10;
else x=-1;
printf("%d\n",x);
}
6、**阅读下列程序,写出程序运行的输出结果。
main()
{ int y=9;
for (;y>0;y--)
if(y%3==0)
{
printf("%d",--y);
continue;
}
}
7、*阅读下列程序:
main()
{int a;
char b;
float c;
printf("input ab c:");
scanf("%d%c%f",&a,&b,&c);
printf("a=%d,b=%c,c=%f\n",a,b,c);
}
程序运行后若输入“1234r1234.567(回车)”,写出程序的输出结果。
8、**阅读下列程序:
main()
{int a;
float b,c;
printf("input ab c:");
scanf("%2d% 3f % 4f",&a,&b,&c);
printf("a=%d,b=%f,c=%f",a,b,c);
}
程序运行后若输入“12345678987654321(回车)”,写出程序的输出结果。
9、***阅读下列程序:
main()
{int a;
float b,c;
scanf("%d%f%f",&a,&b,&c);
printf("a=%d,b=%f,c=%f",a,b,c);
}
程序运行后若输入“12 345 6789 87654321(回车)”,写出程序的输出结果。第五章选择结构程序设计一、填空
1、**能正确表示“当ch为小写字母为真,否则为假”的表达式是( )。
2、 *设y是int型变量,请写出判断y为5的倍数的关系表达式( ) 。
3、 *已知int a=1,b=2;表达式(a
4、 *在switch语句中出现的break语句的功能是( )。
5、**能正确表示“当A=5时布尔量BL为真,否则为假”的表达式是( )。
6、*已知 int a,b; a、b中有一个小于0的表达式是( )。
7、*在C语言中,表示逻辑量“真”用1,表示逻辑量“假”用( )。
8、**若x=5,y=10,则x>y和x<=y的逻辑值分别为( )和( )。
9、* C语言中的逻辑运算符按优先级别是( )、( ) 、( )。
10、*C语言中逻辑运算符( )的优先级高于算术运算符。
11、**将下列数学式(A) a=b 或 a4改写成C语言的关系表达式或逻辑表达式( )和( )
12、* 请写出以下程序的输出结果( )。
main()
{ int a=100;
if (a>100) printf(“%d\n”,a>100);
else printf(“%d\n”,a<=100);
}
13、**当a=1,b=2,c=3时,以下if 语句执行后,a 、b 、c 中的值分别为( )、( )、( )。
if(a>c)
b=a;a=c; c=b;
二、单项选择题
1、**已知整型变量k的值为3,下面程序段执行的结果是( )
switch(k)
{ case 1:putchar(‘A’);break;
case 2:putchar(‘B’);break;
case 3:putchar(‘C’);
case 4:putchar(‘D’);
default:putchar(‘E’);
}
(A) CDE (B) C (C) ABC (D) ABCD
2、***以下程序段正确的是( )
(A)if(a>b) c=1 (B) if(a>b) c=1;
elsec=2; else c=2
(C) if(a>b) c=1; (D) if(a>b); c=1;
elsec=2; else c=2;
3、**以下程序运行的结果是( )
main()
{int x=12,y;
y=x>12 ? x+10 : x-12;
printf(“y=%d\n”,y);}
(A)y=0 (B) y=22 (C)y=12 (D)y=10
4、**表示关系x<=y<=z的c语言表达式为
(A) (X<=Y)&&(Y<=Z) (B)(X<=Y)AND(Y<=Z) (C) (X<=Y<=Z) (D)(X<=Y)&(Y<=Z)
5、**假定所有变量均已正确说明,下列程序段运行后x的值是 ; K0 T, }$ w) D' N
a=b=c=0;x=35;
- G$ w) m4 E* v2 J+ \. T if(!a)x--;
5 v% T# j8 X2 r5 S" R2 \ else if(b);2 u/ [/ p7 y; M8 E! v# Y; }' @# |# d
if(c)x=3;
$ d! I; _0 v. B+ A* D( B9 y: K' _ else x=4;
; i- c+ r& u$ z (A)34 (B)4 (C) 35 (D) 3
6、**当a=1,b=3,c=5,d=4 ,执行完下面一段程序后x 的值是 : 9 r- ?% W/ M; j
if(a
if(c
else
: F0 {6 M9 r! c; {# E if(a
if(b
else x= 3;
; A/ `' B* i2 X- H else x=6;
/ Y2 ^$ \% q: @& w& h! @( u/ u) k else x=7;
+ z% N. P6 O- H- `5 |" P/ U3 Z% {) |4 X A)18 B)2 C)3 D)6
; N5 s& m- F0 v5 j% E3 r
7、**以下程序的输出结果是:
3 O4 _, d1 x+ H8 A8 S7 Y main() & N! @2 U2 }, J: v8 _
{int a=100,x =10,y=20,okl=5,ok2=0; % w) ^' S, S p3 c+ X9 N3 Z( ?: S- h
if (x
if(y ! =10) ) I O q% P- ]8 A/ Z( @
if(!okl) a=1; , H& Y& d7 v0 W5 m8 s2 L
else ) g8 T+ z1 _. e2 K v* A D3 g
if(ok2) a=10;
2 k( H8 [+ }1 V- H% y0 |# o a=-1: ; w$ [( W+ f# [* S, Q
printf( "%d\n",a ) + O- l- p: D5 R6 s1 [0 D
}
0 u# V; Q- @0 ~9 ^# k A) 1 B) 0 C)一1 D)值不确定 5 Q1 w) l* g/ _7 T' H7 E) ^
8、*为了避免在嵌套的条件语句If一else中产生二义性,C语言规定else子句 + J3 z9 h E" Y* s
总是与( )配对。 9 q6 W4 K- s% r' m: o
A)缩排位置相同的if B)其之前最近的if C) 之后最近的if D)同一行上的if : v" i9 _7 n; s. [2 d; ?
9、**以下不正确的语句为:
}! q/ M# L1 I" S A) if(x>y); B) if (x= y) &&(x! = 0) x+= y;2 o4 e3 M" J* t& C; v
C) if(x!= y)scanf("%d",&x); else scanf("%d",&y); D)if(x< y){x++ ;y十十;} / @. } q q0 S, C) Z
10、***请阅读以下程序: 0 J1 C) g1 a! T9 a; c# W! w
#include 0 \& }3 A1 `+ R
main() 2 u2 ^3 g5 R/ E
{float a,b h& K$ ^; J& `0 L) G8 `$ k8 o- b
scanf("%f",&a);
/ a# u: i9 I4 O5 W; M2 d& K if (a<10.0) b=1.0/x;
4 v; {. M2 M: W9 F- H; b else if((a<0.5)&&(a!=2.0))b= 1.0/(a十2.0);
D) @- N% k- z: K% w) L6 J+ \- b9 v9 B else if(a<10.0) b= 1.0/x ;* Z/ M3 E$ y# g: f2 h7 j& A- u6 `( x
else b=10.0;
6 g1 |) W6 |1 ]' ] G printf("%f\n",y);
- }6 Y0 ~! [ ^9 r% ]) N } ' r* e- w' l1 O9 }
若运行时输入2.0(回车),则上面程序的输出结果是:
6 w8 T; N6 @( F: `0 A A)0.000000 B)0.500000 C) 1. 000000 D) 0.250000
/ S% p5 o+ n$ s0 I
4 K+ \5 H( H' q11、*若有条件表达式(exp) ? a++:b--,则以下表达式中能完全等价于表 9 m3 w u/ s/ Z2 ~
达式(exp)的是: ' ]+ q$ K% _" I7 C: X0 r( W3 M6 ^
A) (exp==0) B) (exp!=0) C) (exp== 1 ) D) (exp!=1) " v. [7 s5 d/ l
12、**若运行时给变量x 输入12,则以下程序的运行结果是:
2 ^3 \" T: K0 g main() ( Z0 W1 T, K0 [0 o# { \$ t+ ~: x
{int x,y;
- z* w$ K6 T# ` scanf("%d",&x); 7 b5 N9 F$ P1 e4 W) A3 {
y=x > 12?x+10: x一12; 1 x' H" M& y y: j P
printf("%d\n",y);
: V, R( _( F* O0 e8 N4 O" I2 [ } % y) c4 G& l; s9 I
A)0 B)22 C)12 0)10
4 r; |& T6 ]7 o& k: l" T# K% h) @13、*以下程序的运行结果是:
, n; Y! N' \: i5 a main()'
$ K+ R3 E; k5 ?: l$ C: M2 z1 I {int k= 4,a=3,b=2,c=; 7 L- @1 Z" S. [/ N9 T- ]0 g
printf("\n %d\n",k< a ? k:c
}
7 H$ D% ~+ p: C* P* [ A)4 B )3 C)2 D)1
Z: X0 y* M+ z1 M# @, A# c, @14、*执行以下程序段后、变量a,b,c的值分别是一。 6 Q; B# w/ }. x/ j) W
int x=10,y=9;
2 W4 \4 G/ F( {3 b" M( r int a,b,c;
, T( u, @3 u: B$ E5 S a =(- -x = = y++)?- -x:++y ;. N8 T7 |" K* b# P
b = x ++;
( |! D, k* w6 v5 z4 W7 p0 d c = y;
& w9 \* U; }! x8 P I5 ]* q A)a=9,b= 9,c= 9 B )a=8,b=8,c=10 C)a=9,b= 10,c=9 0)a=1,b= 11,c=10
$ b/ Q2 i5 I% {2 ^9 S" O% j15、**若w,x,y,z,m均为int型变量,则执行下面语句后的m值是:
a# e: F9 u( }) K/ b4 c8 G w= 1;x = 2;y= 3;z=4;
C! U! K. I' P, ~" o9 m# }9 n m=(w
m= (m
' N E. C4 Z, X. W# Z$ D \$ S m=(m
A)1 B )2 C)3 D)4 ! b1 C+ W2 }/ K* v4 g% ]
16*若w=1,X = 2,y= 3,z=4,则条件表达式w
+ Z( Y, }# l9 |, S5 a A)4 B)3 C)20 D)1
17、**执行以下程序段后的输出结果是
* l: `' d u8 D U2 Q% E! W int w=3, z=7,x =10;
- s- P$ H1 H" R, {' c2 r# W printf("%d\n",x> 10? x+100:x 一10); $ V0 `& j, n- Q
printf("%d\n",w++||z++ );
* \ H: z4 M) N- ]/ \8 R8 V printf("%d\n",!w>z);
8 l, ~' ~8 n1 P/ ]- R: N printf("%d\n",w&&z);
$ S6 l2 ?4 ^3 X* m A)0 B) 1 C)0 D) 0三、阅读程序,写出程序运行结果
1、**main( )
{int i, j=4 ;
for(i=j;i<=2*j; i++)
switch(i/j)
{ case 0 :
case 1: printf(“*”);break ;
case 2: printf(“#”,a);
}
}
2、* 若x=2,y=3,z=2,求下列表达式的值
(1) x﹤y?y:z
(2)x﹥y? (++x)
++z)
3、*main()
{ int a=10,b=5,x;
x=a
printf(“x=%d\n”,x);}
4、* main()
{int a=1, b=2, c=3;
if(a>c)
b=a; a=c;c=b;
printf(“a=%d b=%d c=%d\n” ,a,b,c);}
2
5、 ***main( )
{int i=5;
do
{switch(i%2)
{case 4: i--; break;
case 6: i--; continue;
}
i-=2;
printf("%5d",i);
}while(i>0);
}
6. ** 若x=3,y=z=4,求下列表达式的值
(1) (z>=y>=x)?1:0
(2) z>=y&&y>=x
7、**main()
{ int a, b;
for(a=1, b=1; a<=100; a++)
{ if(b>=10) break;
if (b%3= =1)
{ b+=3; continue; }
}
printf("%d\n",a);
}
8、**#include
main( )
{
int s=0,k;
for (k=0;k<=7;k++)
{
switch(k)
{
case 1:
case 4:
case7: s++;
break;
case 2:
case 3:
case6: break;
case 0:
case5: s+=2;
break;
}
}
printf(“s=%d\n”,s);
}
五、编写程序
1、***设计一个判断输入年份是否是闰年的程序。第六章循环控制一、填空
1、*C语言中while和do-while循环的主要区别是( )的循环体至少无条件执行一次。
2、 **要使for(i=0;i<= ;printf(“%d\n”,i+=2));程序段输出10个整数,i应<=( )。
3、 **若While((ch=getchar())==’e’) printf(“*”);输入字符串:abcde,则循环体将执行 ( ) 次。
4、*在while(表达式) 循环语句中,表达式的值是( )时可以循环,至少循环( )次。
5、**循环语句for(;;) printf("OK \n");和do {printf("OK\n");} while(0);执行完毕循环,循环次数分别是( )和( )。
6、*结构化程序设计的三种基本结构是:选择结构、顺序结构和( )。
7、***当循环体中的switch语句内有break语句,则只跳出( )语句。同样,当switch语句中有循环语句,内有 break 语句,则只跳出( )语句。
8、*循环体执行遇到continue 语句时( )。
二、单项选择题
1、**以下程序的输出结果是
main( )
{int i;for(i='A';i
printf("%c",i+32);printf(" \n");}
(A) 编译不通过,无输出 (B) aceg (C)acegi (D) abcdefghi
2、**执行以下程序后,输出的结果是
main ()
{ int y=10;do { y - -;} while(- - y);
printf("%d\n",y --);}
(A) -1 (B) 1 (C) 8 (D) 0
3、**若变量已正确定义,语句“if(a>b) k=0;else k=1;”和( )等价。
(A)k=(a>b)?1:0; (B)k=a>b;
(C)k=a<=b; (D)a<=b ? 0 : 1;
4、* 设有程序段int k=10; while (k=0) k=k-1;则下面描述中正确的是( )
(A)循环执行十次 (B)循环是无限循环
(C)循环体语句一次也不执行 (D)循环体语句执行一次
5、 *已知:int i; for(i=0; i<=10;i++);如果表达式1即i=0缺省那么完成表达式1功能的语句可以( )
(A)放在for语句的前面 (B)放在循环体中
(C)放在for语句的后面 (D)放在程序的任何地方
6、**以下可以正确计算s=1*2*3*4*5的程序段是( )
(A)for(i=1;i<=5;i++) (B) for(i=1;i<=5;i++)
{ s=1; { s=0;
s=s*i;} s=s*i;}
(C)s=1; (D) s=0;
for(i=1;i<=5;i++) for(i=1;i<=5;i++)
s=s*i; s=s*i;
7、*以下叙述正确的是( )。
; C) _1 U( \$ Y (A)do-while语句构成的循环不能用其他语句构成的循环来代替
' X$ H+ q$ |% P( f' J, Z0 a3 [ (B)do-while语句构成的循环只能用break语句退出
) S6 g- h, G2 \/ X! Y+ p (C)do-while语句构成的循环,在while后的表达式为非零时结束循环
4 w9 n( ~: J. F2 E) Z8 V) [ (D)do-while语句构成的循环,在while后的表达式为零时结束循环
8、*以下程序段输出的结果是( )
a=-1;
do
{ a=a*a;}while(a<0);
(A) 循环一次 (B) 循环两次 (C) 死循环 (D) 有语法错误
9、**设x和y均为int型变量,则执行下的循环后,y值为
5 I# ] j# F( ^5 v+ L. c+ p% Q0 l0 O for(y=1,x=1;y<=50;y++)- x- X% \2 S6 b, C C, G3 @) q# N
{ if(x>=10))break; ! T- v W8 i, A! z' F( s
if (x%2==1)
) k3 ]( b0 m' c1 h# l/ G { x+=5; continue;}6 _) {# m) B4 D$ P
x-=3;* Z! K6 X7 _4 ^0 l* w
}
7 Z4 L' ]5 u7 h$ |$ o0 f' _(A) 2 (B)4 (C) 6 (D) 8
10、**假定a和b为int型变量,则执行以下语句后b的值为
7 U* U, y7 v2 z( X; ma=1; b=10;
* W5 h: I8 J$ S+ w a% {do+ @: _- H( m' B- e$ l
{ b-=a; a++; }
% {- Q2 r4 o0 p9 z0 v' Hwhile (b--<0) ; : V2 {9 D' l- C" E% D
(A) 9 (B)-2 (C) -1 (D) 8
11、 **设j为int型变量,则下面for循环语句的执行结果是 0 |; [* o' \/ |4 S1 D
for( j=10;j>3;j--)+ S: n7 e5 B* q( w" w
{ if(j%3)j--;2 c! |3 d1 N: j* T! G) E8 s. B" _
--j; --j;
- g. A# F& n' A4 }4 X printf("%d ",j);
! i: V% A' I5 V6 l }# y# d/ o( U- r' f. E3 r
(A) 6 3 (B)7 4 (C) 6 2 (D) 7 3
12、**设有程序段 1 a& R( J- L( r; }
int k=10;
7 p; v6 W& P: C8 N/ K; ^ while (k=0) k= k—1;
( @8 O5 V! Q. i) ~" e 则下面描述中正确的是 ! d. K; p0 {0 V; k5 J8 {7 ^
A) while循环执行10次 B)循环是无限循环 ! W" k3 f5 J" }. i
C)循环体语句一次也不执行 D)循环体语句执行一次
+ n- l4 T; F, n0 \$ e, _; y8 n6 q+ F
13、**有以下程序段
" H- v2 c% b$ ?% k int x=0,s=0; . ` ^- h! _) y& `: r B
while (! x!= 0) s+=++x;
0 h) C" H. u9 n- @, E printf("%d",s); * L5 t# v3 l1 i4 a$ [+ U
则 9 I# }, l* X. D1 v" f' |) t" n
A)运行程序段后输出0 B)运行程序段后输出1 7 g/ z& y6 i: k# z8 @ c% r
C)程序段中的控制表达式是非法的 D)程序段执行无限次 ( E8 s' O8 Q8 N: V0 |$ q/ c @
, B* d5 d) [4 ^9 y( r. S# S, W14、**语句while(!E)中的表达式!E等价于:
& z6 B6 X- n/ ?) h. fA) E==0 B) E!=1 C) E!=0 D) E==1
: b7 ~0 U, p G) D7 `: O- |! w0 ^5 Z2 t* g
15、**下面程序段的运行结果是
0 K( X* j& `. M( y a=1;b= 2;c=2; 7 x, P# S- v* {7 p
while(a
, V+ a4 \# J; Xprintf("%d,%d,%d",a,6,c); ^& o+ H+ e7 Q- G0 W
A)1,2,0 B)2,1,0 C)1,2,1 D)2,1,1 * Z! W) U1 t2 R) h# z G8 [
+ x8 y+ M. S; `! R5 A
16、**下面程序段的运行结果是: 7 r& ?* {8 q4 n
x = y= 0; 6 R: H( n7 ~6 L7 A* Y
while(x<15) y++,x + = ++y;
* E, N% n; G' vprintf("%d,%d",y,x); * j' o. W* A: i# O t
A) 20,7 B)6,12 c) 20,8 D)8,20
# ~2 U9 C' B- j: P' _
( k8 t0 v* u; z8 w17、**若有如下语句
4 v3 D- b% l7 W- @ int x=3;
' y" k0 Y5 |/ O# l4 l4 ~. R! ~ do { printf(" %d\n",x -=2);} while(!(--x));
8 G) J2 l9 `# ~, l' j* K0 n2 W a 则上面程序段
6 B' L/ t# `' `: ?9 U+ |. a A)输出的是 1 B)输出的是1和-2 C)输出的是3和0 D)是死循环
# D8 M4 {! v- w% U% H
0 V3 S, @2 q" l4 P/ d18、**下面有关for循环的正确描述是: $ ~ o3 L# U* Z6 H
A) for循环只能用于循环次数已经确定的情况 ; J- ~: m# b D# Z1 U( p( b
B) for循环是先执行循环体语句,后判断表达式 5 y3 q; e! H# I% h3 ]
C) 在for循环中,不能用break语句跳出循环体
: ^% @6 R3 `" I9 o& ~ g D) for循环的循环体语句中, 可以包含多条语句,但必须用花括号括起来 0 A- a; B0 z. l$ L0 J4 Z: M/ v/ v
( K, g* m8 a* V7 p/ E. n, b19、**对for(表达式1;;表达式3)可理解为:
3 k/ D- A: p9 T' Y3 YA) for(表达式1; 0;表达式3) B) for(表达式1;1;表达式3)
5 D& Y6 q5 X' GC) for(表达式1;表达式1;表达式3) D) for(表达式1;表达式3;表达式3)
- L2 s8 R% D$ T9 u9 D, ~$ r0 O; U3 V7 B1 T1 W
20、*若i为整型变量,则以下循环执行次数是:
# W5 t. `, ^. V' ~4 D for (i=2;i==0;) printf("%d",i-- );
: c3 q" ~$ ~8 C8 ` d- L A)无限次 B) 0次 C) 1 次 D) 2次
% A. ?: K$ u' H1 K* X, j) p1 H21、**以下for循环的执行次数是:
+ q4 U: F. N2 V5 d for (x=0,y一0; (y=123)&&(x<4); x++);
- S6 M! q9 [, D1 b A)是无限循环 B)循环次数不定 C)执行4次 D)执行3次 . @0 h! i/ u" l$ s- I
/ u! y- m" J3 W8 w: S% i) O
22、**以下不是无限循环的语句为: 8 O7 _& p5 i0 E5 y. S- s
A) for (y=0,x=1;x > ++y;x =i++) i=x ; B) for (;; x++=i);
' X E4 e) e+ v& ]- j; o C) while (1){x ++;} D) for(i=10; ;i--)sum+=i;
& }$ w" C6 ?% O- k( I
4 {* A, d) S& Y0 B1 i- \23、**下面程序段的运行结果是:
1 e2 ?+ ~# A; _9 E) ^, F( I* wfor (y= 1;y<10;) y=((x=3* y,x+1),x-1); 7 @% j* w7 W2 {
printf ("x=%d,y=%d",x,y);
/ T( i8 K0 s* b# g) XA)x=27,y=27 B)x=12,y=13 C)x=15,y=14 D)x=y=27 ( S% Y/ F% G, w- |) f2 R* R
& A$ }/ j C3 v$ C4 T2 t0 |6 s, K24、**下面程序段的运行结果是 5 z: U* _7 E, [8 v# ?( q0 z; E$ U
for(x=3;x<6;x++)printf((x %2)?("**%d")
" ##%d\n"),x);/ @+ d1 }0 t3 t& N( E& U9 p8 B
A)**3 B )##3 C)##3 D)**3##4
* L/ Q5 h" K' o0 C# r ##4 **4 **4##5 **5
. l6 {; q- p& Y, c6 |: R$ u **5 ##5
5 E) J1 t6 h4 K; d( X h
/ M0 V# c: t1 t25、*执行语句for(i=1;i++<4;);后变量i的值是 * T/ Q& c2 e/ T% P
A)3 B )4 C)5 D)不定 ! Z8 `, |: @& q# D; U+ M1 u
2 b" S$ C5 e" [2 v26、**以下正确的描述是。 / O% g0 h) U E
A)continue语句的作用是结束整个循环的执行
M: F5 v+ p( I, e; X) ]4 S B)只能在循环体内和switch语句体内使用break语句
* R2 X- n. _" S$ D C)在循环体内使用break语句或continue语句的作用相同 ! ~- a; S6 q" K) m) _' E
D)从多层循环嵌套中退出时, 只能使用goto语句
2 h* l ^" I6 `+ i$ U9 I5 W' o& j" w6 @0 S
27、**下面程序段: $ P& g7 B$ y& J; ~+ c8 L
for (t=1; t<=100;t++)
2 k6 R9 m( I1 |$ q. E X) [6 n {scanf("%d",&x);
! Y* o/ X3 X+ { if(x<0) continue; * E0 c9 P) |3 w$ W* _5 g
printf("%3d",t);}
( }- q' A9 C5 O- B4 z A) 当x<0时整个循环结束 B) x>=0时什么也不输出
5 G8 U& w' s/ F+ V4 A C) printf函数永远也不执行 D)最多允许输出100个非负整数
) d4 ~. A. P [, M) L1 l7 P) y- a! H+ q9 Y. g* \1 r8 S! R
28、*以下描述正确的是 $ H$ S) x3 E/ V0 j0 x
A) goto语句只能用于退出多层循环 B) switch语句中不能出现continue语句
- V) Z2 C6 L" G# G# p l C) 只能用continue语句来终止本次循环 D) 在循环中break语句不能独立出现三、阅读程序,写出程序运行结果
1、* *main()
{int i=1;
while(i<=10)
if(++i%2!=0) continue;
elseprintf(“%3d”,i);
}
2、***main( )
{ int i,j,k;
char space=‘ ’;
for(i=1;i<=3;i++)
{ for(j=1;j<=10-i;j++)
printf(“%c”,space);
for(k=1;k<=2*i;k++)
printf(“*”);
printf(“\n”);}
}
3、**main()
{int i,j,sum=0,a[3][3];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{a[j]=i+j;
if(i==j) sum+=a[j]; }
printf(“%d”,sum);
}
4、* main()
{int x=10, y=6, i=0;
for(i=y;i<= x ; i++) printf(“i=%d\n”,i);}
5、* main()
{ intx=0,y=0;
do
{ y++;
x=x*x;
}while((x>0)&&(y>5));
printf(“x=%d y=%d\n”, x, y);}
6、*main()
{int x=2,y=3,z;
z=x;
if(x>y) z=1;
else if(x==y)z=0;
else z=-1;
printf(“z=%d\n”,z);}
7、*main()
{ int a[]={1,2,3,4,5,6,7,8,9,10}, s=0, i;
for(i=0; i<10; i++)
if(a%2==0) s=s+a;
printf(“s=%d”, s);}
8、**main()
{int n=2345,k=0;
while(n>1)
{
k++;
n=n/10 ;
}
printf(“%d\n”,k);
}
9、*main()
{int x=1, y=1, i=0;
do
{ x=x+y ; y=x+y ;i++;
printf(“x=%d y=%d\n”, x, y);
}while(i<=3);}
10、***#include
main ( )
{
int j=1,k,sum,m,n=5;
sum=0;
while (j<=n)
{
m=1;
for(k=1; k<=j;k++)
m=m*k;
sum=sum+m;
j++;
}
printf(“sum=%d\n”,sum);
}
11、** #include •
1 T- Q6 @( a" W% B: J2 l/ w main() 2 E1 C: X* q0 r; i6 I. U+ j
{int i,sum= 0;
2 F ]/ c% q2 v9 [4 o- @. ]" M- s for(i=1;i<=50;i++) % X$ l3 r. a. g8 K( P' }
if( i%7==0) sum+=i; 5 b ?* g1 U1 W( C( G" T9 t! [: I. r
printf("%d",sum);
% ~5 |! r1 R7 e+ g } - m" Z. t& s9 u$ }1 ?
2 V* o5 d# n9 S2 l
12、**下面程序的运行结果是:
5 x( ~% {* P- z& K7 t #include & U8 b- D9 ^( }: C# x/ ~3 H
main()
# q' I8 D1 C. ~* }5 V3 D; y2 H; Q {int i;
' Q2 _3 ^. o$ V8 vfor(i=1;i<=5;i++)
3 K4 q% `. R! v. x9 |+ t3 f switch(i%5) / O9 l! | h) ?/ \9 R) S+ m
{case 0:printf("* ");break; 1 d5 P2 ]$ c( m( ?- j6 U, W
case 1 :printf("#");break; 5 k1 L( _! x" U" h; |7 g
default :printf("\n"); 9 t9 Z9 r Z' V4 u- E
case 2 :printf("&");
5 F. f' E7 v# F. H) j6 h. I7 w' Z+ F }
5 W! C6 k, [) o) P# S# Y
13、**下面程序的运行结果是:
" m7 _' q# ~/ Y" l# K4 ^$ P #include
! g1 Q' B/ S- F* `% q. s main() ! Y' {3 o, M l/ P$ B
{ int x,i; 9 H6 E* R$ T- o& J1 U: q
for(j-1;i<=100;i++)
) U7 }# i' \$ X1 f1 I, n( } c {x=i; i% t# L; k3 Z9 q, K- c- G
if(++x%2==0)
( _6 C2 M' I* v+ W- p if(++x%3==0)
) }5 {9 Y; }% @; } # Y9 `" n% K! n( L" D
if(++x%7==0)
) H9 ]6 f0 k2 A4 l8 y- j- h/ R printf("%d",x);
9 D+ O W% x$ @) n3 s3 q& v' p
$ d% i, L( {* H }
" E% n/ a$ m$ V: o* J# \; ` } N" c+ L1 T9 N1 c, g; ?/ D
6 j" E0 H' k: H0 q* H* i
0 v* c4 m2 \; l5 m5 K' ]14、**下面程序的运行结果是:
9 e- h+ E$ y5 f1 d$ J1 Xmain()
{
int k,n,m;
n=10;m=1;k=1;
while(k++<=n)
m*=2;
printf("%d\n",m);
}
四、程序填空
1、***所谓水仙花数是指一个三位正整数,其各位数字的立方之和等于该正整数。例如编写程序,求得并输出全部水仙花数的个数。请填空完善程序。
6 |) Q* N; s" r" ^ #include
6 }4 v5 g. p! z0 V% X% |3 h main()
( F4 a3 ?$ t; q5 P, |) @ {
0 ?( @4 F' y- b int hun,ten,one; /*百位数、十位数、个位数*/
3 E1 j4 t* N4 { int num,count=0;2 e4 B$ F( s/ W, j& R+ O1 ~
for (num=100;_____(1)_____;num++)& ~8 P& Q+ w% } s' B
{
6 l1 g0 ], W c7 h" ~ hum=________(2)_________;
8 H3 Y) b; A1 _ ten=________(3)_________;/ T5 S( J2 t( Z' ~2 G' }6 d
one=________(4)_________;" _3 ~% N l0 ]0 R( ?2 q8 k. G
if (________(5)___________)4 @3 B3 e; Y8 c: u" u# d6 G& x
{
8 V" L1 D* L4 s( q: a printf("%5d",num);
5 E, V& O; e- _2 i9 Q/ ?8 t& ` count++;
: J# O6 g% k8 Z# D+ |- Q, P }1 J) X0 z1 C" o$ D: X
}3 S) V+ F% S. e4 l+ K- h. _
printf("\n");
. D/ e- }2 F) V5 o; T' y$ a printf("No.=%d\n",count);3 I6 L& p& Q, `4 ]& F3 i/ x
}
2、**从键盘上输入10个数,求其平均值。N6 T6 N4 f! y* O% G N
0 \) m7 T F3 L7 \( ymain()
5 \3 c8 f7 c5 q" f{int i;: H* l1 _6 p6 P. M
float f,sum;. {, U3 Y5 F7 R, _" ~: p8 i2 j4 I
for(i=1,sum=0.0;i<11;i++)
% z/ z% l' ?8 Y/ n$ a{_____(1)_____ ;, u3 {6 M0 j+ V% ]2 _ B3 }1 y
_____(2)_____; }
2 \ N9 Y# s, c0 [/ D8 f9 w: r& Qprintf(“average=%f\n”,sum/10); }
3、**以下程序的功能是:从键盘上输入若干个学生的成绩, 统计并输出最高成绩和最低成绩,当输入负数时结束输入.请填空.
4 b4 d4 a5 z6 Z. H$ Dmain() ' J) E; x$ H7 z: V
{ float x,amax,amin;
' q, V: D+ ]* @& P+ z& I+ b$ L' [scanf("%f",&x);! L4 G% K: v) r# u2 `5 `: s
amax=x; amin=x;! j7 C0 _0 d# |. G% p# n9 Z0 k, w
while(_____(1)_____ )$ s( i4 f& l# ~5 G
{ if(x>amax) amax=x;
/ r! S9 B% I" sif(_____(2)_____ ) amin=x;# P; q e( z4 ^. V
scanf("%f",&x);
7 e0 h" C$ X% y' d6 `( S: w; I6 iprintf("\namax=%f\namin=%f\n",amax,amin); *
4、***用循环输出下列形式的数字金字塔。
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif
main ( ) {
int i, j;
for (i=1; _____(1)_____ ;i++) {
for (j=i;j<=10;j++) printf(" "); /* 输出若干个空格 */
for (j=1; _____(2)_____ ;j++)printf ("%2d",j);
for (_____(3)_____ ;j>=1;j--)printf ("%2d",j);
printf ("_____(4)_____ ");
}
}
5、**下面程序的功能是将从键盘输入的一对数,由小到大排序输出。当输入一对相等数时结束循环。5 e- J; h6 j( S
#indude 6 P4 y) {9 c* O, o" I# Y2 ~) J. c2 B
main() 7 r+ n7 s- C/ b
{int a,b,t; ) Y) [+ @+ s. `1 F8 E1 c
scanf("%d%d",&a,&b); 7 s$ o( [1 v, ]. c9 t8 @
while( _____(1)_____ )
, [. D6 y' T, a2 W, y{if(a>b) & e- L# _" H( p, v9 W6 o2 A: l
{t=a;a=b;b=t;} ' G) u+ K' W+ M) p, K3 t
printf("%d,%d",a,b);
/ Z+ \( |. p5 s6 m3 {# sscahf("%d%d",&a,&b);人 7 i& N8 ]* c, V$ Q/ @' t6 w
} 0 d" O2 q, A5 @, c, C. p
: c" s9 k$ F6 G' F' z
6、**下面程序的功能是从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数n,并输出m、n中的较大者,请选择填空:
8 v; P. N! {8 N #indude "stdio.h"
" Q* n* A% X C. k! S main() ' S$ C8 s( X8 E7 W1 `8 ^+ i
{int m=0,n=0;
- c$ w# M! I5 i3 n" |& `# u char c; 18 n4 }* A- U1 ?* |; M0 j9 a0 ~ D
while(( _____(1)_____)!='\n') 0 l( g3 V) B6 e9 O
{ if(c>='A' && C<='Z') m++ ;1 @7 Z l- J# J! m9 P+ } T9 T
if(c>='a' && c<='z') n++; }
/ y3 O8 \8 y' B% Q# @6 M printf("%d\n", m
% V! |" x! G: ~$ a4 I4 [7 L/ _* H
7、*下面程序段的功能是计算1000!的末尾含有多少个零。
. ]3 G2 o* x9 E (提示:只要算出1000!中含有因数5的个数即可 )
1 a$ q& Z* y. x+ [) j# I# a' K for(k=0,i=5;i<=1000; i+=5) 4 ~7 j% G+ a# Q/ K; G
while(_____(1)____){k++; m=m/5;}
! u# F/ g- F( w! A( b* B; H( v: N/ h' g! h1 Y五、编写程序
1、 **从键盘输入20个整型数,统计其中负数个数并求所有正数的平均值。
2、*编写一个函数,重复打印给定的字符n次
3、*编一程序,输入10个数,并求出它们的和
4、*编一程序,显示如下图案
*
**
***
****
*****
5、*求出所有正整数相乘乘积为64的数对
6、**打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字的立方和就等于该数本身。例如:153是一个“水仙花数”,因为153=13+53+33。
7、**编写程序打印出以下形式的乘法九九表。
** 乘法口诀 **
(1) (2) (3) (4) (5) (6) (7) (8) (9)
(1) 1 2 3 4 5 6 7 8 9
(2) 2 4 6 8 10 12 14 16 18
(3) 3 6 9 12 15 18 21 24 27
(4) 4 8 12 16 20 24 28 32 36
(5) 5 10 15 20 25 30 35 40 45
(6) 6 12 18 24 30 36 42 48 54
(7) 7 14 21 28 35 42 49 56 63
(8) 8 16 24 32 40 48 56 64 72
(9) 9 18 27 36 45 54 63 72 81
8、 **编程实现求解下面的式子的结果; j$ D/ L' S4 E, e. _% O
s=1*2+2*3+3*4+…+20*21
9、***从键盘输入的10个整数中,找出第一个能被7整除的数。若找到,打印此数后退出循环;若未找到,打印“notexist”。
第七章数组一、填空
1、**说明char s1[]=“china”,s2[10];要将s1的值复制到s2中的正确语句是( )。
2、 **a数组定义如下 char a[3];,按照内存排列顺序,a数组中的所有元素是( )。
3、*已知 int a[]={0,1,2,3,4,5}; 它的最大下标是( )。
4、*已知 int a[5];内存开辟有( )个存储单元。
5、*在一维数组中,不同数组元素的数据类型是否可以不同( )?
6、*3行4列的二维数组,共有( )个元素。
7、**将 str定义为字符数组并初始化为“Lei”的语句是( )。
8、*系统判断字符串结束的标志是 。
二、单项选择题
1、*定义一个有 4 个元素的一维整型数组,正确的是( )
(A) float a[4] ; (B) int a[]={1,2,3,4,5} ;
(C) int a[]={1,2,3} ; (D) int a[4]={1}
2、**以下对数组的初始化正确的是( )
(A)int x[5]={0,1,2,3,4,5}; (B)int x[]={0,1,2,3,4,5};
(C)int x[5]={5*0}; (D)int x[]=(0,1,2,3,4,5);
3、**给出以下定义:
' |9 D' ~' I2 w# J- c: ]3 y- H! t% Tchar x[ ]="abcdefg";0 u2 y. q1 [) k7 K/ n; ^
char y[]={'a','b','c','d','e','f','g'};4 }8 a1 W) ?# v4 J- J! c
则正确的叙述为
0 e9 \. T) W( r! z$ \/ k& L H(A) 数组X和数组Y等价 (B)数组x和数组Y的长度相同
& i3 H. Q' \: B' r9 w# p; m(C) 数组X的长度大于数组Y的长度 (D) 数组X的长度小于数组Y的长度
4、*在c语言中,引用数组元素时,其数组下标的数据类型允许是__.
8 @2 _: t: G, ?0 S( K A)整型常量 B)整型表达式 c)整型常量或整型表达式D)任何类型的表达式
! j# V0 [% q" }3 }5、*以下对一维整型数组a的正确说明是__。
$ }5 k v d: b9 z6 Y' l) Q K% e A) int a(10); B)int n= 10,a[n]; c) int n; D) #define SIZE 10;
# F: N: I( e. `9 @0 A, @scanf("%",&J1); int a[SIZE]; $ E( S4 K. H. E- j6 ?9 o& I
int a[n];
" U& |" f- v( \7 @+ M6、*若有说明:int a[10];则对a数组元素的正确引用是__。 % t' c( H. \- N% k9 e
A)a[10] B) a[3.5] C) a[5] D) a[10-10]
/ X/ m% }( g- r7、*在C语言中,一维数组的定义方式为:,类型说说明符 数组名__。 : [% r( z- Q( P/ U8 O
A) [常量表达式] B) [整形表达式] c)[ 整型常量]或[整型表达式] D)[整型常量]
0 K, h b/ q' W) y; X4 ?5 q4 U) q3 a) Y. J 8、*以下对二维数组a的正确说明是__。
! U$ z( C: J" {9 N0 b- Q A) int a[3][]; B) floatf a(3,4); c) double a[1][4]; D) float a(3)(4);$ ]3 c+ M2 k& o$ m' B; ~
9、**若有说明:int a[3][4]; 则对a数组元素的正确引用是__。
- _) `4 s! |# { w1 K A) a[2][4] B) a[1,3] C) a[1+1][0] D) a(2)(1);% Y3 y5 F! J. ~% s, m
10、**若有说明:int a[3][4];则对a数组元素的非法引用是__。
4 S* ?. _) { e6 @) e o A) a[0][2*1] B) a[1][3] C)a[4-2][0] D)a[0][4]" "
" F# W, ]5 J0 K4 g8 w1 o% G11、**以下不能对二维数组a进行正确初始化的语句是__。
8 f# N3 c- f! u3 ^, K A) int a[2][3]={0}; B) int a[][3」={{1,2,3},{4,5,6}}; ; ?; e5 ?5 p9 n$ `
C) int a[2][4]={{1,2,3},{4,5}{6}}; D) int a[][3]={{1,0,1},{},{1,1}};
- `# x9 t: W9 R12、**若有说明: int a〔3〕「4〕={0};则下面正确的叙述是 7 ]4 H6 q: X: v) q3 A; l
A)只有元素a[0][0]可得到初值0 B)此说明语句不正确:。
& z5 t$ w9 s2 O6 @4 i C)数组a中各元素都可得到初值,但其值不一定为0。 D)数组a中每个元素均可得到初值0
0 I* L8 y( C( d& S0 ^: X) U13、***下面程序(每行程序前面的数字表示行号) x: V! y" S+ Y0 ^3 {" r/ f
1 main()
. w) ~) u5 n# Q. \( d; x 2 {
. @1 r/ V7 u" A/ L$ _* r 3 int a[3]={3*0};
+ q1 y9 V% r+ e 4 int i;
1 s9 @2 u* m# b9 _- p 5 for(i=0;i<3;i++) scanf("%d",&a);
! Y# n' d! T( q) J 6 for(i=1;i++) a[0]=a[0]+a' w( I; p7 P' J( T1 `7 y 7 printf("%d\n",a[0]); " ~ C' o# w8 B' ~/ k2 |, A" U5 Q
A)没有错误 B)第3行有错误 C)第5行有错误 D)第7行没有错误
14、***下面程序每行程序前面的数字表示行号)。 9 C' U% p$ z$ ?2 O3 @' \
1 main()
8 I% J. ~2 H( K8 L9 S# P2 { # i( q) {7 \# Q9 z7 d
3 float a[10]={0.0};
$ A! G8 L1 |" U, v( r8 j) l9 i4 int i
/ r5 ^4 V* h/ Y; B! @6 ]! f6 n5 for(i=0;i<3;i++) scanf("%d",&a[1]);
' P8 q6 F* ^' V& P% B6 for(i=0;i<10;i++) a[0]=a[0]+a; 3 G3 R( ^5 }" F& h) j
7 printf("%d\n",a[0]); ( Y8 k5 I5 ^5 k' T% @. l: J0 X0 N& H9 G
8 } - F3 C& O& N% i3 M% A# }4 S
A)没有错误 B)第3行有错误 C)第5行有错误 D)第7行有错误
15、***下面程序有错的行是
3 L% l5 E4 x2 N& A0 E! w$ o 1 main()
+ s7 D; {( B; P) Y0 S- l 2{ 0 W7 ~$ E3 C. W6 b$ t1 t
3 int a[3]={1}; 0 N+ J0 I& k( p' B: D! O0 H" T+ G
4 int i;
" v9 Q+ u/ ^7 J% V 5 scanf("%d",&a); - \) [* B, B7 H5 ` q& s
6 for(i=1;i<3;i++) a[0]=a[0]+a; 9 ~7 k" P) O; q* A+ o$ ~ p( L+ M
7 printf("a[0]=%d\n",a[0]); , c2 e1 D: C/ z( g# }3 D
8 }
; P* s/ Y [3 Q6 a! E* W A)3 B)6 C)7 D)52 i/ ?2 R) S8 W% Y
16、***下面程序(每行程序前面的数字表示行号)
6 j4 ]% r1 H$ f* j9 W+ Z/ [3 i 1 main()
1 O$ A" }! g/ h h 2 {
! p9 [) i4 ^8 ]- H3 A 3 int a[3]={0};
@8 n4 a% `9 K& h9 O% x. [' n 4 int i; : S5 N6 u1 [8 j
5 for(i=0;i<3;i++)scanf("%d",&a);
/ y+ d9 Y4 _- J3 N0 _+ `, v 6 for(i=1;i<4;i++)a[0]=a[0]+a; 4 J( H( E% C& ^+ i
7 printf("%d\n",a[0]); * p' L4 l% p: t+ a! Q& L( _
8 }' {& r+ G* ^) @, P. @& q
A)没有错误 B)第3行有错误 C)第5行有错误 D)第6行有错误 5 N0 B! u! Y: d$ `
17、**若二维数组a有m列,则计算任一元素a[j]在数组中位置的公式为
5 v. `$ v1 V6 @, }6 q(假设a[0][0]位于数组的第一个位置上。) 3 j% b( ~: y0 e& d" H' p5 r
A)i*m+j B)j*p+i。C)i*m+j-1 D)i*m+j+1
6 ^* B- @# `4 g( E6 z18、**对以下说明语句的正确理解是
: O% O7 l/ s3 L6 f( z int a[10]={6,7,8,9,10}; ; N1 t0 G7 K& v7 j5 B
A)将5个初值依次赋给a[1]至a[5] B)将5个初值依次赋给a[0]至a[4] 9 e: v! K( X$ S% O( K
C)将5个初值依次赋给a[6]至a[10] D)因为数组长度与初值的个数不相同,所以此语句不正确
2 D) F1 g1 d G: `3 K. x+ k+ ~2 u19、*以下不正确的定义语句是__.
/ T- x1 O4 l( W' r; M A) double x[5]={2.0,4,0,6.0,8.0,10.0}; B) int y[5]={0,1,3,5,7,9};
5 ^. ?5 o; Q5 B- h C) char c1[ ]={’1’,’2’,’3’,’4’,’5’}; D) char c2[ ]=}{'\x10','\xa','\x8'};& |" R4 P1 k6 A- I" f) V
20、*若有说明:int [][3]={1,2,3,4,5,6,7};则a数组第一维的大小是__. ! r0 _3 d/ n1 J1 d
A) 2 B) 3 C) 4 D)无确定值 8 d) j6 K, ~4 b
21、**若二维数组a有m列,则在a[j]前的元素个数为__. : F$ |7 h5 ~% b2 W, q
A)j*m+j B)i*m+j C)i*m+j D)i*m+j+1: T1 \, x# u3 Z
22、**定义如下变量和数组: & i% P% F& ^6 I
int k; ) u, ^ o& T- V6 p
int a[3][3]={1,2,3,4,5,6,7,8,9}; 7 ~* @" j. B, t
则下面语句的输出结果是
: y" q0 Y1 Z; ` l1 l for(k=0;k<3;k++) printf ("%d",a[k][2-k]);2 |. D) r) ^6 w6 e6 K
A) 3 5 7B)3 6 9 C) 1 5 9 D) 1 4 75 ]" K4 {. b& u3 D; L" r- T0 O
23、***若有以下程序段:
& v0 u. M. A" [+ t9 I3 Z4 |......
; q4 q. n1 o& ]1 S3 _2 l int a[]={4,0,2,3,1};i,j,t;
1 ^ U r, E/ F8 V for(i=1;i<5;i++)
" Y! {6 ~* M8 F9 ^ {t=a;j=i-1; & g5 S+ y) s! _( U- K2 Z8 k* f y3 r& `. ]
while(j>=0&&t>a[j]) ' R$ C2 l4 J$ C+ C+ Q# ?( A
{a[j+1]=a[j];j--;}
B+ V& h: E" x4 Q9 j' x3 J ......
0 j A3 \- |- z# \! q' f: H# m9 w 则该程序段的功能是 __.
/ m/ h6 M' ]/ Q, d" n9 M: r/ d A)对数组a进行插入排序(升序) B)对数组a进行插入排序(降序)
/ v' d& t& c* }1 P& B: T C)对数组a进行选择排序(升序) D)对数组a进行选择排序(降序)
2 V, ~ Q9 B1 Y1 L# `/ e) Q24、***下面程序的运行结果是__。
main()
5 {9 U4 O q% {- D: W8 z. p: ~ {int a[6」「6」,i,j;
3 A4 [. n4 c* W5 ]) }6 w for(i=1;i<6;i++) ' f7 P% w. E$ Q4 M" k
for(j=1;j<6,j++)
. h. ]: K, H: }0 B1 z- s a[j]=(i/j)*(j/i); ) R6 d7 Z! F. q) @ |& |
for(i=1;i<6;i++)
& \$ R7 p, V. ]4 X) d6 }2 K {for(j=1;j<6;j十十) 1 G: J" |. Y+ {9 T. S3 N- g
printf("%2d",a[j]);
3 M: h; b" ]! ~7 U- Y. S* x printf("\n"_);} 3 k4 [$ U2 L4 J7 [6 H
} 8 H: n) q/ Z2 P. e/ A1 o
3 d, O9 u6 p; i' G1 ?# ?5 Q
A)11111 B)00001 C)10000 D)100014 l+ @: w1 O5 q/ N0 @" w( p
11111 00010 01000 01010
4 g' y: O4 n% u7 w 11111 00100 00100 00100' E2 }9 w5 B" J; d5 X, l0 s! W5 r
11111 01000 00010 01010/ O& \0 c. P* Z
11111 10000 00001 100013 U) V+ C4 T0 v; F' {% [$ s
25、***下面程序的运行结果是 __. % w. |: M( a6 W) d" F- Q; e$ G
main() 4 x1 L4 b3 T, a. } G' o& l/ x
{int a[6],i;
4 i9 Q, y3 x* K) a$ z- G for(i=1;i<6;i++)
( x% Y. u/ N) e* a. L ] {a=9*(i-2+4*(i>3))%5;
9 _/ Y9 q: W/ U* V5 V printf("%2d",a);
9 Q( h2 T2 m' n}
' Q: q5 i: B! I' K* Y2 J3 l+ o }
7 U) p8 T; c% y! Y9 R& k. n8 @ A)40404 B)40403 C)40443 D)40440
$ c- P* C( p+ \. c E) P/ q+ _26、**对两个数组a和b进行如下初始化 & s, w2 @1 c" t: s5 K' P
char a[]="ABCDEF";
( T% a8 q# D& n+ O char b[]={’A’,’B’,’C’,’D’,’E’,’F’}; 0 \% A3 Y/ ^ ?; O
则以下叙述正确的是 __. 1 n0 g: S1 _# z& e
A) a与b数组完全相同 B) a与b长度相同 , q: g8 U6 p4 @+ f9 p
C) a和b中都存放字符串 D) a数组比b数组长度长
% j: ~8 f# P4 F( E2 ^* k, D27、**有两个字符数组a、b,则以下正确的输入格式是 __.
* Z; d4 T) }, H" j: O: z! v A) gets (a,b); B) scanf ("%s%s",a,b);
" e! h+ R. a9 A: Q1 `- | C) scanf ("%s%s",&a,&b); D) gets ("a"), gets ("b");
2 O; @* q/ S' v% q/ v' D28、*有字符数组a[80]和b[80],则正确的输出形式是__. 7 d' B& q- o. A
A) puts (a,b); B) printf ("%s,%s,a[],b[]); C) putchar(a,b); D) puts (a), puts (b);/ ?9 c5 l" i2 P; N
29、**判断字符串a和b是否相等,应当使用__. 9 Z7 T- D0 a7 E
A) if (a==b) B) if (a=b) C) if (strcpy(a,b)), D) if (strcmp(a,b))( r9 X& M. a! E) z9 V: f; ?- s' \0 P4 v5 H
30、**下面描述正确的是__.
- h5 _. P) S4 Q) S! i6 j2 @ A)两个字符串所包含的字符个数相同时,才能比较字符串
" b6 N# Z- Z6 P# l B)字符个数多的字符串比字符个数少的字符串大
$ a' b# D- N. G( R C)字符串"STOP "与STOp"相等 " @& H4 @. H* M. V- g0 M
D)字符串"hat"小于字符串"he" . c! [3 |! y/ z
31、**下述对C语言字符数组的描述中错误的是 8 D& s9 O @) m \, r% G2 D
A)字符数组可以存放字符串 / \7 t, ^# A- Z" x
B)字符数组的字符串可以整体输入、输出 6 R1 H' P6 z% R7 S1 L6 X
C)可以在赋值语句中通过赋值运算符"="对字符数组整体赋值 ) {8 p2 E& m( z0 `9 Y
D)不可以用关系运算符对字符数组中的字符串进行比较
32、**说明:int a[3][4]; 则对a数组元素的正确引用是( )。
(A)a[2][4] (B) a[1,3 ] (C) a[1+1][0] (D) a(2)(1)
33、* 以下数组定义中不正确的是( ) $ @5 a( K8 l/ c& S+ O7 c0 y
(A) int a[2][3]; (B) int b[ ][3]={0,1,2,3};
1 F" i, t; f; H; k5 |0 p3 W(C) int c[100][100]={0}; (D) int d[3][ ]={{1,2},{1,2,3},{1,2,3,4}};/ y' A: J- |- e2 p* `, r
' c! |' |1 P' Q; P/ \; ?! |2 d三、阅读程序,写出程序运行结果
1、***阅读程序,写出运行结果:
main()
{ static inta[][3]={9,7,5,3,1,2,4,6,8};
inti,j,s1=0,s2=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{if(i==j)s1=s1+a[j];
if(i+j==2) s2=s2+a[j];
}
printf("%d\n%d\n",s1,s2);
}
2、***说明下列程序的功能。
main()
{ int i,j;
floata[3][3],b[3][3],x;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%f",&x);a[j]=x;}
for(i=0;i<3;i++)
for(j=0;j<3;j++)b[j]=a[j];
for(i=0;i<3;i++)
{printf("\n");
for(j=0;j<3;j++) printf("%f ",b[j]);
}
}
3、***写出下列程序的运行结果。
main()
{ staticchar a[]={'*','*','*','*','*'};
int i,j,k;
for(i=0;i<5;i++)
{printf("\n");
for(j=0;j
for(k=0;k<5;k++) printf("%c",a[k]);
}
}
4、***说明下列程序的功能。
main()
{ int i,j;
float a[3][3],b[3][3],c[3][3],x;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%f",&x);a[j]=x;}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{scanf("%f",&x);b[j]=x;}
for(i=0;i<3;i++)
for(j=0;j<3;j++) c[j]=a[j]+b[j];
for(i=0;i<3;i++)
{printf("\n");
for(j=0;j<3;j++) printf("%f ",c[j]);
}
}
5、**下面程序的运行结果是
% _; f9 T5 @2 V2 c8 _ #indude : H0 t+ N+ r+ G( r
main() / I2 F& l }+ _! n2 S' Z
{char ch[7]={"12ab56"};
L4 U) G- c0 ~5 Q. e. e: ?0 \ int i,s=0; 4 Z+ W' s! R, S& W: T
for(i=0;ch>='0'&&ch<='9';i+=2)
4 H3 ?/ O8 _$ U8 G3 i s=10*s+ch-'0'; 3 K- C" n/ l' j$ ~( F* G. T
printf("%d\n",s); $ f5 Y5 X& _% {/ T) F
} 3 Q5 V. y7 X) {3 s* G2 B& `
+ \' [; t$ `# s8 L+ A; n4 w
6、***当运行以下程序时,从键盘输入:aa bb
. H) r3 P8 w; s0 Fcc dd
1 q/ ~4 a6 s4 n# I$ Y/ j3 f1 C8 G; y+ d4 G(表示回车),则下面程序的运行结果是 1 E4 k3 Q$ m0 e
# include
; a6 z$ C" x8 H' W9 E5 g1 p main()
/ D% s. U; t4 a9 I) `) f- ? {char a1[5],a2[5],a3[5],a4[5]; - b- u' P7 s/ `4 s
scanf("%s%s",a1,a2);
$ [: Y. S4 O: z* j" N8 N: } gets(a3); gets(a4); ; J! d, V6 L9 J6 Z5 ^
puts(a1); puts(a2);
@' U% `4 C) l! t puts(a3); puts(a4);
( t p# J- |' F" { }
7、**当运行以下程序时,从键盘输入:ab
# f+ {& ~2 [$ F/ d7 } c / A1 t: o* D+ Z. e( ]9 p
dd 3 n' p+ o9 a7 N/ A
(表示回车),则下面程序的运行结果是 : m5 N+ Z' I, f9 a' U' h5 @: e% w
#include % W( U7 w5 ]2 g
#define N 6 1 R! t6 A! r- n) Q3 ]
main()
2 n' ?. C S9 j! U3 _# N5 n/ j( E { char c[N]; 3 H* \6 k5 h: B
int i=0;
* R( x( H" v' C: `1 @7 f4 Q for (;i
2 V7 N5 P7 d! c7 E for(i=0; i
} " T2 f$ Q1 Z( r) F6 n* g
4 u7 j3 P5 } ]. c' v. X) r5 D x
8、**当运行以下程序时,从键盘输入:AhaMA Aha(
; z+ V; J$ X3 X6 { 则下面程序的运行结果是 . g) ?8 J/ G* R5 N6 B, Q& e9 O$ ^
#include "stdio.h" - \6 H7 R4 Y; A' X7 `- ^4 q5 C: F* [2 }
main() 6 k7 r- W( [" _; c8 @2 Q' l
{char s[80],c='a';
5 W& O& w5 b+ n* `' z int i=0;
, ]4 U! V8 l/ c/ t scanf("%s",s); 2 k I- ^$ ^) e2 b" @. ]3 o
while(s!='\0') 7 o. o# x+ Q$ E7 H' d1 k
{if(s==c) s=s-32; 5 {2 O) X) p6 \( n
else if(s==c-32) s=s+32;
9 e% N$ H: @5 T+ J* p i++; 9 _5 q8 D$ E1 n1 K
} % m W: \) I) o/ B- ^+ H% I
puts(s); # v# D b1 Z2 w' y4 S+ O) `
)
4 B/ G6 S1 M* b' w
; F6 S% b8 X9 W U1 c+ R+ `
9、**下面程序的运行结果是。 5 f% ^4 x) ^' s6 Q. d
#include 7 u0 @' b' k; U- @9 C! G/ q
#inc1ude 7 ]1 B% E1 N- N$ d& r2 [
main() 9 i6 `( S# ]* B$ r
{char a[80」="AB",b[80]="LMNP";3 N3 z* H0 x6 i" e8 n
int i=0;
$ k: j7 p- F g6 D. O4 ^ strcat(a,b);
5 c2 g5 L, H3 S1 t0 P' A+ ` whi1e(a[i++]!='\0')b=a; ' ]2 R4 @9 J4 S) s9 D6 z* m
puts(b); $ Q# l/ J6 C q# i# `4 d* k+ C
} 2 @- ]: E' Z) Z
1 c+ u/ {5 H/ \
10、**下面程序的运行结果是 - [: l4 w m0 b7 _
#include ) V5 U9 j& P, B j) U2 E
main() ; U# `- W# l9 V
{
9 r/ x0 `. B$ tchar str[]="SSSWLIA",c; 4 ~: X' v" }% f$ `7 E1 \* r! f
int k; ) }3 s& [" z1 M }' X" r
for(k=2;(c=str[k]!='\0';k++)
$ f- R: @1 v3 n{switch©
: K3 g1 T/ F; ~1 ^{case 'I':++k;break; t) A& a2 T Y6 D
case 'l':continue; 1 j9 J# g# Q. V" A% F9 a1 A
default:putchar©;continue;
( S; X2 y* P# _" R o$ j} . J/ A7 [& i8 q# ?
putchar('*'); ' d4 N( |7 X, s" L
} ! H a. T: i4 O/ `" {4 x
}
' {/ m0 }7 a3 K
& k# B0 j4 G* ]/ ?1 r3 H0 y( H
11、**下面程序的运行结果是
" S/ M! s9 U8 @9 l" A; ? #include
`. P; n3 M# Amain()
4 R) M# v4 L/ i{char a[]="morming",t; , l0 V- q/ }% x2 _+ B/ \+ Y; V0 ]$ t
int i,j=0;
) [8 y& f: ^7 x0 }6 U. Rfor(i=1;i<7;i++) if(a[j]
t=a[j];a[j]=a[7]; 6 \8 h4 W& l% A3 ^& ]
a[7]=a[j];puts(a);
: F2 X, w/ a6 F2 u3 N" W- s# C. |} ; x5 s3 ?) d7 N; y; V% ~. R. V/ B' p
/ u: j7 ~! I8 J' A
四、程序填空
1、***下面程序将按如下形式输出杨辉三角形。
1
11
121
1331
14641
#define N 5
main()
{int i,j,a[N][N];char space=’ ’;
for(i=0;i
{ =1; =1;}
for(i=2;i
for(j=1;;j++)
a[j]=+a[i-1][j];
for(i=0;i
{for(j=0;j<4-i;j++)
printf(“%c ”,space);
for(j=0;;j++)
printf("%4d",a[j]);
printf("\n");}
}
2、**函数fun的功能是使一个字符串按逆序存放,请填空Y9 E/ O: h& X" G' \% E
void fun (char str[])y- g4 B/ P8 \) _, c# e8 L
{ char m; int i,j;5 X% {8 ]7 v, G( K0 o) c* X1 R
for(i=0,j=strlen(str);i< (1);i++,j--): n' i; {& C( p
{ m=(2);+ `, e' M" A) }! X
str= (3);
. }% m3 t. y. H! b8 ` str[j-1]=m; 9 M% N: Z" }. p) E! ]8 X$ y p
}" R9 z& H8 }+ d' Y D( U# p
printf("%s\n",str);, v7 U6 t2 s3 o+ U. w
}
0 w2 q8 m' A) D; i; I" p9 O5 t6 x$ |3、***以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdef和abceef,则输出为-1。请填空。
; l' F$ C% L: A: g$ @ #include
8 x" [* c. A$ _2 P$ ]$ S main()
+ Q5 F2 Q: b' t/ t6 B { char str[100],str2[100],c;( c% W2 E* I/ I' x
int i,s;3 G& F0 x, S5 H6 Q' K
printf("\n input string1:\n"); gest(str1);9 A! h/ d. C$ H& H
printf("\n input string2:\n"); gest(str2);' m3 C; D- X7 n+ a5 \
i=0;+ c/ S9 l; c$ C9 `
while((strl==str2&&(str1!= (4)))
7 n& K; x/ j3 z0 z# u9 X i++;
, J/ P; B" g: T$ h0 @6 \6 l s= (5);
* z H C5 M8 h; t0 Q1 _ k printf("%d\n",s);4 T, u( S1 @1 @0 ]8 @% u' p; R1 [; L
- u: ]' o8 Y+ p4 D; |6 O3 s1 ?- w
4、**下面程序段是输出两个字符串中对应字符相等的字符。请选择填空。
9 T7 K0 r- u; R3 |( j6 j" j p3 kchar x[]="programming";
: J( S+ ~2 K" |2 r2 cchar y[]="Fortran"; : Z& U- C$ I. t) ?
int i=0; : }) l6 V/ `! y0 R. _9 S
while (x!='\0',&& y!'\0') ( Y! Q: m& v9 _& a
{if (x==y) printf ("%c"); "(1)); 2 ~. A2 q; {9 t( p' ^3 d' H; W
else (2);} / `7 o; D r9 |. q. X
} 2 F9 ]0 ^5 F! _* `6 g
5、**有已排好序的字符串a,下面的程序是将字符串s中的每个字符按a中元素 的规律插入到a中。请选择填空。 , R6 P, V8 U0 E8 ~
#indude ) @ U( Y6 @7 {. v/ t" s* Q
main()
3 [4 Y' q4 v, {1 c6 P$ h. o {char a[20]="cehiknqtw"; 3 u* V% V- I' M
char s[]="fbla";
) n" _* f1 S- ~5 V! P$ w, l int i,k,j; # k" R/ } \) X. h9 B7 {: ^( H: e9 V
for(k=0;s[k]!='\0';k++)
# k0 v1 N) ~1 n$ L- K {j=0;
) |' ]6 l3 }/ c6 Y7 h( \ while(s[k]>=a[j]&&a[j]!='\0')(1); 7 w6 n u: {. G' S5 S
for(i=str1en(a);i>=j;i--) (2); A0 l: J8 M/ A
a[j]=s[k]; / P" {/ u; F9 w: s
}
' J1 U; m1 Z l% N. v1 O* U$ d5 w puts(a);
; t" Y7 Y: l N( ]0 F } # T5 _, g: W' W
- ], T1 ?* Z& r3 C$ |8 i8 y
6、*下面程序的功能是将字符串5中所有的字符c删除。请选择填空。
+ C9 M, p7 c7 Z" t$ R4 d. Y1 f #include ! _; o5 b! G4 l0 I6 q; N
main() 4 c m5 o6 W) ^* r4 I0 A1 W; _: N
{char s[80];
+ A/ Q' l9 ~: t8 Z+ r" xint i,j; : J7 r6 r3 ?/ Z$ Q
gets(s);
+ ]" v! P8 Z2 L0 G! H- w% u% \ for(i=j=0;s!='\0';i++) ' Z" Z! i5 u$ T4 s5 A: C
if(s!='c')(1) 1 n: }4 t- c1 g5 \( e
puts(s);
. R6 B" _7 u, h5 V6 p$ z }
0 |* Q0 ]7 P0 _% U; v2 v7、**下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间 用空格分隔。请选择填空。 - S4 s$ E J' O% h& D
#indude : c, f, h/ J% k
main() 8 w; X, o& [( Y; k9 o! g% d2 M
{char s[80」,c1,c2='';
! W% K- ?8 W. X5 v) p int i=0,num=0;
3 k6 K0 j+ N7 _) L! {% i# o gets(s);
: t; q/ U5 g: u/ b while(s!='\0') # m2 a: \0 O" O6 A) l. h
{c1=s;
: Q# m% m- U1 [7 a Sif(i==0) c2=' '; . s6 l# C9 ?# v5 c* b) l
else c2=s[i-1]; 5 s% L* u) z; t( `
if((1)) num++; ' _ b: H! ^) d7 D. [
i++; ! H4 Q' x$ P% K& Z- n, [8 g j
)
# D- W; ^& d( i9 {( Z U$ H# Y printf("There are %d words.\n",num);
& T% z3 P* U) l0 C) B& P5 b }
8 I( y4 T0 I! X- n1 d8 Y1 k 9 H$ {* \1 X, o* j4 {5 h
7 C( y$ D& X2 o1 L }3 g5 K# g2 z
8、**下面程序是用冒泡法对10个数进行从小到大排序的程序。
main( )
{ int ,i,j,temp;
printf("请输入10个整数:\n");
for(i=0;i<10;i++)
scanf("%d",);
for(i=1;i<10;i++)
for(j=0;;j++)
if(a[j] a[j+1])
{ temp=a[j];; a[j+1]=temp;}
printf("\n排好序的10个整数为:\n");
for(i=0;i<10;i++)
printf("%5d",a);
}
9、***编写程序,实现:将自然数1、2、3、···、25以file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg方向依此填入二维数组a(5行5列)并按照矩阵形式输出结果。9 l8 L$ i* g$ x) F" m8 l
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg! H0 n! X9 k6 }
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 11 7 4 2 1& \& r0 [$ k. c" |
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 16 12 8 5 3% b8 r y, p# A' C
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 20 17 13 9 6
0 [ `" g! c) P' ?7 O* Q$ S/ ~ file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 23 21 18 14 10' r/ b! b2 }0 J; o7 Z Q
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 25 24 22 19 15
% J( ?- y! `9 v; m. N3 m0 H 请填空完善程序。# f5 ^( i0 y. I
#include
6 H# Y% J v# w9 \; X #define N 52 N8 d$ X8 }3 \* y+ a7 s* T
main()
s2 K* q5 \* u, V4 S5 \ {8 \6 b. E$ a& V7 v( E9 Q
int i,j,k;+ r+ I9 ?( V9 s) O/ X K
int a[N][N];9 h5 \4 U) J* y2 U& j5 i4 ]
k=1;
- a* j/ f+ |1 A# j. z3 W for (i=N-1;i>=0;i--)
, N7 Q* }' j. g c9 B; l for (j=0;j
9 \& K: g( h) G5 b' P% f( x {
# n* u, ]3 N& y$ H" v* H3 F! g! S a[j][i+j]=k;
7 o' V. a- W( A! @ k++;
; S! U- u) N# K2 _9 O# z! o0 R }
" v% J$ f: p: Z for (i=1;i<=N-1;i++)4 r( [, `( p4 q V$ s2 W
for(j=0;j<______>
" p) R4 E+ Q5 }5 Q" j {# O8 b8 I, Q2 F$ v5 K' |! D1 w# Z
__________(2)_________=k;
8 {' C F- ?: H, t5 f ___________(3)__________;
, b7 V( j( v' P# I }* H! A+ g6 P+ n) S$ d0 ~' g/ O& C! ]
for (i=0;i
{( f; A3 i. R0 m7 g0 Z
for(j=0;j
printf("%4d",______(4)________);
6 U" M. A" c2 Q4 D6 J ____________(5)___________;T- p8 q) G% O5 I) ~
}
: d+ V& Y* C. M+ s6 ]8 ^ }
五、编写程序
1、**检测某一给定字符串的长度(字符数),不包括结束符’\0’。
答案:
#include
main()
{
staticchar str[]={"happy"};
inti;
i=0;
while(str!='\0')
i++;
printf("thelength of string is %d",i);
}
2、**求二维数组A[3][4]中最大元素值。
3、 ***编一过程判定s字符串是否为一个Palindrome,所谓Palindrome是指其从正反两个方向看都是一样的,如“madam”。
4、 ***已知一个一维数组a[11]中有10个数,求出其中前n个数的和并放入a[10]中。其中n由键盘输入。
5、**编程序,输入单精度型一维数组a[10],计算并输出a数组中所有元素的平均值。
6、**编程序,输入10个整数存入一维数组,再按逆序重新存放后再输出。
7、**编程序,输入两个字符串(<40个字符),连接后输出(不准用系统函数)。
8、***编程序,按下列公式计算s的值(其中x1、x2、…、xn由键盘输入):
s=(x1-x0)2+(x2-x0)2+.....+(xn-x0)2 (其中x0是x1、x2、…、xn的平均值)
#include
#define N 10
main()
{int i;
float s=0,x[N+1];
x[0]=0;
for(i=1;i<=N;i++)
{scanf("%f",&x);x[0]=x[0]+x;}
x[0]=x[0]/N;
for(i=1;i<=N;i++) s=s+(x-x[0])*(x-x[0]);
printf("%f",s);
}
9、***输入一个3×5的整数矩阵(假设所有的数据互不相同),输出其中最大值、最小值和它们的下标。
10、***设某班50名学生的三科成绩表如下:
课程一 课程二 课程三
… … …
试编一个程序,输入这50个学生的三科成绩,计算并输出每科成绩的平均分。
11、**编一个程序,输入一个短整型数据,输出每位数字,其间用逗号分隔。例如输入整数为2345,则输出应为:2,3,4,5。
第八章函数一、填空
1、*若用数组名作为函数调用的实参,则传递给形参的是( )。
2、*可执行的c语言程序系由一个或多个( )组成。
3、**C语言程序是函数的集合,是功能相对独立完整的程序段。C语言函数可分为 ( ),( )和空函数.
4、**程序可以通过改变局部变量的存储类型来改变变量的生存期,变量的存储类型有四种,自动的,( ), ( )和寄存器的
5、**函数调用自身时,就形成了递归调用。递归调用有两种( )和( )。二、单项选择题
1、*在C程序中,若对函数类型未加说明,则函数的隐含类型为( )。
(A)int (B)double (C)void (D)char
2、*当调用函数时,实参是一个数组名,则向函数传送的是( ).
(A) 数组的长度 (B) 数组的首地址
(C)数组每一个元素的地址 (D)数组每个元素中的值
3、**C语言规定,程序中各函数之间
+ l1 h1 v- A" l6 w9 S(A) 既允许直接递归调用也允许间接递归调用 (B) 不允许直接递归调用也不允许间接递归调用
: z [) F- s8 o+ [- s- q p* g2 }(C) 允许直接递归调用不允许间接递归调用 (D) 不允许直接递归调用允许间接递归调用
5、 **以下叙述中不正确的是( )。
(A)在不同的函数中可以使用相同名字的变量
(B)函数中的形式参数是局部变量
(C)在一个函数内定义的变量只在本函数范围内有效
(D)在一个函数内的复合语句中定义的变量在本函数范围内有效
6、**以下正确的说法是( ).
建立函数的目的之一是
a)提高程序的执行效率 b)提高程序的可读性 c)减少程序的篇幅 d)减少程序文件所占内存
7、**以下正确的函数定义形式是( ).
a)double fun(int x,inty) b)double fun(int x; int y)
c)double fun(int x, inty); d)double fun(int x,y);
8、**C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式为( ).
A)地址传递 B)单向值传递
C)由实参传给形参,再由形参传回给实参 D)由用户指定传递方式
9、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是( ).
a)float b)int c)long d)double
10、**已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array
的错误定义方式为( ).
int a[3][4];
f(a);
a)f(int array[][6]) b)f(int array[3][]) c)f(int array[][4]) d)f(int array[2][5])
11、***以下程序的正确运行结果是( ).
#include
void num()
{extern int x,y;inta=15,b=10;
x=a-b;
y=a+b;
}
int x,y;
main()
{
int a=7,b=5;
x=a+b;
y=a-b;
num();
printf("%d,%d\n",x,y);
}
a)12,2 b)不确定 c)5,25 d)1,12三、阅读程序,写出程序运行结果
1、**int x,y
num()
{int x,y;
int a=10,b=5;
x=a+b;y=a-b;
}
main()
{int a=8,b=3;
x=a-b;y=a+b;
num();
printf("%d,%d",x,y)
}
2、**longfib(int n)
{ if(n>2)return(fib(n-1)+fib(n-2));
else return(2);
}
main0
{ printf(“%d\n”,fib(3));
}
3、**int a, b;
void fun()
{ a=100; b=200; }
main()
{ int a=5, b=7;
fun();
printf("%d%d \n", a,b);
}
4、**以下程序的运行结果是
#include
main()
{int a=1,b=2,c;
c=max(a,b);
printf("max is%d\n",c);
}
max(int x,int y)
{int z;
z=(x>y)?x:y;
return(z);
}
5、**以下程序的运行结果是
int a=5;int b=7;
main()
{ int a=4,b=5,c;
c=plus(a,b);
printf("A+B=%d\n",c);
}
plus(int x,int y)
{int z;
z=x+y;
return (x);
}
6、***以下程序的运行结果是
main()
{incx();
incy();
incx();
incy();
incx();
incy();
}
incx()
{
int x=0;
printf("x=%d\t",++x);
}
incy()
{static int y=0;
printf("\ny=%d\n",++y);
}四、程序填空
1、***函数gongyu的作用是求整数num1和num2的最大公约数,并返回该值。请填空。
gongyu(int num1,int num2)
{int temp,a,b;
if(__1___)
{temp=num1;num1=num2; __2___;}
a=num1;b=num2;
while(_3___)
{temp=a%b;a=b;b=temp;}
__1___;
}
五、编写程序
1、 ***编写程序,在主函数中输入10个数,在函数invert中将10个数按反序存放,并在主函数中输出结果。
2、 **已有变量定义和函数调用语句:int x=57 ;isprime(x); 函数isprime( ) 用来判断一个整形数a是否为素数,若是素数,函数返回1,否则返回0。请编写isprime函数。
3、** a是一个2X4的整型数组,且各元素均已赋值。函数max_value可求出其中的最大的元素值max,并将此值返回主调函数。今有函数调用语句max_value(int arr[][4])
4、***编写函数,求最大公约数和最小公倍数
第九章一、填空
1、**C语言提供( )预处理的功能,有利于程序的可移植性,增加程序的灵活性,其命令以符号( )开头。
2、*使用宏名代替一个( ),可以减少程序中重复书写某些字符串的工作量,提高程序的可读性和可移植性。
3、*在预处理宏定义时,不做( )检查,只有在编译已被宏展开后的源程序时才报错。
4、*宏名的有效范围为( )之后到本源文件结束。
5、**可以用( )命令终止宏定义的作用域。
6、*带参数的宏定义在展开时,不仅进行字符串的替换,还要进行( )的替换。
7、*宏名不是变量,故无类型,其参数也无类型。所以在宏定义时,字符串可以是( )类型的数据。,
8、*宏替换不占运行时间,只占( )时间。
9、* * “文件包含”处理是指将另外的文件包含到( )之中,它可以减少程序设计人员的重复劳动,通过( )命令来实现。
10、*被包含文件与其所在的源文件,在预编译后成为( )个文件。
11、**一般情况下,源程序中所有的行都参加编译。如果希望对其中一部分内容只在满足一定条件时才进行编译,这就是( )。二、单项选择题
1、**有以下程序
#include
#define f(x) (x*x)
void main()
{
int i1, i2;
i1=f(8)/f(4) ;
i2=f(4+4)/f(2+2);
printf("%d,%d\n",i1,i2);
}
程序运行后的输出结果是______。
A)64, 28 B)4, 4 C)4, 3 D)64, 64
2、**有以下程序
#include
#define P 3
void F(int x){return(P*x*x);}
void main()
{
printf("%d\n",F(3+5));
}
程序运行后的输出结果是______。
A)192 B)29 C)25 D)编译出错
3、**以下叙述中正确的是______。
A)预处理命令行必须位于源文件的开头
B)在源文件的一行上可以有多条预处理命令
C)宏名必须用大写字母表示
D)宏替换不占用程序的运行时间
4、 *在宏定义#define PI 3.14中,宏名PI代替一个。
A) 单精度数 B)双精度数 C) 常量 D)字符串
5、 * 以下在任何情况下计算平方数时都不会引起二义性的宏定义是。
A) #definePOWER(x) x*x B) #definePOWER(x) (x)*(x)
C) #definePOWER(x) (x*x) D) #definePOWER(x) ((x)*(x))
6、**下面程序的运行结果是。
#include
#define ADD(x) x+x
void main()
{
intm=1,n=2,k=4;
intsum=ADD(m+n)*k;
printf("sum=%d",sum);
}
A) sum=9 B) sum=10 C) sum=12 D) sum=24
7、 ***若有以下宏定义
#include
#defineN 2
#defineY(n) ((N+1)*n)
voidmain()
{
int z;
z=2*(N+Y(4));
printf("%d\n",z);
}
A) 28 B) 24 C) 38 D) 26
8、**执行下面的程序后,a的值是。
#include
#define SQR(X) X*X
void main( )
{
inta=10,k=2,m=1;
a/=SQR(k+m);
printf("%d\n",a);
}
A)10 B)2 C)9 D)0
9、 ** # define能做简单的代替,用宏代替计算多项式5*x*x+4*x+3之值的函数f( )正确的定义是。
(A)#define f(x) 5*x*x+4*x+3 (B)#define f 5*x*x+4*x+3
(C)#define f(x) (5*(x)*(x)+4*(x)+3) (D)#define (5*x*x+4*x+3) f(x)
10、**设有以下宏定义: , Q$ h, C! K* W3 o6 {
#define N 3: q/ X, a8 }) x' J
#define Y(n) ( (N+1)*n), z7 J# X$ ^7 F. t/ p% j5 b9 P
则执行语句:z=2* (N+Y(5+1));后,z的值为- J# i9 F; C$ g
(A) 出错 (B)42 (C) 48 (D) 54
7 z( l6 w5 }( W" U, a8 x% ~
11、**已知宏定义 #define SQ(x) x*x,执行语句printf("%d",10/SQ(3));后的输出结果是____。
A) 1 B) 3 C)9 D) 10三、阅读程序,写出程序运行结果
1、**main()
{ int a[]={1,3,5,2,7};
int b[]={5,3,9,4,6};
int c[5], i;
for(i=0; i<5; i++)
{c=a*b;
printf(“%d ”, c);
}
}
2、**#define M(x,y,z)x*y+z
main()
{ int a=1,b=2, c=3;
printf("%d\n", M(a+b,b+c, c+a));
}
第十章指针一、填空
1、*指针变量是把内存中另一个数据的( )作为其值的变量。
2、* 能够直接赋值给指针变量的整数是( )。
3、*** 如果程序中已有定义:int k;
1) 定义一个指向变量k的指针变量p的语句是( )。
2) 通过指针变量,将数值6赋值给k的语句是( )。
3) 定义一个可以指向指针变量p的变量pp的语句是( )。
4、 **当定义某函数时,有一个形参被说明成int *类型,那么可以与之结合的实参类型可以是 ( )、 ( ) 等。
5、假设有语句j=3,jp=&j;则JP的值为( ),*JP的值为( )。
6、设jp是指向变量j的指针变量,则语句*jp=3和语句j=3;的作用是相同的即*代表变量j。此说法正确吗?()。
7、运算符&、*、++、--的优先级别相同,但按自右而左方向结合.故表达式*p++的值和表达式(*p)++的值是()。表达式*++p和++*P的作用是()。
8、指针变量可以作为函数的参数,其作用是传递或接受一个变量的()。
9、可以通过指向数组的指针变量来访问一个数组元素且可司以带下标,所以p
*(p+i)是等价的、此说法正确吗?()
10、定义P为指向整型数据的指针变量的指针变量的语句为()。
11、设p为指针数组.它指向包含n个整形数据元素的一维数组,则定义语句为()
语句int *p(){};表示函数名为(),函数返回值为()
12、语句int (*)p();表示p为指向()的指针,函数返回值为()
13、在C程序中有两种方法实现一个字符串,一是(),二是()。
14、char *string=”Hello!”;中的字符串是按()处理的,并将()赋值给字符指针变量string
15、可以通过字符数组名或()对一个字符串进行整体的输入输出
16、一个函数在编译时被分配一个地址,这个入口地址被称为函数的()
17、函数的调用可以通过函数名调用,也可以通过函数()调用。
18、一个函数可以返回一个指针型的数据。则在函数定义语句中,函数名前面要加一个()符号。
二、单项选择题
1、**设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是
A)*p=*q; B)p=q; C)*p=&n1; D)p=*q;
2、**若有定义:int x=0, *p=&x;,则语句printf("%d\n",*p);的输出结果是
A)随机值 B)0 C)x的地址 D)p的地址
3、*以下定义语句中正确的是
A) chara='A'b='B'; B)float a=b=10.0; C) int a=10,*b=&a; D)float *a,b=&a;
4、**有以下程序
main()
{ inta=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=p;p=q;q=r;
printf("%d,%d,%d,%d\n",*p,*q,a,b);
}
程序运行后的输出结果是
A)8,7,8,7 B)7,8,7,8 C) 8,7,7,8 D) 7,8,8,7
5、*设有定义:inta,*pa=&a;以下scanf语句中能正确为变量a读入数据的是
A)scanf(“%d”,pA); B)scanf(“%d”,A) ;
C)scanf(“%d”,&pA); D)scanf(“%d”,*pA) ;
6、 **设有定义:intn=0,*p=&n,**q=&p;则以下选项中,正确的赋值语句是
A) p=1; B) *q=2; C) q=p; D) *p=5;
7、 **有以下程序
void fun(char *a, char *b)
{ a=b; (*a)++; }
main ()
{ char c1="A", c2="a", *p1,*p2;
p1=&c1; p2=&c2; fun(p1,p2);
printf(“&c&c\n”,c1,c2);
}
程序运行后的输出结果是
A) Ab B) aa C) Aa D) Bb
8、**若程序中已包含头文件stdio.h, 以下选项中,正确运用指针变量的程序段是
A)t *i=NULL; B)float *f=NULL;
scanf("&d",f); *f=10.5;
C)char t="m", *c=&t; D) long *L;
*c=&t; L=‘\0’;
9、* 有以下程序
#inc1ude
main()
{ printf("%d\n", NULL); }
程序运行后的输出结果是
A)0 B) 1 C)-1 D) NULL没定义,出错
10、*已定义以下函数
fun (int *p)
{ return *p: }
该函数的返回值是
A) 不确定的值 B) 形参p中存放的值
C) 形参p所指存储单元中的值 D) 形参p的地址值
11、 **下列函数定义中,会出现编译错误的是
A) max(int x, int y,int *z) B) int max(int x,y)
{*z=x>y ? x:y; } int z ;
z=x>y ? x:y;
return z ;
}
C) max (int x,int y) D)int max(int x,int y)
{ int z; { return(x>y?x:y) ; }
z=x>y?x:y; return(z);
}
12、**有以下程序段
main()
{ int a=5, *b, **c;
c=&b; b=&a;
……
}
程序在执行了c=&b:b=&a;语句后,表达式:**c的值是
A) 变量a的地址 B) 变量b中的值 C) 变量a中的值 D) 变量b的地址
13、**有以下程序
main()
{ chara,b,c,*d;
a=’\’; b=‘\xbc’;
c=‘\0xab’; d="\017";
print("%c%c%c\n",a,b,c,*d);
}
编译时出现错误,以下叙述中正确的是
A) 程序中只有a=’\’;语句不正确 B) b=‘\xbc’;语句不正确
C)d="\0127";语句不正确 D) a=’\’;和c=‘\0xab’;语句都不正确
14、**若有以下定义和语句
#include
inta=4,b=3,*p,*q,*w;
p=&a; q=&b; w=q; q=NULL;
则以下选项中错误的语句是
A)*q=0; B)w=p; C)*p=a; D)*p=*w;
15、***有以下程序
int *f(int*x,int *y)
{ if(*x
return x;
else
return y;
}
main()
{ inta=7,b=8,*p,*q,*r};
}
执行后输出结果是
A)7,8,8 B) 7,8,7 C)8,7,7 D)8,7,8
16、 **若有说明:intn=2,*p=&n,*q=p;,则以下非法的赋值语句是
A)p=q; B)*p=*q; C)n=*q; D) p=n;
17、**有以下程序
void fun(char*c,int d)
{ *c=*c+1;d=d+1;
printf(“%c,%c,”,*c,d);
}
main()
{ char a=’A’,b=’a’;
fun(&b,a); printf(“%c,%c\n”,a,b);
}
程序运行后的输出结果是
A)B,a,B,a B) a,B,a,B C) A,b,A,b D) b,B,A,b
18、**若有说明语句:int a,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
A)scanf("%d%d%d",&a,&b,d); B) scanf("%d%d%d",&a,&b,&d);
C)scanf("%d%d%d",a,b,d); D) scanf("%d%d%d",a,b,*d);
19、 **若定义:inta=511,*b=&a;, 则printf("%d\n",*b);的输出结果为
A) 无确定值 B) a的地址 C) 512 D) 511
20、 *若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是
A)i=*p; B) p*=*&j; C) i=&j; D)i=**p;
21、 **下列程序段的输出结果是
A) 2 14 3 B) 1 21 2 C) 1 23 4 D) 2 11 2
void fun(int *x, int *y)
{ printf(“%d %d”, *x, *y);*x=3; *y=4;}
main()
{ int x=1,y=2;
fun(&y,&x);
printf(“%d %d”,x, y);
}
22、 **下列程序的运行结果是
A)6 3 B)3 6 C) 编译出错 D) 0 0
void fun(int *a, int *b)
{ int *k;
k=a; a=b;b=k;
}
main()
{ int a=3, b=6, *x=&a, *y=&b;
fun(x,y);
printf(“%d %d”, a, b);
}
23、 *有如下程序段
int *p,a=10,b=1
p=&a; a=*p+b;
执行该程序段后,a的值为
A)12 B) 11 C)10 D) 编译出错
24、 **有以下函数
char fun(char *p)
{ return p; }
该函数的返回值是
A) 无确切的值 B) 形参p中存放的地址值
B) 一个临时存储单元的地址 D) 形参p自身的地址值
25、** 请选出正确的程序段
A)int *p; B)int *s, k;
scanf("%d",p); *s=100;
… …
C)int *s, k; D)int *s, k;
char*p, c; char *p, e;
s=&k; s=&k;
p=&c; p=&c;
*p='a'; s=p;
… *s=1;
…
26、 *若有以下定义和语句:
double r=99,*p=&r;
*p=r;
则以下正确的叙述是
A) 以下两处的*p含义相同,都说明给指针变量p赋值
B) 在"double r=99, *p=&r;"中,把r的地址赋值给了p所指的存储单元
C) 语句"*p=r;"把变量r的值赋给指针变量p
D) 语句"*p=r;"取变量r的值放回r中
27、 *以下程序运行后,a的值是
A)4 B) 1 C)0 D) 运行时出错,a无定值
main()
{ int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
printf("%d\n",a);
C }
28、 **有以下程序
int fun(int x,int y,int *cp,int *dp)
{ *cp=x+y; *dp=x-y; }
main()
{ int a, b, c, d;
a=30; b=50;
fun(a,b,&c,&d);
printf("%d,%d\n",c, d);
}
输出结果是
A)50,30 B) 30,J50 C)80,-20 D)80,20
29、 **若有定义和语句:
int**pp,*p,a=10,b=20;
pp=&p;p=&a;p=&b;printf("%d\n",*p,**pp);
则输出结果是:
A)10,20 B)10,10 C)20,10 D)20,20
30、 ***以下程序的输出结果是
#include
subl(char a,char b) {char c; c=a;a=b;b=c;}
sub2(char*a,char b) {char c;c=*a;*a=b;b=c;}
sub3(char*a,char*b) {char c;c=*a;*a=*b;*b=c;} { char a,b;
a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);
a='A';b='B';sub2(&a,b);putchar(a);prtchar(b);
a='A';b='B';sub1(a,b);putchar(a);putchar(b);
}A
A)BABBAB B)ABBBBA C)BABABA D)BAABBA
31、* 若有说明:inti,j=7,*p=&i;,则与i=j;等价的语句是
A) I=*P; B)*P=*&J; C)i=&j; D) i=**p;
32、 **要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确招待此功能的函数是
A)funa(int*x,int *y) B) funb(intx,int y)
{int *p; {int t;
*p=*x;*x=*y;*y=*p;} t=x;x=y;y=t;}
C) func(int*x,int *y) D) fund(intx,int y)
{*x=*y;*y=*x;} {*x=*x+*y; *y=*x-*y; *x=*x-*y; }三、阅读程序,写出程序运行结果
1、 **有以下程序
void f( int y,int *x)
{y=y+*x; *x=*x+y;}
main( )
{ int x=2,y=4;
f(y,&x);
printf(“%d %d\n”,x,y);
}
执行后输出的结果是( )。
2、 **下面程序的运行结果是。
void swap(int *a,int *b)
{ int *t;
t=a; a=b; b=t;
}
main()
{ int x=3,y=5,*p=&x,*q=&y;
swap(p,q);
printf(“%d%d\n”,*p,*q);
}
3、**设有以下程序:
main()
{ int a, b, k=4, m=6, *p1=&k, *p2=&m;
a=pl==&m;
b=(*p1)/(*p2)+7;
printf(“a=%d\n”,a);
printf(“b=%d\n”,b);
}
4、**下列程序的输出结果是 。
void fun(int *n)
{ while( (*n)--);
printf(“%d”,++(*n));
}
main()
{ int a=100;
fun(&a);
}
5、**下列程序的输出结果是
main()
~! `. R* i: R( y8 b{
6 |* Y' e. f U1 B) X) w4 D: Bchar *p,*q;
4 B0 {) i: Q s: vchar str[]="Hello,World\n";
9 @( ]. g! P y& ]' A& e6 Lq = p = str;
1 R; I+ x$ B u8 r& s/ s& _p++;
4 x3 I5 M/ e9 ^1 Cprintf(q);
- g+ _ [) V. U) ]printf(p);
1 i9 w8 w Q s) T% w4 O}
7 }/ k/ d6 L, X5 V4 T; E3 q
- p5 ?: ~' R) A$ U, g( d! |
6、**下*列程序的输出结果是
main()I2 [# z" i- t0 {/ Z
{
: x4 U( N" N) {( M# @+ Ishort ar[11]={1,2,3,4,5,6,7,8,9,0,11};8 ? V( U8 d2 A& L. t8 J
short* par=&ar[1];
% V5 _( I4 S* i6 f+ x6 t0 Jint i;3 E9 R% q% f2 l& h: Z* {7 q1 y, _* c
for(i=0; i<10; i++)
! ~: `+ S2 K1 y7 ]4 z& R: g{6 M* P+ ~8 r( @) ~ w
printf("%-5hd%-5hd%-5hd", ar, par,*(ar+i));$ X! m1 ~9 ]- _- s9 W: R
}0 \) E7 x- n$ o! X
}
7、***下列程序的输出结果是
main()4 H7 Y# `8 q% a* i$ Y7 `8 H( S- o
{
) a+ L6 F% e+ ?* f* R" Lshort *p, *q;! [" A! J; r' V$ `
short ar[10]={0};
' u3 o' t8 l+ Np = q = ar;% N( l$ P% l4 l/ I4 `
p++;/ x3 q6 k# F$ \# M& ?5 L! _
printf("%5d", p-q);
9 s( c6 C$ D. }$ `' {printf("%5d", (char*)p - (char*)q);& [8 b' l8 Z1 ], V M
printf("%5d", sizeof(ar)/sizeof(*ar));
) w9 X N( L f& _! n}8 e3 @: X5 i7 o0 A
假设sizeof(short)==2四、程序填空
1、 **函数 void fun(float *sn, in t n)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。
void fun( float *sn, int n)
{ float s=0.0, w, f=-1.0;
int i=0;
for(i=0; i<=n; i++)
{ f=__(1)___ * f;
w=f/(2*i+1);
s+=w;
}
__(2)___=s;
}
2、*以下函数的功能是,把两个整数指针所指的存储单元中的内容进行交换。请填空。
exchange(int *x, int *y)
{ int t;
t=*y; *y= __(1)___ ; *x=__(2)___ ;
}
3、**下面函数要求用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。
int add(int x,int y, __(1)___ z)
{ __(2)___ =x+y;}
4、***以下count函数的功能是统计substr在母串str中出现的次数。
int count(char *str,char *substr)
{ inti,j,k,num=0;
for(i=0; ① ;i++)
{for( ② ,k=0;substr[k]==str[j];k++,j++)
if(substr[ ③ ]==’\0’)
{num++;break;}
}
return num;
}
5、 ***以下Delblank函数的功能是删除字符串s中的所有空格(包括Tab、回车符和换行符)。
void Delblank(char *s)
{ int i,t;
char c[80];
for(i=0,t=0; ① ;i++)
if(!isspace( ② ))c[t++]=s;
c[t]=‘\0’;
strcpy(s,c);
}
6、***以下conj函数的功能是将两个字符串s和t连接起来。
char *conj(char *s,char *t)
{ char *p=s;
while(*s) ① ;
while(*t)
{*s= ② ;s++;t++;}
*s=‘\0’;
③ ;
}五、编写程序
1、 ** 指针实现,对传递进来的两个整型量计算它们的和与积之后,通过参数返回。
2、** 指针实现,将用户输入的字符串中的所有数字提取出来。
3、** 指针实现,计算字符串的串长。
4、** 指针实现,将一个字符串中的字母全部转换为大写。
5、** 指针实现,计算一个字符在一个字符串中出现的次数。
6、** 指针实现,判断一个子字符串是否在某个给定的字符串中出现。