C语言第7天,运算符、表达式和类型转换
一、表达式的定义
运算符往往需要与运算对象一起使用才有意义。例如:5+10中,5与10是运算对象,+为运算符。在C语言中,一个或多个运算对象与零个或多个运算符组成表达式。
表达式语句:表达式后面加上分号构成表达式语句。C语言中表达式不能单独存在,必须以表达式语句的形式存在。
对于除法,请特别注意整型无法整除时,出现浮点类型数据的问题。
eg.int a,b;
a=5;b=2;
float c;
c=a / b;
printf("%f\n",c);
在C语言里面,整型与整型运算的结果,依然是一个整型。结果的小数部分被丢弃,这一过程被称作截断。
a / b后,结果仍然是一个整型,数值已经被截断了,这时候,我们再赋给一个浮点型的c。也只能是整数2转成浮点2.0了,没有起到效果。
那我们将a,b,c都改为float,这样就不会出现截断了。a,b将会进行浮点运算,结果也是一个浮点数类型float。
二、自增、自减运算符
++为指自增运算符,--为自减运算符。它们仅需要运算符左边或右边有一个运算对象即可。
1.前缀模式
#include<stdio.h>
int main()
{int a,b;
a=10;b=10;
printf("%d %d\n",++a,--b);
printf("%d %d\n",a,b);
return 0;}
运算结果为11 9
所以前缀模式的作用为将使用时的结果进行+1或者-1,并产生额外作用(将运算对象本身+1/-1)
2.后缀模式
将运算符放在运算对象的后面
与前缀模式不同,后缀模式使用时的结果不变,但会产生与前缀模式相同的额外作用
一元运算符:只有一个运算对象的运算符。例如:自增运算符++,自减运算符--。
二元运算符:有两个运算对象的运算符。例如:赋值运算符=,加法运算符+。
三、关系运算符与逻辑运算符
1.关系运算符
#include<stdio.h>
int main()
{
printf("%d\n", 1 > 2);
printf("%d\n", 1 < 2);
return 0;
}
输出结果为
0
1
表达式关系成立,表达式结果为真,用1表示真。表达式关系不成立,表达式结果为假,用0表示假
大于>,小于<,等于==,不等于!=,大于等于>=,小于等于<=
2.逻辑运算符
逻辑或||和逻辑且&&
例题.1.如何表达2<=X<=10
解:(x>=2)&&(x<=10)
2.如何表达x<=2或x>=10
解:(x<=2)||(x>=10)
逻辑非!
可以对当前的结果,取它的反向。
#include<stdio.h>
int main()
{printf("%d\n",2!=3);
printf("%d\n",!(2!=3));//尽量使用多一些的括号清晰地表达意图
return 0;}
结果为1
0
三、运算符优先级
C语言的四则运算符优先级和数学中的一致。先算括号里面的,先乘除后加减。

四、类型转换
在同类型数据之间和不同类型数据运算之间会发生数据的类型转换
eg #include<stdio.h>
int main()
{//一个整型指针变量p
int*p;
//各式各样的类型
char c;
short s;
int n;
unsigned int un
long l;
float f;
double df;
p=c+n;//char+int=int
p=c+s;//char=short=int
p=s+n;//short+int=int
p=n+n;//int+int=int
p=n+un;//int+unsigned int=unsigned int
p=n+l;//int+long=long
p=n+f;//int+float=float
p=f+df;//float+double=double
return 0;}
类型级别的高低

在运算中若运算符两边的类型均低于int,那么结果为int,若两边运算类型有高于int的,那么结果为高于int的最高类型
字面常量也一样,5 / 2,int与int运算,结果为int。
5 / 2.0,int与double运算,结果为double。
5.0 / 2.0,double与double运算,结果为double。
另外,赋值造成的类型转换中,小的整型类型可以赋值给大的,大的整型类型不能赋值给小的,不然会报错
五、强制类型转换
在本文第一个代码中,我们了解到了截断,整型与整型运算无法得到浮点型,但强制转换可以做到这一点
使用公式:(类型)需要转换的数据对象
#include<stdio.h>
int main()
{int n1,n2;
n1=5;n2=2;
printf("%f\n",(float)n1/n2);//将n1强制转换为float类型
printf("%f\n",(double)n1/n2);//将n1强制转换为double类型
return 0;}
结果为
2.500000
2.500000
请注意,强制类型转换,并不能影响n1和n2变量原本的类型。它们只是改变了运算时的临时数据对象的类型。

浙公网安备 33010602011771号