文档章节

C Primer Plus 第5章 运算符、表达式和语句 5.4 表达式和语句

idreamo
 idreamo
发布于 2016/05/20 06:19
字数 1167
阅读 51
收藏 1

5.4.1 表达式

表达式是由运算符和操作数组合构成的。最简单的表达式是一个单独的操作数,以此作为基础可以建立复杂的表达式。

每一个表达式都有一个值

C的一个重要属性是每一个C表达式都有一个值。

5.4.2 语句

语句是构造程序的基本成分。程序是一系列带有某种必须的标点的语句集合。一条语句是一条完整的计算机指令。在C中,语句用结束处的一个分号标识。

什么构成了一条完整的指令?首先,C把任何后面加有一个分号的表达式看处是一个语句。

尽管一个语句(或者至少是一个有作用的语句)是一条完整的指令,但不是所有完整的指令都是语句。分号用来识别确实是语句的指令。

程序清单 5.13

/*addemup.c--4种类型的语句*/
#include <stdio.h>
int main()
{
    int count,sum;    /*声明语句*/
    
    count=0;          /*赋值语句*/
    sum=0;            /*同上   */
    while (count++<20)/*while 语句*/
    {
        sum=sum+count;
    };
    print("sum=%d\n",sum);/*函数语句*/
    return 0;
}

上例中已经遇到了四种语句:

注意一个声明语句不是一个表达式;

赋值语句,它为变量分配一个值。赋值语句是表达式语句的一个特例。

函数语句引起函数的执行。

while语句有三个不同的部分,首先是while关键字,然后是在圆括号里的一个判断条件,最后是满足判断条件时将执行的语句。while语句属于一类有时被称为结构化语句的语句。

副作用和顺序点

副作用是对数据对象或文件的修改。例如语句states=50;的副作用是将变量states的值设置为50.这是副作用?这看起来更像是主要目的!然而,从C的角度来看,主要目的是对表达式求值。

给C的一个表达式4+6,C将计算它的值为10,给C一个表达式 states=50 ,C将计算它的值为50,计算这个表达式的副作用就是把变量states的值改变为50.增量和减量运算符也有副作用,它们主要由于副作用而被应用。

一个顺序点(sepuence point)是程序执行中的一点;在该点处,所有的副作用都在进入下一步前被计算。在C中,语句的分号标志了一个顺序点。它意味着在一个语句中赋值运算符、增量及减量运算符所做的全部改变都必须在进入下一个语句前发生。任何一个完整的表达式的结束也是一个顺序点。

什么是一个完整的表达式呢?它不是一个更大的表达式的子表达式。完整表达式的例子包括一个表达式语句里的表达式和一个在while循环里作为判断条件的表达式。

顺序点帮助阐明后缀增量动作何时发生。例如:

while (guests++<10)

printf("%d \n",guests);

有时初学者会设想在本程序中“先使用该值,然后增加它的值”的意思是在使用了printf()语句后再增加guest的值。然而,guests++<10是while循环的判断条件,所以它是一个完整的表达式,这个表达式的结束就是一个顺序点。因此C保证副作用(增加guests的值)在进入printf()前发生。

同时使用后缀形式保证了guests在与10比较后才增加。

现在考虑这个语句:

y=(4+ x++)+(6+ x++);

表达式4 + x++不是一个完整表达式,所以C不能保证在计算子表达式4+x++后立即增加x。这里完整表达式是整个语句,并且分号标记了顺序点,所以C能保证的是在程序进入后续语句前x将被 增加两次。C没有指明X是在每个子表达式计算后被增加还是整个表达式被计算后增加,这就是我们要避免使用这类语句的原因。

5.4.3 复合语句(代码块)

复合语句是用花括号组织起来的两个或更多的语句;它也被称为代码块。

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C语言-第三章、选择结构程序设计

_1.1关系运算符:<、<=、>、>=、==和!=。 _1.2关系表达式: 形式:表达式 关系运算符 表达式 如:a+b>c-d _2.1逻辑运算符:&&、 、!。 逻辑表达式:表达式 逻辑运算符 表达式 如:a&&b&&c...

南风末
2016/10/31
5
0
【C++】第6章 分支语句和逻辑运算符 知识总结

《C++ Primer Plus》第6章知识点总结 简单的知识不再进行赘述 逻辑表达式 逻辑OR运算符:|| 5>3 || 5>10 如果||左边表达式为1,则程序不计算右边表达式 逻辑AND运算符:&& 5>3 && 5>10 如果&...

qq_37792173
2017/09/27
0
0
C Primer Plus 第6章 C控制语句:循环 6.7 逗号运算符

程序清单 6.13 postage.c 这个程序在初始化表达式和更新表达中使用了逗号运算符。这一个表达式中的逗号使ounces和cost 的值都进行了初始化。逗号的第二次出现使每次循环中ounces增加1,cost增...

idreamo
2016/05/31
56
0
【C++】第5章 循环和关系表达式 知识总结

《C++ Primer Plus》第5章知识点总结 for循环 for(initialization; test-expression; update-expression) body 语句:age = 100; 表达式:age = 100 对于 for( int i=0 ;i<5 ;i++),这种语句......

qq_37792173
2017/09/26
0
0
C Primer Plus 第6章 C控制语句:循环 6.5 for循环

for 循环把所有这三种动作(初始化、测试、更新)都放在一起。通过使用for循环,您可以用程序清单6.11中的程序来代替前一个程序 。 程序清单6.11 sweetie2.c 在关键字for之后的圆括号中包含了...

idreamo
2016/05/31
23
0

没有更多内容

加载失败,请刷新页面

加载更多

同名依赖,多次引入导致的程序错误

表现: 本地测试正常,打包上线后报错找不到某个方法(缺少依赖),检测依赖发现,同名依赖有两个版本。 解决:删除一个,程序正常

避难所
24分钟前
3
0
在HTML中的下拉框中实现超连接

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <link rel="canonical" href="https://blog.csdn.net/weixin_34228617/article/details/86130280"/> ......

mickelfeng
29分钟前
3
0
Content7关闭防火墙命令

在外部访问CentOS中部署应用时,需要关闭防火墙。 关闭防火墙命令:systemctl stop firewalld.service 开启防火墙:systemctl start firewalld.service 关闭开机自启动:systemctl disable f...

无名氏的程序员
30分钟前
3
0
分布式存储原理:TiDB

浮躁的码农
43分钟前
6
0
CSS实现圆角边框的完美解决方案

css实现图片圆角,兼容所有浏览器: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <style type= "text/css" > /*通用样式--容器宽度值*/ .s......

前端老手
57分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部