运算符,选择语句
一,运算符 自变运算符: ++/-- 使变量的值自动加1或者减1 前自变:++num/--num 立即生效 后自变:num++/num-- 下一行语句才有效 注意:不要在一行代码中多次使用自变运算符 * ++ -i 这样对吗? 这样不对 在这里-i是表达式,自增自减只能针对一个变量进行运算! -i++ 这样可以,此时是先 i++ 再取负值哦! 算术运算符: + - * / % 整数/整数 结果还是整数,没有小数点,只保留整数部分 10/3 -> 3 10%3 -> 1 / % 除数不能为0,否则就会浮点数例外、(核心已转储),这是个运行报错,一旦产生程序立即停止,后面不再执行 注: 2%5 -2%5 2%-5 -2%-5 他们输出结果各是什么呢? 应该是 2 -2 2 -2 %它的结果以被取余的为基准即2,-2,2,-2 还有: printf("%lf", 5.0%2); 这是什么? 这样会报错 5.0%2中 %要求是整型且输出符号由被取余来决定 什么意思? 就是 printf("%ld", (long)5.0%2); 这样是对的而 printf("%d", (long)5.0%2); 这样能输出但是会警告; 若a % b == 0,说明a是b的整数倍 关系运算符: > = a++ 为0,b++被短路了,但是c++没有被短路哦,这里要注意 故输出为1,0,1 条件/三目运算符:运算对象有三个部分 A ? B : C 判断A的值如果为真则执行B,否则执行C 赋值运算符 a = 10; a += 10; a=a+10; a -= 10; a *= 10; a /= 10; a %= 10; 位运算符: & | ~ ^ 逗号运算符: *优先级最低 eg:int num = 0, num1=0; num1 = (num=1,2,3);----> 括号中num被赋值为1,逗号优先级最低故num1=3 num=? num1=? 这时num应该等于1,num1等于3 二、分支语句 if(表达式); //单分支 { //表达式为真(非零),则执行此处代码 } if(表达式) //双分支 { //表达式为真(非零),则执行此处代码 } else { //表达式为假(零),则执行此处代码 } if(表达式1) //多分支 { //表达式1为真(非零),则执行此处代码 } else if(表达式2) { //表达式2为真,则执行此处代码 } else if(表达式3) { //表达式3为真,则执行此处代码 } else { //如果以上所有表达式都为假,则最后执行此处代码 }三,类型转换只有相同类型的数据才能运算,如果类型不相同的数据需要先转换相同类型后再进行计算。
自动类型转换:
转换规则:
以不丢失数据为基础,可以适当地牺牲一些空间
1、字节少的向字节多的转
2、有符号的向无符号的转
3、整型向浮点型转
注意:char short如果与不同类型的数据运算时,会先提升为int类型后参与运算
强制类型转换:
(新类型名)数据;
这种方式有可能会丢失数据,慎重使用
四,switch开关分支语句
switch(n) //n可以是数值、表达式,运算结果必须是整数
{
case val: //如果val==n,则打开执行开关
//val必须是整型常量
...
break; //关闭执行开关,结束switch
//如果每个case后都加break,形成了分支结构
//switch中不能使用continue配合
//case a ... b: 可以表示,但是只有GNU编译器才支持该语法,不建议使用
case val1:
...
default:
//如果所有的case都没有打开,则最后打开default,并且放在任何位置都可以最后打开
}
这里有个有趣的现象:
在linux ubuntu16.04
case 要求是常量
const int a=1;
switch(1){
case a:.... }编译会错误的哦
但是在windows vscode-mingw 同样的方式不会报错哦,甚至会执行case a:这个语句内的内容哦
可以去试一试。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]