1、算法算法语言言与数与数据据结构构信息信息与与物流管理系物流管理系王健王健西安财经学院管理学院西安财经学院管理学院西安财经学院管理学院西安财经学院管理学院信息信息与与物流管理系物流管理系第 3 章 逻辑思维与计算机解题信息信息与与物流管理系物流管理系算法及算法工具算法及算法工具结构化程序设计思想结构化程序设计思想将实际问题抽象为逻辑关系将实际问题抽象为逻辑关系枚举法解题思路枚举法解题思路关系与关系表达式关系与关系表达式程序的循环结构与分支结构程序的循环结构与分支结构学学 习习 目目 标标信息信息与与物流管理系物流管理系1.1.算法及算法工具算法及算法工具2.2.结构化程序设计思想结构化程序设计思
2、想3.3.关系运算符与关系表达式关系运算符与关系表达式4.4.人的思维到用计算机语言的表示人的思维到用计算机语言的表示5.5.枚举的概念与思路枚举的概念与思路6.6.循环结构循环结构7.7.分支结构分支结构内内 容容 要要 点点信息信息与与物流管理系物流管理系 计算机强大的逻辑分析功能是由人通过程序赋给它的。一些逻辑计算机强大的逻辑分析功能是由人通过程序赋给它的。一些逻辑问题必须转换成计算机能够看得懂的数学表达式和一定的程序指令。问题必须转换成计算机能够看得懂的数学表达式和一定的程序指令。这一章我们通过例子来介绍如何将人对问题的思考转换为让计算机这一章我们通过例子来介绍如何将人对问题的思考转换
3、为让计算机能解的数学表达式,同时给出一些通常要用到的程序结构和能解的数学表达式,同时给出一些通常要用到的程序结构和C/C+C/C+语句。语句。信息信息与与物流管理系物流管理系 3.1 程序设计中的科学思维方法程序设计中的科学思维方法1 1 3.2 关系运算符和关系表达式关系运算符和关系表达式2 3.3 使用关系表达式解决一些问题使用关系表达式解决一些问题3 3.4 枚举法的思路枚举法的思路4目录 3.5 循环语句循环语句5 3.6 分支语句分支语句6 3.8 逻辑判断与解题逻辑判断与解题8 3.7 输入输出语句输入输出语句7信息信息与与物流管理系物流管理系3.1 程序设计中的科学思维方法 3.
4、1.1 3.1.1 算法算法程序设计程序设计=数据结构数据结构+算法算法+程序设计方法学程序设计方法学 数据结构:数据对象及其相互关系和构造方法。数据结构与算法密不可分,一个良好的数据结构:数据对象及其相互关系和构造方法。数据结构与算法密不可分,一个良好的数据结构:数据对象及其相互关系和构造方法。数据结构与算法密不可分,一个良好的数据结构:数据对象及其相互关系和构造方法。数据结构与算法密不可分,一个良好的数据结构,将使算法简单化;只有明确了问题的算法,才能有较好的设计数据结构,因数据结构,将使算法简单化;只有明确了问题的算法,才能有较好的设计数据结构,因数据结构,将使算法简单化;只有明确了问题
5、的算法,才能有较好的设计数据结构,因数据结构,将使算法简单化;只有明确了问题的算法,才能有较好的设计数据结构,因此两者是相辅相承的此两者是相辅相承的此两者是相辅相承的此两者是相辅相承的对同一个问题的求解,允许有不同的算法和数据结构,依不同算法编写的操作代码,执对同一个问题的求解,允许有不同的算法和数据结构,依不同算法编写的操作代码,执对同一个问题的求解,允许有不同的算法和数据结构,依不同算法编写的操作代码,执对同一个问题的求解,允许有不同的算法和数据结构,依不同算法编写的操作代码,执行效率不一样。行效率不一样。行效率不一样。行效率不一样。算法算法算法算法(algorithm)(algorith
6、m)(algorithm)(algorithm):是对特定问题求解步骤的一种描述。:是对特定问题求解步骤的一种描述。:是对特定问题求解步骤的一种描述。:是对特定问题求解步骤的一种描述。算法特征:算法特征:算法特征:算法特征:1 1有穷性有穷性有穷性有穷性 2 2确定性确定性确定性确定性 3 3输入输入输入输入 4 4输出输出输出输出 5 5有效性有效性有效性有效性 算法要求:算法要求:算法要求:算法要求:1 1正确性正确性正确性正确性 2 2可读性可读性可读性可读性 3 3健壮性健壮性健壮性健壮性 4 4效率效率效率效率 算法表示:算法表示:算法表示:算法表示:1.1.自然语言自然语言自然语言
7、自然语言 2.2.专用工具专用工具专用工具专用工具 3.3.伪代码伪代码伪代码伪代码 4.4.计算机语言计算机语言计算机语言计算机语言 算法设计常用方法算法设计常用方法算法设计常用方法算法设计常用方法 1.1.枚举法枚举法枚举法枚举法 2 2.迭代法迭代法迭代法迭代法 3 3.递归法递归法递归法递归法 4.4.递推法递推法递推法递推法 5.5.分治法分治法分治法分治法 6.6.回溯法回溯法回溯法回溯法 7.7.模拟人工模拟人工模拟人工模拟人工 信息信息与与物流管理系物流管理系3.1.2 3.1.2 算法表示工具算法表示工具 算法表示算法表示算法表示算法表示 专用工具专用工具专用工具专用工具流程
8、图表示流程图表示流程图表示流程图表示 流程图符号:流程图符号:流程图符号:流程图符号:3.1 程序设计中的科学思维方法信息信息与与物流管理系物流管理系三种基本控制结构AB顺序结构顺序结构选择结构选择结构循环结构循环结构PBAPA3.1 程序设计中的科学思维方法信息信息与与物流管理系物流管理系1.2 程序设计中的科学思维方法 流程图符号表示的算法实例:流程图符号表示的算法实例:流程图符号表示的算法实例:流程图符号表示的算法实例:3.1 程序设计中的科学思维方法信息信息与与物流管理系物流管理系1.2 程序设计中的科学思维方法 例例 3.1 3.1 算法算法 伪代码表示的算法实例:伪代码表示的算法实
9、例:伪代码表示的算法实例:伪代码表示的算法实例:问题:求12+22+502输出sum开始 输入n的值 置sum初值为0 置i初值为1 当in,执行下面操作:sum=i*i+sum i=i+1 打印sum的值 结束3.1 程序设计中的科学思维方法信息信息与与物流管理系物流管理系1.2 程序设计中的科学思维方法 例例 3.2 3.2 算法算法 计算机语言表示的算法实例:计算机语言表示的算法实例:计算机语言表示的算法实例:计算机语言表示的算法实例:问题:求12+22+5023.1 程序设计中的科学思维方法信息信息与与物流管理系物流管理系1.结构化程序设计基本思想自顶向下自顶向下自顶向下自顶向下 逐步
10、细化逐步细化逐步细化逐步细化 模块化模块化模块化模块化 2.2.结构化程序设计的过程结构化程序设计的过程建立数学模型建立数学模型选定算法,用适当工具描述算法选定算法,用适当工具描述算法编程编程测试及调试测试及调试 (1 1)建立数学模型)建立数学模型 规定了数据间准确的关系,如:规定了数据间准确的关系,如:数学公式、一张关系图、一张二维数据表数学公式、一张关系图、一张二维数据表 (2 2)选定算法,用适当工具描述算法)选定算法,用适当工具描述算法)选定算法,用适当工具描述算法)选定算法,用适当工具描述算法3.1 程序设计中的科学思维方法信息信息与与物流管理系物流管理系(3).用自顶向下逐步细化
11、构造算法【例例1-51-5】某同学进行一次物理实验,测量得到某同学进行一次物理实验,测量得到3030个数据,求这个数据,求这3030个数据的平个数据的平均值。均值。一级算法:一级算法:1.Initialize variables1.Initialize variables2.Input,sum and count the data2.Input,sum and count the data3.Calculate and print the average3.Calculate and print the average1.1 Set total to 01.2 Set counter to 1
12、2.1 While counter=30 Input the next data Add the data to total Add 1 to counter3.1 Set average to tatal/303.2 Print the average3.1 程序设计中的科学思维方法 信息信息与与物流管理系物流管理系4.用自顶向下逐步细化构造算法【例例1-21-2】有有3030名同学选修了程序设计这门课程,请编写程序统计参加考试学生中及名同学选修了程序设计这门课程,请编写程序统计参加考试学生中及格和不及格的人数。格和不及格的人数。一级算法:一级算法:1.Initialize variable
13、s1.Initialize variables2.Input the 30 grades and count the failures2.Input the 30 grades and count the failures3.Print the exam results3.Print the exam results 1.1 Set failures to 01.2 Set passes to 01.3 Set counter to 1 While counter=302.1 Input the next grade2.2 If the grade=大于等于大于等于大于等于大于等于 大于大于大
14、于大于 =等于等于等于等于 =小于等于小于等于小于等于小于等于 小于小于小于小于 !=!=不等于不等于不等于不等于为了讲解关系运算符和关系表达式,先请你在机器上建立和运行下列程为了讲解关系运算符和关系表达式,先请你在机器上建立和运行下列程序。序。3.2 关系运算符和关系表达式信息信息与与物流管理系物流管理系/*/*程 序:3_0.c */*功 能:为讲解关系运算而编 */*编制人:wuwh */*时 间:2001年6月27日 */*#include void main()printf(“3 2 的逻辑值是%d,1 为真 n“,3 2);printf(“3 =2 的逻辑值是%d,1 为真 n“,
15、3=2);printf(“3=2 的逻辑值是%d,0 为假n“,3=2);printf(“3 2 的逻辑值是%d,0 为假n“,3 2);printf(“3=2 的逻辑值是%d,0 为假n“,3 2 2 的逻辑值是的逻辑值是 1 1,1 1为真为真3 3 =2 2 的逻辑值是的逻辑值是 1 1,1 1为真为真3 3 =2 2 的逻辑值是的逻辑值是 0 0,0 0为假为假3 3 2 2 的逻辑值是的逻辑值是 0 0,0 0为假为假3 3 =2 2 的逻辑值是的逻辑值是 0 0,0 0为假为假3 3 !=!=2 2 的逻辑值是的逻辑值是 1 1,1 1为真为真程序运行结果是:程序运行结果是:3.2
16、 关系运算符和关系表达式信息信息与与物流管理系物流管理系关系表达式的一般格式关系表达式的一般格式 1 关系运算符关系运算符 2例如:变量例如:变量 1 1 为为 b b,变量,变量 2 2 为为 c c,关系运算符为,关系运算符为 。关系表达式为。关系表达式为b cb c在程序中系统要测试由关系表达式所表示的关系是否成立,成立为真,不在程序中系统要测试由关系表达式所表示的关系是否成立,成立为真,不成立为假。成立为假。关系表达式是有值的,这个值非关系表达式是有值的,这个值非 0 0 即即 1 1,是布尔值。关系表达式成立,其,是布尔值。关系表达式成立,其值为值为 1 1。关系表达式不成立,其值为
17、。关系表达式不成立,其值为 0 0。上述性质在编写程序时用到,因此很。上述性质在编写程序时用到,因此很重要。重要。3.2 关系运算符和关系表达式信息信息与与物流管理系物流管理系 结合任务结合任务3.13.1,可以将四个人说的四句话写成关系表达式。,可以将四个人说的四句话写成关系表达式。在声明变量时,我们让在声明变量时,我们让thismanthisman表示要寻找的做了好事的人,定义它是字表示要寻找的做了好事的人,定义它是字符变量。符变量。char thisman=;/char thisman=;/定义字符变量并将其初始化为空定义字符变量并将其初始化为空 接着让接着让 “=”=”的含义为的含义为
18、“是是”,让让“!=”!=”的含义为的含义为“不是不是”。3.3 使用关系表达式解决一些问题信息信息与与物流管理系物流管理系利用关系表达式将四个人所说的话表示成利用关系表达式将四个人所说的话表示成说话人说话人说的话说的话写成关系表达式写成关系表达式A A“不是我不是我”thisman!=Athisman!=AB B“是是C”C”thisman=Cthisman=CC C“是是D”D”thisman=Dthisman=DDD“他胡说他胡说”thisman!=Dthisman!=D3.3 使用关系表达式解决一些问题信息信息与与物流管理系物流管理系在在C/C+C/C+中字符在存储单元中是以中字符在存
19、储单元中是以ASCIIASCII码的形式存放的。因此,码的形式存放的。因此,用赋值语句用赋值语句thisman=A;thisman=A;与与与与thisman=65;thisman=65;两者是等效的,在以两者是等效的,在以thismanthisman为标识的存储单元中存的是数字为标识的存储单元中存的是数字6565。建。建议你用如下实验加以验证。议你用如下实验加以验证。thisman 65地址地址xxxx3.3 使用关系表达式解决一些问题信息信息与与物流管理系物流管理系/*/*程 序:3_1.c */*功 能:验证A和65是否相等 */*编制人:wuwh */*时 间:2001年6月27日 *
20、/*#include/预编译命令void main()/主函数/主函数开始char thisman;/声明字符变量thisman,thisman=A;/thisman赋值为A/输出关系表达式“65=A”的值printf(65=A 关系表达式的值为“,65=A);/主函数结束3.3 使用关系表达式解决一些问题信息信息与与物流管理系物流管理系 结合任务结合任务3.13.1分析,分析,A A、B B、C C、DD四个人,只有一位是做好事者。令做好事者四个人,只有一位是做好事者。令做好事者为为1 1,未做好事者为,未做好事者为0 0,可以有如下,可以有如下4 4中状态(情况)中状态(情况)3.4 枚举
21、法的思路状态状态A AB BC CDD1 11 10 00 00 02 20 01 10 00 03 30 00 01 10 04 40 00 00 01 1信息信息与与物流管理系物流管理系这四种状态可简化写成这四种状态可简化写成状态状态赋值表达式赋值表达式1 1thisman=Athisman=A2 2thisman=Bthisman=B3 3thisman=Cthisman=C4 4thisman=Dthisman=D 显然第一种状态是假定显然第一种状态是假定A A是做好事者,第二种状态是假定是做好事者,第二种状态是假定B B是做好事者,是做好事者,。所。所谓谓枚举枚举是按照者四种假定逐一
22、地去测试四个人的话有几句是真话,如果不满足三句是按照者四种假定逐一地去测试四个人的话有几句是真话,如果不满足三句为真,就否定掉这一假定,换下一个状态再试。为真,就否定掉这一假定,换下一个状态再试。具体做法如下:具体做法如下:3.4 枚举法的思路信息信息与与物流管理系物流管理系(1 1)假定让)假定让thisman=Athisman=A代入四句话中代入四句话中状态状态说的话说的话关系表达式关系表达式C CA Athisman!=A;thisman!=A;A!=AA!=A0 0B Bthisman=C;thisman=C;A=CA=C0 0C Cthisman=D;thisman=D;A=DA=D
23、0 0DDthisman!=D;thisman!=D;A!=DA!=D1 1四个关系表达式的值的和为四个关系表达式的值的和为1 1,显然不是,显然不是 AA做的好事做的好事3.4 枚举法的思路信息信息与与物流管理系物流管理系(2 2)假定让)假定让thisman=Bthisman=B代入四句话中代入四句话中状态状态说的话说的话关系表达式关系表达式C CA Athisman!=A;thisman!=A;B!=AB!=A1 1B Bthisman=C;thisman=C;B=CB=C0 0C Cthisman=D;thisman=D;B=DB=D0 0DDthisman!=D;thisman!=D
24、;B!=DB!=D1 1四个关系表达式的值的和为四个关系表达式的值的和为2 2,显然不是,显然不是 BB做的好事做的好事3.4 枚举法的思路信息信息与与物流管理系物流管理系(3 3)假定让)假定让thisman=Cthisman=C代入四句话中代入四句话中状态状态说的话说的话关系表达式关系表达式C CA Athisman!=A;thisman!=A;C!=AC!=A1 1B Bthisman=C;thisman=C;C=CC=C1 1C Cthisman=D;thisman=D;C=DC=D0 0DDthisman!=D;thisman!=D;C!=DC!=D1 1四个关系表达式的值的和为四个
25、关系表达式的值的和为3 3,就是,就是 CC做的好事做的好事3.4 枚举法的思路信息信息与与物流管理系物流管理系 综上所述一个人一个人去试,就是综上所述一个人一个人去试,就是枚举枚举。从编写程序看,实现枚举最好用。从编写程序看,实现枚举最好用循环结构循环结构。这部分的程序写出如下:这部分的程序写出如下:for(k=1;k=4;k=k+1)/计数型循环,循环的控制变量为k /循环体开始thisman=64+k;/产生被试者,依次为A,B,C,D /赋值给thismansum=(thisman!=A)/测试A的话是否为真 +(thisman=C)/测试B的话是否为真 +(thisman=D)/测试
26、C的话是否为真 +(thisman!=D);/测试D的话是否为真 /循环体结束3.5 循环语句信息信息与与物流管理系物流管理系1.for 1.for 循环循环 forfor是计数型循环的标识符,圆括号括起的是三个表达式。其下的大括号是计数型循环的标识符,圆括号括起的是三个表达式。其下的大括号括起的部分是循环体。图括起的部分是循环体。图3.13.1描述了描述了forfor循环的结构。循环的结构。forfor语句的格式为语句的格式为for(for(表达式表达式1 1;表达式;表达式2 2;表达式;表达式3)3)循环体(语句组)循环体(语句组)3.5 循环语句信息信息与与物流管理系物流管理系图图3.
27、13.13.5 循环语句信息信息与与物流管理系物流管理系1.1.求解表达式求解表达式1 1,置循环控制变量的初值,置循环控制变量的初值2.2.测试表达式测试表达式2 2,测试是否未到循环控制变量的终值,测试是否未到循环控制变量的终值2-12-1 如果表达式如果表达式如果表达式如果表达式2 2的值为真,则执行的值为真,则执行的值为真,则执行的值为真,则执行3 32-22-2 如果表达式如果表达式如果表达式如果表达式2 2的值为假,则退出循环转的值为假,则退出循环转的值为假,则退出循环转的值为假,则退出循环转5 53.3.执行循环体语句组之后转执行循环体语句组之后转4 44.4.求解表达式求解表达
28、式3 3,让循环控制变量增值或减值,再转,让循环控制变量增值或减值,再转2 25.5.执行执行forfor语句的下一条语句语句的下一条语句forfor循环的执行过程如下:循环的执行过程如下:3.5 循环语句信息信息与与物流管理系物流管理系/*/*程 序:3_2.c(计数循环示例)*/*功 能:求自然数1100之和 */*编制人:wuwh */*时 间:2001年9月10日 */*#include/预编译命令void main()/主函数/主函数开始int i=0,sum=0;/声明i,sum为整型变量并初始化为0for(i=1;i=100;i=i+1)/for 循环/循环体开始sum=sum+
29、i;/累加求和/循环体结束 printf(“自然数1100之和为%d“,sum);/输出累加结果/主函数结束3.5 循环语句信息信息与与物流管理系物流管理系1.1.将原来的将原来的for(i=1;i=100;i=i+1)for(i=1;i=100;i=i+1)修改为修改为for(i=1;i=100;i=i+2)for(i=1;i=100;i=i+2)问:这是哪些自然数在求和,答案是多少?问:这是哪些自然数在求和,答案是多少?2.2.将原来的将原来的for(i=1;i=100;i=i+1)for(i=1;i=100;i=i+1)修改为修改为for(i=1;i=100000;i=i+1)for(i
30、=1;i=100000;i=i+1)执行程序能够得出正确结果吗?如果不能,自己想办法解决。执行程序能够得出正确结果吗?如果不能,自己想办法解决。思考题:在例思考题:在例3_23_2的程序中做些修改的程序中做些修改3.5 循环语句信息信息与与物流管理系物流管理系例例 3-3 3-3 求求1010!/*/*程序名:3_3.c(循环语句示例)*/*作 者:wuwh */*编制时间:2002年9月20日 */*主要功能:计算10 的阶乘 */*#include /预编译命令void main()/主函数 /主函数开始int i=0,j=0,k=0;/声明 i,j,k 为整型变量,并初始化为0long
31、sum=1;/声明 sum 为长整型变量,并初始化为1for(i=10;i=1;i=i-1)/用 for 循环作累乘运算printf(i=%d“,i);/显示isum=sum*i;/每一步乘积printf(tsum=%d“,sum);/显示每一步乘积for(j=1;j=5500;j=j+1)/用 for 循环延迟时间for(k=1;k=1;i=i-1)cout i=i;sum=sum*i;cout tsum=sum endl;3.5 循环语句信息信息与与物流管理系物流管理系例例 3-3 3-3 求求1010!/*/*程序名:3_3.c(循环语句示例)*/*作 者:wuwh */*编制时间:20
32、02年9月20日 */*主要功能:计算10 的阶乘 */*#include /预编译命令void main()/主函数 /主函数开始int i=0,j=0,k=0;/声明 i,j,k 为整型变量,并初始化为0long sum=1;/声明 sum 为长整型变量,并初始化为1for(i=10;i=1;i=i-1)/用 for 循环作累乘运算printf(i=%d“,i);/显示isum=sum*i;/每一步乘积printf(tsum=%d,sum);/显示每一步乘积for(j=1;j=5500;j=j+1)/用 for 循环延迟时间for(k=1;k=10000;k=k+1);/用 for 循环延
33、迟时间 printf(10!=%d,sum);/显示运算结果 /主函数结束3.5 循环语句信息信息与与物流管理系物流管理系#include void main()int i=0,j=0,k=0;long sum=1;for(i=10;i=1;i=i-1)printf(i=%d,i);sum=sum*i;printf(tsum=%d,sum);for(j=1;j=5500;j=j+1)for(k=1;k=1i=1;表达式表达式3 3 为为 i=i-1i=i-1;3.5 循环语句实际上循环有好几种方式,如:实际上循环有好几种方式,如:Goto和和if构成的循环构成的循环do-while构成的循环构
34、成的循环while构成的循环构成的循环for构成的循环构成的循环对于以上的循环,我们将通过具体的例子来阐明对于以上的循环,我们将通过具体的例子来阐明。3.5 循环语句循环语句信息信息与与物流管理系物流管理系句式为句式为 goto 标号标号标号必须是字母,数字,下划线组成,第一个字母不能标号必须是字母,数字,下划线组成,第一个字母不能是数字。是数字。main()main()方法之一方法之一 int i,sum1,j,sum2,k,sum3;int i,sum1,j,sum2,k,sum3;printf(Please input the value of i,j and knn);printf(P
35、lease input the value of i,j and knn);scanf(%d,%d,%d,&i,&j,&k);scanf(%d,%d,%d,&i,&j,&k);printf(i=%d,j=%d,k=%dnn,i,j,k);printf(i=%d,j=%d,k=%dnn,i,j,k);sum1=0;sum1=0;loop:if(i=10)loop:if(i=10)sum1=sum1+i*i;i+;goto loop;sum1=sum1+i*i;i+;goto loop;printf(method 1-sum1=%dnn,sum1);printf(method 1-sum1=%dn
36、n,sum1);3.5 循环语句信息信息与与物流管理系物流管理系while 语句句 形式形式形式形式while (while (表达式表达式表达式表达式)语语句句句句 可以是复合可以是复合可以是复合可以是复合语语句句句句 其中必其中必其中必其中必须须含有改含有改含有改含有改变变条件表达式条件表达式条件表达式条件表达式值值的的的的语语句句句句 执行顺序执行顺序执行顺序执行顺序先判断表达式的先判断表达式的先判断表达式的先判断表达式的值值,非,非,非,非 0 0 再再再再执执行行行行语语句句句句 实现实现“当型当型当型当型”循循循循环环3.5 循环语句信息信息与与物流管理系物流管理系流程特点:流程特
37、点:先判断,先判断,后执行后执行(1)循环如果包含循环如果包含一个以上的语句一个以上的语句要用要用 括起来,括起来,见例见例2-3.c(2)循环体内应该循环体内应该有使循环体结束有使循环体结束的语句,否则进的语句,否则进入死循环。入死循环。express语句语句0非03.5 循环语句信息信息与与物流管理系物流管理系main()main()方法之二方法之二 int j,sum2;int j,sum2;sum2=0;sum2=0;while(j=10)/*without;after while()*/while(j=10)/*without;after while()*/sum2=sum2+j*j
38、;sum2=sum2+j*j;j+;j+;printf(method 2-sum2=%dnn,sum2);3.5 循环语句信息信息与与物流管理系物流管理系do-while 语句句 一般形式一般形式一般形式一般形式do do 语语句句句句 可以是复合可以是复合可以是复合可以是复合语语句句句句while (while (表达式表达式表达式表达式)其中必其中必其中必其中必须须含有改含有改含有改含有改变变条件表达式条件表达式条件表达式条件表达式值值的的的的语语句句句句 执行顺序执行顺序执行顺序执行顺序先先先先执执行行行行语语句,后判断条件。句,后判断条件。句,后判断条件。句,后判断条件。while w
39、hile 语句与语句与语句与语句与 do-while do-while 语句的比较语句的比较语句的比较语句的比较 类似于直到型循环,但不同类似于直到型循环,但不同类似于直到型循环,但不同类似于直到型循环,但不同3.5 循环语句信息信息与与物流管理系物流管理系Dowhile 是先执行,后判断是先执行,后判断gotoif及及while均是先判断后执行均是先判断后执行main()main()方法之三方法之三 int k,sum3;int k,sum3;sum3=0;sum3=0;dodo sum3=sum3+k*k;sum3=sum3+k*k;k+;k+;while(k=10);while(k=10
40、);printf(sum3=%d,sum3);printf(sum3=%d,sum3);Dowhile的的while后面有后面有“;”while()后面则没有后面则没有从本例中可以看出从本例中可以看出while和和dowhile的区别的区别dowhile是先执行循环体语是先执行循环体语句,后判断表达式句,后判断表达式3.5 循环语句信息信息与与物流管理系物流管理系循环的嵌套与其它语言一样,与其它语言一样,c语言的循环也可以有多重嵌语言的循环也可以有多重嵌套,大家在应用过程中可以根据实际情况选用套,大家在应用过程中可以根据实际情况选用3.5 循环语句信息信息与与物流管理系物流管理系EXAMPLE
41、例例例例2-4.c 2-4.c 把把把把2020以内能被以内能被以内能被以内能被5 5整除的数整除的数整除的数整除的数打印出来打印出来打印出来打印出来(用两种方法用两种方法用两种方法用两种方法)3.5 循环语句信息信息与与物流管理系物流管理系main()main()int sum1=0,sum2=0;int sum1=0,sum2=0;/*-while-*/*-while-*/while(sum1=20)while(sum1=20)sum1=sum1+1;sum1=sum1+1;while(sum1%5=0)while(sum1%5=0)printf(while()-sum1=%dn,sum1
42、);printf(while()-sum1=%dn,sum1);sum1+;sum1+;for(sum2=1;sum2=20;sum2+)for(sum2=1;sum2=20;sum2+)while(sum2%5=0)while(sum2%5=0)printf(for*while()-sum2=%dn,sum2);printf(for*while()-sum2=%dn,sum2);sum2+;sum2+;3.5 循环语句信息信息与与物流管理系物流管理系break 和和 continue 语句句 breakbreak语句语句语句语句使程序从循使程序从循环环体和体和switchswitch语语句内
43、跳出,句内跳出,继续执继续执行行逻辑逻辑上的下一条上的下一条语语句。不能用在句。不能用在别处别处。如:如:如:如:2-5.c2-5.c求解求解求解求解axax2 2+bx+c=y+bx+c=y continue continue 语句语句语句语句结结束本次循束本次循环环,接着,接着进进行是否行是否执执行下一次循行下一次循环环的判断。的判断。3.5 循环语句信息信息与与物流管理系物流管理系EXAMPLE2-5.c2-5.c求解求解求解求解axax2 2+bx+c=y;+bx+c=y;信息信息与与物流管理系物流管理系main()/*y=a*x2+b*x+c*/main()/*y=a*x2+b*x+
44、c*/int a,b,c,x,y;int a,b,c,x,y;a=5;b=10;c=15;a=5;b=10;c=15;for(x=1;x=10;x+)for(x=1;x250&y250&y350)break;printf(break-x=%d,y=%dn,x,y);printf(break-x=%d,y=%dn,x,y);for(x=1;x=10;x+)for(x=1;x250&y250&y350)continue;printf(continue-x=%d,y=%dn,x,y);printf(continue-x=%d,y=%dn,x,y);Continue结束本次循环,结束本次循环,即满足条
45、件时,就跳过下面的即满足条件时,就跳过下面的语句,进入下一个循环语句,进入下一个循环;Break结束的是结束的是整个循环整个循环信息信息与与物流管理系物流管理系forfor循环的循环的NSNS图图为了以后讲解的方便,有必要使用更为简便的为了以后讲解的方便,有必要使用更为简便的N-SN-S结构流程图,如结构流程图,如图图3.33.3for(i=1;i=100;i=i+1)循环体循环体图图3.33.33.5 循环语句信息信息与与物流管理系物流管理系if(sum=3)if(sum=3)Printf(This man is%d,char(64+k);Printf(This man is%d,char(
46、64+k);g=1;g=1;这一段程序可以读作:如果这一段程序可以读作:如果sumsum真的为真的为 3 3 时,做下面两件事时,做下面两件事(1 1)输出做好事的人;)输出做好事的人;)输出做好事的人;)输出做好事的人;(2 2)将本题的有解标志置为)将本题的有解标志置为)将本题的有解标志置为)将本题的有解标志置为 1 1。其中其中(sum=3)(sum=3)为条件判断语句中的条件,根据其真假使程序分支。为条件判断语句中的条件,根据其真假使程序分支。例例 3-1 的解要用到分支语句,即需要判断当四句话中有的解要用到分支语句,即需要判断当四句话中有 3 句为真时,我们要句为真时,我们要将该人判
47、定为做好事者。请看如下程序段将该人判定为做好事者。请看如下程序段3.6 分支语句信息信息与与物流管理系物流管理系下面我们画出分支程序的下面我们画出分支程序的NSNS流程图,这种图直观清晰,流程图,这种图直观清晰,一目了然。一目了然。图图3.43.43.6 分支语句信息信息与与物流管理系物流管理系3.3.if(if(表达式表达式 )语句语句 1 1;else else 语句语句 2 2;如果表达式为真,执行语句如果表达式为真,执行语句1 1;否则执行语句;否则执行语句2 24.4.if(if(表达式表达式 )语句块语句块 1 1;elseelse 语句块语句块 2 2;3.6 分支语句信息信息与
48、与物流管理系物流管理系一般格式一般格式1.1.if (if (表达式表达式 )语句语句 1 1;如果表达式为真,执行语句如果表达式为真,执行语句 1 1;否则什么都不做;否则什么都不做.2.2.if(if(表达式表达式 )语句块语句块 1 1;如果表达式为真,做语句块如果表达式为真,做语句块 1 1 的内容;否则什么都不做;的内容;否则什么都不做;3.6 分支语句信息信息与与物流管理系物流管理系举例:实现如图函数举例:实现如图函数图图3.53.53.6 分支语句信息信息与与物流管理系物流管理系/*/*/*/*程程 序序 名:名:3_4.c3_4.c(分支程序示例)(分支程序示例)*/*/*作作
49、 者:者:wuwh *wuwh */*/*编制时间:编制时间:20012001年年8 8月月 */*/*主要功能:实现符号函数主要功能:实现符号函数 */*/*#include#include /预编译命令预编译命令void main()void main()/主函数主函数 /主函数开始主函数开始int x=0,y=0;int x=0,y=0;/声明声明x x,y y为整型变量,并初始化为为整型变量,并初始化为0 0printf(printf(请输入请输入x);/x);/提示信息提示信息scanf(“%d”,&x)x;scanf(“%d”,&x)x;/从键盘输入整数送至从键盘输入整数送至x x
50、中中if(x0)if(x0)/如果如果x0 x0,将,将1 1赋给赋给y yy=1;y=1;elseelseif(x=0)if(x=0)/如果如果x=0 x=0,将,将0 0赋给赋给y yy=0;y=0;elseelsey=-1;y=-1;/否则(否则(x0 x0),将),将-1-1赋给赋给y yprintf(printf(当当x=%dx=%d时时,y=%d ,x,y);,y=%d ,x,y);/输出输出x x,y y的值的值 /主函数结束主函数结束3.6 分支语句信息信息与与物流管理系物流管理系NSNS图图图图3.63.63.6 分支语句信息信息与与物流管理系物流管理系NSNS图图有了上述了