2019独角兽企业重金招聘Python工程师标准>>>

###算术比较 下面列出了两个操作数用于比较的算术比较运算符

它们的运算结果会得到int类型的值,如果为真则结果为1,如果为假结果为0 这些表达式称为逻辑表达式或者布尔表达式,因为每个表达式都会等到两个结果之一:truefalse

  • < 左操作数小于右操作数
  • <= 左操作数小于等于右操作数
  • == 左操作数等于右操作数
  • != 左操作数不等于右操作数
  • > 左操作数大于右操作数
  • >= 左操作数大于等于右操作数

###if语句

在了解了逻辑表达式之后,就可以配合if语句来对程序进行流程的控制

代码示例:

<!-- lang: cpp -->#include <stdio.h>int main(){int a = 10;int b = 11;if(a<b) {printf("a<b");} else if(a>b) {printf("a>b");} else {printf("a=b");}//由于if语句控制表达式要生成一个布尔结果,所以编译器要将if表达式的数值结果转换为bool类型//根据上面的结论,可以想象,下面的例子(当count值为0时是false,只有在非0时才执行if代码块内的语句)int count = 0;    //由于是0所以下面的if判断没有进去if(count){    //只有当非0时才是true,因为0是false,1是trueprintf("The value of count is not zero. \n");}
}

####嵌套的if语句

嵌套if语句就是if语句中再包含if语句,更精确的控制,只有当最外层的if为true时,才能进入到里层的if判断

代码示例:

<!-- lang: cpp -->#include <stdio.h>
#includ <limits.h>int main(){long test = 0L;printf("Enter an integer less than %ld\n",LONG_MAX);scanf(" %ld",&test);if(test % 2L == 0L) {printf("The number %ld is even",test);if((test / 2L) % 2L == 0L) {printf("\nHalf of %ld is also even",test);printf("\nThat's interesting isn's it?\n");}} else {printf("The number %ld is odd\n",test);}
}

####多项选择语句else if 语句

一组选项中选择一项的语句 每个if表达式均可任意,只要其结果是true或者false即可 如果第一个if表达式为false,就执行下一个if表达式,直到找到一个结果为trueif表达式为止

代码示例:

<!-- lang: cpp -->//注意,在第一个if语句后,不需要测试if条件中的下限,因为如果执行到某个if,前面的测试就一定是false
if(salary < 5000) {printf("Your pay is very poor.");     //pay < 5000
} else if(salary < 15000) {printf("Your pay is not good.");     //pay < 15000
} else if(salary < 50000) {printf("Your pay is not bad.");       //pay < 50000
} else if(salary < 100000) {printf("Your pay is very good.");    //pay < 100000
} else {printf("Your pay is exceptional.");  //pay >= 100000
}

####多项选择语句switch 语句

switch语句允许根据一个整数表达式的结果,从一组动作中选择一个动作 switch语句没有else if语句那么灵活,但在许多情况下使用起来很简单

代码示例:

<!-- lang: cpp -->switch(ticket_number)
{case 35:printf("Congratulations! You win first prize!");break;        case 122:printf("You are in luck - second prize.");break;case 78:printf("you are in luck - third prize.");break;default:printf("Too bad, you lose.");
}

使用枚举类型的变量控制switch

<!-- lang: cpp -->enum Weekday {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday}today = Wednesday;
switch(today){case Sunday:printf("Today is Sunday");break;case Monday:printf("Today is Monday");break;case Tuesday:printf("Today is Tuesday");break;case Wednesday:printf("Today is Wednesday");break;case Thursday:printf("Today is Thursday");break;case Friday:printf("Today is Friday");break;case Saturday:printf("Today is Saturday");break;case Sunday:printf("Today is Sunday");break;default:printf("today is a Invalid value!");
}

再看一个例子:

<!-- lang: cpp -->int main()
{char ch = 0;printf("please input a char type letter:\n");scanf("%c",&ch);//isalpha()函数用来判断char字符是不是一个字母,如果是就返回true,否则返回false//所以if语句中的!isalpha()函数的意思是//如果传入的不是一个字母就为true,就执行if语句块中的语句,否则就执行else语句中的代码if(!isalpha(ch)){printf("The character is not a letter.\n");} else {switch(tolower(ch)){case 'a': case 'e': case 'i': case 'o': case 'u':printf("The character is a vowel.\n");break;default:printf("The character is a consonant.\n");}}return 0;
}

###测试字符

