1、计算机上机第五课计算机上机第五课5、长度运算sizeof()返回返回变量变量或或数据类型数据类型的字节长度的字节长度例如:例如:int x;printf(“%dn”,sizeof(x);printf(“%dn”,sizeof(int);使用长度运算符可以增强程序的移植性,不受具体计使用长度运算符可以增强程序的移植性,不受具体计算机数据类型长度的限制。算机数据类型长度的限制。练习2下列程序运行后变量下列程序运行后变量z的二进制值是()的二进制值是()char x=3,y=6,z;z=xy双目双目2!,(t),+(正号)(正号),-(负号)(负号),*,&(取地(取地址)址),+,-,sizeof
2、 单目单目3 4*,/,%,+,-双目双目56 7,=,=,!=8 9 10&,|11 12&,|13?:三目三目14=,+=,-=,*=,/=,%=,&=,=,|=;=;),小于(),小于(=),小于等于(),小于等于(=9);又如:又如:AB输出为输出为1输出为输出为0关系运算的优先级和结合次序关系运算符关系运算符,=,双目双目2!,(t),+(正号)(正号),-(负号)(负号),*,&(取地(取地址)址),+,-,sizeof 单目单目3 4*,/,%,+,-双目双目56 7,=,=,!=8 9 10&,|11 12&,|13?:三目三目14=,+=,-=,*=,/=,%=,&=,=,|
3、=;=;,=,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;1)3=x双目双目2!,(t),+(正号)(正号),-(负号)(负号),*,&(取地(取地址)址),+,-,sizeof 单目单目3 4*,/,%,+,-双目双目56 7,=,=,!=8 9 10&,|11 12&,|13?:三目三目14=,+=,-=
4、,*=,/=,%=,&=,=,|=;=;=a&ch=a)&(ch=a)&(ch=0b=0)&(a0b=0&b=0)&(a0&b0)&(a+b0 D练习3若若int x=3,y=-4,z=0;则表达式则表达式(x&y)=(x|z)的值是()的值是()z|x-3&y的值是()的值是()10练习4设设int a=3;结果为结果为0的表达式为()的表达式为()A)2%aa/=a!aB)aCC语言运算符及优先次序优先级优先级运算符运算符特征特征1(),.,-双目双目2!,(t),+(正号)(正号),-(负号)(负号),*,&(取地(取地址)址),+,-,sizeof 单目单目3 4*,/,%,+,-双目
5、双目56 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*,/,%,+,-双目双目56 7,=,=,!=8 9 10&,|11 12&,|13?
6、:三目三目14=,+=,-=,*=,/=,%=,&=,=,|=;=;=双目双目15,双目双目10、顺序求值运算l“,”逗号既可做分隔符,也可作运算符。逗号做分隔逗号既可做分隔符,也可作运算符。逗号做分隔符用于分隔说明语句中的变量或函数中参数。符用于分隔说明语句中的变量或函数中参数。例如:例如:int a,b,c;printf(“%d%d”,a,b);l逗号作运算符使用,将若干独立表达式连接在一起,逗号作运算符使用,将若干独立表达式连接在一起,组成逗号表达式,一般形式为:组成逗号表达式,一般形式为:表达式表达式1,表达式,表达式2运算时,先计算表达式运算时,先计算表达式1的值,再计算表达式的值,
7、再计算表达式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)程序的质量标准程序的质量标准初期:程序占用内存容量的大小和运行时间长短初期:
8、程序占用内存容量的大小和运行时间长短现今:具有良好的结构,容易理解和阅读现今:具有良好的结构,容易理解和阅读结构化程序设计方法结构化程序设计方法强调程序设计的风格和程序结构的规范化,提倡清晰的结强调程序设计的风格和程序结构的规范化,提倡清晰的结构,其基本思路是构,其基本思路是将一个复杂问题的求解过程划分为若干将一个复杂问题的求解过程划分为若干阶段,每个阶段要处理的问题都容易被理解和处理阶段,每个阶段要处理的问题都容易被理解和处理。结构化程序设计方法的核心结构化程序设计方法的核心“自顶向下,逐步细化,模块化自顶向下,逐步细化,模块化”结构化编码结构化编码1.自顶向下的分析方法把大的复杂问题分解成
9、小问题后再解决。把大的复杂问题分解成小问题后再解决。面对复杂问题,首先进行上层(整体)分析,按组织面对复杂问题,首先进行上层(整体)分析,按组织或功能,将问题分解为子问题,如果子问题仍然复杂,或功能,将问题分解为子问题,如果子问题仍然复杂,再做进一步分解,直到处理对象相对简单,容易处理再做进一步分解,直到处理对象相对简单,容易处理为止。当所有子问题都解决了,整个问题就解决了。为止。当所有子问题都解决了,整个问题就解决了。每一次分解都是对上一层问题进行细化和逐步求精,每一次分解都是对上一层问题进行细化和逐步求精,最终形成类似树形的层次结构,来描述分析的结果。最终形成类似树形的层次结构,来描述分析
10、的结果。学生成绩统计程序的层次结构图 开发一个学生成绩统计程序,输入一批学生的开发一个学生成绩统计程序,输入一批学生的5门课门课程的成绩,要求输出每个学生的平均分和每门课程的程的成绩,要求输出每个学生的平均分和每门课程的平均分,找出平均分最高的学生。平均分,找出平均分最高的学生。学生成绩统计程序学生成绩统计程序成绩输入成绩输入数据计算数据计算数据查找数据查找输出成绩输出成绩计算学生平均分计算学生平均分计算课程平均分计算课程平均分2.模块化设计将模块组织成良好的层次系统,顶层模块调用其下层模块将模块组织成良好的层次系统,顶层模块调用其下层模块以实现程序的完整功能,每个下层模块再调用更下层的模以实
11、现程序的完整功能,每个下层模块再调用更下层的模块,从而完成程序的一个子功能,块,从而完成程序的一个子功能,最下层的模块完成最具最下层的模块完成最具体的功能体的功能。模块可以是一条语句,一个程序段,或一个函数。模块可以是一条语句,一个程序段,或一个函数。遵循遵循模块独立性模块独立性的原则,即模块之间的联系应尽量简单。的原则,即模块之间的联系应尽量简单。一个模块一个模块只完成一个指定的功能只完成一个指定的功能。模块之间只模块之间只通过参数进行调用通过参数进行调用。一个模块只有一个模块只有一个入口和一个出口一个入口和一个出口。模块内慎用全局变量。模块内慎用全局变量。学生成绩统计程序的层次结构图 开发
12、一个学生成绩统计程序,输入一批学生的开发一个学生成绩统计程序,输入一批学生的5门课门课程的成绩,要求输出每个学生的平均分和每门课程的程的成绩,要求输出每个学生的平均分和每门课程的平均分,找出平均分最高的学生。平均分,找出平均分最高的学生。学生成绩统计程序学生成绩统计程序成绩输入成绩输入数据计算数据计算数据查找数据查找输出成绩输出成绩计算学生平均分计算学生平均分计算课程平均分计算课程平均分3.结构化编码 按照结构化程序设计的观点,任何功能的程序都可以通按照结构化程序设计的观点,任何功能的程序都可以通过过三种基本结构的组合三种基本结构的组合来实现,即来实现,即顺序顺序、分支和循环分支和循环。顺序控
13、制结构:一个程序模块执行完后,按自然顺序执行顺序控制结构:一个程序模块执行完后,按自然顺序执行下一个模块。下一个模块。分支(选择)控制结构:根据不同的条件选择要执行的模分支(选择)控制结构:根据不同的条件选择要执行的模块。块。循环控制结构:反复执行某些相同的处理过程。循环控制结构:反复执行某些相同的处理过程。每一个结构可以包含若干条语句和其它基本结构每一个结构可以包含若干条语句和其它基本结构。4、流程图:开始或结束开始或结束:输入或输出输入或输出:处理框处理框:连接点连接点:流程线流程线程序流程图的基本符号程序流程图的基本符号:判断框判断框ABBYPNABPNY(a)顺序结构顺序结构(b)简单
14、分支结构简单分支结构(c)选择分支结构选择分支结构(d)当型循环当型循环APYNAPYN(e)直到型循环直到型循环基本的程序流程图4.c语句分类根据结构化程序设计的三个模块分为:根据结构化程序设计的三个模块分为:用于顺序结构的:用于顺序结构的:表达式语句(表达式后加一分号)表达式语句(表达式后加一分号)用于分支结构的:用于分支结构的:if语句、语句、switch语句语句用于循环结构的:用于循环结构的:while 语句、语句、for语句、语句、do-while语句语句根据根据c语言的句法分为:语言的句法分为:单个语句单个语句复合语句:用一对复合语句:用一对“”,将若干语句顺序组合在一起就,将若干
15、语句顺序组合在一起就形成了一个程序段。形成了一个程序段。空语句:仅一分号构成的语句空语句:仅一分号构成的语句5.程序书写的风格l对变量、函数、常量等命名时,要见名知意,有助于对变量、函数、常量等命名时,要见名知意,有助于对变量含义或函数功能的理解。对变量含义或函数功能的理解。l在程序中增加必要的注释,增加程序的可读性。在程序中增加必要的注释,增加程序的可读性。l程序要清晰易懂,语句构造要简单直接,一行写一条程序要清晰易懂,语句构造要简单直接,一行写一条语句,采用缩进格式。语句,采用缩进格式。l程序有良好的交互性,输入有提示,输出有说明,并程序有良好的交互性,输入有提示,输出有说明,并尽量采用统
16、一整齐的格式。尽量采用统一整齐的格式。顺序结构程序设计举例1长方体体积计算器。长方体体积计算器。#includemain()int x,y,z,v;printf(“input x,y and z:”);scanf(“%d%d%d”,&x,&y,&z);v=x*y*z;printf(“v=%dn”,v);getch();开始开始结束结束输入输入输出输出v=x*y*z顺序结构程序设计举例2用临时变量交换两个变量的值用临时变量交换两个变量的值数据结构数据结构 x,y,temp开始开始结束结束tempxytempxy输出输出main()int x,y,temp;temp=x;x=y;y=temp;pr
17、intf(“x=%dny=%dn”,x,y);顺序结构程序设计举例3任意三角形面积计算器任意三角形面积计算器关键问题:关键问题:area=其中:其中:s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);#includemain()float a,b,c,s,area;scanf(“%f%f%f”,&a,&b,&c);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();47 结束语结束语