C语言-逻辑运算

1、逻辑运算符

C语言有3种逻辑运算符,其逻辑运算对象可以是关系表达式或逻辑表达式,逻辑运算的结果只有“真”或“假”。

目数单目双目
运算符!&&||
名称逻辑非逻辑与逻辑或

逻辑非(!):逻辑非运算符的对象如果为“真”,那么结果为“假”;若对象为“假”,则结果为“真”。
逻辑与(&&):逻辑与运算符的两个逻辑运算对象只要有一个为“假”,那么结果就是“假”;两个都为“真”,结果才为“真”。
逻辑或(||):逻辑或运算符的两个逻辑运算对象只要有一个为“真”,那么结果就是“真”;两个都为“假”,结果才为“假”。

2、逻辑运算符的使用

其中 ! 是单目运算符,&&|| 是双目运算符,C语言中单目运算符的优先级是高于双目运算符的。所以逻辑非(!)的运算优先级高于关系运算符。而逻辑与(&&)和逻辑或(||)的优先级低于关系运算符。

逻辑运算符经常是与if()语句搭配使用的,用它可以连接关系表达式,例如表示x是否在闭区间[-1,1]中可以表示为if (x>=-1&&x<=1),表示x>=-1且x<=1那么此表达式的值才为“真”,才会执行if下的语句。

:逻辑运算符的使用会出现短路的现象,例如当x=-2时,那么if (x>=-1&&x<=1)这个语句的第一个语句x>-1就为“假”,此时就可以判断出这个逻辑语句的结果一定就为“假”,程序就不会执行后面一句判断x<=1,如果后面有改变x值的语句,例如if(x>=-1&&x++<=1),那么此时x++就不会执行,即执行完此if语句后,x的值仍然为-2,。请注意此种现象!

例1:判断输入的字符是否为英文字母

从键盘输入一个字符,判断是不是英文字母。

#include <stdio.h>

int main(void)
{
	char ch;
	
	printf("Enter a character:");
	ch = getchar();			/*变量ch接收从键盘输入的一个字符*/
	if ((ch>='a' && ch<='z') || (ch>='A' && ch<='Z')){ /*判断是否为英文字符,含大小写*/
		printf("It is a letter.\n");
	} else {
		printf("It is not a letter.\n");
	}
	
	return 0;
}

运行结果:

Enter a character:u
It is a letter.

Enter a character:5
It is not a letter.

例2:统计英文字母和数字字符

输入一个正整数n,再输入n个字符,统计其中英文字母、数字字符和其他字符的个数。

#include <stdio.h>

int main(void)
{
	int digit, i, letter, n, other;	/*定义3个变量分别存放统计结果*/
	char ch;
	
	digit = letter = other = 0;		/*置存放统计结果的3个变量的初值为零*/
	printf("Enter n:");				
	scanf("%d", &n); 
	getchar();						/*读入并舍弃换行符*/
	printf("Enter %d characters:", n); 
	for (i=1; i<=n; i++){			
		ch = getchar();	
		if ((ch>='a' && ch<='z')||(ch>='A' && ch<='Z')){
			letter++;				/*如果ch是英文字母,累加letter*/
		} else if (ch>='0' && ch<='9'){
			digit++;				/*如果ch是数字字符,累加digit*/
		} else {
			other++;	/*ch是除字母、数字字符、以外的其他字符,累加other*/
		}
	}
	printf("letter = %d, digit = %d, other = %d\n", letter, digit, other);
	
	return 0;
}

运行结果:

Enter n:7
Enter 7 characters:tys23*&
letter = 3, digit = 2, other = 2

注: 1、该段程序注意digit = letter = other = 0;这种写法,这是因为赋值运算符的结合方向是从右向左,其等价于以下代码:

	other = 0;
	letter = other;
	digit = letter;

这样所以的变量都会置0。但是一般不建议使用这种写法,因为这样可读性不好。
2、注意scanf()函数后的getchar();这一句程序,因为scanf()函数输入数据时要以回车结束,而回车本身也是一个字符,所以会被getchar();这一句给读到,这句话读到后什么也没做,相当于舍弃掉了scanf()最后输入的回车字符。

参考 C语言程序设计(第4版)/何钦铭,颜晖
例题及课后习题参考程序https://gitee.com/sgxgitee/mooc-c

  • 21
    点赞
  • 126
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值