,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,C,语言运算符及优先次序,优先级,运算符,特征,1,(),.,-,双目,2,!,(,t,),+,(正号),-,(负号),*,&,(取地址),+,-,sizeof,单目,3 4,*,/,%,+,-,双目,5,6 7,=,=,!=,8 9 10,&,|,11 12,&,|,13,?:,三目,14,=,+=,-=,*=,/=,%=,双目,2,!,(,t,),+,(正号),-,(负号),*,&,(取地址),+,-,sizeof,单目,3 4,*,/,%,+,-,双目,5,6 7,=,=,!=,8 9 10,&,|,11 12,&,|,13,?:,三目,14,=,+=,-=,*=,/=,%=,=,双目,15,双目,6,、位运算,C,语言可用来代替汇编语言完成大部分编程工作,支持位运算就是体现处之一,位运算是对字节或字中的实际二进制位进行检测、设置或移位,位运算符,位逻辑运算符,:,&,(按位与),|,(按位或),(按位异或),,(取反),移位运算符:,(右移),必须是,char,型、,int,型和它们的变体,不能用于,float,、,double,、,void,或其它更复杂数据类型,位运算不改变原操作数的值,移位运算,ab,表示将,a,的二进制右移,b,位,,ab,表示将,a,的二进制左移,b,位,其中,a,、,b,均为整型,,b,为正数,例如,,a,12,;,a=a2,0000110000000011,(十进制,4,),三种移位实现方式,(与具体编译器有关),:,循环移位:移入的位等于移出的位,逻辑移位:移出的位丢失,移入的位取,0,算术移位:移出的位丢失,左移入的位取,0,,右移入的,位取符号位(常用),移位运算的功能,例如:,a,15,;,a=a2,0001000000000100,(十进制,4,),在数据可表达的范围里,,左移,1,位相当于乘,2,,左移,2,位相当于乘,4,(无符号数),右移,1,位相当于除,2,,右移,2,位相当于除,4,。,a,15,;,a=a1,0000111100000111,(十进制,7,),位逻辑运算,A,B,A&B,A|B,AB,A,0,0,0,0,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,0,运算规则:先将两个操作数化为二进制数,然后按位运算,且,只有对应位进行运算,,相邻位之间没有关系,例如:,0 1 0 1 0 1 0 0,(十进制,84,),&,),0 0 1 1 1 0 1 1,(十进制,59,),0 0 0 1 0 0 0 0,(十进制,16,),练习,1,表达式,0 x13&0 x17,的值是(),0 x17,0 x13,0 x1e,0 xf8,B,练习,2,下列程序运行后变量,z,的二进制值是(),char,x=3,y=6,z;,z=xy,双目,2,!,(,t,),+,(正号),-,(负号),*,&,(取地址),+,-,sizeof,单目,3 4,*,/,%,+,-,双目,5,6 7,=,=,!=,8 9 10,&,|,11 12,&,|,13,?:,三目,14,=,+=,-=,*=,/=,%=,),小于(,=,),小于等于(,=9);,又如:,AB,输出为,1,输出为,0,关系运算的优先级和结合次序,关系运算符,,,=,,,双目,2,!,(,t,),+,(正号),-,(负号),*,&,(取地址),+,-,sizeof,单目,3 4,*,/,%,+,-,双目,5,6 7,=,=,!=,8 9 10,&,|,11 12,&,|,13,?:,三目,14,=,+=,-=,*=,/=,%=,,,=,,,31);,而,=,,,!=,优先级低于前四种,例如:,printf(“%dn”,11=111+12,等价于,10(1+12),输出为,0,输出为,0,练习,定义,ch=a;int a=2,b=3,c=1,d,x=10;,写出下列表达式的值,:,ab=c;,d=ab;,chb+1;,d=a+bc;,b-1=a!=c;,3=x,双目,2,!,(,t,),+,(正号),-,(负号),*,&,(取地址),+,-,sizeof,单目,3 4,*,/,%,+,-,双目,5,6 7,=,=,!=,8 9 10,&,|,11 12,&,|,13,?:,三目,14,=,+=,-=,*=,/=,%=,=a&ch=a)&(ch=a)&(ch=0,b=0)&(a0,b=0&b=0)&(a0&b0)&(a+b0,D,练习,3,若,int x=3,y=-4,z=0;,则表达式,(x&y)=(x|z),的值是(),z|x-3&y,的值是(),1,0,练习,4,设,int a=3;,结果为,0,的表达式为(),A,),2%a,a/=a,!a,a,C,C,语言运算符及优先次序,优先级,运算符,特征,1,(),.,-,双目,2,!,(,t,),+,(正号),-,(负号),*,&,(取地址),+,-,sizeof,单目,3 4,*,/,%,+,-,双目,5,6 7,=,=,!=,8 9 10,&,|,11 12,&,|,13,?:,三目,14,=,+=,-=,*=,/=,%=,b)?a:b,优先级位于逻辑运算和赋值运算之间,结合顺序,由右至左,例如:,ab?a:cd?c:d,等价于,ab?a:,(cd?c:d),C,语言运算符及优先次序,优先级,运算符,特征,1,(),.,-,双目,2,!,(,t,),+,(正号),-,(负号),*,&,(取地址),+,-,sizeof,单目,3 4,*,/,%,+,-,双目,5,6 7,=,=,!=,8 9 10,&,|,11 12,&,|,13,?:,三目,14,=,+=,-=,*=,/=,%=,=,双目,15,双目,10,、顺序求值运算,“,”逗号既可做分隔符,也可作运算符。逗号做分隔符用于分隔说明语句中的变量或函数中参数。,例如:,int a,b,c;,printf(“%d%d”,a,b);,逗号作运算符使用,将若干独立表达式连接在一起,组成逗号表达式,一般形式为:,表达式,1,,表达式,2,运算时,先计算表达式,1,的值,再计算表达式,2,的值,将表达式,2,的值作为整个表达式的值,因此也称为,顺序求值运算,符。,练习,1,写出下列代码段的结果:,int a1,a2,b=2,c=7,d=5;,a1=(+b,c-,d+3);,a2=+b,c-,d+3;,printf(“%d,%dn”,a1,a2);,8,4,本章内容提要,常量、变量和数据类型,输入与输出格式,C,语言中的运算,结构化的程序设计思想,结构化程序设计思想(,2.5.2,),程序的质量标准,初期:程序占用内存容量的大小和运行时间长短,现今:具有良好的结构,容易理解和阅读,结构化程序设计方法,强调程序设计的风格和程序结构的规范化,提倡清晰的结构,其基本思路是,将一个复杂问题的求解过程划分为若干阶段,每个阶段要处理的问题都容易被理解和处理,。,结构化程序设计方法的核心,“自顶向下,逐步细化,模块化”,结构化编码,1.,自顶向下的分析方法,把大的复杂问题分解成小问题后再解决。,面对复杂问题,首先进行上层(整体)分析,按组织或功能,将问题分解为子问题,如果子问题仍然复杂,再做进一步分解,直到处理对象相对简单,容易处理为止。当所有子问题都解决了,整个问题就解决了。,每一次分解都是对上一层问题进行细化和逐步求精,最终形成类似树形的层次结构,来描述分析的结果。,学生成绩统计程序的层次结构图,开发一个学生成绩统计程序,输入一批学生的,5,门课程的成绩,要求输出每个学生的平均分和每门课程的平均分,找出平均分最高的学生。,学生成绩统计程序,成绩输入,数据计算,数据查找,输出成绩,计算学生平均分,计算课程平均分,2.,模块化设计,将模块组织成良好的层次系统,顶层模块调用其下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,,最下层的模块完成最具体的功能,。,模块可以是一条语句,一个程序段,或一个函数。,遵循,模块独立性,的原则,即模块之间的联系应尽量简单。,一个模块,只完成一个指定的功能,。,模块之间只,通过参数进行调用,。,一个模块只有,一个入口和一个出口,。,模块内慎用全局变量。,学生成绩统计程序的层次结构图,开发一个学生成绩统计程序,输入一批学生的,5,门课程的成绩,要求输出每个学生的平均分和每门课程的平均分,找出平均分最高的学生。,学生成绩统计程序,成绩输入,数据计算,数据查找,输出成绩,计算学生平均分,计算课程平均分,3.,结构化编码,按照结构化程序设计的观点,任何功能的程序都可以通过,三种基本结构的组合,来实现,即,顺序,、,分支和循环,。,顺序控制结构:一个程序模块执行完后,按自然顺序执行下一个模块。,分支(选择)控制结构:根据不同的条件选择要执行的模块。,循环控制结构:反复执行某些相同的处理过程。,每一个结构可以包含若干条语句和其它基本结构,。,4,、流程图,:,开始或结束,:,输入或输出,:,处理框,:,连接点,:,流程线,程序流程图的基本符号,:,判断框,A,B,B,Y,P,N,A,B,P,N,Y,(a),顺序结构,(b),简单分支结构,(c),选择分支结构,(d),当型循环,A,P,Y,N,A,P,Y,N,(e),直到型循环,基本的程序流程图,4.c,语句分类,根据结构化程序设计的三个模块分为:,用于顺序结构的:,表达式语句(表达式后加一分号),用于分支结构的:,if,语句、,switch,语句,用于循环结构的:,while,语句、,for,语句、,do-while,语句,根据,c,语言的句法分为:,单个语句,复合语句:用一对“,”,将若干语句顺序组合在一起就形成了一个程序段。,空语句:仅一分号构成的,语句,5.,程序书写的风格,对变量、函数、常量等命名时,要见名知意,有助于对变量含义或函数功能的理解。,在程序中增加必要的注释,增加程序的可读性。,程序要清晰易懂,语句构造要简单直接,一行写一条语句,采用缩进格式。,程序有良好的交互性,输入有提示,输出有说明,并尽量采用统一整齐的格式。,顺序结构程序设计举例,1,长方体体积计算器。,#include,main(),int x,y,z,v;,printf(“input x,y and z:”);,scanf(“%d%d%d”,v=x*y*z;,printf(“v=%dn”,v);,getch();,开始,结束,输入,输出,v=x*y*z,顺序结构程序设计举例,2,用临时变量交换两个变量的值,数据结构,x,y,temp,开始,结束,temp,x,ytemp,xy,输出,main(),int x,y,temp;,temp=x;,x=y;,y=temp;,printf(“x=%dny=%dn”,x,y);,顺序结构程序设计举例,3,任意三角形面积计算器,关键问题:,area=,其中:,s=1.0/2*(a+b+c);,area=sqrt(s*(s-a)*(s-b)*(s-c);,#include,main(),float a,b,c,s,area;,scanf(“%f%f%f”,s=1.0/2*(a+b+c);,area=sqrt(s*(s-a)*(s-b)*(s-c);,printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn”,a,b,c,s);,printf(“area=7.2fn”,area);,getch();,思考:三角形的三边长可以任意输入吗?,