操作符
微积分操作符
操作符总括
+加 a+b
-减 a-b
*乘 a*b
/除 a/b
%求余 a%b
以此类推和加法操作符无须多说,他们来看一看加法操作符和求余操作符
加法操作符
三个有理数相乘的结论为双精确度有理数,三个有理数相乘的结论为有理数(通常向0位段)比如:5/3 运转结论为1,但非了十进制部份
依照有理数加法优点:十进制 结构设计方式
十进制到位元 #include<stdio.h> int main()
{
float n = 1.525f; //float n = 1.425f;
printf(“%d”, (int)(n * 10 + 5)/10); //十进制到位元 输入为 2
return 0;
}
十进制到十进制点后两位 #include<stdio.h> int main()
{
float n = 1.525f;
printf(“%f”, (int)(n*100+0.5)/100.0); //十进制到十进制点后两位
return 0;
}
当然也有函数可以实现十进制<stdio.h>里面有个 round() 函数 将浮点值舍入为最接近的有理数。 #include<stdio.h> #include<math.h> int main()
{
float n = 1.525f;
printf(“%f”, round(n)); //输入为 2.000000
return 0;
}
求余操作符
求余只能三个有理数求余利用求余得到有理数的各位元数:水仙花数 算法
#include<stdio.h> int main()
{
int i,n,m,l;
for(i=100;i<=999;i++)
{
n=i/100; //百位数
m=i%100/10; //十位数
l=i%10; //位元数
if(i==n*n*n+m*m*m+l*l*l) //判断水仙花数
{
printf(“%d\t“,i);
}
}
printf(“\n“);
return 0;
}
关系操作符和逻辑操作符
关系操作符
关系操作符和逻辑操作符主要用在分支和循环里面作为条件判断真假比较的结果有两种状态 1 和 0 真(1)和假(0)关系操作符总括>小于 1>2 为假,结论为0<大于 1<2 为真,结论为2>=大于等于 1>=2 为假,结论为0<=小于等于 1<=2 为真,结论为1==等于 1==2 为假,结论为0!=不等于 1!=2 为真,结论为1
对于十进制 浮点型数据不够精确 通常不用==0.009<x<0.011 这种数学表达式就禁用了,要用逻辑操作符来连接逻辑操作符
&& 逻辑与
左右三个条件都为真 最后的结论为真 否则(只要有一个为假) 结论为假 if(0.009<x&&x<0.011){} //这种就是正确的
|| 逻辑或
左右两边的条件只要有一个为真 结论为真 两边都为假 结论为假 if(x<0.009||x>0.011){}
!逻辑非
通常放在一个条件前面 真变假 假变真关于用数字作为条件 0为假 非0为真逻辑操作符的截断
逻辑与 两边都为真 结论为真左边为假 直接得到整个式子的结果为假(右边可以不用算) #include<stdio.h> int main()
{
int x=1;
if(0&&(++x)){}
printf(“%d”,x); //结论为1 即++x这个代码未执行
return 0;
}
逻辑或 左边为真 右边可以不用算(截断)位操作符(二进制操作符)
学C词汇很少用到二进制,但是,他们需要了解他按位与 &对一个二进制数字操作:有0则014&89 14二进制:1110 89二进制:0101 1001
0000 1110
0101 1001
按位与 0000 1000
结论为:0000 1000(二进制),10(十进制)
按位或 |对一个二进制数字操作:有1则1按位异或 ^
对一个二进制数字操作:相同为0不同为1按位取反~
对一个二进制数字操作:1变0 0变1~14 14二进制:0000 1110
0000 1110
按位取反 1111 0001
左移 <<x<<n 去掉前面的n位 后面补上n个014<<2 14二进制:0000 1110
0000 1110
0011 1000
左移补0 结论为0011 1000
右移 >>x>>n 去掉后面的n位 前面补上n个符号位(正数前面补0 负数前面补1)对于一个正有理数 右移一位相当于除以2异或 ^
特点:对于同一个数字异或两次会得到它本身 14^87^87==14
异或的用法简单的加密z=x^y 对x进行加密
a=z^y 对z进行解密交换三个变量的值
//利用临时变量交换
int temp;
temp=x;
x=y;
y=temp;
//利用异或
x=x^y;
y=x^y;
x=x^y;
//用以此类推法
x=x+y; //对于x和y比较大的时候 x+y可能超过int范围
y=x–y;
x=x–y;
赋值操作符
把一个值赋值给一个变量: 左值 = 右值 把右值赋值给左值
x=4; //4这个值赋值给x这个变量
左值 只能是变量右值 可以是数字 表达式(1+2)条件操作符(三目操作符)
条件 ? 表达式1 : 表达式2
//求三个数的最大值 max=a>b?a:b;
其他操作符
() 括号操作符
改变计算顺序(优先级)类型转换 (float)3/4:
类型转换存在的问题:精确度高的数据 转换成精确度低的数据 可能会丢失数据
类型 char int float double 精确度由低到高
(int)(3.14+0.5) 十进制强转有理数 十进制部份全部丢掉
++ –自增和自减
前++
先运算,再自增
int x,y;
x=0;
y=x++; //先用x之前的值进行计算 然后 再给x变量加1 //结论y=0,x=1
后++
先自增,再运算
int x,y;
x=0;
y=++x; //先给x变量加1,再进行计算
//结论y=1,x=1
前加加,后加加探讨(小白勿看)
#include<stdio.h> int main()
{
int i = 5, j = 5, p, q;
p = (i++) + (i++) + (i++);
q = (++j) + (++j) + (++j);
printf(“%d,%d,%d,%d”, p, q, i, j);
return 0;
}
输入结论:15,22,8,8
这个涉及到 前加加先运算,再自增;后加加先自增,再运算 这一优点 #include<stdio.h> int main()
{
int i = 8;
//输入 i
printf(“%d\t“, ++i); //i先加一在输入 9 9
printf(“%d\t“, —i); //i先减一再输入 8 8
printf(“%d\t“, i++); //i输入再加一 8 9
printf(“%d\t“, i—); //i输入再减一 9 8
printf(“%d\t“, –i++); //i输入再加一 -8 9
printf(“%d\t“, –i—); //i输入再减一 -9 8
printf(“\n—————–\n“);
i = 8;
printf(“%d\t%d\t%d\t%d\t%d\t%d\n“, ++i, —i, i++, i—, –i++, –i—);//前加加完成后再后加加 return 0;
}
//运转结论
9 8 8 9 –8 –9
—————–
8 7 8 8 –8 –8
这又涉及到C的优点:语句编译时从右往左& 取变量地址
scanf(“%d”,&a);sizeof 计算变量/类型的大小
sizeof(int)逗号操作符 隔开几个表达式
int x;
x=1,2,3+4,5,7; x最后的值是1
其他
[] 下标操作符. 点运算-> 箭头操作符*指针操作符() 函数{}语句其他后面介绍