运算符与表达式:
a+b a-b a*b a/b 加减乘除等于
40种左右运算符
1、赋值运算符
x=3;数学:x等于3 计算机:把3赋给x;结合性 优先级
符号: = 双目运算符(需要两个操作数)x=y x左操作数 y右操作数
结合性:从右往左 a = b = 6;
注意:左值必须是变量
2、加法运算符
符号:+ 双目运算符(需要两个操作数)x+y x左操作数 y右操作数
结合性:从左往右 a+b+6;
3、减法运算符
符号:- 双目运算符(需要两个操作数)x-y x左操作数 y右操作数
结合性:从左往右 a-b-6;
拓展: a = a + b;
b = a - b; b = a+b-b; b=a;
a = a - b; a+b-b 红色的b是最开始没有改变的b 黑色的b是经过重新赋值之后的b
1 #include <stdio.h> 2 3 int main() //在不加入中间变量的情况下,交换两个变量的值 4 5 { 6 7 int a,b; //声明 8 9 a = 755564693; 10 11 b = 98765416; 12 13 a = a + b; 14 15 b = a - b; 16 17 a = a - b; a=a+b-b 18 19 printf("a=%d\nb=%d\n", a, b); //105 77 20 21 return 0; 22 23 }
4、符号运算符
符号: +(正) -(负) 单目运算符(只有一个操作数) -a -c -d +5 +7
结合性:从左往右
5、乘法运算符
符号:* 双目运算符
结合性:从左往右
6、除法运算符
符号:/ 双目运算符
结核性:从左往右
截尾:整数相除,得到的小数,小数点后面的部分全部截掉。
1 #include <stdio.h> 2 3 int main() //在不加入中间变量的情况下,交换两个变量的值 4 5 { 6 float a,b,n; //声明 7 8 9 a = 7.0; 10 b = 4.0; 11 n = a / b; 12 13 printf("%f\n", n); 14 15 16 return 0; 17 18 }
混合运算:
隐式转换:就是我们在惊醒运算的过程中,各种数据额类型之间的的转换。
1 #include <stdio.h> 2 3 int main() //在不加入中间变量的情况下,交换两个变量的值 4 { 5 6 int i=5; 7 8 float f = 5.2; 9 10 double d = 3.33; 11 12 short s = 2; 13 14 char c = 'A'; 15 16 int x; 17 18 x = f*d + i*f - s*f + f / s - i*c; //17.316+ 26- 10.4+ 2.6 - 325 = -289.484 19 20 printf("%d\n", x); //35.516 double--->int 21 return 0; 22 23 }
x = f*d + i*f - s*f + f / s - i*c;
1、f*d float的f double的d float-->double 最后多两个double类的值进行计算。
2、 i*f --->double
3、 s*f--->double
4、 f / s --->double
5、 i*c char-->int 得到int值
6、 Double和int int-->double
7、 最后得到的是double
8、 赋值运算符总是把右操作数转换为做操作数的类型
+=、-=运算符:
+=: a+=b;---》a=a+b;
-=: a-=b;----》a=a-b;
自增,自减:
1 #include <stdio.h> 2 3 int main() //在不加入中间变量的情况下,交换两个变量的值 4 { 5 6 int a = 5, b = 5; 7 int aplus=0, plusb=0,sum; 8 sum = a++ + ++b; //在这个表达式的计算过程中 9 10 11 /* 12 13 ++b; 1、b自增 b=6 14 15 sum = a + b; 2、a=5 b=6 sum=11. 16 17 a++; 3、a自增 a=6 18 */ 19 20 printf("%d %d %d\n", a, b, sum); 21 22 23 24 //aplus = a++; //先取值 后自增 先取a的值赋予aplus a再自加 25 26 //plusb = ++b; //先自增 后取值。b的值先+1,得到的值赋给plusb 27 28 /*++b; 29 30 b++;*/ //一定会自己加1 但是要考虑的是是用原来的值 还是用自加之后的值 31 32 // 33 34 //printf("a=%d\nb=%d\naplus=%d\nplusb=%d\n", a, b, aplus, plusb); 35 36 // 6 6 5 6 37 38 return 0; 39 40 }
前缀自增:++a:先自增 后取值。
先给a进行计算,然后用计算后的a值带入表达式。
++a 我先处理你的事情,我再去计算。
后缀自增:a++:先取值 后自增。
先用值计算表达式,表达式计算完成之后,我们在对a进行计算。
只要看见a++ 先不管 算完之后我再去找你。
注意:一个变量在一个表达式里面出现多次,应该并且尽量避免使用++ --
1 #include <stdio.h> 2 3 int main() //在不加入中间变量的情况下,交换两个变量的值 4 { 5 int a = 5, b = 5; 6 int aplus=0, plusb=0,sum; 7 8 //sum = b*a++; // a=5 b=5 sum=5*5 a=a+1; 9 //sum = b*++a; //a=a+1 a=6 b=5 sum=5*6 10 //sum = a++ + ++a + ++a + a++; //不要大家计算 如果我看到我的学生写出这种代码 我就是一口老血喷出来。 11 12 sum = a++; 13 sum = ++a; 14 15 a++; 16 sum = ++a; 17 18 19 printf("%d %d", sum, a); 20 return 0; 21 }
自减:-- 雷同 ++
2016 05 30 作业
1、写出 a+=a-=a*=a 的计算步骤 自己编写程序赋值 验证
2、写出 a++ + b-- * c++ 的计算步骤 自己编写程序赋值 验证
3、编写一个程序,要求有int short long char float double等数据类型,对他们进行混合运算。熟悉隐式转换的过程。
1 #include <stdio.h> 2 3 int main() 4 { 5 int i = 5; 6 float f = 5.2; 7 double d = 3.33; 8 short s = 2; 9 char c = 'A'; 10 int x; 11 12 x = f*d + i*f - s*f + f / s - i*c; //17.316+ 26- 10.4+ 2.6 - 325 = -289.484 13 14 printf("%d\n", x); //-289 从double-289.484 转换到int -289 15 16 return 0; 17 }