美文网首页c语言
c语言进阶 c和指针(三)

c语言进阶 c和指针(三)

作者: 我就是一个垃圾 | 来源:发表于2019-01-12 01:57 被阅读6次

    这一篇主要写语句和操作符及表达式

    一、if语句

    if和while语句即使只有一句话最好也写上大括号,有格式感,这是我的风格

    if和while语句可以循环嵌套

    语句的三种形式

    1) 第一种形式为基本形式:if

            if(表达式) 语句

    其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。

    2) 第二种形式为: if-else

    if(表达式) 

        语句1;

    else 

        语句2;

    其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。

    3) 第三种形式为if-else-if形式

    前二种形式的if语句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else-if语句,其一般形式为:

         if(表达式1)

            语句1;

        else  if(表达式2) 

            语句2;

        else  if(表达式3) 

            语句3;

            … 

        else  if(表达式m) 

            语句m;

        else

            语句n;

    其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n。然后继续执行后续程序

    二、while语句

    while语句的一般形式为:

        while(表达式) 语句

    其中表达式是循环条件,语句为循环体。

    while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。

    三、break和continue语句

    break和continue语句都可以用在循环中,用来跳出循环(结束循环);break语句还可以用在switch语句中,用来跳出switch语句。

    break语句

    break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。break在switch 中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。

    当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起,即满足条件时便跳出循环。

     注意:

    break语句对if-else的条件语句不起作用;

    在多层循环中,一个break语句只向外跳一层。

    continue 语句

    continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一起使用,用来加速循环。

    对比一下break和continue。

    while的用法:

    while(表达式1){

        ……

        if(表达式2)  break;

        ……

    }

    continue的用法:

    while(表达式1){

        ……

        if(表达式2)  continue;

        ……

    }

    四、switch语句

    C语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:

    switch(表达式){ 

        case 常量表达式1:  语句1;

        case 常量表达式2:  语句2;

        … 

        case 常量表达式n:  语句n;

        default:  语句n+1;

    }

    其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

    五、goto语句

    跳转到相应的标签的代码

    goto语句是一种无条件转移语句,与BASIC中的goto语句相似。goto 语句的使用格式为:

         goto  语句标号;

    其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。

    另外标号必须与goto语句同处于一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。

    goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合

    六、操作符

    C语言一共有34种运算符,10种运算类型:算术运算符(+、-、*、/、%)、关系运算符(>、>=、==、!=、<、<=)、位运算符(>>、<<、==、!=、<、<=)、逻辑运算符(!、||、&&)、条件运算符、(?:)指针运算符(&、*)、赋值运算符(=)、逗号运算符(,)、求字节运算符(sizeof)、强制类型转换运算符((类型名))、其他(下标[]、分量、函数);若按参与运算的对象个数,C语言运算符可分为单目运算符(如!)、双目运算符(如+、-)和三目运算符(如?:)

    1.基本的算数运算符

    (1). +加法运算或正值运算符

    4+4、+5、

    (2).- 减法运算或负值运算符

    6-4、-10、-29

    (3). *乘法运算

    注意符号,不是x,而是*

    (4). /除法运算

    注意符号,不是÷,也不是\,而是/

    整数除于整数,还是整数。1/2的值是0,这个并不是二分之一, 不会四舍五入,直接截断取值。

    (5)%取余运算

    取余:即两个整数相除之后的余数

    注意:%两侧只能是整数,正负性取决于%左侧的数值

    2.注意:

    (1).当运算对象是负数时,不同机器的运算结果也可能是不同的。

    (2).双目运算符两边的数值类型必须一致才能进行运算,所得结果也是相同类型的数值。

    (3).双目运算符两边的数值类型如果不一致,必须由系统先进行一致性转换。

         转换规则:char->short->int->unsigned->long->double->float

    (4).C语言规定,所有实数的运算都是以双精度方式进行的,若是单精度数值,则需要在尾数后面补零,转换长双精度数才能进行运算。

    1.C语言提供了6种运算符

    (1).&,按位与,规则:若两个相应额二进制位都为1,则该位的结果为1,否则为0.

    (2).|,按位或,规则:两个相应的二进制位中只要有一个为1,则该位的结果为1,否则为0.

    (3).^,按位异或,规则:若两个二进制位相同,则结果为0,不同则为1

    (4).~,安慰求反,规则:安慰取反,即0变1,1变0

    (5).<<,左移,将一个数的二进制位全部左移若干位,左移1位相当于乘2,左移n位,相当于乘2的n次方

    (6).>>,右移,将一个数的二进制位全部右移若干位。不同系统下右移的结果不同,而在mac系统下:正数右移1位,相当于除以2,右移n位,相当于除以2的n次方(移动时,空缺的高位补零,移出的位数舍弃);负数

    1.&&逻辑与

    (1). 使用格式:

    条件A && 条件B;

    (2). 运算结果:

    只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假”

    (3).运算过程:

    总是先判断条件A是否成立

    如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”

    如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是“假”(逻辑与的“短路的运算”)

    (4).注意:

    1>.若想判断a的值是否在(3, 5)范围内,千万不能写成3<a<5,因为关系运算符的结合方向为“从左往右”。 比如a为2,它会先算3<a,也就是3<2,条件不成立,结果为0。再与5比较,即0<5,条件成立,结果为1。因此 3<a<5的结果为1,条件成立,也就是说当a的值为2时,a的值是在(3, 5)范围内的。这明显是不对的。正确的判断方法是:(a>3)&& (a<5)

    2>.C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑与也适用于数值。比如 5&& 4的结果是1,为“真”;-6 && 0的结果是0,为“假”

    2.|| 逻辑或

    (1).使用格式:

    条件A || 条件B;

    (2).  运算结果:

    当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。

    (3).运算过程:

    总是先判断条件A是否成立

    如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”(逻辑或的“短路运算”)

    如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”

    例:逻辑或的结合方向是“自左至右”。比如表达式(a<3) || (a>5)

    若a的值是4:先判断a<3,不成立;再判断a>5,也不成立。因此结果为0

    若a的值是2:先判断a<3,成立,停止判断。因此结果为1

    因此,如果a的值在(-∞, 3)或者(5, +∞)范围内,结果就为1;否则,结果就为0

    (4).注意:

      C语言规定:任何非0值都为“真”,只有0才为“假”。因此逻辑或也适用于数值。比如 5 || 4的结果是1,为“真”;-6 || 0的结果是1,为“真”;0 || 0的结果是0,为“假”。

    3.! 逻辑非

    (1).使用格式:

    ! 条件A;

    (2).运算结果:

    其实就是对条件A进行取反:若条件A成立,结果就为0,即“假”;若条件A不成立,结果就为1,即“真”。也就是说:真的变假,假的变真。

    例:逻辑非的结合方向是“自右至左”。比如表达式! (a>5)

    若a的值是6:先判断a>5,成立,再取反之后的结果为0

    若a的值是2:先判断a>3,不成立,再取反之后的结果为1

    因此,如果a的值大于5,结果就为0;否则,结果就为1

    (3).  注意:

    1>.可以多次连续使用逻辑非运算符:!(4>2)结果为0,是“假”,!!(4>2)结果为1,是“真”,!!!(4>2)结果为0,是“假”

    2>.C语言规定:任何非0值都为“真”,只有0才为“假”。因此,对非0值进行逻辑非!运算的结果都是0,对0值进行逻辑非!运算的结果为1。!5、!6.7、!-9的结果都为0,!0的结果为1

    七、表达式

    赋值表达式等等

    注意左值和右值

    八、优先级表格

    相关文章

      网友评论

        本文标题:c语言进阶 c和指针(三)

        本文链接:https://www.haomeiwen.com/subject/qjkqdqtx.html