【C语言】选择结构题目、知识点汇总(部分)

1. 关系表达式的运算结果是  逻辑  值。C语言没有逻辑型数据,以 1  代表“真”,以 0代表“假”。

2. 逻辑运算符!是   单目   运算符,其结合性是由   从右向左 

3. 逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。系统最终以    非0       0    来判定它们属于“真”或“假”。

4. 设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式 x<z||y<z

5. 条件“2<x<3或x<-10”的C语言表达式是    x<-10||x>2&&x<3   

6. 以下关于运算符优先顺序的描述中正确的是(  )。

    A)关系运算符<算术运算符<赋值运算符<逻辑与运算符

    B)逻辑与运算符<关系运算符<算术运算符<赋值运算符

    C)赋值运算符<逻辑与运算符<关系运算符<算术运算符

    D)算术运算符<关系运算符<赋值运算符<逻辑与运算符

    答案:C

7. 下列运算符中优先级最高的是(  )。

    A)<         B)+             C)&&          D)!=

    答案:B,赋值运算符<逻辑与运算符<关系运算符<算术运算符

8. 为判断字符变量c的值不是数字也不是字母时,应采用下述表达式( )。

    A)c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122

    B)!(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122)

    C)c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122

    D)!(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)

    答案:D,数字的ASCII码从48到57,大写字母为65到90,小写字母为97到122

9. 能正确表示“当x的取值在[1,100]和[200,300]范围内为真,否则为假”的表达式是( )。

    A) (x>=1)&&(x<=100)&&(x>=200)&&(x<=300)

    B) (x>=1)||(x<=100)||(x>=200)||(x<=300)

    C) (x>=1)&&(x<=100)||(x>=200)&&(x<=300)

    D) (x>=1)||(x<=100)&&(x>=200)||(x<=300)

    答案:C,和,即逻辑或关系

10.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是(    )。

                  if(x>y)

                  z=x; x=y; y=z;

A)x=10,y=20,z=30       B)x=20,y=30,z=30

C)x=20,y=30,z=10       D)x=20,y=30,z=20

答案:B,在没有{}的前提下,if的控制范围只限于下面的第一条语句。

11. 下列运算符中优先级最低的( A ),优先级最高的是()。

A?:        B&&          C+             D!=

12. 在if语句中又包含一个或多个if语句称为    if语句的嵌套     

13. 为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与 于此之前最近的未匹配的if 配对。如果if else数目不一样,为实现设计者的企图,可以加   花括号  关系。

14. 条件运算符是C语言中唯一的一个    目运算符,其结合性为   从右至左    

15.假设条件表达式的格式为:表达式1?表达式2:表达式3,若表达式2和表达式3的类型不同,此时条件表达式的值的类型为二者中较     的类型

16. 设有变量定义:int a=5,c=4;则(--a==++c)?--a:c++的值是      ,此时c的存储单元的值为     

答案:5,6;(4==5)?4:5++,5++执行完后加1

17. 分析程序运行结果:

main()
{
	int a, b, c;
	int s, w, t;
	s= w = t = 0;
	a= -1; b = 3; c = 3;
	if ( c > 0 )
		s = a + b;
	if ( a <= 0 )
	{
		if ( b > 0 )
			if ( c <= 0 )
				w = a - b;
	}else if ( c > 0 )
		w = a - b;
	else
		t = c;
	printf( “ % d % d % d ”, s, w, t );   
}

结果:2 0 0;注意if-else语句的结构

18. 分析程序运行结果:若grade的值为 ’C’,则输出结果是___  

switch(grade)        
{
    case  ‘A’: printf(“85-100\n”);
    case  ‘B’: printf(“70-84\n”);
    case  ‘C’: printf(“60-69\n”);
    case  ‘D’: printf(“<60\n”);
    default: printf(“error!\n”);
}
 

结果:

60-69

<60

error!

19. 分析程序运行结果:

#include <stdio.h>
void main( void )
{
	int x, y = 1, z;
	if ( y != 0 )
		x = 5;
	printf("\t%d\n", x );
	if ( y == 0 )
		x = 4;
	else x = 5;
	printf("\t%d\n", x );
	x = 1;
	if ( y < 0 )
		if ( y > 0 )
			x = 4;
		else x = 5;
	printf( "\t%d\n",x);
}

结果:5 5 1

20. 分析程序运行结果:

