C语言学习日记三
运算符、表达式和语句
一、基本运算符
- =、+、-、*和/,但是没有指数运算符。但是C标准库提供了pow() 函数用于指数运算,例如 sum = pow(2,3);其中sum值为8
1. 赋值运算符:=
- =是赋值运算符,==才是“相等运算符”,!=是“不相等运算符”;
- 变量 = 值(可以是变量,也可以是常量);
- 赋值表达式语句的目的是把值存储到内存位置上。用于存储值的数据存储区域统称为数据对象。
- 左值是C语言的术语,用于标识特定的数据对象的名称或表达式。对象指的是实际的数据存储,而左值是用于标识或定位存储位置的标签。
- 右值是指能赋值给可修改左值的量,且本身不是左值。例如:sum = 20;sum是可修改的左值,20是右值。
- C语言可以三重赋值,例如:sum = total = gross =20;顺序是从右到左。
2.加法运算符:+
- 加法运算符用于加法运算,使两侧的值相加。如:sum = 10 + 10;
- 相加的值可以是变量也可以是常量。
3.减法运算符:-
- 减法运算符用于减法运算,使其左侧的数减去右侧的数。例如:sum = 20 - 10;
- +和-运算符都是二元(需要两个运算对象)运算符。
4.符号运算符:-和+
- 减号可以用于标明或改变一个值的代数符号。例如:sum = - 10;此时-为一元运算符
- 一元+运算符不会改变对象的值或符号。例如:sum = 20;
5.乘法运算符:*
- 两元运算符,例如:sum = 10 * 10;
6.除法运算符:/
- 两元运算符,左侧的是被除数,右侧的是除数。例如:sum = 10 / 10;
- 在C语言中,整数的除法结果的小数部分将会被丢弃,这一过程称之为截断。
7.运算符优先级
运算符 | 结合律 |
---|---|
() | 从左往右 |
+ -(从右往左) | 从右往左 |
* / | 从左往右 |
+ -(二元) | 从左往右 |
= | 从右往左 |
圆括号的优先级最高,
二、其他运算符
1.求模运算符:%
- 只能用于整数,不能用于浮点数。求模运算符给出其左侧整数除以右侧整数的余数,即是求余数。例如13%5=3;
2.递增运算符:++ 和递减运算符:- -
- 递增运算符使其运算对象递增1。有两种方式,第一种,++出现在其作用的变量前面,为前缀模式,表示在使用该变量之前先递增1,;第二种,++出现在其作用的变量后面,为后缀模式,表示在使用该变量之后递增1。
- 递增运算符使其运算对象递减1。有两种方式,第一种,- -出现在其作用的变量前面,为前缀模式,表示在使用该变量之前先递减1,;第二种,- -出现在其作用的变量后面,为后缀模式,表示在使用该变量之后递减1。
- 主要是简写类似于i = i + 1为++1或i++。
- ++和- -运算的运算优先很高,只有圆括号的优先级比它们高。
- 谨慎使用
三.表达式和语句
表达式
- 表达式:由运算符和运算对象组成。
- C语言的每一个表达式都有一个确切的值。
语句
- C程序的基本构成块。
- 一条语句相当于一条完整的计算机指令,大部分都以分号结尾。
- 语句(有用的)可以改变值或调用函数。
- 不是所有的指令都是语句。例如:x = 6 + (y = 5);y=5是一条完整的指令,但不是一条语句。
复合语句
- 用花括号括起来的一条或多条语句,复合语句也称为块。
四、类型转换
- 当表达式和语句中出现了不同类型的变量和常量。C语言就会将它们进行转换。一般都是由较小类型转换为较大类型,这个过程被称为升级。
- 类型的级别由高到低是 long double、double、float、unsigned long long、long long、unsigned long long、unsigned int、int、short 、char。
- 赋值表达式中,计算的最后结果会转换为被赋值变量的类型,在这过程可能导致类型升级或类型降级。
- 作为参数传递时,char 和 short 被转换成 int,float 被转换成double。
- 类型升级不会有问题,但是类型降级就可能会出现问题。
强制类型转换运算符
- 圆括号和它括起来的类型名构成了强制类型转换运算符,通用形式为:(type)。例如:mice = (int)1.6 + (int)1.7;
五、带参数的函数
1.如果函数不接受任何参数,则函数头的圆括号中应该写上关键字void,同样的如果函数没有返回值,应该在函数头名前加上void;例如 void pound(void)。有返回值和接受参数,例如:int main(int n)
2.声明参数就是创建了被称为形式参数的变量,上例n是形式参数(形参),int main(10),10就是实际参数(实参)。
3.变量名是函数私有的,即在函数中定义的函数名不会和别处的相同名称发生冲突。
4.原型是函数的声明。
六、一些补充
- typedef double real;//定义了deal为double的别名。