C语言典型例题41

《C程序设计教程(第四版)——谭浩强》


习题3.1 写出下列各个表达式的值。设a=3,b=4,c=5。
    (1)        a+b>c && b==c
    (2)        a||b+c && b-c
    (3)        !(a>b) && !c || 1
    (4)        !(x=a) && (y+b) && 0
    (5)        !(a+b)+c-1 && b+2/2


相关知识点:

(1)逻辑表达式的判断

在C语言中,逻辑表达式的判断主要是通过逻辑运算符来实现的,逻辑运算符主要有三种:&&(逻辑与)、||(逻辑或)和(逻辑非)。

  1. 逻辑与运算符(&&):当两个操作数都为真时,结果才为

  2. 逻辑或运算符(||):只要有一个操作数为真,结果就为

  3. 逻辑非运算符():用来反转操作数的逻辑状态,如果操作数为,则逻辑非运算符将产生

超详细判断过程:(当a=3,b=4,c=5时)
(1)a+b>c && b==c

a+b>c(3+4>5)        为真

b==c (4==5)       为假——“==”表示判断,4等于5吗?

&&全为真才为。有一个为假都为

一真一假为

(2)a||b+c && b-c

a||b+c                为真(非0为真)

真&& b-c            为真

该逻辑表达式为真

(3)!(a>b) && !c || 1

a>b                        为假

!(a>b)                     为真

c                             为真

!c                         为假

真&&假                   为假

假||真                      为真

该逻辑表达式为真

(4)!(x=a) && (y=b) && 0

x=a                                为真

!(x=a)                             为假

y=b                                为真

假&&真                          为假

假&&0                            为假

该逻辑表达式到时为假

 (5)!(a+b)+c-1 && b+2/2

a+b                                为真

!(a+b)                             为假(即为0)

0+c-1                              为真

b+2/2                              为真

真&&真                           为真

该逻辑表达式到时为真

(2)操作符的优先级

在‌C语言中,操作符的优先级决定了表达式中操作的执行顺序。理解这些优先级对于编写正确且高效的代码至关重要。以下是C语言中操作符的优先级顺序:

  1. 括号:圆括号()和方括号[]具有最高优先级,用于改变运算顺序。
  2. 单目运算符:包括正负号+-、逻辑非!、按位取反\~、取地址&、解引用*、类型转换(type)等,这些运算符的优先级次之
  3. 算术运算符:乘除法*/、求余%的优先级高于加法和减法+-,而加法和减法的优先级相同但低于乘除法。
  4. 移位运算符:左移和右移的优先级低于算术运算符。
  5. 关系运算符:大于>、小于<、大于等于>=和小于等于<=的优先级低于移位运算符。
  6. 相等和不等运算符:等于==和不等!=的优先级低于关系运算符。
  7. 位运算符:按位与&、按位异或^和按位或|的优先级继续降低。
  8. 逻辑运算符:逻辑与&&和逻辑或||的优先级最低。

此外,‌赋值运算符=及其复合赋值运算符如+=-=等具有最低的优先级,并且是从右到左结合的。‌逗号运算符,也具有最低的优先级,用于分隔表达式中的多个操作。

当表达式中包含多个操作符时,首先根据优先级从高到低执行操作。如果两个操作符的优先级相同,则按照它们的结合性(从左到右或从右到左)来确定操作的顺序。理解这些规则对于避免编程错误和提高代码效率至关重要。‌


代码:

//《C程序设计教程(第四版)——谭浩强》
//习题3.1 写出下列各个表达式的值。设a=3,b=4,c=5。
//	(1)		a+b>c && b==c
//	(2)		a||b+c && b-c
//	(3)		!(a>b) && !c || 1
//	(4)		!(x=a) && (y+b) && 0
//	(5)		!(a+b)+c-1 && b+2/2

#include <stdio.h>
int main()
{
	int a = 3;
	int b = 4;
	int c = 5;
	
	//逻辑表达式的值是一个逻辑量(真或假)——利于if语句来判断逻辑表达式的真假
	printf("下面各逻辑表达式的值如下:\n");
	
	//(1)a+b>c && b==c
	if(a+b>c && b==c)
	{
		printf("逻辑表达式a+b>c && b==c为真\n");
	}
	else
	{
		printf("逻辑表达式a+b>c && b==c为假\n");
	}
	
	//(2)a||b+c && b-c
	if(a||b+c && b-c)
	{
		printf("逻辑表达式a||b+c && b-c为真\n");
	}
	else
	{
		printf("逻辑表达式a||b+c && b-c为假\n");
	}
	
	//(3)!(a>b) && !c || 1
	if(!(a>b) && !c || 1)
	{
		printf("逻辑表达式!(a>b) && !c || 1为真\n");
	}
	else
	{
		printf("逻辑表达式!(a>b) && !c || 1为假\n");
	}
	
	//(4)!(x=a) && (y+b) && 0
	int x = 0;
	int y = 0;
	if(!(x=a) && (y+b) && 0)
	{
		printf("逻辑表达式!(x=a) && (y+b) && 0为真\n");
	}
	else
	{
		printf("逻辑表达式!(x=a) && (y+b) && 0为假\n");
	}
	
	
	//(5)!(a+b)+c-1 && b+2/2
	if(!(a+b)+c-1 && b+2/2)
	{
		printf("逻辑表达式!(a+b)+c-1 && b+2/2为真\n");
	}
	else
	{
		printf("逻辑表达式!(a+b)+c-1 && b+2/2为假\n");
	}
	return 0;
}

运行结果:


编写代码时遇到的问题:

(1)借助if……else语句的特点求解


    if(表达式1)

     {

                表达式1;

     }

    else

     {

                表达式2;

     }

当逻辑表达式为时,执行表达式1;为时,执行表达式2。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值