C语言项目开发教程PPT第2章.ppt
《C语言项目开发教程PPT第2章.ppt》由会员分享,可在线阅读,更多相关《C语言项目开发教程PPT第2章.ppt(86页珍藏版)》请在三一办公上搜索。
1、第2章,程序控制结构,算法的实现过程是由一些列操作组成的,这些操作之间的执行次序就是程序的控制结构。结构化程序设计方法强调使用的基本结构是顺序、选择和循环3种控制流程,任何简单或复杂的算法都可以由它们组合而成。一般情况下,程序中的代码按其出现的顺序依次执行,这叫做“顺序执行”。顺序结构是程序设计中最简单、最常用的基本结构。选择结构程序不是按照语句的顺序依次执行,而是根据给定的条件成立与否,决定下一步选取哪条执行路径。选择结构的特点是:在各种可能的操作分支中,根据所给定的选择条件是否成立,来决定执行某一分支的相应操作,而且在任何情况下,无论分支多少,仅选其一。算法中有时需要反复执行某一特定操作,
2、循环控制就是由特定的条件决定某些语句重复执行的控制方式。由于顺序结构比较常见,本章中着注重介绍选择控制结构和循环控制结构的语法规则、语句的使用和程序执行流程等知识。,任务2.1 测身高,任务目标掌握关系运算符和关系表达式的概念和用法。掌握逻辑运算符和逻辑表达式的概念和用法。掌握条件运算符和条件表达式的概念和用法。掌握if分支语句的用法,包括单分支语句、双分支语句以及多分支语句。掌握switch分支语句的用法。完成测身高程序。,2.1.1 控制语句中的运算符和表达式1关系运算符和关系表达式,关系运算是逻辑运算中比较简单的一种。所谓“关系运算”实际上是“比较运算”。将两个值进行比较,判断比较的结果
3、是否符合给定的条件。例如,a3是一个关系表达式,大于号()是一个关系运算符,如果a的值为5,则满足给定的“a3”条件,因此关系表达式的值为“真”(即“条件满足”),用值1表示;如果a的值为2,不满足“a3”条件,则关系表达式的值为“假”,用数值0表示。C语言中提供6种不同的关系运算符,简单介绍如表2-1所示。表2-1 关系运算符运 算 符名 称运算规则运算对象运算结果举 例表达式值大于a=2;b=3;ab;0=大于等于a=2;b=3;a=b;0=等于a=2;b=3;a=b;0!=不等于a=2;b=3;a!=b;1当多种运算符在一个表达式中同时使用时,要注意运算符的优先级,防止记错运算符优先级的
4、最好方法是添加圆括号。关系运算符的优先级关系如下:,(1)前4种关系运算符(,=)的优先级别相同,后两种也相同。前4种高于后2种。例如,“”优先于“=”。而“”与“a+b等效于c(a+b)。ab!=c等效于(ab)!=c。a=bc等效于a=(bc)。,【案例2-1】关系表达式。#include void main()int a,b,c,x,y;a=1,b=2,c=3;x=ab;y=a=c);printf(%dn,a=b!=2);printf(%dn,a+54);printf(%dn,a!=b!=c);程序运行结果如下:0,111011注意,要区分关系运算符“=”和赋值运算符“=”。,【案例2-
5、2】运算符“=”和“=”的区分。#include void main()int a=3,b=2,c1,c2;c1=(a=b);printf(a=%d,b=%d,c1=%dn,a,b,c1);c2=(a=b);printf(a=%d,b=%d,c2=%dn,a,b,c2);程序运行结果如下:a=2,b=2,c1=2a=2,b=2,c2=1“=”为赋值操作,其结果为将右边表达式的值赋给左边变量,会改变左边变量的值,而“=”为关系表达式,用来判断左右两边表达式的值是否相同,相同时表达式结果为1,不同时为0,不会改变左右两边表达式的值。,2逻辑运算符和逻辑表达式,当判断条件有多个时,只执行一个判断并不
6、足以确定程序执行流程,而是需要同时执行多个比较并综合多个比较结果来进行判断,这时就需要用到逻辑运算和逻辑表达式。C语言提供三种逻辑运算符,这几种运算符的简单介绍如表2-2所示。表2-2 逻辑运算符运 算 符名 称运算规则运算对象运算结果举 例表达式值!非逻辑非(NOT)数字、整型或实数型逻辑值1或0a=1;!a0a|b1“&”和“|”是“双目运算符”,它要求有两个运算量(操作数),如(ab)&(xy),(ab)|(xy)。“!”是一目运算符,只要求一个运算量,如!(ab)。表2-3为逻辑运算的“真值表”。用它表示当a和b的值为不同组合时,各种逻辑运算所得到的值。,程序的目的是解决客观世界中存在
7、的问题,因此常常需要模拟客观世界中的事物或者概念,如学生。在计算机中是如何表示一个学生或者其他事物的呢?首先要做的是找到这个事物中会被关注的信息。比如在学生信息管理系统中,学生的学号、姓名、年龄、性别、院系等信息会被关注,则在计算机中将这些信息表示出来,即可代表一个学生。但是不同的属性具有不同的数据类型,如学号为整型或者字符型、姓名为字符型、性别为字符型、学院为字符型、成绩为浮点型等,如表2-3所示。表2-3 真值表ab!a!ba&ba|b真真假假真真真假假真假真假真真假假真假假真真假假除了逻辑非以外,逻辑运算符的优先级低于关系运算符,但逻辑非的优先级高于算数运算符。,如前所述,逻辑表达式的值
8、应该是一个逻辑量“真”或“假”。C语言编译系统在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。例如:若a=4,则!a的值为0。因为a的值为非0,对它进行非运算,值为1。若a=4,b=5,则a&b的值为1。因为a和b的值都为非0,对它进行与运算,值为1。a、b同前,a|b的值为1。a、b同前,!a|b的值为1。4&0|2的值为1。通过这几个例子可以看出,由系统给出的逻辑运算结果不是0就是1。而参加逻辑运算的运算对象可以是任何数值。如果在一个表达式中不同位置上出现数值,应区分哪些是作为数值运算或关系运算的对象,哪些是作为逻辑
9、运算的对象。例如:53&2|83”。在关系运算符两侧的5和3作为数值参加关系运算,“53”的值为1。再进行“1&2”的运算,此时1和2均是逻辑运算对象,均为“真”处理,因此结果为1。再往下进行“1|84-!0”的运算。根据优先次序,“!0”的结果为1,表达式变成“1|83”,“83”的结果为0。最后得到“1|0”的结果为1。,【案例2-3】逻辑运算。#include void main()int a,b,c;a=2,b=3;printf(%d,(a=0)程序运行结果如下:0 a=20 b=0a=2,b=1,c=1a=2,b=2,c=1&和|均是短路运算符。在一个或多个&相连的表达式中,只要有一
10、个操作数为0,则整个表达式为0。同理,在|相连的表达式中,只要前面有一个表达式结果为0,则整个表达式的结果为0,后续运行不再继续进行。所以在“+a|+b&+c”中,由于“+a”的结果为2,则整个与逻辑表达式的结果为1,后续的“+b”和“+c”不再执行。但表达式如果为“+a&+b&+c”,则需要依次执行“+a”、“+b”和“+c”来得到最终逻辑表达式的结果。,3条件运算符和条件表达式,条件运算符是“?”,它是C语言中唯一的三目运算符。其基本语法为:表达式1?表达式2:表达式3求值过程为:先求表达式1,若其值为真(非0),则将表达式2的值作为整个表达式的取值;若表达式1的值为假(0),则将表达式3
11、的值作为整个表达式的取值。例如:max=(ab)?a:b;其执行结果为将a和b中较大的值赋值给max。条件运算符优先级高于赋值、逗号运算符,低于其他运算符。例如:m=10&b-20?a:b等价于:(a+=10&b-20)?a:bx=3+a5?100:200等价于:x=(3+a5)?100:200),【案例2-4】条件运算符。#include void main()int a,b,c,d,max;a=5;b=7;c=12;d=4;max=(ab?a:b);max=(maxc?max:c);max=(maxd?max:d);printf(The maximal number is%d.n,max)
12、;程序运行结果如下:The maximal number is 12.,2.1.2 if语句,if语句是C语言中最简单的流程控制语句,if语句的作用是判断多给定的条件是否满足,根据条件判定结果(真或假)来决定执行什么操作。其基本语法为:if(布尔表达式)代码段其含义是,如果布尔表达式的值为真,则继续执行下面的代码段,否则跳过这个代码段,执行后面的语句。布尔表达式可以为常量、变量、关系表达式或逻辑表达式。代码段可以是一条语句或多条语句,如果只有一条语句,则可以省略大括号。C语言的if语句有三种基本形式。,1单分支if语句,if(表达式)语句段 这是if语句最简单的一种形式。它根据表达式的值进行判
13、定,以决定是否执行某个程序片段。单分支if语句的执行流程如图2-1所示。图2-1 单分支if语句执行流程图,【案例2-5】数字排序。#include void main()int a,b,c,t;printf(请输入三个整数:);scanf(%d%d%d,该程序的运行结果如下:请输入三个整数:4 9 7a=4,b=3,c=7排序后结果为:a=3,b=4,c=7,2双分支if语句,双分支if语句的一般形式为:if(布尔表达式)代码段else代码段根据布尔表达式判定选择哪个分支执行。如果表达式值为真,则执行if分支语句组;如果为假,则执行else分支语句。if-else语句的执行流程如图2-2所示
14、。图2-2 双分支if语句执行流程图,【案例2-6】三角形判定。#include void main()int a,b,c;printf(请输入三角形的三条边:);scanf(%d%d%d,分别输入正确的边和错误的边,程序运行结果如下:请输入三角形的三条边:0 2 3a=0,b=2,c=3两边之和小于第三边或有边为0,不构成三角形请输入三角形的三条边:1 2 3a=1,b=2,c=3两边之和小于第三边或有边为0,不构成三角形请输入三角形的三条边:2 3 4a=2,b=3,c=4可以构成三角形,3多分支if语句,多重分支if语句的一般形式为:if(布尔表达式1)代码段1else if(布尔表达式
15、2)代码段2else if(布尔表达式n-1)代码段n-1 else 代码段n 前面所给的两种形式的if语句一般适用于对判定结果做出两种选择的情况,即有两个分支。但是实际情况往往比较复杂,常常会出现多个分支的情况,此时就可以采用第三种形式的if分支语句。其执行过程为:依次判断表达式的值,当某个表达式的值为真时,则执行对应的语句,然后跳转到整个if语句之外的语句执行;如果所有的表达式都为假,则执行else语句对应的程序段,然后继续执行整个程序。,【案例2-7】编写C语言程序,从键盘上输入一个字符,识别输入的字符类型:大写字母、小写字母、数字或其他类型。#include void main()ch
16、ar c;printf(请输入一个字符:);scanf(%c,依次输入一个数字、一个大写字母、一个小写字母和一个其他字符,程序运行结果如下:请输入一个字符:5您输入的字符为5,这是一个数字请输入一个字符:t您输入的字符为t,这是一个小写字母请输入一个字符:E您输入的字符为E,这是一个大写字母请输入一个字符:!您输入的字符为!,这是一个其他字符在多重if语句中,要注意各个表达式所表示的条件必须是互相排斥的。也就是说,只有表达式1不满足时才会判断表达式2,而当表达式2不满足时才会判断表达式3,其余依次类推,只有所有表达式均不满足时才执行最后的else语句。也就是说,在所有的条件表达式中,应该只有一
17、个条件表达式是为真的,并执行器对应的代码段;其余表达式均为假,所对应的代码段均不执行。,【案例2-8】成绩等级判定。编写程序,让用户输入一个在0100以内的学生考试成绩(整数),要求计算机判定并输入成绩等级:90分以上为优秀;8089分为良好;7079分为中等;6069分为及格,60分以下为不合格。#include void main()int score;printf(请输入学生成绩(0100):);scanf(%d,程序运行结果如下:请输入学生成绩(0100):34您的成绩不合格请输入学生成绩(0100):87您的成绩为良好请输入学生成绩(0100):104输入数据不合法,2.1.3 sw
18、itch 语句,用if嵌套的语句处理多层次的情况分支太多,程序冗长而且可读性低,C语言提供switch语句直接处理多分支选择。switch的一般形式如下:switch(表达式)case常量表达式1:代码段1;break;case常量表达式2:代码段2;break;case常量表达式n:代码段n;break;default:代码段n+1switch 语句根据一个表达式的值选择要执行的代码片段,其流程图和if-else-if 语句类似。其执行过程为:先计算表达式的值,然后逐个与case 之后的常量比较,当表达式的值和某个常量的值相等时,执行对应常量后面的语句组。如果表达式的值和所有常量的值均不相等
19、,则执行default 之后的代码段,如果没有default,则什么也不执行,直接执行后续代码。,switch 之后的表达式,可以是整形表达式、字符型表达式或枚举型表达式。每一个case 之后的值都要相互不同。当表达式的值和一个case 的值相等时,则执行该case 后的代码段,后续其他case 则不再进行比较,所以代码段之后一定要加一个break,表示跳转到switch 之后的语句,如果不加,则会出现异常错误,最后一个分支可以不加break。多个case 可以共用一组执行语句,如:switch(week)case 1:case 2:case 3:case 4:case 5:printf(“工
20、作日”);case 6:case 7:printf(“假期”);default:printf(“输入错误”);用switch 语句,同样可以实现成绩等级判定程序。,【案例2-9】成绩等级判定2。#include void main()int score;printf(请输入学生成绩(0100):);scanf(%d,分别输入各个等级的数据,程序运行结果如下:请输入学生成绩(0100):62您的成绩为合格请输入学生成绩(0100):3您的成绩为不合格请输入学生成绩(0100):94您的成绩为优秀请输入学生成绩(0100):104您的成绩为优秀请输入学生成绩(0100):72您的成绩为中等,2.1
21、.4 任务实现,1问题描述每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。设faHeight为其父身高,moHeight为其母身高,身高预测公式为:男性成人时身高=(faHeight+moHeight)0.54cm 女性成人时身高=(faHeight0.923+moHeight)/2cm 此外,如果喜爱体育锻炼,那么可增加身高2%;如果有良好的卫生饮食习惯,那么可增加身高1.5%。编程从键盘输入用户的性别、父母身高、是否喜爱体育锻炼、是否有良好的饮食习惯等
22、条件,利用给定公式和身高预测方法对孩子的身高进行预测。,2要点解析,要计算孩子的身高,首先要确定计算表达式。而身高的计算公式是由父母身高、性别、饮食习惯和体育锻炼相关的,所以要根据特定的条件选择来确定身高表达式,这就要用到选择控制结构。最常用的选择控制语句为if语句,本案例中选择if语句来实现这一功能。程序具体流程为:输入父母身高;确定孩子性别;选择是否经常锻炼;选择是否有良好的饮食习惯;确定身高计算公式;计算身高并输出。程序中用到的变量有:faHeight 和 moHeight float类型,分别表示孩子父母的身高。sex char类型,用来表示孩子的性别,输入字符M表示男性,F表示女性。
23、sport char类型,用来表示是否喜欢体育锻炼,输入字符Y表示经常体育锻炼,N表示不经常体育锻炼。dietchar类型,用来表示是否有良好的饮食习惯,输入字符Y表示有良好的饮食习惯,N则为没有。,3程序实现,程序具体实现过程如下:#include void main()float faHeight,moHeight,height;char sex,sport,diet;printf(请分别输入父母的身高,以cm为单位:);scanf(%f%f,if(sport=Y|sport=y),height=height*(1+0.02);printf(是否有良好的饮食习惯,Y表示是,N表示否:);f
24、flush(stdin);scanf(%c,程序运行结果如下:请分别输入父母的身高,以cm为单位:180 163180.000000 163.000000请输入孩子的性别,M表示男性,F表示女性:f是否经常进行体育锻炼,Y表示是,N表示否:y是否有良好的饮食习惯,Y表示是,N表示否:n预测的孩子的身高为:170.379,任务2.2 学生信息管理系统之成绩统计,任务目标了解循环控制结构的概念。掌握for循环语句的用法。掌握while循环语句的用法。掌握do-while循环语句的用法。完成学生信息统计任务。,2.2.1 for循环,for语句是C语言所提供的功能更强、使用更广泛的一种循环语句。fo
25、r 语句的一般形式为:for(表达式1;表达式2;表达式3)循环语句其中,表达式1:通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式。表达式2:通常是循环条件,一般为关系表达式或逻辑表达式。表达式3:通常可用来修改循环变量的值,一般是赋值语句。这3个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。省略表达式时,表达式之间的逗号不能省略。循环语句在条件满足的时候重复执行。,for语句的执行过程如下:首先计算表达式1的值。再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环。计算表达式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 项目 开发 教程 PPT
链接地址:https://www.31ppt.com/p-6504383.html