Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19183
  • 博文数量: 15
  • 博客积分: 560
  • 博客等级: 中士
  • 技术积分: 160
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 17:27
文章分类
文章存档

2011年(1)

2008年(14)

我的朋友
最近访客

分类: C/C++

2008-03-08 17:35:58

5.1 逻辑表达式

C语言中没有布尔类型,一般在进行逻辑运算和关系运算(比如比较两个数的大小i0 表示假值,1表示真值.
逻辑运算符&&和||都对操作数进行"短路"计算.也就是说,如果这些运算符首先计算出左侧操作数的值,然后是右侧操作数;如果表达式的值可以由左侧操作数的值单独推导出来,那么将不计算右侧操作数的值.比如如下表达式:
(i != 0 )||(j / i > 0 )
会先计算表达式(i!=0)的值为真,则表达式为真,不在计算(j/i>0)的值了.
这样表达式可能会产生副作用.比如
(i > 0)&&(++j > 0)    假如i>0为假,则j不会做自加运算,这样下次引用时可能会出现错误.

5.2 if语句


1

if(表达式)

语句

2  带有else子句  应该注意缩进

if(表达式)
  语句
else  语句


else悬空问题

当嵌套使用if语句时,要注意悬空else的问题,比如下面的例子:


if(y != 0)

    if(x != 0)

      result = x /y;

else

  printf("Error: y is equal to 0\n");


C语言的规则是else子句属于离它最近的且还未和其他else匹配的if语句. 正确的使用else的方法是对符合语句加上大括号.

if的级联

编程时常常要判定一系列的条件,一旦其中一个条件为真就立刻停止.级联式的if语句是这种情况下最好的语句.


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

5.3 条件表达式



表达式1 ? 表达式2 : 表达式3


条件表达式的求值步骤是:首先计算表达式1的值,如果表达式1不为0(即为真)则计算表达式2的值,该值即为整个表达式的值,如果表达式1的值为0(假)那么计算表达式3的值,且该值为整个表达式的值.

5.4 布尔值

因为很多程序需要变量能存储假值或真值,所以C语言缺少适当的布尔类型可能会很麻烦.一直采用模拟布尔型变量的方法来解决这个问题.这种模拟的方法是先声明int型变量,而后将其赋值为0或1.
为了使程序便于理解,一个好的方法就是用类似TRUE和FALSE这样的名字定义宏.


#define TRUE 0
#define FALSE 1


5.5 switch语句



switch (表达式)

{  case 常量表达式 : 多条语句

   ......

   case 常量表达式 : 多条语句

   default  :多条语句

}



一个例子:


switch (grade)

{  case 4:

   case 3:

   case 2:

   case 1:  printf("Passing");

            break ;

   case 0:  printf("Failing");

            break;

   default: printf("Illegal grade");

            break;

}


switch语句不要求一定有default的情况.如果default不存在,而且控制表达式的值和任何一种情况标号都不匹配的话,直接把控制传给switch语句后面的语句.

break语句的作用


需要break语句的原因是由于switch语句实际上是一种"基于计算的跳转".当计算控制表达式的数值时,控制跳转到与switch表达式的值相匹配的情况标号处.情况标号只是说明switch内部位置的标记.在执行完情况中的最后一套语句后,程序控制"向下跳转"到下一种情况的第一条语句上,而忽略下一种情况的情况标号.如果没有break(或其他一些跳转语句),程序控制将会从一种情况继续到下一种情况.

Q&A

如果i是int型变量,而f是float型变量,那么条件表达式(i>0?i:f)是哪一种类型的值?

答:当int型和float型的值混合在一个条件表达式中时,表达式的类型为float型.如果i>0为真,那么变量i转化为float型后的值就是表达式的值.

阅读(538) | 评论(0) | 转发(0) |
0

上一篇:Open C

下一篇:chp 6 循环

给主人留下些什么吧!~~