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 ),优先级最高的是( C )。
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=1;c=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后的括号中只能是整型或字符型表达式,switch的case标号后只能是常量或常量表达式,选项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