czlhxm 发表于 2017-7-15 14:57:23

C语言基础摘要--三、基础语句

本帖最后由 czlhxm 于 2017-7-25 19:50 编辑



3.1 语句
        空语句并不是什么卵用都没有,在某些硬件平台(如单片机)可起到延时的效果。

        代码块是语句的集合体,在有些地方使得程序执行不止一个语句的复杂操作(如if)。

        if语句有各种奇奇怪怪的变种,可嵌套,可带else。

        注意if语句中的判断表达式的判断必须使用==而不是=,据说&和|某些情况下可代替&&和||。

        三元运算符( ?: )是个装逼神器,有时可简化if语句,用法详情百度。

        循环按功能有do-while、while、for语句等,按定义分为当型循环(先判断再执行)和直到型循环(先执行再判断),do-while为直到型,其它为当型循环,两种循环可互替换,但不同情况下使用特定的循环有利于简化程序,具体详情参考高中数学教材和百度。

        如果简单循环满足不了你饥渴的想法,试试循环中加入break(跳出循环体)或continue(跳出单次循环),如果还不行,试试递归和多段挑(goto语句),详情百度。

        for语句可简化需要带参数的while语句,while语句可美观不需要参数的for语句。

        switch语句可用于多值分点执行,给定一个整型参数,并比对这个参数的值执行不同操作,但只能比对值而不支持值的范围。通常情况下switch语句需要break,详情百度。

3.2 运算符
        运算符具有优先级和结合性:

运算符结合性
()从左到右
+-(一元运算符)从右到左
*/从左到右
+-(二元运算符)从左到右
=从右到左

        优先级指同一语句(代码块)中程序执行的优先顺序,结合性指操作符号左右两边谁攻谁受。

        自增(++)自减(--)运算符有很多变种,但除了冗杂算法用处不大(主要用来优化代码),记住关键的i++、i--、++i和--i即可。

        运算符之间的运算注意参数类型,毕竟“人妖恋”通常是没有好下场的,不同的数据类型之间运算往往要转换类型。

3.3 位操作
        移位操作符(<< >>)将数字的二进制的每一位左移或右移,011<<1=110。

        取反操作符(~)将数字的二进制的每一位0变1,1变0,~011=100。

        与、或、异或:

A&B0
1

1
0
0

0
0
1



A|B0
1

1
0
1

0
1
1



A^B0
1

1
0
1

0
1
0


        或操作(|)若两个操作数有一个是1则为1。

        与操作(&)若两个操作数都是1则为1。

        异或操作(^)若两个操作数一个是1一个是0则为1。

3.3 其它奇奇怪怪的细节
        赋值符可由A = A&B简化为A &= B,以此类推<<=、^=、%=、*=......等。

        逗号操作符(表达式,表达式,表达式)有妙用,该运算的值为最后一个表达式的值,如if(b+4 , c/2 , d>0)等价于:
b += 4 ;
c /= 2 ;
if(d>0)
{
    代码
}

        C语言中并没有明显的布尔类型(真和假),但通常知道非零值为真,零为假,于是可以通过声明如下来使用:
#define BOOL int
#define TRUE 1
#define FALSE 0

        在条件和循环等语句中需要判断表达式的地方可用如上或其他数字代替,要知道判断表达式最终的值实际上也是数字。

        声明变量注意如果不初始化,一定要保证第一次使用时要赋值,否则在正式程序中会产生无法预料的bug。比如调试程序时声明一个整型变量i但未赋值,在编辑环境中会自动给i赋值为0,但是在正式发布程序中变量i为所在内存中的二进制所代表的整型值(即任意值)。
页: [1]
查看完整版本: C语言基础摘要--三、基础语句