04-运算符、表达式和语句

0x00 循环简介

 

  
//shoes1.c –把鞋码转换成英寸
#include <stdio.h>
#define ADJUST 7.31 //字符常量

int main(void)
{
    cost double SCALE = 0.333; //const变量
    double shoe, foot;
    printf(“Shoe size (men’s) foot length\n”);
    shoe = 3.0;
    while(shoe < 18.5) //while循环开始
{ //块开始
    foot = SCALE * shoe + ADJUST;
    printf(“%10.1f %15.2f inches\n”, shoe, foot);
    shoe = shoe + 1.0;
} //块结束
    printf(“If the shoe fits, wear it.\n”);
    return 0;
}

条件到while循环会检查圆括号中的条件是否为真,成立为真,会执行到shoe大于18.5结束。循环执行花括号里面的语句。

0x01 基本运算符

C用运算符表示算术运算,基本算术运算符:=、+、-、*和/,标准数学库提供了pow()函数用于指数运算

  • “=”赋值运算符,num = 200; 表示把200赋值给num,从右往左进行。C使用可以修改的左值标记那些可赋值的实体。赋值表达式语句的目的是把值储存到内存位置上。用于储存值的数据存储区域统称为数据对象。使用变量名标识对象的一种方法,指定数组的元素、结构的成员,指针表达式。左值用于标识特定数据对象的名称或表达式,对象值的是实际的数据存储,左值是用于表示或定位存储位置的标签。右值指的是能赋值给可修改左值的量,标准叫作表达式的值。赋值运算符左侧的项就是运算符对象,运算符对象是运算符操作的对象。”猫吃鱼”,”猫”运算符操作”汉堡对象”。

  • “+”加法运算符,printf(“%d”, 101+99); //打印的是200,而不是表达式。相加的值(运算对象)可以是变量,也可以是常量。
  • “-”减法运算符,用于减法运算,使其左侧的数减去右侧的数。num = 300 – 200; 加法和减法运算符都需要两个运算对象才能完成操作,被称为二元运算符。
  • “-”和”+”符号运算符,num = =200; num = -num; 现在num的值为200,以这种方式使用负号被称为一元运算符,只需要一个运算对象。num += 2,值为202。
  • “*”乘法运算符,用for循环可以获得x到x+y的平方之类的。
  • “/”除法运算符,除法也是二元运算符,左侧的值是被除数,右侧的值是除数。整数除法结果是整数,浮点除法的结果是浮点数。整数除法结果的小数部分被丢弃,这一过程称为截断。整数除法会阶段计算结果的小数部分,不会四舍五入结果。混合整数和浮点数计算结果是浮点数,计算机用整数和浮点数除以时,会把整数转换浮点数。C99“趋零截断”:去除小数部分。
  • 运算符优先级:butter = 25.0 + 60.0 * n / SCALe; 乘法和除法的优先级比加法和减法高,先执行乘法和除法。同一级运算对象,则根据从左到右的顺序进行。可以通过圆括号调节运算顺序。下图基本运算符优先级顺序,同级运算从坐到右。

0x02 其他运算符

  • sizeof运算符和size_t类型,szieof运算符以字节为单位返回运算符对象的大小。

  • “%”求模运算符,用于整数运算。求模运算符求出左侧整数除以右侧整数的余数,只能用于整数,不能用与浮点数。

  • 如果求模对象是负数结果为绝对值再取负数,如-11 % -5 = -1,-11 % 5得-1,跟左值有关
  • “++”递增运算符,将其运算对象递增1。出现在前面表示先递增,出现在后面表示后递增。递增代替 num = num +1,因为编译出的二进制码更少。思考可以代替的。
  • “–”递减运算符符,将其运算对象递减1。出现在前面表示递减,出现在后面表示后递减。递减代替 num = num – 1,因为编译出的二进制码更少。思考可以代替的。
  • 递增、递减运算符只比圆括号低。如果一个变量出现在一个函数的多个参数中,不要对该变量使用递增或递减运算符。如果一个变量多次出现在一个表达式中,不要对该变量使用递增或递减运算符。

0x03 表达式和语句

C的基本程序步骤由语句注册,而多大数语句都由表达式构成。

  • 表达式由运算符和运算对象组成,最简单的表达式是一个单独的运算对象,再此为基础可以建立复杂的表达式。运算对象可以是常量、变量或二者的组合,一些表达式由子表达式组成。每个表达式都有一个值。
  • 语句是C程序的基本构块,一条语句相当与一条完整的计算机指令。大多数语句以分号结尾。在C中的有意义语句是改变值或调用函数。一条完整的指令不一定是一条语句。x = 6 + ( y = 194)。声明如果删除了分号不是表达式语句,也没有值。 int v
  • 赋值表达式语句在程序中经常使用,它为变量分配一个值。赋值表达式语句的结构是,一个变量名,后面是一个赋值运算符,再跟着一个表达式,最后以分号结尾。
  • 在while循环中有一个赋值表达式语句,赋值表达式语句是表达式语句的一个示范例。while语句是一种迭代语句,有时也被称为结构化语句,因为它的结构比简单的赋值表达式语句复杂。
  • C语言副作用,对数据对象或文件的修改。num = 30,主要目的表达式求值,副作用为将变量设置为30。递增、递减运算符副作用就是修改变量的值。调用printf()函数时,它现实的信息其实是副作用,printf()返回值是待显示字符的个数。
  • 序列点是程序执行的点,在该点上,所有的副作用都在进入下一步之前发生。在C语言中,语句的很好标记了一个序列点。意思是,在一个语句中,赋值运算符、递增运算符和递减运算符对运算对象做的改变必须在程序执行下一条%