c语言程序设计习题集

更新时间:2024-04-03 16:24:01 阅读量: 综合文库 文档下载

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

1.1.2 C语言基础

一 单项选择题

1.下列变量定义中合法的是_____。

A. int _b=1—.e—3; B. double b=2—6e5.5; C. long x=8.8; D. float 2_and=1—e—4;

答案:C

2.运算符有优先级,在C语言中关于运算符优先级的正确叙述是_____。 A.算术运算符高于赋值运算符,赋值运算符高于位运算符 B.算术运算符高于双目位运算符,位运算符高于赋值运算符

C位运算符高于算术运算符,算术运算符高于赋值运算符 D.赋值运算符高于位运算符,位运算符高于算术运算符 答案:B

3.C语言并不是非常严格的算法语言,在以下关于C语言的不严格的叙述中,错误的是_____。 A.任何不同数据类型都不可以通用

B.有些不同类型的变量可以在同一个表达式中运算

C.在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型 D.同一个运算符号在不同场合可以有不同的定义 答案:A

4.以下选项中属于C语言的数据类型是_____。

A.复数型 B.逻辑型 C.双精度型 D.集合型 答案:C

5.设有说明语句:char m=?\\63?;则变量m____。

A.包含1字符 B.包含2个字符 C. 包含3字符 D. 说明不合法 答案:A

6.下列常数中不能作为C语言的常量是_____。 A.0XA6 B.3.4e—3 C.3e5 D.0683 答案:D

7.在C语言中,数字031是一个_____。

A.八进制数 B.十六进制数 C.十进制数 D.非法数 答案:A

8.下列可以正确表示字符型常量的是_____。

A. 'a' B.'\\t' C.'\\n' D.'\\185' 答案:B

9.设有int a=9;则表达式(++a*2/3)的值是__________。 A.6 B.7 C.6.6 D.0

答案:A

10.已知int a;float f;正确的表达式是__________。

A.(int f)%a B. int(f)%a C. int(f%a ) D. (int)f%a 答案:D

11.设有以下变量定义,并已赋确定的值,则表达式x-y+a/b值的数据类型 为__________。

char x;int y;float a;double b;

A.char B. int C. float D. double 答案:D

12.已知int i,a;执行语句i=(a=3*9,a/5),a+11;变量i的值是__________。 A.5 B.16 C.27 D.38 答案:A

13.已知int i=4; 执行语句i+ =--i;i的值是 __________。 A.3 B.6 C.8 D.以上都不对 答案:B

14.下列运算符优先级最高的是 __________。 A.^ B.+ C.& D.| 答案:B

15.已知:float x=2,y;则:y=x++*x++的结果为__________。 A.y=4 B.y=6 C.y=2 D.表达式是错误的 答案:A

16.设char型变量x中的值为二进制10100111,则表达式(2+x)^(~3)的值 是__________。

A.10101001 B.10101000 C.11111101 D.01010101 答案:D

17.整型变量x和y的值相等,且非零值,则以下选项中,结果为零的表达式 是__________。

A.x||y B.x|y C.x&y D.x^y 答案:D

18.设int b=8;表达式(b>>2)/(b>>1)的值是___________。

A.0 B.2 C.4 D.8 答案:A

19.若定义unsigned int a=3,b=10;printf(“%d\\n”,a<<2|b==1);则运行结果为___________。 A.13 B.12 C.8 D.14 答案:B

20.有如下程序段,执行该程序后x的值为___________。

int a=14,b=15,x; char c=?A?;

D.2

x=(a&b)&&(c^?B?); A.14 B.15 C.0 答案:D

21.若变量a,b,t,已定义,能正确交换a,b值的语句组是___________。 A.a=b;b=t;t=a B.a=t;t=b;b=a C.a=a+b;b=a-b;a=a+b D.a=a^b;b=a^b;a=a^b 答案:D

22.在C语言中,设一表达式中包含有int,long,char和unsigned类型的变量和数据,则这4种类型数据转换的规则是___________。 A.int→unsigned→long→char B.char→int→long→unsigned C.char→int→unsigned→long D.int→char→unsigned→long

答案:C

23.若变量a是int类型,执行语句: a=?A?+1.6;

后,正确的叙述是___________。 A.a的值是字符C B.a的值是浮点型 C.不允许字符型和浮点型相加 答案:D

D.a的值是字符?A?的ASCII值加上1

24.以下描述中不属于C语言类型的是___________。

A.signed short int B.unsigned long int C.unsigned int 答案:D

A.printf(“a=?\\n”,a); C. printf(“a=?L\\n”,a); 答案:B

B. printf(“a=\\n”,a);

D.long float

25.设有定义:long a=-123456L;,则以下能够正确输出变量a值的语句是___________。

D .printf(“a=%LD\\n”,a);

二、填空题

1.在C语言程序中,用关键词__定义基本整形变量,用关键词__定义单精度实型变量,用关键词__定义双精度实型变量。

答案:int float double

2.若K为int整形变量且赋值18,则y=k++;后y的值为__,变量k的值为__。 答案:18 19

3.在C语言中整数可用__进制数、__进制数和__进制数三种数制表示。

答案:十 八 十六

4.设变量a的二进制是00101101,若想用通过运算a^b使a的高4位不变,低4位取反,则b的二进制数应是__。 答案:00001111

5.运用位运算,能将变量ch中的大写字母转换成小写字母的表达式是__。 答案:ch^32(或ch|32)

6.能将两个字节变量x的低8位置全1,高字节保持不变的表达式是__。 答案:x|255

7.若a为任意数,能将变量a清0的表达式是__。 答案:a=a&0

8.把操作对象的二进制数向左移动n位,相当于对原来的数值__2。 答案:乘

9.根据储存长度的不同,c语言中的整型可分为:基本类型﹑_____和长整型 。 答案:短整型

n

10.一个字符通常占用_____字节的内存空间。

答案:1

11.实型常量有两种表示方法:小数形式和_____。 答案:指数形式

12.以_____开头的一个字符和一个数字序列,这类字符称为转义字符。 答案:反斜杠\\

13.一个变量有3个相关的要素:变量名﹑_____和变量的值。 答案:变量的储存单元

14.a%b的结果为a除以b的余数的符号与_____相同。 答案:被除数

15.由算术运算符﹑括号以及操作对象组成的符合c语言语法规则的表达式称为_____。 答案:算术表达式

16.C语言中按位异或运算符为______。 答案:^

17.表达式(a=5-3/2,a*6),a++10的值为______。 答案:14

18.表达式3&5-4|5+2^7+~3的值为_____。 答案:1

19.表达式2>>3-3<<2的值为______。 答案:8

20.表达式-5|5&3的值为______。 答案:-5

1.1.3顺序结构程序设计

选择题.

1. 若x.y.z都定义成int类型且初值为0,则以下不正确的复制语句_________。 A.x+=y+2; B,x=y=z+10; C,++z; D,x+y=z; 答案 D;

2.下面不是C的是_______.。

A. int i; B. ; C. a=58,b=58 D.{;} 答案 C;

