⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 练习(一).txt

📁 谭浩强的C语言题集
💻 TXT
📖 第 1 页 / 共 4 页
字号:
		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 + -