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()最后输入的回车字符。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/63388.html