3.以下合法的C语言赋值语句是________。 A.a=b=58; B.k=a+b; C.a=58.b=58; D.- - i; 答案 D;

4.设x,y,z为整形变量,若从键盘给x,y,z输入数据,则正确的输入语句是________。 A.INPUT x,y,z; B,scanf(“%d%d%d”,&x&y&z); C.scanf(“%d%d%d”,x,y,z); D.read(“%d%d%d”,&x,&y,&z); 答案 B;

5.若变量以明确说明为int类型,要给a,b,c输入数据,则正确的输入语句是_______。 A.scanf(“%d%d%d”,&a,&b,&c); B.scanf(“%d%d%d”,a,b,c); C.scanf(“%D%D%D”,&a,&b,&c); D.scanf(“%d%d%d”,&a;&b;&c); 答案 A;

6.设以下各变量均为int类型,则以下函数调用正确的是_______.。

A,getchar(); B.putchar(); C.putchar(?\\108?); D.scanf(“%d%d%*2d”,&a;&b); 答案 A;

7.下列程序的输出结果是_________。 main()

{int x=023;

prinf(“%d\\n”,- - x);}

A .22 B.23 C18 D. 19 答案 C;

8 .下列程序的输出结果是_________。 main()

{int a=1 , b=2 ;

printf(“%d\\n”,a=a+1,a+6,b+2); } A.2 B. 3 C.4 D.1 答案 A;

9 .下列程序的输出结果是_________。 main()

{int a=1 , b=2 ; printf(“%d\\n”,(a=a+1,a+6,b+2)); } A.2 B. 3 C.4 D.1 答案 C;

10.已知a,b,c为float类型,执行语句:scanf(“%f %f %f”,&a,&b,&c);使得a为10,b为20,c为30,则以下不正确的输入形式是__________. A 10 B.10.0 20 30

C/10.0 D10 20

20.0 30.0 30 答案 B;

11.若变量已正确定义,现要将a 和b 中的数据进行交换,下面不正确的是()

A.a=a+b,b=a-b,a=a-b B.t=a,a=b,b=t C.a=t;t=b;b=a D.t=b;b=a;a=c 答案:C

12.执行下列程序后输出结果是() main() {

int a=1,b=2,c=3;

c=(a+=a+2),(a=b,b+3);

printf(“%d,%d,%d\\n”,a,b,c); }

A.2,2,4 B.4,2,3 C.4,2,5 D.5,5,3 答案:A

13.执行下面程序: Main() { Int a;

Float b,c;

Scanf(“-?O”,&a,&b,&c);

Printf(“\\na=%d,b=%.1f,c=%.1f\\n”,a,b,c);

}

运行时,从键盘上输入12345654321 ,则输出结果是() A a=12, b=345, c=6543. B. a=12, b=123, c=1234

C.a=12 b=345.0, c=6543.0 D. a=12.0 b=345.0 c=6543.0 答案:C

14.执行下面程序: Mian()

{

Int a=3, b=7;

Printf(“a=%%d,b=%%d\\n”,a,b);

}

则输出结果是()

A. a=%3, b=%7 B a=%d, b=%d C. a=%%d , b=%%d D.a=3, b=7 答案:B

15.下面程序输出的结果是() #include Mian() {

Short a=-1;

Printtf(“%hd,%ho,%hu\\n”,a,a,a); }

A -1, -1, -1. B.-1, -77777, -32768

C. -1, 177777, -32768 D. -1, 177777, 65535 答案:D

16.下列程序执行后的输出结果是__________。 main() {int x=?d?;

printf(“%c\\n”,?A?+(x-?a?+1));}

A. G B. H C. E D. J 答案:C

17.若有以下程序段,执行后的输出结果是_____。 Int a=3;

printf(“%d\\n”,(a+=a-=a*a));

A.—6 B.12 C.0 D.—12 答案:D

