,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,郎建昭,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,郎建昭,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,准备上课,准备上课,主讲:李越辉,北京工商大学计算机学院,C,语言程序设计,主讲:李越辉北京工商大学计算机学院C语言程序设计,本讲主要介绍程序设计的一般方法、结构化程序设计思想以及三种结构化程序设计的基本结构,顺序结构、选择结构和循环结构。,第三讲 逻辑思维与计算机解题,本讲主要介绍程序设计的一般方法、结构化程序设,4,将实际问题抽象为逻辑关系,枚举法解题思路,关系与关系表达式,程序的循环结构与分支结构,学 习 目 标,4将实际问题抽象为逻辑关系学 习 目 标,5,关系运算符与关系表达式,人的思维到用计算机语言的表示,枚举的概念与思路,程序的控制结构,内 容 要 点,5关系运算符与关系表达式内 容 要 点,6,计算机强大的逻辑分析功能是由人通过程序赋给它的。一些逻辑问题必须转换成计算机能够看得懂的数学表达式和一定的程序指令。这一章我们通过例子来介绍如何将人对问题的思考转换为让计算机能解的数学表达式,同时给出一些通常要用到的程序结构和,C/C+,语句。,引言,6 计算机强大的逻辑分析功能是由人通过程序赋给它的。,7,北京工商大学某班有四位同学中的一位做了好事,不留名,表扬信来了之后,班主任问这四位同学是谁做的好事。,A,说:不是我。,B,说:是,C,。,C,说:是,D,。,D,说:他胡说,。,已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。,【,任务,3.1】 “,谁做的好事”,7北京工商大学某班有四位同学中的一位做了好事,不留名,表扬,8,为了解这道题,我们需要学习如何通过,逻辑思维与判断,解这类问题的思路。,解题思路,8 为了解这道题,我们需要学习如何通过逻辑思维与判断,9,3.1 算,朮运算符,在,C/C+,中基本的算术运算符有五个,分别为,加,+,乘,*,减,-,除,/,求余,%,cout ,21 % 4,=,大于等于,大于,=,等于,=,小于等于,小于,!=,不等于,10,为了讲解关系运算符和关系表达式,先在机器上建立和运行下列程序。,3.2,关系运算符和关系表达式,关系运算符有如下6个10为了讲解关系运算符和关系表达式,11,/ *,/ *,程 序:,3_0.cpp *,/ *,功 能: 为讲解关系运算而编 *,/ *,编制人: 李越辉,*,/ *,时 间:,2008,年,3,月,20,日 *,/ *,引例,11/ *,12,#include ,void main( ),cout 2,的逻辑值是,“ 2 ), “, 1,为真,“ endl ;,cout= 2,的逻辑值是,“ = 2 ), “, 1,为真,“ endl ;,cout “,3 = 2,的逻辑值是,“ ( 3 = 2 ), “, 0,为假,“ endl ;,cout “,3 2,的逻辑值是,“ ( 3 2 ), “, 0,为假,“ endl ;,cout “,3 = 2,的逻辑值是,“ ( 3 = 2 ), “, 0,为假,“ endl ;,cout “,3 != 2,的逻辑值是,“ ( 3 != 2 ), “, 1,为真,“ ,2,的逻辑值是,1,1为真,3,=,2,的逻辑值是,1,1为真,3,=,2,的逻辑值是,0,0为假,3,2,的逻辑值是,0,0为假,3, 2 的逻辑值是 1, 1为真程序运行结果,14,关系运算符,例如:变量,1,为,b,,变量,2,为,c,,关系运算符为,。关系表达式为,b c,在程序中系统要测试由关系表达式所表示的关系是否成立,成立为真,不成立为假。,关系表达式是有值的,这个值非,0,即,1,,是布尔值。关系表达式成立,其值为,1,。关系表达式不成立,其值为,0,。上述性质在编写程序时用到,因此很重要。,关系表达式的一般格式,14 关系运算符 关系表达式的一,15,结合本题任务,可以将四个人说的四句话写成关系表达式。,在声明变量时,我们让,thisman,表示要寻找的做了好事的人,定义它是字符变量。,char thisman= ; /,定义字符变量并将其初始化为空,接着让,“,= ”,的含义为“是”,,让 “,!= ”,的含义为“不是”。,使用关系表达式解决一些问题,15 结合本题任务,可以将四个人说的四句话写,16,说话人,说的话,写成关系表达式,A,“,不是我”,thisman,!=,A,B,“是,C”,thisman,=,C,C,“,是,D”,thisman,=,D,D,“,他胡说”,thisman,!=,D,利用关系表达式将四个人所说的话表示成下表,16说话人说的话写成关系表达式A“不是我”thisman!=,17,在,C/C+,中字符在存储单元中是以,ASCII,码的形式存放的。因此,用赋值语句,thisman = A;,与,thisman = 65;,两者是等效的,在以,thisman,为标识的存储单元中存的是数字,65,。建议你用如下实验加以验证。,thisman,65,地址,xxxx,赋值语句设置初始值,17在C/C+中字符在存储单元中是以ASCII码的形式,18,/ *,/ *,程 序:,3_1.cpp *,/ *,功 能: 验证,A,和,65,是否相等 *,/ *,编制人:,wuwh *,/ *,时 间:,2001,年,6,月,27,日 *,/ *,#include /,预编译命令,void main( )/,主函数,/,主函数开始,char thisman;/,声明字符变量,thisman,,,thisman = A;/ thisman,赋值为,A,/,输出关系表达式“,65=A”,的值,cout 65=A ,关系表达式的值为, (65=A) , 1,为真。, endl;,/,主函数结束,程序实例,18/ *,19,结合任务,3.1,分析,,A,、,B,、,C,、,D,四个人,只有一位是做好事者。令做好事者为,1,,未做好事者为,0,,可以有如下,4,种状态(情况),状态,A,B,C,D,No1,1,0,0,0,No2,0,1,0,0,No3,0,0,1,0,No4,0,0,0,1,3.3,枚举法的思路,19 结合任务3.1分析,A、B、C、D四个,20,这四种状态可简化写成,状态,赋值表达式,1,thisman=A,2,thisman=B,3,thisman=C,4,thisman=D,显然第一种状态是假定,A,是做好事者,第二种状态是假定,B,是做好事者,,。所谓,枚举,是按照者四种假定逐一地去测试四个人的话有几句是真话,如果不满足三句为真,就否定掉这一假定,换下一个状态再试。,具体做法如下:,20这四种状态可简化写成状态赋值表达式1thisman=A,21,(,1,)假定让,thisman=A,代入四句话中,状态,说的话,关系表达式,C,A,thisman!=A;,A!=A,0,B,thisman=C;,A=C,0,C,thisman=D;,A=D,0,D,thisman!=D;,A!=D,1,四个关系表达式的值的和为,1,,显然不是,A,做的好事,21(1)假定让thisman=A代入四句话中状态说的话,22,(,2,)假定让,thisman=B,代入四句话中,状态,说的话,关系表达式,C,A,thisman!=A;,B!=A,1,B,thisman=C;,B=C,0,C,thisman=D;,B=D,0,D,thisman!=D;,B!=D,1,四个关系表达式的值的和为,2,,显然不是,B,做的好事,22(2)假定让thisman=B代入四句话中状态说的话,23,(,3,)假定让,thisman=C,代入四句话中,状态,说的话,关系表达式,C,A,thisman!=A;,C!=A,1,B,thisman=C;,C=C,1,C,thisman=D;,C=D,0,D,thisman!=D;,C!=D,1,四个关系表达式的值的和为,3,,就是,C,做的好事,23(3)假定让thisman=C代入四句话中状态说的话,24,综上所述一个人一个人去试,就是,枚举,。从编写程序看,实现枚举最好用,循环结构,。,这部分的程序写出如下:,for (k=1; ky,S2,:,y,不能被,4,整除,则输出,y “,不是闰年”。然后转到,S6,算 法 的 概 念 (二)例: 判定20002500年中的,算 法 的 概 念,(,三,),S3,:若,y,能被,4,整除,不能被,100,整除,则输出,y “,是闰年”。然后转到,S6,S4,:若,y,能被,100,整除,又能被,400,整除,输出,y“,是闰年”;否则输出“不是闰年”。 然后转到,S6,S5,:输出,y “,不是闰年”,S6,:,y+1=y,S7,:当,y2500,时,转,S2,继续执行,如,y,2500,,算法停止。,算 法 的 概 念 (三)S3:若y能被4整除,不能被100,算 法 的 概 念,(,四,),在这个算法中,采取了多次判断。先判断,y,能否被,4,整除,如不能,则,y,必然不是闰年。如,y,能被,4,整除,并不能马上决定它是否闰年,还要看它能否被,100,整除。如不能被,100,整除,则肯定是闰年,(,例如,1996,年,),。如能被,100,整除,还不能判断它是否闰年,还要被,400,整除,如果能被,400,整除,则它是闰年,否则不是闰年。,在这个算法中,每做一步,都分别分离出一些范围,(,巳能判定为闰年或非闰年,),,逐步缩小范围,使被判断的范围愈来愈小,直至执行,S5,时,只可能是非闰年。见图,2.1,示意。,算 法 的 概 念 (四)在这个算法中,采取了多次判断。先判,算 法 的 特 性,(,一,),一个算法应该具有以下特点:,1.,有穷性,一个算法应包含有限的操作步骤,而不能是无限的。,事实上,“有穷性”往往指“在合理的范围之内”。究竟什么算“合理限度”,并无严格标准,由人们的常识和需要而定。,2.,确定性,算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。,算 法 的 特 性 (一)一个算法应该具有以下特点:,算 法 的 特 性,(,二,),3.,有零个或多个输入,所谓输入是指在执行算法时需要从外界取得必要的信息。一个算法也可以没有输入。,4.,有一个或多个输出,算法的目的是为了求解,“解” 就是输出。没有输出的算法是没有意义的。,5.,有效性,算法中的每一个步骤都应当能有效地执行,并得到确定的结果。,算 法 的 特 性 (二)3.有零个或多个输入,怎样表示一个算法,为了表示一个算法,可以用不同的方法。常用的有自然语言、传统流程图、结构化流程图、伪代码、,PAD,图等。,怎样表示一个算法为了表示一个算法,可以用不同的方法。常用的有,用自然语言表示算法,用自然语言表示通俗易懂,但文字冗长, 容易出现“歧义性”。自然语言表示的含义往往不太严格,要根据上下文才能判断其正确含义。此外,用自然语言描述包含分支和循环的算法,不很方便,(,如例,2.5,的算法,),。因此,除了很简单的问题以外,一般不用自然语言描述算法。,用自然语言表示算法用自然语言表示通俗易懂,但文字冗长, 容易,用流程图表示算法,(,一,),流程图是用一些图框表示各种操作。用图形表示算法,直观形象,易于理解。美国国家标准化协会,ANSI,(,A,merican,N,ational,S,tandard,I,nstitute),规定了一些常用的流程图符号。,其中菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立来决定如何执行其后的操作。它有一个入口,两个出口。,连接点,(,小圆圈,),是用于将画在不同地方的流程线连接起来。图中有两个以,为标志的连接点,(,在连接点圈中写上“,1”),,它表示这两个点是互相连接在一起的。实际上它们是同一个点,只是画不下才分开来画。用连接点,可以避免流程线的交叉或过长,使流程图清晰。,用流程图表示算法(一)流程图是用一些图框表示各种操作。用图形,用流程图表示算法,(,二,),用流程图表示算法(二),判定闰年的算法用流程图表示,判定闰年的算法用流程图表示,传统流程图的弊端,传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制地使流程随意地转来转去,使流程图变得毫无规律。,这种算法难以阅读,也难以修改,从而使算法的可靠性和可维护性难以保证。如果我们写出的算法能限制流程的无规律任意转向,阅读起来就很方便。,既然用基本结构的顺序组合可以表示任何复杂的算法结构,那么基本结构之间的流程线就属多余的了。,传统流程图的弊端传统的流程图用流程线指出各框的执行顺序,对流,用,N-S,流程图表示算法,(,一,),1973,年美国学者,I.Nassi,和,B.Shneiderman,提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称,N-S,结构化流程图。这种流程图适于结构化程序设计,因而很受欢迎。,N-S,流程图用以下的流程图符号:,用N-S流程图表示算法(一)1973年美国学者I.Nassi,用,N-S,流程图表示算法,(,二,),用N-S流程图表示算法(二),用伪代码表示算法,(,一,),用传统的流程图和,N-S,图表示算法,直观易懂,但画起来比较费事。因此,流程图适宜表示一 个算法,但在设计算法过程中使用不是很理想。为了设计算法时方便,常用一种称为伪代码,(pseudo code),的工具。,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它如同一篇文章,自上而下地写下来。每一行,(,或几行,),表示一个基本操作。它不用图形符号,因此书写方便 、格式紧凑,也比较好懂,便于向计算机语言算法,(,即程序,),过渡。,用伪代码表示算法(一)用传统的流程图和N-S图表示算法,直观,用伪代码表示算法,(,二,),即计算机语言中具有的语句关键字用英文表示,其他的可用汉字表示。总之,以便于书写和阅读为原则。用伪代码写算法并无固定的、严格的语法规则,只要把意思表达清楚,并且书写的格式要写成清晰易读的形式。,例求,5!,,用伪代码表示的算法如下:,BEGIN(,算法开始,),1=t,2=i,while it,i+1=i,print t,END(,算法结束,),用伪代码表示算法(二)即计算机语言中具有的语句关键字用英文表,用伪代码表示算法,(,三,),BEGIN(,算法开始,),2000=y,while yy,END(,算法结束,),用伪代码表示算法(三)BEGIN(算法开始),用伪代码表示算法,(,四,),从以上例子可以看到:伪代码书写格式比较自由,容易表达出设计者的思想。用伪代码写的算法也很容易修改。用伪代码很容易写出结构化的算法。例如上面例子都是结构化的算法。但是用伪代码写算法不如流程图直观,可能会出现逻辑上的错误(例如循环或选择结构的范围搞错等)。,以上介绍了常用的表示算法的几种方法,在程序设计中读者可以根据需要和习惯任意选用。软件专业人员一般习惯使用伪代码,考虑到国内广大初学人员的情况,为便于理解,以后各章中主要采用形象化的,N-S,图表示算法。但是,对其他方法也应有所了解,以便在阅读其他书刊时不致发生困难。,用伪代码表示算法(四)从以上例子可以看到:伪代码书写格式比较,用计算机语言表示算法,要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。因此,不仅要考虑如何设计一个算法,也要考虑如何实现一个算法;,用计算机语言表示算法必须严格遵循所用语言的语法规则,这是和伪代码不同的。我们将前面介绍过的算法用,C,语言表示;,用计算机语言表示的算法,程序。,用计算机语言表示算法要完成一件工作,包括设计算法和实现算法两,3.1,程序设计的一般方法,程序就是按照某种算法,在有限的步骤内对一些经过整理的、按照一定形式组织起来的有关联的数据(即数据结构)进行分析研究,得到期望的结果的计算机可以执行的指令序列。所以,数据结构和算法是程序设计的主要因素。,程序设计的一般方法可以概括为以下四个步骤:,明确处理对象、选择算法,画流程图,编写程序,调试程序,3.1 程序设计的一般方法程序就是按照某种算法,在有限的步,3.1,程序设计的一般方法,已知三角形三条边,求三角形的面积,首先需要明确处理对象,选择适合的算法,根据数据特点和取值范围,浮点型的数据可以很好地表示三角形的边长和面积。,如果,a、b、c,符合两边之和大于第三边,则,a、b、c,可以组成三角形,其面积的算法可以使用海伦公式,第二步画流程图。,3.1 程序设计的一般方法已知三角形三条边,求三角形的面积,3.1,程序设计的一般方法,开始,结束,输入,a、b、c,s=(a+b+c)/2,area=sqrt(s*(s-a)*(s-b)*(s-c),a+bc,并且,b+ca,并且,a+c b,打印三角形面积,打印“无法构成三角形”,不成立,成立,3.1 程序设计的一般方法开始结束输入a、b、cs=(a+,3.1,程序设计的一般方法,已知三角形三条边,求三角形的面积,第三步根据流程图编写程序。,选择一种计算机语言,按照流程图用该计算机语言提供的语句体系编写源程序。,第四步调试程序。,对已经编写好的源程序进行上机调试,并验算结果。如果不正确,修改程序再调试,直到得到期望的结果。,3.1 程序设计的一般方法已知三角形三条边,求三角形的面积,3.2,结构化程序设计,(一),结构化程序设计方法的基本思想是:,任何程序都可用三种基本结构的组合来实现。,这三种基本结构是:顺序结构、选择结构和循环结构。,这三种结构都具有一个入口和一个出口。,要求限制无条件转移语句(即,goto,语句)的使用,3.2 结构化程序设计(一)结构化程序设计方法的基本思想,3.2,结构化程序设计,(二),顺序结构:是按照书写顺序依次执行的。,选择结构:是对给定的条件进行判断,再根据判断的结果决定执行哪一个分支。,循环结构:是在给定条件成立时反复执行某段程序。,条件,程序段1,程序段2,条件,程序段,程序段1,程序段2,3.2 结构化程序设计(二)顺序结构:是按照书写顺序依次,3.3,C,语言的顺序结构,(,一,),顺序结构是结构化程序设计的三种基本结构中最简单的。它可以独立存在,也可以出现在选择结构或循环结构中,整个程序都存在顺序结构。在顺序结构中,函数、一段程序或者语句是按照出现的先后顺序执行的。,例 求,ax,2,+bx+c=0,方程的解。,a、b、c,由键盘输入,且,b,2,-4ac0。,3.3 C语言的顺序结构(一)顺序结构是结构化程序设计的三种,3.3,C,语言的顺序结构,(,二,),用伪代码表示算法:,定义,a、b、c、p、x1、x2,用于存放方程的系数、中间变量和结果;,输入,a、b、c,令,p=sqrt (b*b-4*a*c),计算,x1、x2:,x1=(-b+p)/(2*a),x2=(-b-p)/(2*a),输出方程的根,x1、x2,开始,输入,a、b、c,p=sqrt(b,2,-4ac),x1=(-b+p)/2a,x2=(-b-p)/2a,输出方程的根,x1、x2,结束,举一反三 :画出实现“输入三个数,a、b、c,,输出平均值,aver”,的程序的流程图和伪代码。,3.3 C语言的顺序结构(二)用伪代码表示算法: 开始,3.4,i,f,语句,(一),选择结构是结构化程序的三种基本结构之一,用于根据给定条件的判断执行何种操作。,C,语言中的选择结构有两种:,if,语句和,switch,语句。,if,语句主要提供两个分支的选择,,switch,语句提供多分支的选择。下面我们先介绍最为常用的选择结构,if,语句。,3.4 if 语句(一)选择结构是结构化程序的三种基本结构,3.4,i,f,语句,(二),if,语句的基本形式,if,(,条件),语句1;,else,语句2;,条件,语句1,语句2,成立,不成立,3.4 if 语句(二)if 语句的基本形式if (条件),3.4,i,f,语句,(三),判断方程,ax,2,+bx+c=0,是否有实数解,其中,a、b、c,由键盘输入,分析,:,用伪代码表示算法:,定义,a、b、c、p,用于存放,方程的系数、中间变量;,输入,a、b、c,令,p=b*b-4*a*c,if (p=0),输出方程有实数解,else,输出方程无实数解,开始,p= b,2,-4ac,结束,p=0,输出有实数解,输出无实数解,成立,不成立,输入,a、b、c,由键盘输入系数,a、b、c,,判断方程,ax,2,+bx+c=0,是否有实数解,如果有则输出其解。(提示:需要用到复合语句),3.4 if 语句(三)判断方程ax2+bx+c=0是否有,3.4,i,f,语句,(四),当语句2为空时,,else,可以省略,,if,语句形式变换为:,if (,条件),语句;,条件,语句,成立,不成立,例 :由键盘输入,x、y,两个数,要求从大到小排序并输出。,分析,:,关键技术:两个变量互换算法是:,t=x;x=y;y=t;,定义,x、y、t,用于存放输入的两个数和中间变量;,输入,x、y,if (xy) t=x;x=y;y=t;,输出,x、y,3.4 if 语句(四)当语句2为空时,else可以省略,,开始,定义变量,x,、y,结束,从键盘给,x,、,y,赋值,xy?,x、y,互换,No,Yes,输出,x,、y,#,include ,void main(),float x,y,t;,scanf (“%f,%f”,if (xy),t=x;x=y;y=t;,printf(“%6.2f,%6.2f”,x,y);,3.4,i,f,语句,(五),开始定义变量x、y结束从键盘给x、y 赋值xy? x、y互,3.4,i,f,语句,(六),当,if,语句中的语句1或语句2是一个含,if,语句的复合语句时,形成,if,语句的嵌套。,形式一:当语句2是,if,语句结构,if (,条件1) 语句1,else if (,条件2),语句2,else,语句3,形式二:当语句1是,if,语句结构,if (,条件1),if (,条件2) 语句1,else,语句2,else,语句3,条件1,语句1,成立,不成立,条件2,语句2,语句3,成立,不成立,条件1,语句1,成立,不成立,条件2,语句2,语句3,成立,不成立,3.4 if 语句(六)当if语句中的语句1或语句2是一个,3.4,i,f,语句,(七),3.4 if 语句(七),3.4,i,f,语句,(八,),分析,:采用形式二的算法:,采用形式一的算法:定义变量,x,y,定义变量,x,y,输入,x,输入,x,if (x=0),if (x0) y=-1; if (x0) y= -1;,else if (x= =0) y=0; else y=0;,else y=1; else y=1;,输出,y,值,输出,y,值,举一反三 :试判断下列选择结构是否可以表示上例函数。,if (x0) y=-1;,if (x= =0) y=0;,else y=1;,3.4 if 语句(八)分析 :采用形式二的算法,/*,/* 程 序,名:,3_4.cpp(分支程序示例) *,/* 作 者:,李越辉 *,/*,编制时间:,2007年3月 *,/*,主要功能:实现符号函数 *,/*,#include / 预编译命令,void main( ) / 主函数, / 主函数开始,int x=0,y=0; / 声明x,y为整型变量,初始化为0,cout 请输入x x;/ 从键盘输入整数送至x中,if (x0)/ 如果x0,将1赋给y,y=1;,else,if (x=0)/ 如果x=0,将0赋给y,y=0;,else,y=-1;/ 否则(x0),将-1赋给y,cout 当x= x 时, y=, y =0) if (a=0),if (a0) printf(“a0n”); if (a0) printf(“a0n”);,else printf(“a0n”);else printf(“a= =0n”);,3.4 if 语句(九)在if语句嵌套中,特别注意else,NS,图,有了上述了解之后,我们来看解“谁做的好事”的程序框图,NS图有了上述了解之后,我们来看解“谁做的好事”的程序框图,现在我们来分析“谁做的好事”的,NS,流程图。它是由两大块组成的,如图,循环体,for(k=1; k=4; k+),语句,1;,第一块循环结构,第二块分支结构,现在我们来分析“谁做的好事”的NS流程图。它是由两大块组,第一块是,循环结构,,功能是产生被试对象,依次为,A,、,B,、,C,、,D,。并测试四句话有多少句为真,如有,3,句为真,则可确定做好事者,同时置有解标志为,1,。,第二块为,分支结构,,功能是判断是否无解,如为真,则输出无解信息。,这是粗看。再往细看,第一块的循环体又由两块组成,如图,中含两条赋值语句,中含一条分支语句,第一块是循环结构,功能是产生被试对象,依次,讲这一段是希望你掌握,NS,图,这对今后的学习会有好处。按照程序框图很容易写出程序(如下页所示),thisman = 64+k;,sum=( thisman!=A )+ ( thisman=C )+ ( thisman=D )+ ( thisman!=D );,sum = 3,真,假,输出该被测试者;,有解标志置,1,;,讲这一段是希望你掌握NS图,这对今后的学习会有好处。按照,/ *,/ *,程 序 名:,3_5.cpp *,/ *,作 者:李越辉 *,/ *,编制时间:,2007,年,3,月 *,/ *,主要功能:谁做的好事 *,/ *,#include /,预编译命令,void main() /,主函数, /,主函数开始,int k=0,sum=0,g=0; /,声明变量为整数类型,且均初始化为,0,char thisman= ;,for(k=1;k=4;k=k+1) / k,既是循环控制变量,也表示第,k,个人, / for,循环体开始,thisman = 64+k;,sum= ( thisman !=A ),+ ( thisman=C ),+ ( thisman=D ),+ ( thisman !=D );,if (sum=3), /,如果,4,句话有,3,句话为真,则输出该人,/,输出做好事者,cout ,做好事者为, char(64+k) endl;,g=1; /,有解标志置,1,/ for,循环体结束,if (g!=1) /,则输出无解信息, cout Cant found! endl;, /,主函数结束,/ *,#include ,void main( ),int k =0, sum =0 , g =0; char thisman = ;,for ( k = 1; k = 4 ; k = k+1 ),thisman = 64 + k;,sum = ( thisman != A ) +( thisman=D ),+ ( thisman=C ) + ( thisman !=D );,if (,sum=3,), cout ,做好事者为, char(64+k) endl;,g=1;,if (g!=1), cout Cant found! endl;,#include ,/ *,/ *,程 序 名:,3_6.cpp *,/ *,作 者:李越辉 *,/ *,编制时间:,2008,的好事 *,/ *,#include /,预编译命令,void main()/,主函数, /,主函数开始,int k=0,sum=0,g=0;/,声明变量为整数类型,且均初始化为,0,for(k=1;k=4;k=k+1)/,循环从,k,为,1,到,4,,,sum=0;/,循环体内的初始化,if (k!=1) sum=sum+1;/,如,A,的话为真,则让,sum,加,1,;,if (k=3) sum=sum+1;/,如,B,的话为真,则让,sum,加,1,;,if (k=4) sum=sum+1;/,如,C,的话为真,则让,sum,加,1,;,if (k!=4) sum=sum+1;/,如,D,的话为真,则让,sum,加,1,;,if (sum=3)/,若有三句话为真,则做下列两件事,cout This man is char(64+k), endl;/,输出做好事者,g=1;/,让有解标志置,1,if (g!=1)/,则输出无解信息, cout Cant found! endl;,/,主函数结束,/ *,for ( k = 1; k = 4; k = k+1 ),sum=0;,if (,k != 1,) sum = sum+1;,/,如,A,的话为真, 则让,sum,加,1,;,if (,k =3,) sum = sum+1;,/,如,B,的话为真,则让,sum,加,1,;,if (,k =4,) sum = sum+1;,/,如,C,的话为真,则让,sum,加,1,;,if (,k != 4,) sum = sum+1;,/,如,D,的话为真,则让,sum,加,1,;,. . .,for ( k = 1; k = 4; k = k+1 ),/ *,/ *,程 序 名:,3_7.cpp *,/ *,作 者:李越辉 *,/ *,编制时间:,2008,年,3,月 *,/ *,主要功能:谁做的好事,*,/ *,#include /,预编译命令,void main( ) /,主函数, /,主函数开始,int k=0,g=0; /,声明变量为整数类型,且均初始化为,0,for(k=1;k=4;k=k+1) / k,既是循环控制变量,也表示第,k,个人, / for,循环体开始,if (k!=1)+(k=3)+(k=4)+(k!=4)=3), /,如果,4,句话有,3,句话为真,则输出该人,/,输出做好事者,cout ,做好事者为, char(64+k) endl;,g=1; /,有解标志置,1, / for,循环体结束,if (g!=1) /,则输出无解信息, cout Cant found! endl;, /,主函数结束,上述程序可以简化为:,/ *,for ( k = 1; k = 4 ; k = k+1 ),if (k!=1)+(k=3)+(k=4)+(k!=4)=3),cout ,做好事者为, char(64+k) endl;,g=1;,for ( k = 1; k = 4 ; k = k+1,for( k= 1; k= 4; k= k+ 1 ),if ( (,( k != 1),+,( k = 3),+,( k = 4 ),+,( k != 4 ),) = 3 ), cout “,做好事者为,”, char( 64+ k )endl;,g = 1; ,for( k= 1; k= 4; k= k+ 1,3.5,switch,语句,(一),switch,语句,用于实现多重分支,格式为,注意:如果需要执行完本,case,语句后就跳出,switch,语句,则在对应的,case,语句后加上一个,break,语句,switch(,整型表达式),case,数值1:语句1;,break;,case,数值2:语句2;,break;, ,case,数值,n,:,语句,n;break;,default,:,语句,n+1,整型表达式,语句1,语句2,等于,数值1,语句,n,语句,n+1,等于,数值2,等于,数值,n,等于,其它值,3.5 switch语句(一)switch语句switch(,3.5,switch,语句,(二),switch,语句,由键盘输入一个成绩,然后输出相应的等级“优”、“良”、“中”、“及格”、“不及格”。,开始,定义,score,结束,score/10,输出,优秀,等于10,输入,score,输出,良好,输出,中等,输出,及格,输出,不及格,输出,”输入错误”,输出,优秀,等于9,等于8,等于7,等于6,等于5,等于其它值,输出,不及格,等于0,3.5 switch语句(二)switch语句开始定义sco,#,include ,void main( ), int score;,printf(“,请输入学生分数:”);,scanf (“%d”,switch (score/10), case 10:,case 9: printf(“,成绩优秀,n”); break;,case 8: printf(“,成绩良好,n”); break;,case 7: printf(“,成绩中等,n”); break;,case 6: printf(“,成绩及格,n”); break;,case 5:,case 4:,case 3:,case 2:,case 1:,case 0: printf(“,成绩不及格,n”); break;,default : printf(“,输入分数错误,n”);,举一反三 :,由键盘输入等级,A、B、C、D,,输出成绩范围。其中“,A”,代表85100分,“,B”,代表7085分,“,C”,代表6070分,“,D”,代表60分以下,3.5,switch,语句,(二),#include 举一反三 :3.5 sw,作业与上机练习,实验三,作业与上机练习实验三,再 见,再 见,