非典型性C语言教程-1.3 表达式,控制语句
2007-07-06 11:09
197 查看
C语言程序由函数和变量组成。函数由表达式和控制语句组成。
表达式主要就是运算符和常数,变量,常量的组合。比如x+3*y,这个表达式 用到了2个运算符+,*,用到了2个变量x,y,一个常数3。运算符有很多,还有比较复杂的优先级关系,+*是算术运算符,算术运算符好包括:一元-,二 元-,/,%, ++, --。逻辑运算符||,&&,!。位运算符|, &, ^。还有(), 取指针内容*, 取地址&。选择运算符 condition?x:y。还有关系运算符==,=,>,<,>=,<=等等。还有不常用的,运算符,比如 x=x+3, y=y+2;这个运算符的值是最后一个表达式的值。 运算符是有优先级的,有些优先级很好理解,比如* /优先于+ -,但是有些就不那么明显了。比如*p++这个表达式,你知道它的优先级吗?代码主要是写给人看的,其次才是写给机器看。第二次强调了:)。有些很无聊的C语言考试经常考些运算符的优先级问题,比如象刚才那样的代码。但是应该合理的运用括号,来让你的代码更清晰可读,你写的代码让人读起来困惑并不能显示你的水平高。*p++这样的代码最好写成*(p++)或是(*p)++。
赋值语句也是一个表达式,比如a=3这个表达式的值是a的值,也就是3。这就是一个著名的错误的由来。
if(a=3)
.......
本来应该是写a==3的,但是写成了a=3,而恰a=3是一个合法的表达式,且其值等于3。而C语言又恰好将一切非零的值当作逻辑真值,结果这个条件判断就永远是真了。
逻辑表达式的值也是令人困惑的。虽然C语言中认为0是逻辑假,非0的一切值都是逻辑真。但是你知道3+ (3||4)=? 这个表达式的值在VC8下是4,在gcc下也是4。但是最好还是不要写这样的代码,同样的原因,可能让人感到困惑。
控制语句就是都熟悉的if, else, for, while, do while, switch。只讲一下需要注意的一些错误。对于if最著名的错误就是上面这个。这个错误在C的后代Java和C#中已经被修改了。
for是有很多灵活的用法的,不一定非得是for(i=0; i<n;i++)。for中间可以是任何表达式比如:for( ; i++, i<n; )。
while和do while没有什么好说的。switch的需要有注意的是别犯这种错误:
switch (a)
{
case 1:
case2:
..........
注意第二个case,中间忘记了空格。这样编译器不会报告任何的错误,因为编译器将case2:当成了一个label。C语言中是有goto的,goto到的地方就是label。上面的代码导致a=2的情况永远不会被执行。
表达式主要就是运算符和常数,变量,常量的组合。比如x+3*y,这个表达式 用到了2个运算符+,*,用到了2个变量x,y,一个常数3。运算符有很多,还有比较复杂的优先级关系,+*是算术运算符,算术运算符好包括:一元-,二 元-,/,%, ++, --。逻辑运算符||,&&,!。位运算符|, &, ^。还有(), 取指针内容*, 取地址&。选择运算符 condition?x:y。还有关系运算符==,=,>,<,>=,<=等等。还有不常用的,运算符,比如 x=x+3, y=y+2;这个运算符的值是最后一个表达式的值。 运算符是有优先级的,有些优先级很好理解,比如* /优先于+ -,但是有些就不那么明显了。比如*p++这个表达式,你知道它的优先级吗?代码主要是写给人看的,其次才是写给机器看。第二次强调了:)。有些很无聊的C语言考试经常考些运算符的优先级问题,比如象刚才那样的代码。但是应该合理的运用括号,来让你的代码更清晰可读,你写的代码让人读起来困惑并不能显示你的水平高。*p++这样的代码最好写成*(p++)或是(*p)++。
赋值语句也是一个表达式,比如a=3这个表达式的值是a的值,也就是3。这就是一个著名的错误的由来。
if(a=3)
.......
本来应该是写a==3的,但是写成了a=3,而恰a=3是一个合法的表达式,且其值等于3。而C语言又恰好将一切非零的值当作逻辑真值,结果这个条件判断就永远是真了。
逻辑表达式的值也是令人困惑的。虽然C语言中认为0是逻辑假,非0的一切值都是逻辑真。但是你知道3+ (3||4)=? 这个表达式的值在VC8下是4,在gcc下也是4。但是最好还是不要写这样的代码,同样的原因,可能让人感到困惑。
控制语句就是都熟悉的if, else, for, while, do while, switch。只讲一下需要注意的一些错误。对于if最著名的错误就是上面这个。这个错误在C的后代Java和C#中已经被修改了。
for是有很多灵活的用法的,不一定非得是for(i=0; i<n;i++)。for中间可以是任何表达式比如:for( ; i++, i<n; )。
while和do while没有什么好说的。switch的需要有注意的是别犯这种错误:
switch (a)
{
case 1:
case2:
..........
注意第二个case,中间忘记了空格。这样编译器不会报告任何的错误,因为编译器将case2:当成了一个label。C语言中是有goto的,goto到的地方就是label。上面的代码导致a=2的情况永远不会被执行。
相关文章推荐
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- XSL简明教程(7)XSL 的控制语句
- Java复习笔记+经验总结-01 运算符 表达式 数组 流程控制语句
- Cg(C for Graphic)语言表达式与控制语句(转)
- Cg(C for Graphic)语言表达式与控制语句
- vb.net 教程 2-5 流程控制:循环语句 Do...Loop 2
- vb.net 教程 2-3 流程控制:循环语句 For...Next 1
- vb.net 教程 2-3 流程控制:循环语句 For...Next 2
- Shell脚本[运算表达式,条件控制语句]
- C#教程第三课:选择控制语句
- python教程13--《控制语句之 if、while、for》
- 速战速决 (1) - PHP: 概述, 常量, 变量, 运算符, 表达式, 控制语句
- 01_Java语言基础部分(数据类型与表达式、流程控制语句、数组与方法)
- Lua中基本的数据类型、表达式与流程控制语句讲解
- C++---基础篇(运算符/表达式/控制语句)
- vb.net 教程 2-2 流程控制:选择语句
- C++第12周报告(一)用循环控制语句编写程序,完成表达式的计算
- C++第14周报告(二)用循环控制语句编写程序,完成表达式的计算
- XSL简明教程(7)XSL 的控制语句
- 【C语言入门教程】3.3 条件控制语句