变量OP=表达式 其含义是 变量=变量OP(表达式) 这里OP是 ,-,*,/,%,(,),8,, 之一(后5个在介绍位运算时再介绍)如 相当于 要注意表达式两边的括号如 a兴=b+3 实际上是 a a 而不是 a = a* bt3 2.7.4赋值表达式 赋值运算符连接变量和表达式而得到的式子就是赋值表达式,如 也就是说,这种形式不仅可以做为一个语句出现也可以出现在表达式可以出现的任何地方 (实际上赋值语句在C语言中被认为是一种表达式语句),既然是表达式,也就具有一个值 赋值表达式的求值过程是:先求赋值运算符右部表达式的值,然后把这个值赋给左部的变 量,而赋值表达式的值就是这时左部变量的值 赋值运算符(包括前面介绍的+=,-=等)的优先级很低仅高于逗号运算符,其结合 性是由右向左 在C程序中,经常可以看到形如 k=0 的式子,它相当于 (j=( 效果是对变量i,,k赋予了相同的值0。赋值表达式也经常出现在条件或循环语句的判断条 件中这种用法在后面各章随处可以见到。 第八节逗号运算符和逗号表达式 逗号运算符就是我们常用的逗号“,”,作为操作符时,它可以把多个表达式连接起来,如 a+5,b-3 就是一个逗号表达式 逗号表达式的求值过程是从左到右,逐个求表达式的值最后整个表达式的值取最右 个表达式的值。 例2.10
main( printf("i=%d, j=%d\n",i, j) 运行结果为 我们来分析一下程序的执行,语句 的执行顺序是,首先求i-=4,也就是=i-4,求得i值为16,然后求i/2,结果为8,最 后把8作为逗号表达式的值赋给变量j。注意:语句中的括号是必须的,因为逗号运算符是所 有C运算符中优先级最低的一个,如果不用括号,它实际上相当于 实际中,逗号表达式只在for语句中才经常被用到,其他地方基本上不用,我们这里的 例子只是为了说明它的用法。 第九节常见错误 这一节里我们列出一些学习本章内容编程时初学者容易犯的错误,以供参考 1.忘记定义变量 maino X=1; printf("%d\n",x+ y) 这个程序编译时系统会指出错误:变量x和y没有定义。C语言规定,所有变量在使用 之前都必须定义。正确的格式应在语句 之前加上说明 Int x, y i 2.变量没有赋值就引用。 如 maino y,Zi
z=x+y printf ("%d\n",z); 这个程序在编译时会给出警告,告诉你变量x、y没有赋值就使用了。如果要执行这个 序输出将是一个混乱的值在程序中变量应该先赋值后再引用 3.整型变量赋值超过整型变量的取值范围 如 t i,j,k j=100; printf("%d\n",k); 这个程序在编译时不会产生任何问题但如果在PC机上运行,却得不到预期的结果, 程序不会输出值10000是输出-31072,这是因为it型变量只能取值于-32768 32767之间,而10000出了这个范围高位被截断因而得到了这个莫名其妙的结果。 如果你需要计算较大整数值时,可把变量定义为long型,输出时用‰ld进行输出,如把程序 写成 int1’]; long k i printf("%ld \n",k); 这里的输入结果就为10000 4将数学表达式改变C算术表达式时,丢失必要的括号 如有数学表达式 写成了 a+b/c*d 这实际上相当于 显然不对,正确的写法应是 (a+b)/(c*d) 5向表达式赋值
有些初学者搞不清賦值运算符的含义,总是按数学中的习惯认为“=”表示相等,于是 就有可能写出 这样的语句。要记住:赋值表达式的左部只能是变量 6用 scanf输入数据时忘记地址运算符 如 scanf("%d%d", a, b); 这种形式的输入,在有些编译中会给出警告,但程序仍可执行,只是不能得到正确的输 入值,C语言要求输入参数应是变量的地址值。所以输入应写成 scanf("%d%d",&a, &b); 7,在 scanf中加入nn 许多初学者受prn影响总是把输入写成 scanf("%dwn”,8a) 实际上这不是一个错误但在执行时输入数据并打入回车后程序仍不继续运行使人莫名 其妙,再次打回车后程序才会运行,这是因为在sanf的控制字符串中,所有非格式转换字 符和非空格字符在输入时都需要一个相同的字符作为匹配这样你就要多打入一个回车符, 虽然不能算是真正的错误却带来许多麻烦 8语句末尾忘记分号 C语言的语句以分号结尾如果不写分号在编译时,将会指出错误,而且这个错误并不 是告诉你少写了分号。 括号不匹配 在写表达式时经常是少写了右边的括号,这时编译也会指出错误但可能不会告诉你 什么地方少了括号,而是显示其他类型的错误 10.向字符变量赋字符串值 char c 字符型变量只能存放一个字符而不能存放字符串
第三章逻辑运算和判定结构 本章学习重点 本章介绍C语言的关系运算逻辑运算以及用作判定控制的语句和 switch语句。学 习本章应能掌握关系和逻辑运算的概念,并能够用和 switch语句编制具有判定控制结构 的程序 判定控制结构是结构程序设计所采用的三种基本控制结构之一。另外两种是顺序控制 和循环控制。有人曾经证明:任何程序都可用顺序、判定、循环三种控制结构来实现。而结构 化程序设计的研究成果表明:只用这三种控制结构编写的程序易于保证正确性在编制程序 时,有时并不能保证程序一定执行某些指令,而是要根据一定的外部条件来判断哪些指令要 执行。如菜谱中要加工西红柿,可能有这样的步骤:如果是用鲜西红柿则去皮,切碎开始时 放入,如果是用西红柿酱,就在最后放入。这里,我们并不知具体操作时执行哪段指令,但菜 谱给出了不同条件下的处理方式在计算机程序中也是如此,可以根据不同的条件执行不同 的代码段。这就是判定控制结构 第一节关系运算符和关系表达式 3.1.1关系运算符 C语言提供一组关系运算符,用以表示两个运算对象之间的大小关系。表3.1给出了这 些关系运算符 表3.1关系运算符 运算符 含义 小于 小于或等于 于 大于或等于 不等于 关系运算符都是双目运算符,它们的优先级比算术运算符低,高于赋值运算符,结合 则是从左到右。在关系运算符中,<、<=、>、>=同级,它们高于==和!=,==和! 同级。 312关系表达式 用关系运算符将两个表达式连接起来的式子就是关系表达式。下面给出一些合法的关 系表达式