下面是一些字符类型的比较 'Z' >= 'A'结果为true,因为Z=90,A=65 'Q' >= 'P'结果为false,因为P在Q的前面 'B' <= 'b'结果为true,因为小写字母比对应的大写字母大32 'B' != 66结果为false,B的十进制值为66

代码示例:将大写字母转换为小写字母

<!-- lang: cpp -->#include <stdio.h>/*下面的判断还可以写的更加严谨,但是这里只是简单看一个例子字符的大小写转换也可以使用标准库头文件<ctype.h>中的toupper()和tolower()函数
*/
int main(void) {char letter = 0;printf("Enter an uppercase letter:");scanf("%c", &letter);if(letter >= 'A') {if(letter <= 'Z') {//下面是把大写字母转换为小写字母的方法,适用于所有大写字母,但是只能用于ASCII编码letter-= 'A' + 'a';    printf("You entered an uppercase %c\n", letter);} else {printf("Try using the shift key! I want a capital letter.\n",);}} else {printf("You didn't enter a letter\n");}return 0;
}

###逻辑运算符

有时候执行一个测试不足以做出判断,而需要合并两个或多个检查,如果这些条件都是true,才执行某个操作

####逻辑与运算符&& 它合并两个逻辑表达式,即两个表达式的值都为true或false的表达式 例如:test1 && test2这个逻辑表达式,当test1和test2都为true才为true,有一个false此表达式就为false

代码示例:

<!-- lang: cpp -->//当a的值大于5并且小于20的时候,也就是6~19之间,打印"5<a<20"
int a =10;
if(a > 5 && a < 20) {printf("5<a<20");
}//与上面其实是一个道理,只不过把逻辑表达式存储到了布尔变量中,同样if表达式中两个都为true时,才执行输出语句
bool test1  = a > 5;
bool test2  = a < 20;
if(test1 && test2) {printf("5<a<20");
}

####逻辑或运算||

逻辑或运算符||用于两个或多个条件为true的情形 如果运算符||的一个或两个操作数是true,结果就是true 只有全部操作数都是false,结果才是false ||或运算符的单个例子就不在这举例子了,举一个&&||共存的例子吧

代码示例:

<!-- lang: cpp -->
//下面2大块表达式中的第一个表达式是并且的关系,所以都要都为true,结果才是true
//不过由于2大块表达式的关系是或者,2大块表达式中的一个为true就可以执行输出语句
if((age >12 && age < 20) || savings > 5000) {printf("Either you're a teenager, or you're rich, or possibly both.");
}

####逻辑非!运算符

!运算符是一元运算符,因为它只有一个操作数 它起到翻转逻辑表达式的值,使true变成falsefalse变成true 尽量避免使用这个运算符,它使代码难以理解 下面只给出一个示例,不过多说明了

代码示例:

<!-- lang: cpp -->if((!(age <= 12) && !(age >= 20)) || !(savings <= 5000)) {printf("Something do it...");
}

####条件运算符

条件运算符根据一个逻辑表式等于true还是false,执行两个表达式中的一个 由于涉及三个操作数:一个逻辑表达式和另外两个表达式,因此也称为三元运算符,或三目运算符 condition ? expression1 : expression2 如果condition为true,则执行expression1,否则执行expression2

代码示例:

<!-- lang: cpp -->x = y > 7 ? 25 : 50;//相当于下面if判断语句
if(y > 7) x = 25;
else x = 50;

较为复杂的三元运算代码示例:

<!-- lang: cpp -->int main()
{const double unit_price = 3.50; //单价const double discount1 = 0.05;  //折扣1const double discount2 = 0.1;   //折扣2const double discount3 = 0.15;  //折扣3double total_price = 0.0;       //总价int quantity = 0;               //数量//提示用户输入一个购买数量,此处我输入了60printf("Enter the number that you want to buy:");scanf(" %d",&quantity);//下面的运算,根据用户输入的购买数量后经过打折后计算的总价//首先,由于上面我输入了60,也就是quantity=60//所以符合>50的表达式,通过阅读条件,现在表达式变成了下面的样子//total_price = quantity * unit_price * //               (1.0 - (quantity > 50 ? discount3 : something-else));//quantity > 50表达式成立,所以又变成了下面这样//total_price = quantity * unit_price * (1.0 - discount3);//total_price = 60 * 3.50 * (1.0 - 0.15);//total_price = 60 * 3.50 * 0.85;   60(int类型)隐式转换为double类型再进行乘法计算//total_price = 178.50  这就是整个的运算顺序total_price = quantity * unit_price * (1.0 - (quantity > 50 ? discount3 :(quantity > 20 ? discount2 :(quantity > 10 ? discount1 : 0.0))));//输出总价printf("The price for %d is $%.2lf\n",quantity,total_price);return 0;
}

###运算符的优先级

运算符的优先级确定了表达式中运算符的执行顺序,如下所示:

代码示例:

<!-- lang: cpp -->//下面的表达式的含义为,求职者必须年龄大于等于25并且是哈佛大学毕业,或者是耶鲁大学毕业
Age >= 25 && Harvard || Yale;
//上面的语句相当于下面的语句,如果不知道运算符的优先级,加上括号也是无害的,因为()的运算符级别是最高的
(Age >= 25 && Harvard) || Yale;    //&&的运算级别高于||,所以加上括号也是一样的//如果要是要求耶鲁大学毕业并且年龄也要大于等于25,就要改成下面这样,用括号括起来,改变运算的执行顺序
//自然语意也就发生了改变
Age >= 25 && (Harvard || Yale);

下面的图片表示了C语言中的运算符运算级别

结合上图可以简单总结一下基本的顺序: 二元算术运算符 > 比较运算符 > 二元逻辑运算符 因此,先执行算术运算,再进行比较,之后执行逻辑操作 赋值符号=是列表中最后一个,所以它们在其他运算都完成后执行 注意!运算符在逻辑运算符中的优先级别最高,因此,翻转逻辑表达式的值时,逻辑表达式外面的括号是必需的

###按位运算符

按位运算符有6个,他们操作的是整数值中的位 这些位运算符都只能用于整数类型,其中除了~运算符是一元运算符,只处理一个操作数,其余都是二元运算符 它们如下所示:

  • & 按位与运算符
  • | 按位或运算符
  • ^ 按位异或(EOR)运算符
  • ~ 按位非运算符,也称为1的补位运算符
  • << 按位左移运算符
  • >> 按位右移运算符

####按位与运算符& 如果两个数的二进制某位都是1,结果位就是1,否则,结果位就是0

<!-- lang: cpp -->//计算过程如下
//x        0 0 0 0 1 1 0 1
//y        0 0 0 0 0 1 1 0
//x&y    0 0 0 0 0 1 0 0    所以z等于4
int x = 13;
int y = 6;
int z = x & y;    //z = 4

####按位或运算符| 如果对应位中有一个或两个位是1,按位或运算符|就生成1,否则就生成0

<!-- lang: cpp -->//x        0 0 0 0 1 1 0 1
//y        0 0 0 0 0 1 1 0
//x|y     0 0 0 0 1 1 1 1    所以z等于15
int z = x | y;    //z = 15

####按位异或运算符^ 如果两个位是不同的,按位异或运算符^就生成1,否则就生成0

<!-- lang: cpp -->//x        0 0 0 0 1 1 0 1
//y        0 0 0 0 0 1 1 0
//x|y     0 0 0 0 1 0 1 1    所以z等于11
int z = x ^ y;    //z = 11

####按按位非运算符^ 也称为1的补位运算符,它会翻转其操作数的为,将1变为0,0变为1

<!-- lang: cpp -->//x        0 0 0 0 1 1 0 1
//~x      1 1 1 1 0 0 1 0
int x = 13;
int z = ~x;    //z = -14

####按位左移运算符<< 按位左移运算符<<会把左操作数位移动右操作数指定的位数

<!-- lang: cpp -->//value                        0 0 0 0 1 1 0 0
//value<<shiftcount    0 1 1 0 0 0 0 0    向左移了3位,所以等于96
int value = 12;
int shiftcount = 3;
int result = value << shiftcount;    //result = 96

####按位右移运算符>> 相对于左移,它较为复杂,对于不带符号的数值,向右移位时,会在左边的空位中填充0

<!-- lang: cpp -->//在2字节中value的二进制值为:1111 1111 0101 1100
unsigned int value = 65372U;
//value中的位向右移动两位,在左边补入0,得到的值存储在result中
//在二进制中,其值为0,在十进制中,其值为16343
//0011 1111 1101 0111
unsigned int result = value >> 2;

转载于:https://my.oschina.net/luoguankun/blog/208883

C语言自学《三》---- 条件判断相关推荐

  1. bash腳本編程之三 条件判断及算数运算

    练习: 写一个脚本,判断当前系统上是否有用户的默认shell为bash,如果有就显示有多少个这类的用户:否则,就显示没有这类的用户. #!/bin/bash # grep "\<bas ...

  2. c语言输入三个数判断等边三角形,随便输入三个数,看能否组成一个三角形

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 看看我刚设计的程序为啥点击"!"符号时提示无法生成exe文件? #include #include main() { int a,b, ...

  3. 21.shell语言之if条件判断语句

  4. bash-shell高级编程--条件判断

    条件判断 每一个完整并且合理的程序语言都具有条件判断的功能,并且可以根据条件判断的结果做下一步处理,bash中有test命令,有各种中括号和圆括号操作,和if/then结构 条件测试结构 使用if/t ...

  5. c语言基础学习笔记(三):条件判断语句if-else嵌套和switch-case语句

    文章目录 if判断(条件判断) if语句 优先级 else语句 超市找零代码示例 两数比大小程序示例 if语句没有大括号 计算薪水程序示例 判断成绩及格示例 if-else嵌套 三个数比大小 级联的i ...

  6. Python入门第三章--第一节:条件判断语句

    从这一节开始,我们就进入到了进阶的阶段,这一章是在前一章的基础上进行提高扩展的,从本章开始,我会在每一节的结尾留下作业,大家可以将作业提交到我的邮箱或者直接将作业提交到QQ群的群文件中,我将在QQ群中 ...

  7. C语言条件判断 if / else - C语言零基础入门教程

    目录 一.C 语言条件判断 if 1.if 语法 2.if 实战 二.C 语言条件判断 if / else 1.if / else 语法 2.if / else 实战 三.猜你喜欢 零基础 C/C++ ...

  8. c语言九三字符串的字母个数,C语言判断闰年和平年

    C语言判断闰年和平年 #includevoid fun(int year) { if((year%4==0&&year%100!=0)||(year%100==0&&y ...

  9. 笔记整理1----Java语言基础(一)01 变量与数据类型+02 运算符与表达式+03 条件判断与循环语句+04 JAVA数组+05 函数与方法

    01 变量与数据类型+02 运算符与表达式+03 条件判断与循环语句+04 JAVA数组+05 函数与方法 第01天 java基础知识 今日内容介绍  Java概述.helloworld案例  工 ...

  10. Jinja2常用模板语言(条件判断if,循环遍历for,过滤器)

    python开发前后端不分离web项目的时候,前端通常使用jinja2模板语言.现在介绍一下jinja2模板语言的基本语法. 普通变量 变量表示 格式:{{ 变量名 }} @app.route('/s ...

最新文章

  1. 虚幻4视频笔记002:精简StarterContent文件夹体积
  2. 机器学习模型部署都有哪些坑?剑桥研究者梳理了99篇相关研究
  3. 小程序开发系类之基础部分-开发工具
  4. 【cocos2d-x 手游研发----研发思路及感想】
  5. 【问链-EOS公开课】第十课 EOS 错误码整理
  6. SQL Serve里你总要去改变的3个配置选项
  7. mac下virtualbox安装win7系统
  8. maven正确的集成命令-U-B
  9. 无人职守安装的设计与部署
  10. C#的dapper使用
  11. 创建Console应用程序,粘贴一下代码,创建E://MyWebServerRoot//目录,作为虚拟目录,亲自测试通过,
  12. POJ-1050(DP)
  13. postfix只能发邮件,不能接收从其他邮箱发送的邮件 451 4.3.5 Server conf
  14. 活锁(live lock)是什么
  15. 免越狱版 iOS 抢红包插件
  16. 一分钟了解“Matlab画三维空间中的点plot3”
  17. 「Windows Bug」Window 系统下双网卡内外网冲突
  18. NLTK-004:加工原料文本
  19. 冰刃(IceSword)的使用方法(基础篇)
  20. python玩扫雷_python实现扫雷小游戏

热门文章

  1. 7-25 念数字 (15 分)
  2. ajax请求携带tooken_Spring Boot+Vue 文件上传,如何携带令牌信息?
  3. ant java xml文件,ant 学习(2)-ant开发java程序,buile.xml文件分离
  4. mysql 表死锁_为什么说 MySQL 的表锁不会产生死锁
  5. c语言ntc程序,NTC热敏电阻测温度 单片机C和汇编源程序
  6. v-for和v-if的问题
  7. windows下搭建iphone开发环境
  8. 【加密算法】Base64
  9. CSS中可以通过哪些属性定义,使得一个DOM元素不显示在浏览器可视范围内?
  10. Jenkins pipeline 入门到精通系列文章