3.1第三章-第一节-运算符的概念
运算符与表达式
运算符:+ - * / %(%是求它的余数) ······
表达式:由操作数和运算符组成的式子,如a-b,1+2等
C语言中单一的一个变量或单一的一个常量是最简单的表达式。
永远输出表达式的值
优先级与结合性
优先级:参照桌面excel文件“C语言运算符优先级列表(超详细)”,从1开始逐渐减弱
结合性:同一优先级时,从左到右或者从右到左的运算顺序
单目、双目、三目运算符
单目运算符:运算对象只有一个,如:++、--、!、······
双目运算符:运算符两侧各有一个运算对象,如:+、—-、*、/、······
三目运算符::运算对象有三个,如:?(条件运算符)、······
初级运算符( )、[ ]、->、. 高于 单目运算符 高于 算数运算符(先乘除后加减) 高于 关系运算符 高于 逻辑运算符(不包括!) 高于 条件运算符 高于 赋值运算符 高于 逗号运算符。
位运算符的优先级比较分散。
除了赋值运算符、条件运算符、单目运算符三类的平级运算符之间的结合顺序是从右至左,其他都是从左至右。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
3.2第三章-第二节-算术运算符
算数运算符与表达式:+、-、*、/、%
+-*/:只要有一个运算对象是浮点型,则表达式的值是double型
%:注意,%求余运算符的两个运算对象必须都是整数,而且表达式结果的正负由被除数决定。
#include<stdio.h>
int main()
{
float a = 0, c = 0;
a = 5;
c = 5 / 2;
printf("%f\n", c);
return 0;
}
//这样输出结果为2.0000,因为参与/运算的5和2都是整数
//如果改为5.0/2输出结果为2.5000
难点:自增运算符++、自减运算符--(均为单目运算符)
自增运算符:
a++后缀:在原本的基础上+1,先读后写
#include<stdio.h>
int main()
{
int a = 0;
a = 20;
a++;
//相当于a=a+1=21
printf("%d\n", a++);
//相当于“printf("%d\n",a); a = a + 1;
//这个先读,输出21
printf("%d\n", a);
//这个后写,输出22
return 0;
}
++a前缀:先写后读
#include<stdio.h>
int main()
{
int a = 0;
a = 20;
++a;
//相当于a=a+1=21
printf("%d\n", ++a);//相当于 a = a + 1; printf("%d\n",a);
//这个先写,输出22
printf("%d\n", a);
//这个后读,输出22
return 0;
}
自减运算符:
在原本的基础上-1,先读后写
运行代码同上
3.3第三章-第三节-关系、逻辑运算符
关系运算符与表达式:
>大于
<小于
>=大于等于
<=小于等于
==等于(单独=是赋值)
!=不等于
关系运算表达式的值为“真”或者“假”,用“1”和“0”表示。
#include<stdio.h>
int main()
{
int a = 10;
int b = 5;
printf("%d\n", a>b);//输出1
printf("%d\n", a<b);//输出0
printf("%d\n", a==b);//输出0
printf("%d\n", a!=b);//输出1
printf("%d\n", a>=b);//输出1
printf("%d\n", a<=b);//输出0
return 0;
}
逻辑运算符与表达式
逻辑运算表达式的值为“真”或者“假”,用“1”和“0”表示。
注意:参与运算的对象只要不为0,则运算对象为真。
&&逻辑与运算符:
参与运算的对象都为真(不为0),结果才是真,只要有一个是假,结果就是假。
#include<stdio.h>
int main()
{
int a = 16;
int b = 23;
printf("%d\n", a = b && a > b);
return 0;
}
||逻辑或运算符:
参与运算的对象只要有一个为真(不为0),结果就是真(只有两个都是假的,结果才是假的。)
#include<stdio.h>
int main()
{
int a = 15;
int b = 10;
printf("%d\n", a = b || a < b);
printf("%d\n", a > b || a < b);
printf("%d\n", a || b);
printf("%d\n", !a||!b);
printf("%d\n",b );
return 0;
}
!逻辑非运算符:
使表达式的值由真变假或者由假变真
#include<stdio.h>
int main()
{
int a = 16;
int b = 10;
printf("%d\n", !(a>b));
printf("%d\n", !a);
printf("%d\n", !a>b);
printf("%d\n",!(a<b) );
return 0;
}
//关系运算符和逻辑运算符综合练习
//成绩分为合格(60-100)与不合格(0-59)
#include<stdio.h>
int main()
{
int a = 70;
printf ("%d\n",a >= 60 && a <= 100);
printf ("%d\n", a >= 0 && a <= 59);
return 0;
}
3.4第三章-第四节-赋值运算符与表达式
赋值运算符与表达式
简单赋值运算符=
变量=表达式
复合的赋值运算符:加后赋值+=、减后赋值-=、乘后赋值*=、除后赋值%=、······
#include<stdio.h>
int main()
{
int a = 10;
printf("%d\n", a = 5);//5
printf("%d\n", a += 5);//10
printf("%d\n", a -= 4);//6
printf("%d\n", a *= 3);//18
printf("%d\n", a %= 5);//3
printf("%d\n", a++);//3
//每次都以上一个a的值进行运算
return 0;
}
sizeof求字节运算符与表达式
sizeof(表达式)结果为表达式的数据类型占据的字节数
#include<stdio.h>
int main()
{
int a = 6;
printf("%d\n", sizeof(a));//输出为4,意为占据四个字节
return 0;
}
强制类型转换符:(类型名)(表达式)
(类型名)表达式:先转换类型,再进行运算;
(类型名)(表达式):先进行运算,再转换类型。
#include<stdio.h>
int main()
{
float a = 7.5, d = 1.5;
int b = 2, c = 0;
c = a * b;
printf("%d\n", c);//输出15
c = (int)a * b;
printf("%d\n", c);//输出14
c = (int)(a * b);
printf("%d\n", c);//输出15
c = a * b * d;
printf("%d\n", c);//输出22
c = (int)a * b * d;
printf("%d\n", c);//输出21
c = (int)a * b * (int)d;
printf("%d\n", c);//输出14
return 0;
}
不同类型的数据混合运算
为了保证数据的精确度/精度,计算机会自动向精确度/精度高的数据类型进行转换,例如char一定会转换成int,float一定会转成double。