#include <stdio.h>
void main( void )
{
	int x, y = -2, z;
	if ( (z = y) < 0 )
		x = 4;
	else if ( y == 0 )
		x = 5;
	else x = 6;
	printf( " \ t % d \ t % d \ n", x, z );
	if ( z = (y == 0) )
		x = 5;
	x = 4;
	printf( " \ t % d \ t % d \ n ", x, z );
	if ( x = z = y )
		x = 4;
	printf( " \ t % d \ t % d \ n", x, z );
}

结果:

4    -2

4    0

4    -2

21. 分析程序运行结果:

#include <stdio.h>
main()
{
	int x = 1, y = 0, a = 0, b = 0;
	switch ( x )
	{
	case 1:
		switch ( y )
		{
		case 0: a++;
			break;
		case 1: b++;
			break;
		}
	case 2:
		a++;
		b++;
		break;
	}
	printf( " a = % d, b = % d ", a, b );
}

结果:a=2,b=1

/////////////////////////////////////////////////////////////////////////////////////////分割线////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

1. 以下非法的赋值语句是

A:n=(i=2,++i);

B: j++;

C: ++(i+1);

D: x=j>0;

答案:C

2. 阅读以下程序:

main()

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

    if(x--<5) printf(“%d”,x);

    else printf(“%d”,x++); }

程序运行后,如果从键盘上输人5,则输出结果是( )。

A: 3

B: 4

C: 5

D: 6

答案:B

3. 下面的程序段中共出现了几处语法错误?

int a,b;

scanf("%d",a);

b=2a;

if(b>0)

printf("%b",b);

A: 1

B: 2

C: 3

D: 4

答案:C

4. C 语言中,逻辑“真”等价于

A: 大于零的数

B: 大于零的整数

C: 非零的数

D: 非零的整数

答案:C

5. C 语言的 switch 语句中,case 后

A: 只能为常量

B: 只能为常量或常量表达式

C: 可为常量及表达式或有确定值的变量及表达式

D: 可为任何量或表达式

答案:B

6. 程序运行结果是

main()

{ int a,b,d=241;

a=d/100%9;

b=(-1)&&(-1);

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

A: 6,1

B: 2,1

C: 6,0

D: 2,0

答案:B

7. 下列表达式中能表示a 在0 到100 之间的是

A: a>0&a<100

B: !(a<0||a>100)

C: 0<a<100

D: !(a>0&&a<100)

答案:B

8. 已知:int x,a,b;下列选项中错误的if 语句是

A: if(a=b) x++;

B: if(a<=b) x++;

C: if(a-b) x++;

D: if(x) x++;

答案:B

9. 当把以下四个表达式用作if 语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是( )。

A: k%2

B: k%2==1

C: (k%2)!=0

D: !k%2==1

答案:D

10. 以下4 个选项中,不能看作一条语句的是

A: {;}

B: a=0,b=0,c=0;

C: if(a>0);

D: if(b==0) m=1;n=2;

答案:D

11. if 语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是

A)必须是逻辑值

B)必须是整数值

C)必须是正数

D)可以是任意合法的数值

答案:D

12. 有以下程序段

int i, n; for ( i = 0; i < 8; i++ )
{
	n = rand() % 5; switch ( n )
	{
	case 1: 
        case 3: printf( "%d\n", n ); break; 
        case 2: 
        case 4: printf( "%d\n", n ); continue;
        case 0: exit( 0 );
	}
	printf( "%d\n", n );
}

以下关于程序段执行情况的叙述,正确的是

A)for 循环语句固定执行 8 次

B)当产生的随机数 n 为 4 时结束循环操作

C)当产生的随机数 n 为 1 和 2 时不做任何操作

D)当产生的随机数 n 为 0 时结束程序运行

答案:D

13. .有以下程序

#include 
main()
{ 
    int x=1,y=0; 
    if(!x) y++; 
    else if(x==0) 
    if (x) y+=2; 
    else y+=3; 
    printf("%d\n",y); 
} 

程序运行后的输出结果是

A)3

B)2

C)1

D) 0

答案:D

14. 有以下程序:

#include
main()
{ 
    int a=0,b=0,c=0,d=0; 
    if(a=1)
        b=1;
        c=2; 
    else 
        d=3; 
    printf("%d,%d,%d,%d",a,b,c,d); 
} 

程序输出( )

A)1,1,2,0

B)0,0,0,3

C)编译有错

D) 0,1,2,0

答案:C,程序中if子句后面有2条语句b=1c=2;需要用{}括起来,成为一条复合语句,否则else找不到与之配对的if,所以编译出错。

15. 若有定义 int x, y; 并已正确给变量赋值,则以下选项中与表达式(x-y)?(x++) : (y++)中的条件表达式(x-y) 等价的是( )

