资源描述
第6讲:运算符和表达式
1. 写出下列各逻辑表达式的值。设,a=3,b=4,c=5。
(1) a + b > c && b == c 0
(2) a || b + c && b - c 1
(3) !(a > b) && !c || 1 1
(4) !(x = a) && (y = b) && 0 0
(5) !(a + b) + c – 1 && b + c / 2 1
2. 阅读程序,写出运行结果:
#include <stdio.h>
int main()
{
int a=3,b=1, x=2, y=0;
printf("%d, %d \n", (a > b) && (x > y) , a > b && x > y);
printf("%d, %d \n", (y || b) && (y || a), y || b && y || a);
printf("%d\n",!a || a > b);
}
1,1
1,1
1
3. 有以下程序
int main()
{
int a=1,b=2,m=0,n=0,k;
k = (n = b > a) || (m = a < b);
printf("%d, %d\n", k, m);
}
程序运行后的输出结果是?1,0(短路)
4. 以下程序的输出结果是?
int main()
{
int a=4,b=5,c=0,d;
d=!a && !b || !c;
printf("%d\n", d);
}1
5. 以下程序的输出结果是?
#include <stdio.h>
int main()
{
int a ,b,d=241; a=d/100%9;
b=(-1) && (-1);
printf("%d,%d\n", a, b);
}2,1
6. 为表示关系 x≥y≥z,应使用 C 语言表达式是?(x>=y&&y>=z)
7. 已知:char c; int a, b, d; c=’w’; a=1; b=2; d=-5; 求下列表达式的值: 。
(1) 'x'+1 < c 0
(2) 'Y' != c - 5 1
(3) –a – 5 * b >= d + 1 1
(4) 3 > d < -1 0
(5) d != b + 2 == 4 0
8. 有以下程序,阅读后写出程序的运行结果。
int main()
{0
int m=3, n=4,x;
x=-m++;
x=x + 8 / ++n;
printf("%d\n", x);
}
9. 有以下程序,阅读后写出程序的运行结果。
#include <stdio.h>
int main()
{
int a=2,b=3,c=4;
printf("%d\n", 1 / 3.0 * 3.0 == 1.0); 1
printf("%d\n", a + b > 3 * c); 0
printf("%d\n", (a <= b) == (b > c)); 0
printf("%d\n", 'A' != 'a'); 1
}
10. 用条件表达式描述
(1) 取三个数 a、b、c 中的最大者 a>c?(a>b?a:b):(c>b?c:b)
(2) 取三个数 a、b、c 中的最小者 a<c?(a<b?a:b):(c<b?c:b)
11. 思考题
(1)“=”和“= =”有什么区别?
(2)“&”和“&&”、“|”和“||”有什么区别?
第6.6讲:位运算的应用
1.假设
unsigned short mode = 0777;
unsigned short umask = 022;
写位运算表达式:根据umask的设置对mode的特定位清零,具体为,如果umask的某一位标志为1,则mode的相应位清为0,其他位保持不变。~umask&mode
~(k<<(umask>>4))&mode
2.已知一个unsigned long的数可以看成是由两个unsigned short组成,分别为高16位和低16位,通过写写位运算表达式分别将这两个unsigned short数取出保存到两个unsigned short的变量中。
3. 已知对一个unsigned int oflag,第一位(以1序)代表控制文件的读开关,第二位代表控制文件的写开关,1代表开关为ON状态,0为OFF状态,除此之外的其他位不处理,默认一直都是OFF。假设初始情况读开关和写开关都是OFF状态。写位运算表达式:
第一步:仅打开读开关
第二步:仅打开写开关
第三步:测试读开关和写开关的状态
第四步:仅关闭读开关
第五步:仅关闭写开关
第六步:同时打开读写开关
第七步:同时关闭读写开关
4. 我国邮政编码的一二位代表省份或直辖市。第三四位代表地、市、州。第五六位代表一个县.一个镇或者一个居住的小区。例如:邮政编码“130021”“13”代表吉林省,“00”代表省会长春,“21”代表所在投递区。假设用一个unsigned long来表示邮政编码,则”130021”可以表示为0x00130021,试写位运算表达式,已知一个邮政编码,快速提取其省份,地市和投递区这三个域。
5. 交换两个unsigned long类型的值,不用中间临时变量。(提示,使用异或,异或有两个特性:一个数异或本身恒等于0;一个数异或0恒等于本身。)
6. 整数求负,设 int x=7,利用位运算表达式求-7。
7. 有两个整形变量a和b,只用位运算,不用if、switch等条件判断语句,找出较大的那个变量。
8. 判断正整数num是奇数还是偶数
9. 取整型变量num的第k位(二进制表示中);
10. 将整型变量num的第k位(二进制表示中)清零;
展开阅读全文