1、第2-2讲 程序设计的结构与语句 C语言中的一些运算符与表达式语言中的一些运算符与表达式分支结构分支结构if-else 语句语句else-if 语句语句switch 语句语句循环结构循环结构while 语句语句do-while 语句语句for 语句语句2.1 顺序结构设计例例2_1,读取圆的半径,打印圆的周长和面积。,读取圆的半径,打印圆的周长和面积。用常量值用常量值 3.14159。一、C语句与程序块在表达式之后加上一个分号在表达式之后加上一个分号“;”,就形成了语,就形成了语句。句。C语言中语言中分号分号是语句的结束符。是语句的结束符。用一对花括号用一对花括号“”把一组声明和语句括在把一组
2、声明和语句括在一起就构成了一个一起就构成了一个复合语句复合语句。右花括号用于结束。右花括号用于结束程序块,其后不需要分号。程序块,其后不需要分号。C语言的语句用来向计算机系统发出操作指令。语言的语句用来向计算机系统发出操作指令。C语句都是用来完成一定操作任务的。语句都是用来完成一定操作任务的。C语句可分为以下语句可分为以下5 类:类:1)控制语句,完成一定的控制功能。控制语句,完成一定的控制功能。C只有只有9种种if-elseforwhiledo-whilecontinuebreakswitchgotoreturn2)函数调用语句,如:函数调用语句,如:printf(Hello,Word!);
3、3)表达式语句,如赋值语句:表达式语句,如赋值语句:a3;4)空语句空语句:;即只有一个分号的语句即只有一个分号的语句5)复合语句:复合语句:二、C语言的运算符可分为多种类型,包括:可分为多种类型,包括:1)算术运算符)算术运算符 (+-*/%)2)自增和自减运算符)自增和自减运算符 (+-)3)赋值运算符)赋值运算符 (=及其扩展赋值运算符及其扩展赋值运算符)4)条件运算符)条件运算符 (?:)5)关系运算符)关系运算符 (=!=)6)逻辑运算符)逻辑运算符 (!&|)7)指针运算符)指针运算符 (*&)8)逐位运算符)逐位运算符 (&|)9)求字节数运算符)求字节数运算符 (sizeof(
4、)10)其它运算符:)其它运算符:逗号运算符(,)、强制类型转换(类型)三、算术运算符与算术表达式基本的算术运算符基本的算术运算符、*、/、(取模运算符,两侧均应为整型、(取模运算符,两侧均应为整型数据)数据)例如,取模运算符 不能应用于float 或 double 类型/运算符,当它的两个操作数都是整数时,结果为整数。当操作数为实数时,应防止某些计算错误的发生。a=1/3;b=a*3;10%410%4 /结果是结果是2 24%24%2 /结果是结果是0 05/25/2 /结果是结果是2 2 b=?a=1.0/3.0;b=a*3.0;表达式就是操作数和运算符的组成系列,最终推表达式就是操作数和
5、运算符的组成系列,最终推导出一个值。导出一个值。a*b/c-2.5+A算术运算符的优先级与结合性算术运算符的优先级与结合性 二元运算符、具有相同的优先级,它们的优先级二元运算符、具有相同的优先级,它们的优先级比比*、/和的低,而和的低,而*、/和的优先级又比一元运算和的优先级又比一元运算符和的低。符和的低。算术运算符的结合方向:算术运算符的结合方向:“自左向右自左向右”强制类型转换运算符强制类型转换运算符将一个表达式转换成所将一个表达式转换成所需类型需类型(类型名类型名)(表达式表达式)(int)(a+b)(int)a+b (float)(5%3)例例2_2,使用强制转换来计算下面等式,使用强
6、制转换来计算下面等式101/1iisum自增、自减运算符自增、自减运算符 使变量的值增使变量的值增1 或减或减1。注意:在语句中前缀(。注意:在语句中前缀(+n)和后缀(和后缀(n+)运算符的效果是不同的。)运算符的效果是不同的。+n,-n 使用n之前,先使n的值加(减)1n+,n-使用n之后,使n的值加(减)1自增和自减运算符只能用于变量。自增和自减运算符只能用于变量。自增(减)运算符常用于循环变量、指针变量递增自增(减)运算符常用于循环变量、指针变量递增(减)的情况,对于一些易搞混的问题,请小心使用。(减)的情况,对于一些易搞混的问题,请小心使用。如,n=3,表达式:(n+)+(n+)+(
7、n+)的值,有的为3+4+5=12,而TC和MSC中为先n相加,再n自加3次,n=6printf(“%d,%d”,n,n+);i+j,将解释为(i+)+j;-i+,将解释为-(i+)int i=5,k,j;k=+i;printf(%d%dn,k,i);j=k+;printf(%d%dn,j,k);结果为:结果为:6 6 结果为:结果为:6 710四、赋值运算符与表达式 赋值(赋值(=)运算)运算 将将“=”号右边表达式的值赋给等号左边的变量。号右边表达式的值赋给等号左边的变量。当当“=”两边数据类型不一致时,先将右边表达式的值两边数据类型不一致时,先将右边表达式的值转化为左边变量的类型再赋值。
8、转化为左边变量的类型再赋值。复合复合“=”运算符运算符+=、-=、*=、/=、%=、例:例:a+=3 a=a+3 x*=y+8 x=x*(y+8)11赋值表达式赋值表达式 一般形式为:一般形式为:a(v=5)中的中的(v=5)也是一个赋值表达式,其中也是一个赋值表达式,其中v的的值为值为5,整个表达式的值也等于,整个表达式的值也等于5。赋值运算符按照赋值运算符按照“自右而左自右而左”的结合顺序的结合顺序 a=b=c=0;a=(b=(c=0);a=(b=4)+(c=6)a+=a-=a*a a=a+(a=a a*a)12五、逗号运算符与表达式逗号运算符(,)又称为逗号运算符(,)又称为“顺序求值运
9、算符顺序求值运算符”。用它将两个表达式连接起来,构成逗号表达式。用它将两个表达式连接起来,构成逗号表达式。其形式为:其形式为:表达式1,表达式2先求解表达式1,再求解表达式2,最终整个表达式的结果为表达式2 的值。a=3*5,a*4 /结果为:60,赋值运算符的优先级高于逗号运算符逗号表达式的扩展:逗号表达式的扩展:表达式表达式1,表达式,表达式2,表达式,表达式3,表达式,表达式n逗号运算符在所有运算符中优先级最低,最常用逗号运算符在所有运算符中优先级最低,最常用于于for 循环语句中循环语句中132.2 选择结构程序设计选择结构是三种基本结构之一,在大多数程序设选择结构是三种基本结构之一,
10、在大多数程序设计中都会包含它。计中都会包含它。选择结构的作用是根据所指定的条件是否满足,选择结构的作用是根据所指定的条件是否满足,决定从给定的两组操作中选择其一。决定从给定的两组操作中选择其一。主要语句有:主要语句有:if-elseelse-ifswitch14一、关系运算符与逻辑运算符关系运算符关系运算符 、=、是 =的互补 =的互补 =是 !=的互补 可以使用互补性来简化含有非或小于运算符的表达式:!(x=y !(x y!(x y)x=y)x y!(x!=y)x=y !(x=y)x!=y关系运算符的互补性15逻辑运算符逻辑运算符&|!由由&和和|连接的表达式,按从左到右的顺序进行求值,连接
11、的表达式,按从左到右的顺序进行求值,并且在知道结果值为真或假后立即停止计算。并且在知道结果值为真或假后立即停止计算。运算符运算符&的优先级比的优先级比|的高,但都比关系运算符和相的高,但都比关系运算符和相等性运算符的优先级低。等性运算符的优先级低。在关系或逻辑表达式中,如果关系为真,在表达式的在关系或逻辑表达式中,如果关系为真,在表达式的结果值为结果值为1;如果为假,则结果值为;如果为假,则结果值为0。逻辑非运算符!的作用是将非逻辑非运算符!的作用是将非0操作数转换为操作数转换为0,将操,将操作数作数0转换为转换为1。以一般数值作为逻辑量参与运算时,非以一般数值作为逻辑量参与运算时,非0为真,
12、为真,0为假。为假。如:A&B 其值为其值为 true(1)for(i=0;i lim-1&(c=getchar()!=n&c!=EOF;+i)si=c;16真值表真值表17二、条件运算符(?:)类似于类似于 if-then-else 型结构,实现简单的选择型结构,实现简单的选择功能功能 表达式的形式:表达式的形式:表达式表达式1?表达式表达式2:表达式表达式3先求表达式1,若表达式1的值为true,则求解表达式2,并以该值作为条件表达式的值;否则求解表达式3,并以该值作为条件表达式的值。例:例:(2=、0,有两个不等的实根;4)b2-4ac=0(用用do-while控制控制);0!=1(特例
13、)特例);求精、再完善、友好。求精、再完善、友好。5960例例2_11,求:,求:分析:分析:找到规律找到规律第1项,初值为1;第2项,分子为1,分母为2,符号为;第3项,分子为1,分母为3,符号为;确定初步框架、所需变量及初始化的值:确定初步框架、所需变量及初始化的值:分母deno=1,deno=deno+1,与项号对应,deno=100符号sign=1,规律:sign=(-1)*sign项term=1,term=sign*(1/deno)和sum=0,sum=sum+term;使用循环(for),deno从1做到100求精、完善、友好。求精、完善、友好。100199141312116162
14、例例2_12,将数列,将数列44 55 12 42 94 18 6 67进行进行排序。排序。方法一:方法一:冒泡排序(假设希望结果按升序排列)冒泡排序(假设希望结果按升序排列)从第一个数比较起,依次比较相邻的两数,若前一个大于后一个,从第一个数比较起,依次比较相邻的两数,若前一个大于后一个,则将它的位置互换,直至第一轮结束为止。此时最后的必是最大则将它的位置互换,直至第一轮结束为止。此时最后的必是最大的。的。44 55 12 42 94 18 6 6744 55 12 42 94 18 6 6744 12 55 42 94 18 6 6744 12 42 55 94 18 6 6744 12
15、42 55 94 18 6 6744 12 42 55 18 94 6 6744 12 42 55 18 6 94 6744 12 42 55 18 6 67 94每一轮的排序方法基本相同,所不同的只是每轮的比较次数有所不同。一般地,第k轮只需比较到n+1-k为止。如果第k轮比较时任何一对值都不需要交换,则说明第k+1轮及其后的各轮都已排序好,可以省去。63方法二:方法二:使用选择排序使用选择排序(又称比较排序又称比较排序)方法对数方法对数组部分元素排序。组部分元素排序。从待排序的数中选出最小的与第从待排序的数中选出最小的与第1个交换位置,再从剩个交换位置,再从剩余的待排序的数中选出最小的与第
16、余的待排序的数中选出最小的与第2个交换位置,个交换位置,,直直到待排序的数只剩到待排序的数只剩1个为止。个为止。55 44 12 42 94 18 6 6755 44 12 42 94 18 6 6755 44 12 42 94 18 6 6755 44 12 42 94 18 6 6755 44 12 42 94 18 6 6755 44 12 42 94 18 6 6755 44 12 42 94 18 6 676 44 12 42 94 18 55 67 K=1(记录较小元素的下标值记录较小元素的下标值)K=2 K=i=0 K=2 K=2 K=2 K=6 K=664三、算法的表示传统的流
17、程图传统的流程图N-S流程图流程图伪代码伪代码1.传统的流程图传统的流程图一些常用的流程图符号:一些常用的流程图符号:起止框输入输出框处理框判断框流程线连接点三种基本结构三种基本结构652.N-S流程图流程图顺序结构顺序结构选择结构选择结构循环结构循环结构BA p 成立 不成立 当p1成立 A A 直到p1成立66四、结构化程序设计方法结构化程序设计的基本思路是,把一个复杂问题结构化程序设计的基本思路是,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。控制在人们容易理解和处理的范围内。具体方法为:具体方法为:1.自顶向下自顶向下2.逐步细化逐步细化3.模块化设计模块化设计分而治之分而治之用函数来实现子模块一般不超过50行,便于组织、阅读。划分模块是应注意子模块的独立性,即一个模块完成一个功能,耦合性越少越好。4.结构化编码结构化编码正确使用高级语言编写三种结构。正确使用高级语言编写三种结构。