2021-08-17

选择语句

不应该以聪明才智和逻辑分析能力来评判程序员,而要看其分析问题的全面性。

1. 逻辑表达式

逻辑表达式只有两个值,即假(0)和真(1)。

1.1 关系运算符

< , > , <= , >=

1.2 判等运算符

==(等于,注意是两个等号) , !=(不等于)

1.3 逻辑运算符

|| (或),&& (且),! (非)

逻辑运算符产生的结果是0或1。逻辑运算符把任何非零值操作数作为真值来处理,同时将任何0操作数作为假值来处理。

2. if 语句

格式: if (表达式) 语句

if((i >= 0 && i < 7) i++;

2.1 复合语句

[复合语句]: {多条语句}

比如:

if (line_num == MAX_LINES) {
  line_num == 0;
  page_num++;
 } 

2.2 else 子句

带有 else 子句的 if 语句:if(表达式)语句;else 语句;
举个例子:

if (i > j)
  max = i;
else
  max = j;
//找出i,j,k三个数中的最大值。
if(i > j){
  if(i > k)
    max = i;
  else
    max = k;
} else {
  if(j < k)
    max = k;
  else
    max = j;
}

2.3 级联式 if 语句

if(表达式)
  语句;
else if(表达式)
  语句;else if(表达式)
  语句;
else
  语句;

举个例子:

int main(void)
{
  float commission,value;

  printf("Enter value of trade: ");
  scanf("%d",&value);

  if (value < 2500.00f)
    commission = 30.00f + .017f * value;
  else if (value < 6250.00f)
    commission = 56.00f + .0066f * value;
  else if (value < 20000.00f)
    commission = 76.00f + .0034f * value;
  else if (value < 50000.00f)
    commission = 100.00f + .0022f * value;
  else if (value < 500000.00f)
    commission = 155.00f + .0011f * value;
  else
    commission = 255.00f + .0009f * value;
    
  printf("Commission: $%.2f\n",commission);
  return 0;
}

2.4 悬空 else 问题

ifelse必须对应;
可以适当缩进或者用花括号来处理悬空else问题。

缩进:
if (y != 0)
  if (x != 0)
    result = x / y;
  else
    printf("Error: y is equal to 0\n");

花括号(复合语句)
if (y != 0) {
  if (x != 0)
    result = x / y;
} else
    printf("Error: y is equal to 0\n");

2.5 条件表达式

条件运算符由符号?和符号:组成,两个符号必须按如下格式一起使用:

[条件表达式]   表达式1 ? 表达式2 : 表达式3

条件运算符是C运算符中唯一 一个需要三个操作数的运算符。因此,经常把它称为三元运算符
条件表达式应该读作:如果表达式1成立,那么表达式2,否则表达式3。

if (i > j)
  return i;
else
  return j;
上述代码可以用三元运算符实现简化:
return i > j? i : j;

2.6 C99 中的布尔值

在C89中,一般使用TRUE和FLASE这样的名字来定义宏:

#define TRUE 1
#difine FALSE 0

在C99中,布尔变量可以声明为:
_Bool flag;

C99中还提供了一个新的头<stdbool.h>,该头文件提供了bool宏。如果程序中包含了这个头文件,可以这样写:
bool flag;
<stdbool.h>还提供了两个true和false两个宏,分别代表1和0。
flag = true;
flag = false;

<stdbool.h>头用起来特别方便。

3. switch 语句

下面的级联式 if 语句根据成绩的等级显示出相应的英语单词:

if (grade == 4)
  printf("Excellent");
else if (grade == 3)
  printf("Good");
else if (grade == 2)
  printf("Average");
else if (grade == 1)
  printf("Poor");
else if (grade == 0)
  printf("Failing");
else
  printf("Illegal grade");

C语言提供了 switch 语句作为级联式 if 语句的替换。下面的 switch 语句可以代替上面的级联式 if 语句:

switch (grade) {
  case 4:  printf("Excellent");
           break;
  case 3:  printf("Good");
           break;
  case 2:  printf("Average");
           break;
  case 1:  printf("Poor");
           break;
  case 0:  printf("Failing");
           break; 
  default: printf("Illegal grade");
           break;                                                     
}

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

switch (grade) {
  case 4:
  case 3:
  case 2:
  case 1:  printf("Passing");
           break;
  case 0:  printf("Failing")
           break;
  default: printf("Illegal grade");
           break;                   
}

也可以写成这样:

switch (grade) {
 case 4: case 3:  case 2:  case 1:  
          printf("Passing");
          break;
 case 0:  printf("Failing")
          break;
 default: printf("Illegal grade");
          break;                   
}

default分支不一定要放在最后,也可以没有default分支

  • break 语句的作用
    执行 break 语句可以跳出 switch 语句,继续执行后面的语句。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值