目录

c语言逻辑运算和判断选取精选题

【c语言逻辑运算和判断选取精选题】

🍻适合计算机二级,考研复试,期末复习…

https://i-blog.csdnimg.cn/direct/6851dcbecea644ce9f8769c277e8eae2.png

一、易错题

1.1👑 运算符的优先级

https://i-blog.csdnimg.cn/direct/42bbf7eb663a49c384f5c71c039105ec.png

在 C 语言中,运算符的优先级顺序为:算术运算符优先级较高,用于进行基本的数值运算,如加、减、乘、除等;关系运算符用于比较大小、相等关系等,优先级低于算术运算符;逻辑与运算符(&&)用于逻辑判断,优先级低于关系运算符;赋值运算符用于给变量赋值,优先级是最低的。

答案C

逻辑运算符优先级由高到底如下:

优先级运算符名称/描述示例结合性
1() [] . ->函数调用、成员访问a[5], obj.x左到右
2! ~ ++ – - +逻辑非、位非、自增自减!flag, -num右到左
3* / %乘、除、取模a*b, 7%3左到右
4+ -加、减x+y, 5-3左到右
5« »位移运算a«2, b»1左到右
6< <= > >=关系运算符x>5, y<=10左到右
7== !=相等性判断a==0, b!=NULL左到右
8&位与flags & 0x01左到右
9^位异或a ^ b左到右
10位或x
11&&逻辑与cond1 && cond2左到右
12逻辑或
13?:条件运算符x>0?1:0右到左
14= += -= *= 等赋值运算符a=5, b+=3右到左
15,逗号运算符a=1, b=2左到右

https://i-blog.csdnimg.cn/direct/765b3e55c55841bb8082b772353b1834.png

1.2👑三目运算符嵌套使用

https://i-blog.csdnimg.cn/direct/a18c0094dc804614a80d8eaa4d61738f.png

这道题主要考查三目运算符的嵌套使用。三目运算符的格式为 表达式1 ? 表达式2 : 表达式3,当 表达式1 为真时,整个表达式的值为 表达式2 的值;当 表达式1 为假时,整个表达式的值为 表达式3 的值。

在 printf(“\n%d\n”, k<a ? k:c<b ? c:a); 中,先看最外层的三目运算符 k<a ? k:c<b ? c:a,判断条件是 k<a,已知 k = 4,a = 3,4<3 为假。

因为 k<a 为假,所以取冒号后面的部分,即 c<b ? c:a。再判断 c<b,已知 c = 1,b = 2,1<2 为真,所以取 c 的值。

因此,整个表达式的值为 c 的值,也就是 1。

答案D

1.3👑三角形的形状

https://i-blog.csdnimg.cn/direct/aac5a97e45304dad9372628cfba27e6e.png

https://i-blog.csdnimg.cn/direct/df60061534ee4e6386ca305484d2b302.png

【1】处是判断输入的a、b、c三边能否构成三角形。根据三角形的性质,任意两边之和要大于第三边,即a + b > c、a + c > b 、b + c > a ,同时边长不能为非正数,所以还需满足a > 0、b > 0、c > 0 ,这些条件需同时成立,用逻辑与&&连接。

【2】处是判断等边三角形。等边三角形的特征是三条边都相等,即a、b、c三边两两相等,用逻辑与&&连接a == b和b == c (因为若这两个成立,自然a == c也成立)来判断。

【3】处是判断等腰三角形。等腰三角形是至少有两条边相等,所以只要a == b 、a == c 、b == c这三个条件中有一个成立即可,用逻辑或||连接来实现判断 。

答案:

【1】(a + b > c) && (a + c > b) && (b + c > a) && (a > 0) && (b > 0) && (c > 0)

【2】(a == b) && (b == c)

【3】(a == b) || (a == c) || (b == c)

1.4👑 四个数排大小

https://i-blog.csdnimg.cn/direct/fb00d9e5f8d2403489511c8fb523f2d5.png

程序从输入的四个数 a、b、c、d 开始,首先比较 a 和 b ,若 a < b ,就交换它们的值,这样能保证 a 大于等于 b 。

接着对 c 和 d 进行比较(即判断【1】处条件 c < d ),如果 c 小于 d ,交换二者的值,使得 c 大于等于 d 。

然后比较 a 和 c ,若 a < c ,交换它们的值,此时 a 成为 a 和 c 中的较大值。

再比较 b 和 c (即判断【2】处条件 b < c ),若 b 小于 c ,交换它们的值,保证 b 大于等于 c 。