A)(x-y<0||x-y>0)

B)(x-y<0)

C)(x-y>0)

D)(x-y==0)

答案:A本题考查的知识点是逻辑表达式。C语言编译系统在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。即将一个非零的数值认作为“真”。要让本题中的条件表达式(x-y)的结果为真,也就是要使(x-y)的值非零,即大于0或者小于0,故等价的表达式应该是选项C

16. 有以下程序:

#include 
main()
{ 
    int x=1,y=0; 
    if ( !x )
        y++; 
    else if (x==0) 
    if(x)
        y+=2; 
    else
        y+=3; 
    printf("%d\n",y); 
} 

程序运行后的输出结果是( )

A) 3

B) 2

C) 1

D) 0

答案:D;判断if(!x)后,为假,转至else if(x==0),依然是假;故不执行if(x)

17. 若有定义: float x=1.5; int a =1,b=3,c=2;则正确的 switch 语句是()

 A) switch(a+b)

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

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

B) switch( (int)x );

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

  case 2 : printf("**\n");}

C) switch( x );

{ case 1.0: printf("*\n");

  case 2.0 : printf("**\n");}

D) switch( a+b )

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

 case c: printf("**\n");}

答案:A;switch后的括号中只能是整型或字符型表达式,switchcase标号后只能是常量或常量表达式,选项B的switch后面有分号;选项C的x是浮点型;选项D的case后面是c

18. 设有宏定义:

#define IsDIV(k,n) ((k%n==1) ? 1:0)

且变量 m 已正确定义并赋值,则宏调用:

IsDIV(m,5) && IsDIV(m,7)

为真时所要表达的是:

 A) 判断 m 是否能被 5 和 7 整

B) 判断 m 被 5 和 7 整除是否都余 1

C) 判断 m 被 5 或者 7 整除是否余 1

D) 判断 m 是否能被 5 或者 7 整除

答案:B

19. 有以下程序

#include <stdio.h>

main()

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

 x=(a^b)&c;

printf("%d\n",x);}

程序运行结果是

A) 3

B) 1

C) 2

D) 0

答案:A

20. 有以下程序

#include <stido.h>

main()

{ int x;

scanf("%d",&x);

 if(x<=3)

else if(x!=10)

 printf("%d\n",x);}

程序运行时,输入的值在哪个范围才会有输出结果()

A) 小于 3 的整数

B) 不大于 10 的整数

C) 大于 3 或等于 10 的整数

D) 大于 3 且不等于 10 的整数

答案:D

21. 若有以下程序

#include <stdio.h> 
main()
{ 
    int a=1,b=2,c=3,d=4,r=0; 
    if(a!=1) 
     ; 
    else r=1; 
    if(b==2)  
    r+=2; 
    else
     ; 
    if(c!=3)
    r+=3; 
    else
     ; 
    if(d==4) 
    r+=4; 
    printf("%d\n",r);
}

则程序的输出结果是()

A.10

B.7

C.6

D.3

答案:B

22. C 语言中用___非0__表示逻辑值,用___0__表示逻辑值

23. C 语言中的关系运算符"=="的优先级___高于__ 逻辑运算符&&的优先级

24. 将下列数学式改写成 C 语言关系表达式或逻辑表达式

A) a=b 或 a<c               

B) |x|>4

__a==b||a<c___

__x<-4||x>4___

25.请写出与以下表达式等价的表达式

A) !(x>0)        

  B)  !0

__x<=9___

__ 1__  

 

--------------------我--------------------是--------------------分--------------------割--------------------线----------------------------------------

1. 逻辑运算符两侧运算对象的数据类型()。

A.只能是0或1

B.只能是0或非0正数

C.只能是整型或字符型数据

D.可以是任何类型的数据

答案:D

2. 以下程序的输出结果是()

#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);
}

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

答案:C;执行完一个case后面的语句后,流程控制移到下一个case继续执行。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。

3. 有以下程序,若输入为字符s,则程序运行结果为()。

#include ”stdio.h”
main()
{
    char ch;
    ch=getchar();
    switch (ch)
    { case ’a’: printf(”a=%c\n”,ch);
      default: printf(”end!\n”); 
      case ’b’: printf(”b=%c\n”,ch);
      case ’c’: printf(”c=%c\n”,ch);
    }
}

结果:

end!

b=s

c=s

 

 

 

 

发布了11 篇原创文章 · 获赞 13 · 访问量 1803

猜你喜欢

转载自blog.csdn.net/qq_42603841/article/details/104706145