选择语句

选择语句

从本章开始,笔记就不记得那么细了,理解为主

后面的重要章节会认真学习

关系运算符优先级低于算术运算符,左结合

判等运算符优先级低于关系运算符

&&和||具有短路特性

i > 0 && ++j > 0 中 j不一定自增

条件运算符

唯一一个三位运算符

expression1 ? expression2 : expression3

如果表达式1成立,则表达式2,否则表达式3

k = (i >= 0 ? i : 0) + j; // ()很有必要

C99中的布尔值

_Bool flag;
flag = 5;	// flag = 1

_Bool是无符号整型,只能赋值为0或1.

赋值非零数值,都会变为1

头文件<stdbool.h>

提供了bool宏,用来代表_Bool

bool flag;	/* same as _Bool flag */

还提供了true和false两个宏,代表1和0

flag = true;
flag = false;

后续使用布尔变量时都用到了这个头

switch语句

用于很多种情况判定

switch(表达式) {
    case 常量表达式 : 语句
    ...
    default : 语句
}
  • 控制表达式。整型表达式,可以对字符进行判定,因为C语言把字符当做整型处理

  • 分支标号。

    case 常量表达式 :

  • 常量表达式。不能包含变量和函数调用,但可以包括宏。表达式的值必须为整数

  • 语句。每个分支标号后面跟任意数量的语句,且不要花括号,最后加break语句

分支顺序没有要求,default不一定放在最后

不一定有default分支,如果都不匹配,控制直接传给switch后面的语句

多个分支标号可以放在同一组语句前面

不加break,控制从一个分支继续流向下一个分支,所以最好注释/* FALL THROUGH */

最后一个分支不需要break语句,放break是防止增加分支数目时出现“丢失break”的问题

Q&A

if ((i == j))

通过加圆括号的方式来禁用该警告

坚持使用某种风格比选择适当的风格更重要

问:i 为 int型变量,f为float变量,(i > 0 ? i : f)是哪种类型的值

答:当int型和float型混合在一个条件表达式中,表达式的类型为float,i会转换为float

问:_Bool为什么不会影响现有程序

答:C89标准指出,下划线开头,后跟大写字母的名字是保留字,程序员不该使用

课后题:

编写一个表达式,要求这个表达式根据i小于、等于或大于j,分别取值-1.0.1

(i > j) - (i < j)

posted @ 2022-02-07 00:13  kartone  阅读(71)  评论(0)    收藏  举报