310 likes | 440 Vues
C 语言程序设计. 视频课程. 讲师:成少雷. 概述. 一 、左值和右值. 三 、算术运算. 二 、运算符概述. 四 、表达式. 一切皆运算. 理解 C 语言中运算. 运算符 的运算规则就是我们接下来要学习和掌握的。. #include < stdio.h > int main(void) { int x = 23, y = 34; int z = x + y; printf (“C 篮子中的苹果数量为 %d n“,z ); system(“PAUSE”); return 0; }.
E N D
C语言程序设计 视频课程 讲师:成少雷
概述 一、左值和右值 三、算术运算 二、运算符概述 四、表达式
理解C语言中运算 • 运算符的运算规则就是我们接下来要学习和掌握的。 #include <stdio.h> int main(void) { int x = 23, y = 34; int z = x + y; printf(“C篮子中的苹果数量为%d\n“,z); system(“PAUSE”); return 0; }
C语言的运算 表达式 操作数 运算符 23 + 34 加数 算式 加号
左值和右值 • 有些运算符对操作数有特殊要求,比如说赋值运算符和自增,自减运算符要求操作数必须是左值的。 • 左值最初来源于赋值表达式E1=E2,E1在赋值表达式左边,称其为左值,但左值本质上代表的是一个内存空间,l是指locator,可定位的。 • 跟左值相对的是右值,右值是表达式的值。
左值右值 • 可以作为左值的表达式形式有:变量名、e[k]、(e)、e.name、e->name、*e。 • 有些运算符要求某个操作数必须为左值,这样的运算符有: • &:操作数应为左值或函数名。 • ++、--:操作数应为左值。 • =、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=:左操作数应为左值。
概述 一、左值和右值 三、算术运算 二、运算符概述 四、表达式
C语言中的运算符(operator) • C语言运算符可分为以下几类: • 算术运算符 + - * / % ++ -- • 关系运算符 > < == >= <= != • 逻辑运算符 ! && || • 位运算符 << >> ~ | ^ & • 赋值运算符 = += -= *= /= %= >>= <<= &= ^= |= • 条件运算符 ?: • 逗号运算符 , • 指针运算符 * & • 求字节数运算符 sizeof • 特殊运算符 (type) . -> [] ()
运算符的优先级和结合性(Ⅲ) • 优先级(precedence) • 不同优先级的运算符,运算次序按优先级由高到低执行 • 可以使用括号改变运算符的优先次序 • 结合性(Associativity) • 同一优先级的运算符,运算次序按结合方向的规定执行 • 例: • 设有intx,y;请分析语句y = x * 5 + 4;执行后,y的值是多少? • 设有int x = 2,y = 3;请分析y = x = 6;执行后y的值是多少?
概述 一、左值和右值 三、算术运算 二、运算符概述 四、表达式
算术运算符 • 基本算术运算符 • 加(+)、减(-)、乘(*)、除(/)、模运算(%)、负号(-) • 自增、自减运算符 • ++ • --
基本算数运算符 • 注意: • 两个整数相除的结果为商,舍去小数部分。 • 对于%来说,两个操作数必须为整数
基本算数运算符 • 除法和模运算运算规律 • 注意: • 模运算结果的正负取决于左操作数 • 实数求模可以使用函数fmod -7 / 2 = -3 15 / -4 = -3 5.0 / 2 = 2.5 5 % 3 = 2 -5 % 2 = -1 5 % -2 = 1
常用的标准数学函数 • #include <math.h>
挑毛病 ? #include <stdio.h> #include <math.h> int main() { double a,b,c,p; double triangleArea; printf("请输入三角形三边的长度:"); scanf("%lf%lf%lf",&a,&b,&c); p = 1 / 2 * (a + b +c); triangleArea = sqrt(p*(p - a)*(p - b)*(p - c)); /*输出结果*/ printf("三角形的面积 = %f\n",triangleArea); return 0; } 程序运行结果: 改为:1.0/2 (1/2.0)
课堂练习 • 请编写一个程序,任意输入5位整数,将这个5位数倒序输出。例输入的12345,则输出54321。 • 提示:整除和模运算 #include <stdio.h> #include <stdlib.h> int main(void) { int num; printf("请输入一个5位整数:"); scanf("%d",&num); printf(“%d”,num%10); );//输出个位 printf(“%d”,num%100/10); );//输出十位 printf(“%d”,num%1000/100); );//输出百位 printf(“%d”,num%10000/1000); );//输出千位 printf("%d\n",num / 10000);//输出万位 system("pause"); return 0; }
算数运算符—自增自减运算符 • 自增运算符(++):一元运算符,操作形式有两种: • ++操作数操作数提供计算值前,先使其值自动加1 • 操作数++操作数提供计算值后,再使其值自动加1 • 自减运算符(--):一元运算符,操作形式有两种: • --操作数操作数提供计算值前,先使其值自动减1 • 操作数--操作数提供计算值后,再使其值自动减1 例设有int x = 3, y;,请分析语句y = ++x;执行后,x、y 的值? 例设有int x = 3, y = 4, z;,请分析语句z = x++ + y;执行后,x、y、z 的值? 例设有int x = 3, y = 4, z;,请分析语句z = x++ + --y;执行后,x、y、z 的值?
自增自减运算符 • 小结 • 自增、自减运算符操作数必须是左值。 • 自增、自减运算是C语言特有的,常用于循环语句中,控制变量自增或自减。 • 在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。
运算符的副作用 • 求代码结果。 /*源文件:demo4_4.c*/ #include <stdio.h> #include <stdlib.h> int main(void) { intx = 3; inta; a = (++x)+(++x)+(++x); printf("a = %d", a); system("PAUSE"); return 0; } /*源文件:demo4_5.c*/ #include <stdio.h> #include <stdlib.h> int main(void) { intx = 3; inta; ++x; ++x; ++x; a = x + x + x; printf("a = %d\n", a); system("PAUSE"); return 0; }
副作用和序列点 • 副作用 一般运算符是不改变操作数的值,如果运算符改变操作数的值,我们称值为副作用。 • 求值点 该点前的表达式的所有副作用,在程序执行到达该点之前发生完毕;该点后的表达式的所有副作用,在程序执行到该点时尚未发生。序列点出现的位置: • 完整表达式结束时 • &&、||、?:或逗号运算符的第一个操作数之后 • 函数调用中求值参数和函数表达式之后
副作用和序列点 • 注意: • 尽量不要利用表达式的副作用. • 尽量引入中间变量,避开副作用歧义. • 尽量不要出现晦涩难懂,也不知道系统将怎样执行的代码.
概述 一、左值和右值 三、算术运算 二、运算符概述 四、表达式
表达式 • 表达式 • 由一系列操作数和运算符结合构成的符合C语言运算规则的式子,叫表达式。 • 操作数包括常量、变量、函数调用 • 表达式构成的基本规则: • 单个的常量、变量、函数调用就是表达式 例31, x , printf()等 • 用()括起来的表达式是基本表达式。 • 运算符和表达式结合起来,可以构成新的表达式 例 x + 3 , -x
表达式(cont) • 表达式的值 • 表达式经过运算最后所得的值称为表达式的值。 • 计算表达式的值必须考虑运算符的优先级和结合性 • 表达式的类型 • 一个表达式的类型,取决于这个表达式最后进行的是什么运算(或者说取决于表达式中优先级最低运算符) 。 • 算术表达式 • 赋值表达式 • 关系表达式 • 逻辑表达式 • 逗号表达式 • …….
算数表达式 • C语言算数表达式和数学公式基本上遵循相同的运算规律,但也有一些细微的差别: • 不允许使用方括号和花括号,只能使用小括号; • 只能使用系统允许的符号,象平方、正弦、余弦等计算必须调用相应的库函数; • 乘号不能省略; • 不允许有分子分母形式 • 表达式是直线型的; a b
练习 • 用C语言编写数学公式 • 数学式 b2-4ac • 数学式 πR2 • 数学式 [(a+b)2-(c-d)2] / (a – b)2 • 数学式 a + b + c + d + e 5
小结 1 2 3 3 4 4 5 左值和右值的基本概念 运算符的优先级和结合性 基本算术运算符 自增自减运算符 表达式的基本概念