📄 练习(一).txt
字号:
printf("a AND b: %x\n",a&b);
printf("a OR b: %x\n",a|b);
printf("a NOR b: %x\n",a^b);
}
43、下面程序的运行结果是________。
void main()
{
unsigned a=0112,x,y,z;
x=a>>3; printf("x=%o,",x);
Y=~(~0<<4); printf("y=%o,",y);
z=x&y; printf("z=%o\n",z);
}
44、下面程序的运行结果是________。
void main()
{
unsigned a=0361,x,y; int n=5;
x=a<<(16-n); printf("x=%o\n",x);
y=a>>n; printf("y1=%o\n",y);
y|=x; printf("y2=%o\n",y);
}
45、把int类型变量low中的低字节及变量high中的高字节放入变量s中的表达式是________。
46、以下程序的运行结果是________。
void main()
{
char a=0x95,b,c;
b=(a&0xf)<<4;
c=(a&0xf0)>>4;
a=b|c;
printf("%x\n",a);
}
47、下面程序的功能是实现左右循环移位,当输入位移的位数是一正整数时循环右移,输入一负整数时循环左移。请在________处填入正确内容。
void main()
{
unsigned a;
int n;
printf("请输入一个八进制数:");
scanf("%o",&a);
printf("请输入位移的位数:");
scanf("%d",&n);
if(________)
{
moveright(a,n);
printf("循环右移的结果为:%o\n",moveright(a,n));
}
else
{
________;
moveleft(a,n);
printf("循环左移的结果为:%o\n",moveleft(a,n));
}
}
moveright(unsigned value,int n)
{
unsigend z;
z=(value>>n)|(value<<(16-n));
return z;
}
moveleft(unsigned value,int n)
{
unsigned z;
________;
return z;
}
48、以下函数的功能是计算所用计算机中int型数据的字长(即二进制位)的位数。(注:不同类型机器上int型数据所分配的长度是不同的,该函数具可移植性)。请在________处填入正确内容。
wordlength()
{
int i;
unsigned int v=________; /*将int型单元各二进制位置1*/
for(i=1;(v=v>>1)>0;i++); /*计算int单元中的位数*/
return ________;
}
49、请读以下函数:
getbits(unsigned x,unsigned p,unsigned n)
{
x=((x<<(P+1-n))&~((unsigned)~0>>n));
return x;
}
假设机器的无符号整数长为16位。
若调用此函数时x=0115032,p=7,n=4,则函数返回值的八进制数是________。
50、设x为无符号整数。表达式x^(~(~0<<n)<<(p+1-n))的作用是将x中从第p位开始的n位求反(1变0,0变1),其它位不变。请按表达式的求值顺序写出分解步骤,并解释含义。
51、下面程序的运行结果是________。
#define PB(X) printf((X)?"1":"0")
#define UI unsigned int
struct byte
{
UI a0:1;
UI a1:1;
UI a2:1;
UI a3:1;
UI a4:1;
UI a5:1;
UI a6;
UI a7;
};
union bits{char ch;struct byte bit;};
void decode(union bits c);
main()
{
char c;
union bits asc;
for(c='A';c<'C';c++)
{
asc.ch=c;
printf("%o:",c);
decode(asc);
}
}
void decode(union bits b)
{
PB(b.bit.a7);
PB(b.bit.a6);
PB(b.bit.a5);
PB(b.bit.a4);
PB(b.bit.a3);
PB(b.bit.a2);
PB(b.bit.a1);
PB(b.bit.a0);
printf("\n");
}
52、阅读以下程序:
struct bit
{
unsigned bund_bit:2;
unsigned char_bit:2;
unsigned pari_bit:1;
unsigned even_bit:1;
unsigned stop_bit:2;
unsigned dummybit:8;
};
void main()
{
unsigned int *pmodword;
struct bit mod;
mod.bund_bit=input("bund bit(0-3)");
mod.char_bit=input("char bit(0-3)");
mod.pari_bit=input("pari bit(0,1)");
mod.even_bit=input("even bit(0,1)");
mod.stop_bit=input("stop bit(0-3)");
mod.dummybit=0;
pmodword=(unsigned int*)&mod;
printf("\n The mode word is %x\n",*pmodword);
}
input(char *s)
{
int bits;
printf("Enter %s: ",s);
scanf("%d",&bits);
return bits;
}
若运行时输入以下数据:
Enter bund bit(0-3):2<CR>
Enter char bit(0-3):2<CR>
Enter pari bit(0,1):1<CR>
Enter even bit(0,1):0<CR>
Enter stop bit(0-3):1<CR>
则运行结果是________。
53、设位段的空间分配由右到左,则以下程序的运行结果是________。
struct packed_bit
{
unsigned a:2;
unsigned b:3;
unsigned c:4;
int i;
}data;
void main()
{
data.a=1;
data.b=2;
data.c=3;
data.i=0;
printf("%d\n",data);
}
三、编程题
54、请编程序:从终端读入16进制无符号整数m,调用函数rightrot将m中的原始数据循环右移n位。并输出移位前后的内容。
55、请编写函数getbits从一个16位的单元中取出以n1开始至n2结束的某几位,起始位和结束位都从左向右计算。同时编写主函数调用getbits进行验证。
逻辑运算和判断选取控制
一、选择题
1、逻辑运算符两侧运算对象的数据类型( )
(A) 只能是0或1
(B) 只能是0或非0正数
(C) 只能是整型或字符型数
(D) 可以是任何类型的数据
2、以下关于运算符优先顺序的描述中正确的是( )
(A) 关系运算符 < 算术运算符 < 赋值运算符 < 逻辑与运算符
(B) 逻辑与运算符 < 关系运算符 < 算术运算符 < 赋值运算符
(C) 赋值运算符 < 逻辑与运算符 < 关系运算符 < 算术运算符
(D) 算术运算符 < 关系运算符 < 赋值运算符 < 逻辑与运算符
3、下列运算符中优先级最高的是( )
(A) < (B) + (C) && (D) !=
4、能正确表达“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是( )
(A) (x>=1)&&(x<=10)&&(x>=200)&&(x<=210)
(B) (x>=1)||(x<=10)||(x>=200)||(x<=210)
(C) (x>=1)&&(x<=10)||(x>=200)&&(x<=210)
(D) (x>=1)||(x<=10)&&(x>=200)||(x<=210)
5、表示图中坐标轴上阴影部分的正确表达式是( )
/////| |/////|
| | |
/////| |/////|
______________________________X
a b c
(A) (x<=a)&&(x>=b)&&(x<=c)
(B) (x<=a)||(b<=x<=c)
(C) (x<=a)||(x>=b)&&(x<=c)
(D) (x<=a)&&(b<=x<=c)
6、判断char型变量ch是否为大写字母的正确表达式是( )
(A) 'A'<=ch<='Z' (B) (ch>='A')&(ch<='Z')
(C) (ch>='A')&&(ch<='Z') (D) ('A'<=ch)AND('Z'>=ch)
7、设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是( )
(A) 'x'&&'y' (B) x<=y
(C) x||y+z&&y-z (D) !((x<y)&&!z||1)
8、已知x=43,ch='A',y=0; 则表达式(x>=y&&ch<'B'&&!y)的值是( )
(A) 0 (B) 语法错 (C) 1 (D) "假"
9、若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。则以下不能满足要求的表达式是( )
(A) A%2==1 (B) !(A%2==0)
(C) !(A%2) (D) A%2
10、设有:int a=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后n的值为( )
(A) 1 (B) 2 (C) 3 (D) 4
11、判断char型变量c1时候为小写字母的正确表达式为( )
(A) 'a'<=c1<='z' (B) (c1>=a)&&(c1<=z)
(C) ('a'>=c1)||('z'<=c1) (D) (c1>='a')&&(c1<='z')
12、以下程序的运行结果是( )
#include "stdio.h"
void 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
13、执行以下语句后a的值为( ),b的值为( )
int a,b,c;
a=b=c=1;
++a||++b&&++c;
[1](A) 错误 (B) 0 (C) 2 (D) 1
[2](A) 1 (B) 2 (C) 错误 (D) 0
14、执行以下语句后a的值为( ),b的值为( )
int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
[1](A) 5 (B) 0 (C) 2 (D) 1
[2](A) 6 (B) 0 (C) 1 (D) 4
15、以下不正确的if语句形式是( ) (此题不妥)
(A) if(x>y&&x!=y);
(B) if(x==y) x+=y;
(C) if(x!=y) scanf("%d",&x) else scanf("%d",&y);
(D) if(x<y) {x++;y++;}
16、下列运算符中优先级最低的是( ),优先级最高的是( )
(A) ?: (B) && (C) + (D) !=
17、已知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
18、以下if语句语法正确的是( )
(A) if(x>0) (B) if(x>0)
printf("%f",x) {x=x+y;printf("%f",x);}
else else printf("%f",-x);
printf("%f",-x);
(C) if(x>0)
{x=x+y;printf("%f",x);};
else printf("%f",-x);
(D) if(x>0)
{x=x+y;printf("%f",x)}
else printf("%f",-x);
19、请阅读以下程序
void main()
{
int a=5,b=0,c=0;
if(a=b+c) printf("***\n");
else printf("$$$\n");
}
以上程序( )
(A) 有语法错误不能通过编译
(B) 可以通过编译但不能通过连接
(C) 输出***
(D) 输出$$$
20、以下程序的运行结果是( )
void main()
{
int m=5;
if(m++>5) printf("%d\n",m);
else printf("%d\n",m--);
}
(A) 4 (B) 5 (C) 6 (D) 7
21、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是( )
if(a<b)
if(c<d) x=1;
else
if(a<c)
if(b<d) x=2;
else x=3;
else x=6;
elsex=7;
(A) 1 (B) 2 (C) 3 (D) 6
22、有一函数关系见下表:
┏━━┯━━┓
┃ x │y= ┃
┠──┼──┨
┃x<0 │x-1 ┃
┠──┼──┨
┃x=0 │x ┃
┠──┼──┨
┃x>0 │x+1 ┃
┗━━┷━━┛
下面程序段中能正确表示上述关系的是( )
(A) y=x+1; (B) y=x-1;
if(x>=0) if(x!=0)
if(x==0) y=x; if(x>0) y=x+1;
else y=x-1; else y=x;
(C) if(x<=0) (D) y=x;
if(x<0) y=x-1; if(x<=0)
else y=x; if(x<0) y=x-1;
else y=x+1; else y=x+1;
23、以下程序的输出结果是( )
void main()
{
int a=100,x=10,y=20,ok1=5,ok2=0;
if(x<y)
if(y!=10)
if(!ok1)
a=1;
else
if(ok2) a=10;
a=-1;
printf("%d\n",a);
}
(A) 1 (B) 0 (C) -1 (D) 值不确定
24、以下程序的输出结果是( )
void main()
{
int x=2,y=-1,z=2;
if(x<y)
if(y<0) z=0;
else z+=1;
printf("%d\n",z);
}
(A) 3 (B) 2 (C) 1 (D) 0
25、为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与( )配对。
(A) 缩排位置相同的if
(B) 其之前最近的if
(C) 其之后最近的if
(D) 同一行上的if
26、以下不正确的语句为( )
(A) if(x>y);
(B) if(x=y)&&(x!=0) x+=y;
(C) if(x!=y) scanf("%d",&x); else scanf("%d",&y);
(D) if(x<y) {x++;y++;}
27、请阅读以下程序:
#include <stdio.h>
void main()
{
float a,b;
scanf("%f",&a);
if(a<0.0) b=0.0;
else if((a<0.5)&&(a!=2.0)) b=1.0/(a+2.0);
else if(a<10.0) b=1.0/x;
else b=10.0;
printf("%f\n",y);
}
若运行时输入2.0〈回车〉,则上面程序的输出结果是( )
(A) 0.000000
(B) 0.500000
(C) 1.000000
(D) 0.250000
28、若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是( )
(A) (exp==0)
(B) (exp!=0)
(C) (exp==1)
(D) (exp!=1)
29、若运行时给变量输入12,则以下程序的运行结果是( )
void main()
{
int x,y;
scanf("%d",&x);
y=x>12?x+10:x-12;
printf("%d\n",y);
}
(A) 0
(B) 22
(C) 12
(D) 10
30、以下程序的运行结果是( )
void main()
{
int k=4,a=3,b=2,c=1;
printf("\n%d\n",k<a?k:c<b?c:a);
}
(A) 4
(B) 3
(C) 2
(D) 1
31、执行以下程序后,变量a,b,c的值分别是( )
int x=10,y=9;
int a,b,c;
a=(--x==y++)?--x:++y;
b=x++;
c=y;
(A) a=9,b=9,c=9
(B) a=8,b=8,c=10
(C) a=9,b=10,c=9
(D) a=1,b=11,c=10
32、若w、x、y、z、m均为int型变量,则执行下面语句后的m值是( )
w=1; x=2; y=3; z=4;
m=(w<x)?w:x;
m=(m<y)?m:y;
m=(m<z)?m:z;
(A) 1
(B) 2
(C) 3
(D) 4
33、若w=1,x=2,y=3,z=4,则条件表达式w<x?w:y<z?y:z的值是( )
(A) 4
(B) 3
(C) 2
(D) 1
34、执行以下程序段后的输出结果是( )
int w=3,z=7,x=10;
printf("%d\n",x>10?x+100:x-10);
printf("%d\n",w++||z++);
printf("%d\n",!w>z);
printf("%d\n",w&&z);
(A) 0
1
1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -