c语言 表达式和语句

表达式 语句

关系表达式

关系表达式的结果:要么0 要么1。

警惕陷阱

1
2
3
int a = 20.1;
bool result= 1<a<10;
//result的值竟然是 true!

因为:运算顺序,从左到右,1先和a比较,结果为真,故结果为1;1再和10比较,结果为真。

在c语言中0表示假,非0表示真(通常为1)

分支语句

如果 条件成立 则如何如何 ;否则 则如何如何.

警惕 悬空else

如下代码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
float a = 20.1;
float b = 20.3;

if (a==20.3f)
    if (b==20.1f)
        printf("Yes\n");
else
    printf("No\n");

//什么也不会打印

因为当有嵌套的if else时,else会和最近的if匹配。

如何解决:给每个if else后加上大括号。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
float a = 20.1;
float b = 20.3;

if (a == 20.3f) {
    if (b == 20.1f) {
        printf("Yes\n");
    }
} else {
    printf("No\n");
}

一个建议:在写条件语句时,关系表达式中若有常量参与,建议将常量写在左边,好处是:避免笔误。

如:

1
2
3
float a=20.1;
if (a=5){printf("a equal 5.\n");}
//输出:a equal 5.

aha,竟然表达式成立了?为什么?因为表达式结果a是5,非零则为真,所以表达式成立。

如果这样写:

1
2
3
float a=20.1;
if (5=a){printf("a equal 5.\n");}
//编译器会提示错误,提示我们表达式写的有问题。

编译器会提示我们,表达式写的有问题,我们就会发现:原来少写了一个等号。