18.下列程序的输出结果是_________。 main() {float d=2.2; Int x,y;

x=6.2;

y=(x+3.8)/5.0;

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

A. 4 B. 随机数 C. 2 D. 0 答案:B

19.运行下面程序后,输出结果是__________。 main()

{int a=5,b=3;

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

A. 5 B. 1 C. 3 D. 2 答案:B

20.有以下程序,请问执行后的输出是_______。 main()

{int a=010,b=10,c=0x10;

printf(“%d,%d,%d”,a- -,++b,c++);}

A. 8,10,16 B. 8,11,16 C. 7,10,17 D. 8,10,17 答案:B

填空

1. 函数getchar()的功能是____________,其调用形式ch=getchar()与_____________功能相

同;函数outchar()的功能是___________,putchar(ch)与_________功能相同。这两个函数在使用的同时,都必须在main函数之前写入_________。

答案:从键盘读入一个字符 scanf(“%c”,&ch) 在屏幕上输出一个字符

Printf(“%c”,ch) #include 2. 在printf()函数中,“%d”表示________,“%x”表示__________,“%7.2f”表示_________,

“%c”表示__________,“%s”表示________“%o”表示__________.

答案:按十进制整数形式输出,有字符

按十六进制整数形式输出,没有字符

按十进制小数形式输出,输出的数据长度为7,有2位小数 按字符形式输出一个字符

按字符串形式输出一个字符串

按八进制整数形式输出,没有字符

3. 在scanf()函数中,“%d”表示_______,“=”表示_________,“%*3d”表示____________,

“%c”表示__________.

答案:按十进制整数形式输入数据

按十进制整数形式输入3位数据 跳过3位十进制数据

按字符形式输入一个字符

4. 复合语句在语法上被认为是___________,空语句的形式是____________,c语言中,语句

的标志是________. 答案:分程序 ; ; 5. printf函数中用到格式%5s,其中5表示输出字符占5列,如果字符串长度大于5,则按

________输出;如果字符串小于5,则按_________输出. 答案:实际宽度 左边补空格

6.以下程序段的输出结果是 Int x=0177;

Printf(“x==,x=m,x=`,x=%6x,x=%6u\\n”,x,x,x,x,x); 答案x=127,x=127,x=177,x=7f,x=127

7.变量I,j,k已经定义为int型并有初值0,用以下语句输入时:scanf(“%d”,&i); Scanf(“%d”,&j);scanf(“%d”,&k);当执行第一个输入语句,从键盘输入:12.3,则i,j,k的值分别是 答案:12, 0 , 0 .

8.执行以下程序:运行结果为. #include main() {

Char x=?k?;

Printf(“%c\\n”,?A?+(x-?a?+1)); }

答案:L_

9.执行以下程序,运行结果为 Main() {

Char x=oxFF;

Printf(“%d\\n”,x--);} 答案:_-1_

10.执行以下程序,运行结果为 {Int y=3,x=3,z=1;

Printf(“%d%d\\n”,(++x,y++),z+2);} 答案: _3____3

1.1.4选择结构程序

一 单项选择题

1.若x为int类型,则下面与逻辑表达式!x等价的C语言关系表达式是_____。 A.x==1 B. x!=1 C. x==0 D. x!=0 答案是__________ 答案是:C

2.能正确表示逻辑关系:“a>=5或a<=—1”的C语言表达式是_____。 A.a>=5 or a<=—1 B. a>=5 | a<=—1 C.a>=5&&a<=—1 D. a>=5 || a<=—1 答案是:D

3.If语句的控制条件是______。

A. 只能用于关系表达式 B. 只能用于关系表达式或逻辑表达式 C. 只能用于逻辑表达式 D. 可以用任何表达式 答案是:D

4. 设int x=2, y=1;则表达式(!x || y--)的值是______。

A.0 B.1 C.2 D.-1 答案是:B

5.与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; 答案是:A

6. 假定w、x、y、z、m均为整形变量,且w=1,x=2,y=3,z=4则执行语句: (m=(w

A. 4 B. 4 C. 2 D. 1 答案是:D

7. 有如下程序段,执行该程序段后,x的值为______。 int a=14 , b =15, x ; char c=`A` ;

x=(a&&b)&&(c<`B`) ;

A. ture B. false C. 0 D. 1 答案是:D

8. 设均为型变量,则执行语句:x=y=2 ; t= ++ x || ++y; 后;y的值为 ________。 答案是:B

A. 不确定 B. 2 C. 3 D. 1 答案是:B

9. 若有定义:float w; int a, b; 则合法的switch语句是_________。 答案是:C

A. swith (w) B. switch (a);

{case 1.0: printf(“ * \\n”); {case 1 printf(“ *\\n”);

Case2.0: printf(“ * * \\n”);} case 2 printf(“ * *\\n”);} C. swith (b) D. swith (b)

{case 1: printf(“ * \\n”); {case 1: printf(“ * \\n”) default: printf(“ \\n ”); case 2 printf(“ * *\\n”) case1+2: printf(“** \\n”);} default: printf(“ \\n ”)} 答案是:C

10.若给定条件表达(m)? (a++): (a——) 则其中表达m和______等价。 A.m==0 B. m==1 C. m!=0 D. m!=1 答案是:C

11. 有如下程序,该程序胡输出结果是( ) main () {

int a=3,b=-1,c=1; If(a

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

A. 0 B.1 C. 2 D.3 答案是:B

12. 若变量c为 char l类型,能正确判断出c为大写字母胡表达式是________ A ?A? <=C<=?Z? B (c>=‘A’)||(c<=’z’) c.(‘a’<=c) and (‘Z’>=C) D (c>=‘A’)&&(C<=‘Z’) 答案是:D

13. 在C语言中,逻辑值“真”用( )表示。 A ture B 正数 C非0整数 D 非0数

答案是:D

14.设a,b,c,d,m,n均为整型变量,且a=5,b=7,c=3,d=8,m=2,n=2,则逻辑表达式(m=a>b)&&(n=c>d)运算后,n的值为( ) A 0 B 1 C 2 D 4 答案是:C

15.有如下程序,其输出胡结果是( C ) main()

{ float x=5.0,y; if(x<0.0) y=0.0; else

if (x<10.0) y=1.0/x; else y=1.0; printf(“%f\\n”,y);}

A. 0.000000 B. 5.000000 C. 0.200000 D. 1.000000 答案是:C

`16.运行下面程序后,则输出结果是_________。 Main()

{int a=0,b=1,c=2,d; d!=a&&!(--b)||!c++;

printf(“%d\\n”,c);} A.3 B.2 C.1 D.0 答案是:B

17.运行下面程序后,若从键盘输入58↙,则蔬输出结果是__________。 Main() {int x,

;

Scanf(“%d”,&x); If(x>60)printf(“%d”,x); If(x>40)printf(“%d”,x); If(x>30)printf(“%d”,x);

A.585858 B.5858 C.58 D.58 答案B

18. 运行下面程序后,输出结果是________。 Main()

{int a=16,b=21,m=0; Switch(a%3) { case 0:m++;break; Case 1:m++; Switch(a%2) { default : m++; Case 0: m++;break;} }

Printf(“%d\\n”,a,b);}

A.1 B.2 C.3 D.4 答案是:C

19.下面程序输出的结果是__________。 Main()

{ int x=5,y=9,z=1,t; t=(x>y||x>z); printf(“%d\\n”,t)?} A.1 B.0 C.5 D.3 答案是:A

20.下面程序输出的结果是__________。 Main()

{ int x=1,a=0,b=0; Switch(x) {case 0: b++; Case 1: a++;

Case 2: a++,b++; }

Printf(“a=%d,b=%d\\n”,a,b); }

A.a=2,b=1 B.a=1,b=1 C.a=1,b=0 D.a=2,b=2 答案是:A

21.以下程序输出的结果是________-。 Main()

{ int I,j,k,a=3,b=2; I=((--a=b++)?—a:++b); J=a++,k=b;

Printf(“i=%d,j=%d,k=%d\\n”,I,j,k); }

A.a=2,j=1,k=3 B.i=1,j=1,k=2; C.i=4,b=2,k=4 D.i=1,j=1,k=3 答案是:D

22.下面说法中正确的是_______。

A.在switch语句中一定要使用break语句 B.break语句是switch语句的一部分 C.break语句只能用于switch语句

D.在switch语句中不一定要使用break语句 答案是:D

23.有以下程序,若从键盘上输入7,则输入结果是_______。 main () { int x;

scanf(“%d”,&x); if(x--<7)

printf(“%d”,x);

else

printf(“%d”x++)}

A.0 B.6 C.7 D.8 答案是:B

24.以下程序输出结果是_______。 main() { int m=5; if(m++>5)

printf(“%d\\n”,--m); else

printf(“%d\\n”--m);}

A.7 B.6 C.5 D.4 答案是:C

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

if(c

else x=7;

A.1 B.2 C.3 D.6 答案是:B

26.设int a=0,b=0,c=0;c=++a||b++;则a,b,c的值分别是________。 A.0,1,0 B.1,1,1 C.1,1,0 D.1,0,1 答案是:D

27.设int a=0,b=0,c=0;c=++a&&b++;则a,b,c的值分别是_______。 A.0,1,0 B.1,1,1 C.1,1,0 D.1,0,1 答案是:C

28.设int a=0,b=0,c=0;c=a++||b++;则a,b,c的值分别是_______。 C.1,1,0 D.1,0,1

A.0,1,0 B.1,1,1 答案是:C

29.设int a=0,b=0,c=0;c=a++&&b++;则a,b,c的值分别是 。 A.0,1,0 B.1,1,1 C.1,1,0 D.1,0,0 答案是:D

30.最适合解决选择结构“若a>=0, 则b=1;否则b=0”的语句是 。 A.if B.if——else C.switch D.嵌套if——else 答案是:B

二.填空题

1.在C语言中,逻辑“真”用 表示,逻辑“假”用 表示,逻辑表达式值为“真”是用 表示的,逻辑表达式值为“假”用 表示的。在C语言中if语句中,用作判断的条件表示式 。 答案是:非0,0,1,0,任意表示式

2.if(!k)a=3;语句中的k可以改写为 ,使其功能不来变。C语言中于嵌套if语句中规定else总是与 配对。 答案是:k==0,前一个if

3.设a=3,b=4,c=5,写出下面逻辑表达式的值。 a+b>c&&b==c的值是 。 a||++c&&b-c的值是 。 !(a>b)&&!c||1的值是 。 !(x=a)&&(y=b)&&0的值是 。 !(a+b)+c-1&&b+c/2的值是 。 答案是:0,1,1,0,1

4.输入一个正整数,判断其若既是7的倍数又是8的倍数,则输出“正确”,否则输出 “错误”,请填空。 #include main()

{int n;

Printf(“please input a number:”) Scanf(“%d”,&n); If(_____)

Printf(“正确”); ________

Printf(“错误”);

}

答案是:n%7= =0&&n%8==0 (或nV= =0) else

5.完善程序,从键盘输入字符,若是数字字符,则转换成数字后显示出来。 #include Main() {int c;

c=getchar();

If(___________)____________; Printf((“%d”,c); }

答案是:c>=`0`&&c<=`9` c=c-`0`

6.能正确表示逻辑关系:“1≤a≤5”的C语言表达式是_____________;能表述20

答案是:a>=1&&a<=5 x>20&&x<30 || x<-100

7. 若x为整型,表示x为奇数的表达式是___________________, 表示x为偶数的表达式是___________________.

答案是:x%2==1 x%2==0

8.设x,t均为int型标量,则执行语句“x=10;t=x&&x>10;”后,t的值为__________________.

答案是:0

9.假定所有变量均已正确定义,则程序段:

Int a=0,y=10;

If(a=0)y--;else if(a>0) y++;else y+=y; 运行后y的值是_______________. 答案是:20

10.以下两条if语句可合并成一条if语句,既______________________________. if(a<=b) x=1;

else y=2;

if(a>b> printf(“* * *y=%d\\n”,y); else printf(“* * *x=%d\\n”,x);

答案是:if(a<=b) printf(“* * * x=%d\\n”,x=1); else printf(“* * * y=%d\\n”,y=2);

1.1.5循环结构程序

一、选择题

1. 以下while循环中,循环体执的次数是_______。 t=1;

while(- -t)t=10;

A.一次也不执行 B.无限次 C.10次 D.一次 答案:A

2. 语句x=3;do{printf( “%d”,x)};x - -;}while(x= =0);的执行结果是______。A.3210 B.321 C.3 D.无任何显示 答案:C

3.若x是int型变量,以下程序段的输出结果是______。 For(x=3;x<6;x++) printf((x%2)?(“**%d”):(“##%d\\n”,x);

A.**3 B.##3 C. ##3 D.**3##4

##4 **4 **4##5 **5 **5 ##5 答案:D

4.C语言中用于此结构化程序设计的三种基本结构是_____。 A.顺序结构、选择结构、循环结构 B.if、switch、break C.for、while、do-while D.if、for、continue

答案:A

5.对于下面的程序段,_____是正确的。

for(t=1;t<=100,t++) {scanf(“%d”,&x); if(x<0)continue; printf(“=”,x); }

A.当x<0时整个循环结束 B.当x>=0时什么也不输出

C.printf函数永远也不执行 D.最多允许输出100个非负整数 答案:A

6.while(!x)中(!x)与下面条件_____等价。 A.x==0 B.x==1 C.x!=1 D.x!=0 答案:A

7.在C语言中的循环语句for、while和do-while中,用于直接中断语句所在层循环的语句是____。

A.switch B.continue C.break D.if 答案:C

8.以下程序的输出结果是______。 main()

{ int y=10; for(;y>0; y--) if(y%3==0){printf(“%d”,--y);continue;} }

A.741 B.852 C.963 D.875421 答案:A

9. 下面程序段的运行结果是_____。 a=1 ; b=2 ; c=2;

wwhile (a

A. 1,2,0 B. 2,1,0, C. 1,2,1 D. 2,1,1

答案是 A

10.设有程序段: int k=10;

while(k=0) k=k-1;

以下描述正确的是____。

A.循环体语句依次也不执行 B. 循环是无限循环

C. while 循环语句执行十次 D. 循环体语句执行一次

答案是 A

11.下面程序的运行结果是_____. #include “stdio.h” main()

{ int a=1, b=10; do

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

Pritf ( “a=%d, b=%d \\n”), a , b);} A. a=3 , b=11 B. a=4 , b=9 c. a=1 , n= -1 D. a=2 , b=8

答案是 D

12.下面程序段的运行结果是_____.。 A=1; b=2; c=2 ;

If (a

A. 1,2,0 B. 2,1 0 C. 1,2,1 D. 2,1,1

答案是 D

13.设有如下程序,运行结果是______。 main()

{int y=10; for(;y>0;y--)

if (y%3= =0) printf(“%d,- -y”);}

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

答案 A

14.以下程序段的输出结果是______. int x=3; do

{ printf(“=”,x-=2);} while (!(- - x));

A.1 0 B. 3 -2 C. 1 -2 D. 1

答案 C

15. 以下程序段的输出结果是______. Int k, sum ;

for (k=1; k<6; k++) sum+=sum; printf (“%d,%d\\n”, k, sum);

A. 15 B. 14 C. 不确定 D . 0

答案是 C

16. 执行下面的程序后,a的值为______。 Main () {int a,b;

for (a=1, b=1;a<100;a++) { if (b>=20) break; if (b%3==1)

{ b+=3; continue;} B-=5;

}

printf (“%d” , a); }

A. 7 B. 8 C.9 D.10

答案是B

17、以下程序段的输出是____。 int i,j,m=0;

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

for(j=3;j<=19;j+=4) m++; printf(“%d\\n”,m);

A.12 B.15 C.20 D.25

答案:C

18、定义如下变量:int n=10;则下列循环的输出结果是_____。 while(n>7) { n--;

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

A.10 B.9 C.10 D.9 9 8 9 8 8 7 7 7 6

答案:B

19.对for(表达式1; ;表达式3)可理解为_____。

A. for(表达式1;0 ;表达式3) B. for(表达式1;1 ;表达式3) C. for(表达式1;表达式1 ;表达式3) D. for(表达式1;表达式2 ;表达式3)

答案:B

20.有以下循环:

int i;

for(i=0;i<10;i++) i++; 循环次数为______。 A.10 B.5 C.6 D.7

答案:B

21.main()

{ int y=10;

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

程序执行后的输出结果是____-。

A.y=0 B.y=-1 C.y=1 D.while 构成无限循环

答案:B

22.有以下程序:

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=%d\\n”,x);

}

程序执行后的输出结果是____。

A.x=4 B.x=8 C.x=6 D.x=12

答案:B

23.执行for(i=0;i<10;i++);结束后,i的值是____。.

A.9 B.10 C.11 D.无限次

答案:B

24、若K为整型变量,则下面while循环执行的次数为______。

K=10;

while(K==0) K=K-1;

A.0 B.1 C.10 D无限次

答案:A

25.设整型变量y值为3,执行下列循环语句后,变量y的值是_____。

do{++y; }while(++<4); A.3 B.4 C.5 D.6

答案:C

26.语句while(e==0)等价于_____。

A.!e B.e!=1 C.e!=0 D.~e

答案:A

27.下面程序的输出结果是______。

main() {

int s,k;

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

printf("%d\n"s); }

A.1 B.9 C.10 D.15 答案:C

28、要使下面程序段输出10个整数,则在下划线处填入正确的数是_______。

for(i=0;i<=____;)

printf(“%d\\n”,i+=2);

A.9 B.10 C.18 D.20

答案:C

29、以下叙述正确的是______。

A.do-while语句构成的循环不能用其他语句构成的循环代替 B.do-while语句构成的循环只能用break语句退出

C.用do-while语句构成的循环,在while后的表达式为非零时结束循环 D.用do-while语句构成的循环,在while后的表达式为零时结束循环

答案:D

30、有以下程序

main() {

int x=3; do {

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

该程序的执行结果是

A.3 2 1 B.2 1 0 C.3 D.2

答案:C 二、填空题

1、下面程序是求整数m的所有素数因子,并输出。例如:m为120时,输出的素数因子:2,2,2,3,5。 程序如下: main() {

int k=2,m;

printf(“请输入m”); scanf(“%d”,&m); while(k<=m) if(m%k____)

{printf(“%d,”k); ______; } else

_________; }

答案:m%k==0 m=m/k k++

2、下面程序的运行结果为______ main() {

int i=0,j=0; while(i<10) i++;

while(j++<0); j++;

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

答案:i=10,j=2

3、下面程序的运行结果为_____ main() {

int i=10,s=0; for (;--i;) if (i%3==0)

s+=i; s++;

printf(“\\ns=%f”,s);

}

答案:程序非法终止

4、下面程序段的运行结果为____ int i=1,s=3’ do {

s+=i++;

if(s%7==0) continue; else ++I;

}while(s<15);

printf(“%d”,i);

答案:8

5、下面程序的功能是输入任意整数n后,输出n行由大写字母A开始构成三角形字符阵列图形。例如,输入整数5时(注意:n不得大于10),程序运行结果如下:

A B C D E F G H I J K L

M N O

请填空完成该程序。 main()

{int i,j,n;char ch=’a’; scanf(“%d”,&n); if(n<11)

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

{for(j=1;j

______; }

else printf(“n太大!\\n”) printf(“\\n”); }

答案:ch++ printf(“\\n”)

6、以下程序输入一行字符(以回车键结束输入),统计其中所有数字字符的个数。

#include “stdio.h” main() {char ch; int s=0;

ch=getchar(); while(ch!___)

{if(ch>=’0’____ch<=’9’) s++; _____; }

printf(“%d\\n”,s); } 答案:while(ch!=’\\n’) && ch=getchar()

7、以下程序的功能是根据下面公式∏值(直到最后一项小于10^-5为止)。 ∏/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+? main() {

double s=0,t=1; int n;

for(___;t>=le-5;n++) {s=s+t; t=_______; }

printf(“PI=%f”,2*______); }

答案:n=1 t=t*n/(2*n+1) s

8、下列程序输出200~300之间的全部素数的和,请填空。 #include main()

{int i,j,f,s=0;

for(i=201;i<=300;i+=2) {f=____;

for(j=2;j<=i/2;j++) if(i%j==0) {f=0;

______; }

if(_____)s+=i; }

printf(“200~300之间的全部素数的和为%d\\n”,s); }

答案: f=1; break; if(f)s+=i;

9、以下程序的功能是求两个整数的最大公约数,运行时输入两个数。

#include void main() {

int m,n,r,t;

printf(\请输入两个整数m和n:\\n\scanf(\if( ) {t=m;m=n;n=t;} while( ) {m=n;

; }

printf(\它们的最大公约数为%d\\n\

答案:if(m

10程序输出以下图形,请填空。 1 23 456 7890

main() {

int i=1,j; int_____;

for(;_____;i++)

{for(j=s;j<=s+i;j++) printf(“%d”,_____); s=s+I;

printf(“\\n”); } }

答案:int s=1; for(;i<=4;i++) printf(“%d”,j);

11、以下程序输入一行字符(以回车结束输入),统计其中所有小写字母的个数,请填空。

#include “stdio.h” main() {char ch; int s=0;

ch=getchar(); while(ch!=_____)

{if(ch>=’a’_____ch<=’z’)s++; _________}

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

答案:’\\n’ && ch=getchar()

12.已知一个首项大于0的等差数列的前四项之和是26,积是880,下列程序输出该四项之值,请填空。

#include main()

{int a1,sum,product,a2,a3,a4; for(a1=1;a1<=5;a1++) for(a2=1;a2<=5;a2++) {a3=2*a2-a1; a4=2*a3-a1;

_____=a1+a2+a3+a4; _____=a1*a2*a3*a4;

if(sum==26_____prioduct==880)

printf(“a1=-,a2=-,a3=-,a4=-\\n”,a1,a2,a3,a4); } }

答案:sum product &&

13.下列程序输出200~300的全部素数中,个位数是3的素数和,请填空。 #include main()

{int i,j,f,s=0;

for(i=201;i<300;i+=2) {f=____;

for(j=2;j<=i/2;j++) if(i%j==0) {f=0; _______; }

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

答案:f=1 break f&&i?==3

14.百马百担问题。有100匹马驮100担货,大马驮3担,中马驮2担,小马驮

1担。下列程序输出大、中、小马的匹数,(大、中、小的匹数均不得为0),请填空。

#include main()

{int i=1,j,k; While(j<33) {______;

While(j<50-i) {k=100-i-j;

If(i*3+j*2+k/2==100&&_____)

Printf(“bi=%d,mid=%d,small=%d\\n”,I,j,k); _______; } i++; } }

答案:j=1 k%2==0 j++

15.一个素数加上1000以后是43在倍数,下列程序输出满足这个条件在最小素

数,请填空。 #include main()

{int n,f,I; n=3;

While(_____) {f=1;

For(i=2;i<=n/2;i++) If(n%i= =0) {f=0;break;}

If(_____&&(n+1000)C= =0) {printf(“n=%d\\n”,n); ____; }n+=2;

} }

答案:1 f break

16.以下程序打印出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,

其各位数字的立方和等于该数本身。例如,153是一个“水仙花数”,因为种种原因153=13+33+53 。请填空。 Main()

{int I,j,k,n;

Printf(“水仙花数:”) ; For(n=100;n<=1000;n++) {i=_____; j=______ K=n;

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

}

答案:n/100 n/10 i*i*i+j*j*j+k*k*k==n

17.有2个小于100的正整数a、b,a与b的和等于110,a的平方与b的平方

之和是6698,下面的程序输出满足上述条件的a、b的值(a main()

{int i,j,a=0,b=0; for(i=1;i<100;i++) {for(j=1;j<100;j++)

if(i+j==110&&i*i+j*j==6698) {a=_______; b_______; break;}

if(____)break; }

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

答案:a=i b=j a&&b

n-1

18、以下程序计算s=1-1/(1+2)+1/(1+2+3)-1/(1+2+3+4)+?+(-1)/(1+2+3+?

+n)的值(假设本题中的n=20)),请填空。

#include void main() {int i,j;

float s=0,s1; for(i=1;i<=20;i++) { ; for(j=1; ;j++) s1=s1+j; if(i%2==1) s+=1/s1; else

; }

printf(\}

答案:s1=0; j

19、下面的程序输出以下图形(*前没有空格),请填空。 * ** *** **** *** ** *

#include void main() {int i,j;

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

while( ) {printf(\ printf(\}

for(i=3;i>0;i--) {j=1;

while( ) {printf(\printf(\

} }

答案:i=0 j<=i j<=i

20、下面的程序输出以下图形,请填空。 1000001 0100010 0010100 0001000

main() {int i,j;

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

while(j<_____)

{printf(“0”);j++}

printf(“1”);

for(j=1;j<=7-2*i;j++) printf(“0”);

if(i<4) printf(“1”); _______; while(j<=i)

{printf(“0”;j++) _________; } }

答案:i j=2 printf(“\\n”)

1.1.6数组

一、单项选择题

1.C语言中,一对数组下标的最小值是_____。

A .1 B.0 C.视说明语句确定 D.无固定下限

答案:B

2.设有数组定义:char array[]==“China0”.则数组array所占的空间为____字节。 A.4个 B.5个 C.6个 D.7个

答案:D

3.若有定义:char str[]= “ab\\n\\012\\\\\\n”;则执行语句printf(“%d”,strlen(str));后,输出结果是 。

A.3 B。4 C。6 D。12

答案C: 4.下列描述中不正确的是____。 A.字符数组中可以存放字符串

B.可以对字符型数组进行整体输入、输出 C.可以对整型数组进行整体输入、输出

D.不能在赋值语句中通过赋值运算“=”对字符数组进行整体赋值 答案:C

5.阅读下面初始化数组程序段:

char a[]= “ABCDEF”;

char b[]={‘A’,‘B’,‘C’,‘D’,‘E’,‘F’}; 则下面叙述正确的是______。 A.a和b完全相同

B.a和b只是长度相同

C.a和b不相同,a是指针数组 D.a数组长度比b数组长

答案:D

6.以下程序的输出结果是_____。 #include”stdio.h”; main()

{int i,k,a[10],p[3]; k=5;

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

for(i=0;i<3;i++) p=[i]=a[i*(i+1)]; for(i=0;i<3;i++) k+=p[i]*2 printf(“%d\\n”,k); }

A.20 B.21 C.22 D.23 答案:B

7.以下程序的输出结果是______。 #include “stdio.h” main()

{int n[3][3],i,j; for(i=0;i<3;i++)

for(j=0;j<3;j++) n[i][j]=i+j;

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

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

A.14 B.0 C.6 D.值不确定

答案:C

8.下面能正确将字符串 “Boy”进行完整赋值操作的语句是______。 A.char s[3]={‘B’,‘o’,‘y’};

B.char s[]=“Boy”; C.char s[3]={“Boy”};

D.char s[3];s[0]=‘B’;s[1]=‘o’;s[2]=‘y’

答案:B

9.执行下列程序时输入:123<空格>456< 空格>779<回车>,输出结果是_____。 #include“stdio.h” main()

{ char s[100];int c,I; scanf(“%c”,&c); scanf(“%d”,&i);

scanf(“%s”,s);

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

A.123,456,779 B.1,456,779 C.1,23,456,779 D.1,23,456

答案:D

10.下列程序执行后的输出结果是_____。 #include“stdio.h” main()

{ char arr[2][4];

strcpy(arr[0],“you”); strcpy(arr[1],“me”); arr[0][3]=‘&’;

printf(“%s\\n”,arr[0]); }

A. you&me B. you C.me D.arr

答案:A

11.设有数组定义:char array[]=“China”; 则数组array所占空间为______。 A.4个字节 B.5个字节 C.6个字节 D.7个字节

答案:C 12.以下程序的输出结果是______。 #include“stdio.h”

main()

{ int i,a[10];

for(i=9;i>=0;i--) a[i]=10-i; printf(“%d%d\\n”,a[2],a[5],a[8]); }

A. 258 B.741 C.852 D.369

答案:C

13、以下程序的输出结果是( ) # include main ()

{ char st[20]=”hello\\0\\t\\\\”;

printf (“%d %d \\n”,strlen(st),sizeof(st));} A. 9 9 B. 5 20 C. 13 20 D. 20 20 答案:A

14、以下程序的输出结果是( ) # include

main ()

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

printf(“%d %d %d \\n”,a[0][3],a[1][2],a[2][1],a[3][0]);} A.0650 B.1470

C.5430 D.输出值不定 答案:A

15、以下程序段的输出结果是( )

char s [] =”\\\\141\\141abc\\t”; printf (“%d \\n”,strlen(s));

A.9 B.12 C.13 D.14 答案:A

16、以下程序段的输出结果是( )

# include main ()

{int b [3][3]={0,1,2,0,1,2,0,1,2} ,i,t=1; for(i=0;i<3;i++) t=t+b[b[i][i]][i]; printf(“%d\\n”,t);} A.3 B.4 C.1 D.9 答案:B

17、以下程序段的输出结果是( )

# include main ()

{int a [3][3]={{1,2},{3,4},{5,6}} ,i, ,j , s=0; for(i=1;i<3;i++)

for(i=0;i

C.20 D.21 答案:A

18、下述对C语言字符数组的描述中。错误的是( )

A.字符数组可以存放字符串

B.字符数组中的字符串可以整体输入、输出

C.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值 D.不可以用关系运算符对字符数组的字符串进行比较 答案:C

19、以下程序段执行后的输出结果是( ) stic char str[ ]=”Beijing”;

printf(“%d\\n”,strlen(strcpy(str,”Chian”))); A. 5 B.7 C.12 D.14 答案:A

20 、若有说明:int a[10]={1,2,3,4,5,6,7,8,9}; char c=?a,?d;则数值为4的表 达式是( )

A.a[4] B.a[d-a]

C.a[?d?-?c?] D.a[?d?-c] 答案:D

21、请选择以下语句的输出结果( )

printf (“%d\\n”,strlen(“\\t”\\065\\xff\\n)); A.2 B.5

C.14 D.输出项不合法

答案:B

22.当执行下面程序且输入:ABC时,输出的结果是( ) #include”stdio.h” Main( )

{char ss[10]=”12345”;

gets(ss);

pirntf(“%s\\n”,ss); }

A.ABC B.ABC45

C.12345ABC D.ABC12345

答案:A

23 不能把字符串Hello!赋给数组b的语句是() A.char b[10]={?H?, ?e?, ?l?, ?l?, ?o?, ?!?,} ; B.char b[10];b=”Hello!”;

C.char b[10];strcpy(b,”Hello!”); D.char b[10]=”Hello!”

答案:B

24.有语句char str1[10],str2[10]=”china”;则能将字符串china赋给数组str1的正确语

句是( )

A.str1={“china”} B.str1=str2 C.strcpy(str1,str2) D.strcpy(str2,str1); 答案:C

二.填空:

1.数组名定义规则和变量名相同,都遵循 定义规则。

答案:标识符

2.在C语言中,引用数组只能通过引用 实现,而不能通过 整体引用来实现。 答案:元素

3.定义一维数组时,如果对全部元素赋初值,则元素个数_______;定义而维数组时,如果对全部元素赋初值,则可省略_____。

答案:可以省略 行数 4.数组在内存中占一片连续的存储区,由_______代表它的首地址。

答案:数组名

5.C语言程序在执行过程中,不检查数组下标是否_____。

答案:越界

6.若定义:char s[20];则数组元素的下标有______个元素,其下标从______开始,最大为_____。

答案:20 0 19

7.设有定义语句:int i=3,a[]={1,2,3,4};则数组a的数据类型是_____;该数组的下标最大值是_____;数组元素a[i]的值是____。

答案:int或整型 3 4.

8.设有定义;char s[5]={?a?,?b?};则s[1]中的字符是_____,s[2]中的字符是______。

答案:‘b? ‘\\0?

9.设有定义:int a[4][5];则元素行下标的最大值是______;列下标的最大值是______。 答案:3 4.

10.定义一个名为x的整型数组,其大小为3*4,要求每行第一个元素为1,其余均是0,则定义语句是_____。

答案:int x[3][4]={{1},{1},{1}};

11.C语言中,二维数组元素在内存的存放顺序是_____。 答案:按行存放

12.设有定义语句:char s[]=“abcdef0”;则数值S的长度是_____;数组元素[6]中存放的字符是______。

答案:8 '0'

13.设有定义语句:char s[][5]={“阿bed”};则二维数组s中一共有______个数组元素,s[0][0]中存放的字符是______。

答案:5 'a' 14.设有定义语句:char sl[10]=“1230abc”:则表达式“strlen(sl)”的值是______。 答案:3

15.设有定义语句:char sl[]=“study”,s2[10];,把sl中的字符串赋值给s2的语句是_____。

答案:strcpy(s2,s1)

16.程序实现的功能是:9个评委给某个参赛选手打分,去掉一个最高分和最低分,求该选手的平均分,请填空。

main()

{int i;

float a[9],max,min,ave; for(i=0;i<9;i++) scanf(\ max=min=ave=______; for(i=1;i<9;i++)

{ave+=______;

if(maxa[i]) min=a[i]; }

ave=(________)/7;

printf(“平均分为:%.2f”,ave); }

答案:a[0] a[i] ave-max-min

17.下列程序的功能是:从键盘输入不相同的10个数组a中,求最大数和次最大数,请填空。

#include”stdio.h” main()

{int i,max1,max2,a[10]; For(i=0;i<10;i++)

acanf(“%d”,&a[i]);

max1=max2=_______; For(i=1;i<10;i++) If(max1

{max2=_______; max1=a[i]; }

Else if(max2

Printf(“最大数为:%d,次最大数为:%d”,max1,max2); }

答案:a[0] max1 max2=a[i]

18.以下程序的功能是将字符串str中的字符正序和逆序进行连接,形成一个新串存放到字符串t中,如:str字符串为ABCD,则t的内容为:ABCDDCBA,请填空。

#include “stdio.h” main()

{char str[30],t[60]; int i,j; gets(str);

for(i=0,j=0;str[i]!=_______;i++) t[j++]=str[i]; for(--i;i>_________;i--) t[j]=_________; puts(t); }

答案:’b’ 0 ‘0’

19.程序功能是:将字符数组str按字符ASCII表顺序排序后输出,请填空。 #include #include Main() {char str[80],ch; int I,j,lenth; gets(str);

lenth=_______; for(i=0;i

{ch=str=[i];str[i]=str[j];str[j]=ch;} Printf(“%sn”,________);

}

答案:strlen(str[i]) str[i]>str[j] str

20.完善程序,使5*5数组对角线元素为1,其他为0,即输出5*5的对角矩阵。

#include void main() {int j,k,a[5][5]; for(j=0;j<5;j++)

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

{if( ) ; else ; }

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

{for(k=0;k<5;k++)

printf(\ printf(\ }

}

答案:j==k a[j][k]=1 a[j][k]=0

1.1.7指针

一.选择题:

1. 已知int * p,a;则语句“P=&a;”,中的运算符“&”的含义是()。 A. 逻辑运算符 B. 位与运算符 C. 取指针内容 D. 取变量地址

2.对于类型相同的指针变量,不能进行()运算。 A. + B. - C. = D. = =

3.设指针x指向的整型变量为28,则(”%d\\n”,++ * x);的输出量是()。 A .27 B. 28 C. 29 D. 30

4.若已定义a为int型变量,则对p的说明和初始化正确的是()。

A. int * p=a B. int p=a C .int * p=* a D. int= * p=&a

5.指针s所指的字符串的长度为()。 Char * s=”\\t\\’Nane\\\\Address\\n”; A .19 B. 18 C. 15 D. 17

6.若有说明:int i,j=7, * p=&a;则与i=j等价的语句为()。 A .i=* p B. * p=* &a C. i=&j D. i=* * p

7.若有说明语句int a=[10],* p=a;对数组元素的正确引用是() A. a[p] B. p[a] C. * (p+2) D. p+2

8.设p1和p2均为指向同一个int型一维数组元素的指针变量,k为int型变量,下列不正确的语句是()。

A. k=*p1+*p2 B. *p1*(*p2) C. p2=k D. p1=p2

9.若有下列说明语句,请选出哪个对数组元素的正确引用()。 int c[4][5],(*p)[5];p=c;

A. P+1 B. *(&a[i]) C. p[i] D. *(*p+2)

10.设有以下语句,则 不是对a数组的正确引用,其中0<=i<10。 Int a[10]={0,1,2,3,4,5,6,7,7,9}, *p=a;

A a[p-a] B *(&a[i]) C p[i] D *(*(a+1))

11.设有如下的程序段:

Char str[]=”hello”; Char *ptr; Ptr=str;

执行完上面的程序段后,*(ptr+5)的值为

A ‘0’ B ‘\\0’ C 不确定的值 D ‘0’的地址

12.若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是 A pb=&x B pb=x C *pb=&x D *pb=*x

13. 已知:char b[5], *p=b; 则正确的赋值语句是

A b=”abcde” B *b=”abcde” C p=”abcde” D *p=”abcde”

14.若有以下定义,则值为3的表达式是 Int a[]={1,2,3,4,5,6,7,7,9,10}, *p=a;

A p+=2, *(p++) B p+=2, *++p C p+=3, *p++ D p+=2, ++*p

15.若有以下定义,则表达式*++p的值是 Int a[5]={10,20,30,40,50},*p=&a[1]; A 40 B 30 C 21 D 31

16. 若有以下定义,则表达式++*p的值是 Int a[5]={10,20,30,40,50},*p=&a[1];

A 40 B 30 C 21 D 31

17. 若有以下定义,则表达式*--p的值是 Int a[5]={10,20,30,40,50},*p=&a[1]; A 10 B 20 C 19 D 31

18. 若有以下定义,则表达式*p++的值是 Int a[5]={10,20,30,40,50},*p=&a[1]; A 20 B 30 C 21 D 31

19.设有下面的程序段,则对数组的错误引用是 int a[12]={0],*p[3],**pp,i; for (i=0;i<3;i++) p[i]=&a[i*4]; pp=p;

A.pp[0][1] B.a[10] C.p[3][1] D.*(*(p+2)+2)

20.若有以下定义,则对a数组元素的非法引用是 int a[2][3],(*pa)[3];pa=a;

A.*(a[0]+2) B.*pa[2] C.pa[0][0] D.*(pa[1]+2)

21.设有定义:char * aa[2]={\则以下说法中正确的是 A.aa数组眼的的值分别是\和\

B.aa是指针变量,他指向含有两个数组元素的字符型一维数组

C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中分别存放了字符'a'和'A'的地址

22.以下程序有两个printf 语句,如果第一个printf语句输出的是194,则第二个printf语句的输出结果是 #include main()

{short a[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a;printf(\printf(\

A.203 B.204 C.la4 D.la6

23.有如下程序段,执行该程序段后,a的值为 int *p,a=10,b=1; p=&a;a=*p+b;

A.12 B.11 C.10 D.编译出错

24.设有定义:int a[10]= {1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是

A.*p+9 B.*(p+8) C.*p+=9 D.p+8

25.下面能正确进行字符串赋值操作的语句是 A.char s[5]={\

B.char s[5]={\C.char*s;s=\D.char*s;scanf(\

26.设有如下程序段,执行该程序后段后,ab的值为 int *var,ab;

ab=100;var=&ab;ab=*var+10;

A.120 B.110 C.100 D.90

27.若有下面的定义语句,则不能表示a数组元素的表达式是 int a[10]= {1,2,3,4,5,6,7,8,9,10},*p=a; A.*p B.a[10] . C.*a D.a[p-a]

28.如有以下定义和语句,则一下正确的叙述是 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中

29.若有一下定义语句,则数值为4的表达式是

int w[3][4]={{0,1},{2,4},{5,8}};int (*p)[4]=w; A.*w[1]+1 B.p++,*(p+1) C.w[2][2] D.p[1][1]

30.若有以下定义语句,则不能代表字符o的表达式是 char s[20]=\

A.ps+ 2 B.s[2] C.ps[2] D.ps+=2,*ps

31.若有定义:int a[9],*p=a;,并在以后的语句中未改变p的值,则不能表达a[1]地址的表达式是

A.p+1 B.a+1 C.a++ D.++p

32.若有定义:int a,b,c,d,*d=&c;则能正确从键盘读入三个整数分别赋给变量a,b,c,d的语句是

A.scanf(\B.scanf(\C.scanf(\D.scanf(\

33.若有以下的说明和语句,则在执行for 语句后,*(*(pt+1)+2) 表示的数组

元素是

int t[3][3],*pt[3],k;

for (k=;k<3;k++)pt[k]=t[k];

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

34.设有定义:char *st=\,下列程序段中正确的是 A.char a[11],*p;strcpy(p=a+1,&st[4]); B.char a[11],strcpy(++a,st); C.char a[11];strcpy(a,st);

D.char a[],*p;strcpy(p=&a[1],st+2);

35.设有定义:int(*prt)[M];其中的标识符prt是 A.M个指向整型变量的指针

B.指向M个整型变量的函数指针

C.一个指向具有M个整型元素的一维数组的指针

D.具有M个指针元素的一维指针数组,每个元素都是一个指向整数变量的指针

二、填空题

1.“*”称为______运算符,“&”称为______运算符 。

2.设int a[10],*p=a;则对a[2]的正确引用是p[______]和*(p _______)。

3.若有以下定义,则不移动指针p,且通过指针p引用值为97的数组元素的表达式是______。

int w[10]={23,54,10,33,47,97,72,70,61,102},*p=w;

4.设有char*a=”ABCD”;则printf(“%s”,a);的输出是 _____;而printf(“%c,*a);的输出是______。 5.下面程序段的输出结果是______。

char str[]=”abc\\odef\\oghi”,*p=str; printf(“%s”,p+5);

6.下面程序段的输出结果是______。 char str[20]=”abcd”,*p=str; p++;puts(strcat(p,”ABCD”)); 7.下面程序的输出结果是_______。 main()

{int a,k=4,m=6,*p1=&k,*p2=&m; a=p1==&m;printf(“%d\\n”,a),} 8.下面程序的输出结果是 ______。 #include”stdio.h” main()

{int **k,*j,i=100;

j=&i;k=&j;

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

9.下面程序的输出结果是_______。 Main()

{int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; printf(“%d\\n”,*(p+2));}

10.下面程序的输出结果是______。 main()

{char s[]=”ABCD”,*p;

For(p=s;*p;p++)printf(“%c”,*p);} 11.下面程序段的输出结果是 ______。 char *s1=”12345”,8时=”1234”;

printf(“%d\\n”,strlen(strcpy(s1,s2))); 12.下面程序段的输出结果是一个_数。 main()

{ char *s1=”AbCdEf”,*s2=”aB”;

s1++;s2++;

printf(“%d\\n”,strcmp(s1,s2));

}

13.下面程序段的输出结果是_。

int * *pp,*p,a=10,b=20;

pp=&p;p=&a;p=&b;

printf(“%d,%d\\n”,*p,* *p);

14. 下面程序的输出结果是_。 main() { char a[10]={‘1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’,0},*p;

int i;

i=8;p=a+i;

printf(“%s\\n”,p-3);

}

15. 下面程序的输出结果是_。 main()

{ int a[5]={2,4,6,8,10},*p,* *k; p=a;k=&p;

printf(“%d”,*(p++)); printf(“%d\\n”,* *k); }

16. 下面程序的输出结果是_。 main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;

printf(“%d”,*--p); }

17.设有以下语句:

int s[2][3]={0},(*p)[3]; p=s;

则p+1表示数组_。

18.设有以下语句:

int a[3][2]={1,2,3,4,5,6}; int (*p)[2]; p=a;

则*(*(p+1)+1)的值是_,*(p+2)是元素_的地址。

19. 设有以下语句:

int a[4]={2,4,6,7};

int *p[4]={&a[0],&a[1],&a[2],&a[3]}; int * *pp; pp=p;

则* *(pp+2)的值是_,*(p+3)的值是元素_的地址。

20若有以下说明和语句,表达式*(p+1)+2的含义是_。

int a[3][4],(*p)[4]; p=a;

选择题答案:

1.D 2.A 3.C 4.D 5 .C 6.B 7.C 8.C 9.D 10.D 11.B 12.A 13.C 14.A 15.B 16.C 17.A 18.A 19.C 20.B 21.D 22.D 23.B 24.B 25.C 26.B 27.B 28.D 29.D 30.A 31.C 32.A 33.C 34.A 35.C 填空题答案:

1. 指向,取地址 2.5 2. 2 +2 3. *(P+5) 4. ABCD A 5. ef

6. bcdABCD 7. 0 8. 100 9. 3

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

Top