之后分别比较 b 和 d 、c 和 d ,并在满足条件时交换值。

答案

【1】(c < d)

【2】(b < c)

https://i-blog.csdnimg.cn/direct/5fb6bca362c04eed862951dedb0c0b1d.png

1.5👑 同一变量连续递增递减

若有说明语句:int a = 1, b = 0; 则表达式 ++a * –a == b? 12%5:‘x’ 的的值【】

先看 ++a * –a 这部分:

++a 是先自增,a 的初始值为 1,执行 ++a 后,a 的值变为 2。

–a 是先自减,此时 a 的值为 2,执行 –a 后,a 的值变为 1。

然后计算乘法 ++a * –a,即 2 * 1,结果为 2。

接着看 ++a * –a == b 这个条件判断:

前面已算出 ++a * –a 的结果为 2,而 b = 0,所以 2 == 0 这个条件判断结果为 0(假)。

最后看整个条件表达式 ++a * –a == b? 12%5 : ‘x’:

因为条件 ++a * –a == b 为假,所以表达式的值取 : 后面的值,即 ‘x’。

答案 ‘x 或 120’

注意字符别忘记单引号’’,只写x是不对的!!!

当时马虎,++a * –a 两边同时对1增和对1减了!

1.6👑 判断闰年

https://i-blog.csdnimg.cn/direct/06e1c10753404f25a87587a9fceb7d26.png

解析

闰年的判断规则是:能被 400 整除的年份是闰年,此外能被 4 整除但不能被 100 整除的年份也是闰年。

第一个 if 语句 if(y%400==0) f = 1; 已经判断了能被 400 整除的情况。

接下来的 else if 应该判断能被 4 整除但不能被 100 整除的情况,所以【1】处应填入 (y % 4 == 0 && y % 100 != 0) ,当满足这个条件时,将 f 赋值为 1,表示是闰年。

前两个条件都不满足时,说明该年份不是闰年,所以【2】处应将 f 赋值为 0,即 f = 0; 。

答案

【1】(y % 4 == 0 && y % 100 != 0)

【2】f = 0;

1.7👑 if语句变switch

https://i-blog.csdnimg.cn/direct/9566874fba394c9b9529e9f8479225ca.png

https://i-blog.csdnimg.cn/direct/7ac1b4494b2c49238e13a84442620207.png

switch 语句的表达式需要一个能产生整数值的表达式,这里根据 if 语句是根据 mark 的值来判断,所以 switch 后的括号内应填 mark / 10,这样可以将 mark 的值映射到几个离散的整数值,方便与 case 后的常量表达式匹配。

对于 case 标签,根据 if 语句的条件,当 mark 在 60 以下时 k = 1,此时 mark / 10 的值小于 6,所以第一个 case 可以写成 case 0: case 1: case 2: case 3: case 4: case 5,都执行 k = 1 。

当 mark 在 60(含)到 70 之间时 k = 2,此时 mark / 10 的值为 6,所以有 case 6: k = 2; break; 。

当 mark 在 70(含)到 80 之间时 k = 3,此时 mark / 10 的值为 7,所以有 case 7: k = 3; break; 。

当 mark 在 80(含)到 90 之间时 k = 4,此时 mark / 10 的值为 8,所以有 case 8: k = 4; break; 。

当 mark 在 90(含)到 100 之间时 k = 5,此时 mark / 10 的值为 9 或者 10,所以可以写成 case 9: case 10: k = 5; break;

 switch(mark / 10)
{
    case 0: case 1: case 2: case 3: case 4: case 5: k = 1; break;
    case 6 : k = 2; break;
    case 7 : k = 3; break;
    case 8 : k = 4; break;
    case 9: case 10: k = 5; break;
}

1.8👑如何算优惠

https://i-blog.csdnimg.cn/direct/6b9c8865fdb54709adaf7ad9b069fc16.png

第一个 switch 语句根据输入的汽油品种 b 来确定汽油的单价,已知汽油品种 ‘b’ 的单价是 1.35 ,所以【1】处应填入 r1 = 1.35 。

第二个 switch 语句根据输入的服务类型 c 来确定优惠率,已知服务类型 ‘e’ 对应的优惠率是 10%(即 0.1),所以【2】处应填入 ‘e’ 。

计算应付款 m 时,需要用汽油单价 r1 乘以加油量 a ,再乘以 (1 - 优惠率 r2) ,所以【3】处应填入 a * r1 * (1 - r2) 。

答案

【1】r1 = 1.35

【2】‘e’

【3】a * r1 * (1 - r2)\

注意是(1 - 优惠率 r2)!