算法语言与数据结构课件

上传人:磨石 文档编号:243053748 上传时间:2024-09-14 格式:PPT 页数:139 大小:2.01MB
返回 下载 相关 举报
算法语言与数据结构课件_第1页
第1页 / 共139页
算法语言与数据结构课件_第2页
第2页 / 共139页
算法语言与数据结构课件_第3页
第3页 / 共139页
点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,信息与物流管理系,算法语言与数据结构,信息与物流管理系,王健,西安财经学院管理学院,第,3,章 逻辑思维与计算机解题,算法及算法工具,结构化程序设计思想,将实际问题抽象为逻辑关系,枚举法解题思路,关系与关系表达式,程序的循环结构与分支结构,学 习 目 标,1.,算法及算法工具,2.,结构化程序设计思想,3.,关系运算符与关系表达式,4.,人的思维到用计算机语言的表示,5.,枚举的概念与思路,6.,循环结构,7.,分支结构,内 容 要 点,计算机强大的逻辑分析功能是由人通过程序赋给它的。一些逻辑问题必须转换成计算机能够看得懂的数学表达式和一定的程序指令。这一章我们通过例子来介绍如何将人对问题的思考转换为让计算机能解的数学表达式,同时给出一些通常要用到的程序结构和,C/C+,语句。,3.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.1.1,算法,程序设计,=,数据结构,+,算法,+,程序设计方法学,数据结构:数据对象及其相互关系和构造方法。数据结构与算法密不可分,一个良好的数据结构,将使算法简单化;只有明确了问题的算法,才能有较好的设计数据结构,因此两者是相辅相承的,对同一个问题的求解,允许有不同的算法和数据结构,依不同算法编写的操作代码,执行效率不一样。,算法,(algorithm),:是对特定问题求解步骤的一种描述。,算法特征,:,1,有穷性,2,确定性,3,输入,4,输出,5,有效性,算法要求:,1,正确性,2,可读性,3,健壮性,4,效率,算法表示:,1.,自然语言,2.,专用工具,3.,伪代码,4.,计算机语言,算法设计常用方法,1.,枚举法,2,.,迭代法,3,.,递归法,4.,递推法,5.,分治法,6.,回溯法,7.,模拟人工,3.1.2,算法表示工具,算法表示,专用工具,流程图表示,流程图符号:,3.1,程序设计中的科学思维方法,三种基本控制结构,A,B,顺序结构,选择结构,循环结构,P,B,A,P,A,3.1,程序设计中的科学思维方法,1.2,程序设计中的科学思维方法,流程图符号表示的算法实例:,3.1,程序设计中的科学思维方法,1.2,程序设计中的科学思维方法,例,3.1,算法,伪代码表示的算法实例:,问题:,求,1,2,+2,2,+,+50,2,输出,sum,开始,输入,n,的值,置,sum,初值为,0,置,i,初值为,1,当,in,,,执行下面操作:,sum = i*i+sum,i = i+1,打印,sum,的值,结束,3.1,程序设计中的科学思维方法,1.2,程序设计中的科学思维方法,例,3.2,算法,计算机语言表示的算法实例:,问题:,求,1,2,+2,2,+,+50,2,3.1,程序设计中的科学思维方法,1.,结构化程序设计基本思想,自顶向下 逐步细化 模块化,2.,结构化程序设计的过程,建立数学模型,选定算法,用适当工具描述算法,编程,测试及调试,(,1,)建立数学模型,规定了数据间准确的关系,如:,数学公式、一张关系图、一张二维数据表,(,2,)选定算法,用适当工具描述算法,3.1,程序设计中的科学思维方法,(,3,),.,用自顶向下逐步细化构造算法,【,例,1-5】,某同学进行一次物理实验,测量得到,30,个数据,求这,30,个数据的平均值。,一级算法:,1. Initialize variables,2. Input , sum and count the data,3. Calculate and print the average,1.1 Set total to 0,1.2 Set counter to 1,2.1 While counter=30,Input the next data,Add the data to total,Add 1 to counter,3.1 Set average to tatal/30,3.2 Print the average,3.1,程序设计中的科学思维方法,4.,用自顶向下逐步细化构造算法,【,例,1-2】,有,30,名同学选修了程序设计这门课程,请编写程序统计参加考试学生中及格和不及格的人数。,一级算法:,1.Initialize variables,2.Input the 30 grades and count the failures,3.Print the exam results,1.1 Set failures to 0,1.2 Set passes to 0,1.3 Set counter to 1,While counter=30,2.1 Input the next grade,2.2 If the grade=,大于等于,大于,=,等于,=,小于等于,小于,!=,不等于,为了讲解关系运算符和关系表达式,先请你在机器上建立和运行下列程序。,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“, 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,的逻辑值是,1,1为真,3,=,2,的逻辑值是,1,1为真,3,=,2,的逻辑值是,0,0为假,3,2,的逻辑值是,0,0为假,3,=,2,的逻辑值是,0,0为假,3,!=,2,的逻辑值是,1,1为真,程序运行结果是:,3.2,关系运算符和关系表达式,关系表达式的一般格式,关系运算符,例如:变量,1,为,b,,变量,2,为,c,,关系运算符为,。关系表达式为,b c,在程序中系统要测试由关系表达式所表示的关系是否成立,成立为真,不成立为假。,关系表达式是有值的,这个值非,0,即,1,,是布尔值。关系表达式成立,其值为,1,。关系表达式不成立,其值为,0,。上述性质在编写程序时用到,因此很重要。,3.2,关系运算符和关系表达式,结合任务,3.1,,可以将四个人说的四句话写成关系表达式。,在声明变量时,我们让,thisman,表示要寻找的做了好事的人,定义它是字符变量。,char,thisman,=; /,定义字符变量并将其初始化为空,接着让,“,= ”,的含义为“是”,,让 “,!= ”,的含义为“不是”。,3.3,使用关系表达式解决一些问题,利用关系表达式将四个人所说的话表示成,说话人,说的话,写成关系表达式,A,“,不是我”,thisman,!=A,B,“是,C”,thisman,=C,C,“,是,D”,thisman,=D,D,“,他胡说”,thisman,!=D,3.3,使用关系表达式解决一些问题,在,C/C+,中字符在存储单元中是以,ASCII,码的形式存放的。因此,用赋值语句,thisman,= A;,与,thisman,= 65;,两者是等效的,在以,thisman,为标识的存储单元中存的是数字,65,。建议你用如下实验加以验证。,thisman,65,地址,xxxx,3.3,使用关系表达式解决一些问题,/ *,/ *,程 序:,3_1.c *,/ *,功 能: 验证,A,和,65,是否相等 *,/ *,编制人:,wuwh *,/ *,时 间:,2001,年,6,月,27,日 *,/ *,#include /,预编译命令,void main( )/,主函数,/,主函数开始,char,thisman,;/,声明字符变量,thisman,,,thisman,= A;/,thisman,赋值为,A,/,输出关系表达式“,65=A”,的值,printf,( 65=A ,关系表达式的值为,“,65=A) ;,/,主函数结束,3.3,使用关系表达式解决一些问题,结合任务,3.1,分析,,A,、,B,、,C,、,D,四个人,只有一位是做好事者。令做好事者为,1,,未做好事者为,0,,可以有如下,4,中状态(情况),3.4,枚举法的思路,状态,A,B,C,D,1,1,0,0,0,2,0,1,0,0,3,0,0,1,0,4,0,0,0,1,这四种状态可简化写成,状态,赋值表达式,1,thisman,=A,2,thisman,=B,3,thisman,=C,4,thisman,=D,显然第一种状态是假定,A,是做好事者,第二种状态是假定,B,是做好事者,,。所谓,枚举,是按照者四种假定逐一地去测试四个人的话有几句是真话,如果不满足三句为真,就否定掉这一假定,换下一个状态再试。,具体做法如下:,3.4,枚举法的思路,(,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,做的好事,3.4,枚举法的思路,(,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,做的好事,3.4,枚举法的思路,(,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,做的好事,3.4,枚举法的思路,综上所述一个人一个人去试,就是,枚举,。从编写程序看,实现枚举最好用,循环结构,。,这部分的程序写出如下:,for (k=1; k=4; k=k+1) /,计数型循环,循环的控制变量为,k, /,循环体开始,thisman,=64+k; /,产生被试者,依次为,A,B,C,D,/,赋值给,thisman,sum = (,thisman,!=A)/,测试,A,的话是否为真,+(,thisman,=C) /,测试,B,的话是否为真,+(,thisman,=D) /,测试,C,的话是否为真,+(,thisman,!=D); /,测试,D,的话是否为真, /,循环体结束,3.5,循环语句,1.for,循环,for,是计数型循环的标识符,圆括号括起的是三个表达式。其下的大括号括起的部分是循环体。图,3.1,描述了,for,循环的结构。,for,语句的格式为,for(,表达式,1,;表达式,2,;表达式,3),循环体(语句组),3.5,循环语句,图,3.1,3.5,循环语句,求解表达式,1,,置循环控制变量的初值,测试表达式,2,,测试是否未到循环控制变量的终值,2-1,如果表达式,2,的值为真,则执行,3,2-2,如果表达式,2,的值为假,则退出循环转,5,执行循环体语句组之后转,4,求解表达式,3,,让循环控制变量增值或减值,再转,2,执行,for,语句的下一条语句,for,循环的执行过程如下:,3.5,循环语句,/ *,/ *,程 序:,3_2.c,(计数循环示例),*,/ *,功 能: 求自然数,1,100,之和 *,/ *,编制人:,wuwh *,/ *,时 间:,2001,年,9,月,10,日 *,/ *,#include /,预编译命令,void main( )/,主函数,/,主函数开始,int,i=0, sum=0;/,声明,i,sum,为整型变量并初始化为,0,for (i=1; i=100; i=i+1)/ for,循环,/,循环体开始,sum =,sum+i,;/,累加求和,/,循环体结束,printf,(“,自然数,1,100,之和为,%d“, sum);/,输出累加结果,/,主函数结束,3.5,循环语句,将原来的,for(i,=1; i=100; i=i+1),修改为,for(i,=1; i=100; i=i+2),问:这是哪些自然数在求和,答案是多少?,将原来的,for(i,=1; i=100; i=i+1),修改为,for(i,=1; i=100000; i=i+1),执行程序能够得出正确结果吗?如果不能,自己想办法解决。,思考题:在例,3_2,的程序中做些修改,3.5,循环语句,例,3-3,求,10,!,/*,/*,程序名:,3_3.c,(循环语句示例) *,/*,作 者:,wuwh *,/*,编制时间:,2002,年,9,月,20,日 *,/*,主要功能:计算,10,的阶乘 *,/*,#include /,预编译命令,void main() /,主函数, /,主函数开始,int,i = 0, j = 0, k = 0; /,声明,i,j,k,为整型变量,并初始化为,0,long sum = 1; /,声明,sum,为长整型变量,并初始化为,1,for (i = 10; i = 1; i = i-1) /,用,for,循环作累乘运算,printf,( i=%d“, i) ; /,显示,i,sum =,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,求,10,!,/*,/*,程序名:,3_3.c,(循环语句示例) *,/*,作 者:,wuwh,*,/*,编制时间:,2002,年,9,月,20,日 *,/*,主要功能:计算,10,的阶乘 *,/*,#include /,预编译命令,void main() /,主函数, /,主函数开始,int,i = 0, j = 0, k = 0; /,声明,i,j,k,为整型变量,并初始化为,0,long sum = 1; /,声明,sum,为长整型变量,并初始化为,1,for (i = 10; i = 1; i = i-1) /,用,for,循环作累乘运算,printf,( i=%d“, i ); /,显示,i,sum = sum * i; /,每一步乘积,printf,( ,tsum,=%d ,sum); /,显示每一步乘积,for (j = 1; j = 5500; j = j+1) /,用,for,循环延迟时间,for (k = 1; k = 10000; k = k+1);/,用,for,循环延迟时间,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 = 1,;,表达式,3,为,i = i - 1,;,3.5,循环语句,实际上循环有好几种方式,如:,Goto,和,if,构成的循环,do-while,构成的循环,while,构成的循环,for,构成的循环,对于以上的循环,我们将通过具体的例子来阐明,。,3.5,循环语句,句式为,goto,标号,标号必须是字母,数字,下划线组成,第一个字母不能是数字。,main(),方法之一,int,i,sum1,j,sum2,k,sum3;,printf(Please,input the value of i,j and knn);,scanf(%d,%d,%d,&i,&j,&k,);,printf(i,=%d,j=%d,k=%dnn,i,j,k);,sum1=0;,loop : if(i=10),sum1=sum1+i*i; i+;,goto,loop;,printf(method,1-sum1=%dnn,sum1);,3.5,循环语句,while,语句,形式,while (,表达式,),语句,可以是复合语句 其中必须含有改变条件表达式值的语句,执行顺序,先判断表达式的值,非,0,再执行语句,实现“当型”循环,3.5,循环语句,流程特点:先判断,,后执行,(1),循环如果包含一个以上的语句要用, ,括起来,见例,2-3.c,(2),循环体内应该有使循环体结束的语句,否则进入死循环。,express,语句,0,非0,3.5,循环语句,main(),方法之二,int,j,sum2;,sum2=0;,while(j=10) /* without ; after while() */,sum2=sum2+j*j;,j+;,printf(method,2-sum2=%dnn,sum2);,3.5,循环语句,do-while,语句,一般形式,do,语句,可以是复合语句,while (,表达式,),其中必须含有改变条件表达式值的语句,执行顺序,先执行语句,后判断条件。,while,语句与,do-while,语句的比较,类似于直到型循环,但不同,3.5,循环语句,Do,while,是先执行,后判断,goto,if,及,while,均是先判断后执行,main(),方法之三,int,k,sum3;,sum3=0;,do,sum3=sum3+k*k;,k+;,while(k=10);,printf(sum3=%d,sum3);,Do,while,的,while,后面有“;”,while( ),后面则没有,从本例中可以看出,while,和,do,while,的区别,do,while,是先执行循环体语句,后判断表达式,3.5,循环语句,循环的嵌套,与其它语言一样,,c,语言的循环也可以有多重嵌,套,大家在应用过程中可以根据实际情况选用,3.5,循环语句,EXAMPLE,例,2-4.c,把,20,以内能被,5,整除的数打印出来,(,用两种方法,),3.5,循环语句,main(),int,sum1=0,sum2=0;,/* - while - */,while(sum1=20),sum1=sum1+1;,while(sum1%5=0),printf(while,()- sum1=%dn,sum1);,sum1+;,for(sum2=1;sum2=20;sum2+),while(sum2%5=0),printf(for,*while()- sum2=%dn,sum2);,sum2+;,3.5,循环语句,break,和,continue,语句,break,语句,使程序从循环体和,switch,语句内跳出,继续执行逻辑上的下一条语句。不能用在别处。,如:,2-5.c,求解,ax,2,+bx+c=y,continue,语句,结束本次循环,接着进行是否执行下一次循环的判断。,3.5,循环语句,EXAMPLE,2-5.c,求解,ax,2,+bx+c=y;,main() /* y=a*x2+b*x+c */,int,a,b,c,x,y;,a=5;b=10;c=15;,for(x=1;x250,printf(break-x,=%d, y=%dn,x,y);,for(x=1;x250,printf(continue-x,=%d, y=%dn,x,y);,Continue,结束本次循环,,即满足条件时,就跳过下面的,语句,进入下一个循环,;,Break,结束的是,整个循环,for,循环的,NS,图,为了以后讲解的方便,有必要使用更为简便的,N-S,结构流程图,如图,3.3,for (i=1; i=100; i=i+1),循环体,图3.3,3.5,循环语句,if (sum = 3),Printf,( This man is %d ,char(64+k) );,g=1;,这一段程序可以读作:如果,sum,真的为,3,时,做下面两件事,(,1,)输出做好事的人;,(,2,)将本题的有解标志置为,1,。,其中,(sum=3),为条件判断语句中的条件,根据其真假使程序分支。,例,3-1,的解要用到分支语句,即需要判断当四句话中有,3,句为真时,我们要将该人判定为做好事者。请看如下程序段,3.6,分支语句,下面我们画出分支程序的,NS,流程图,这种图直观清晰,一目了然。,图3.4,3.6,分支语句,if (,表达式,),语句,1,;,else,语句,2,;,如果表达式为真,执行语句,1,;否则执行语句,2,if (,表达式,),语句块,1,;,else,语句块,2,;,3.6,分支语句,一般格式,if (,表达式,),语句,1,;,如果表达式为真,执行语句,1,;否则什么都不做,.,if (,表达式,),语句块,1,;,如果表达式为真,做语句块,1,的内容;否则什么都不做;,3.6,分支语句,举例:实现如图函数,图3.5,3.6,分支语句,/*,/*,程 序,名:,3_4.c,(,分支程序,示例),*,/*,作,者:,wuwh,*,/*,编制时间:,2001,年,8,月,*,/*,主要功能:实现符号函数 *,/*,#include /,预编译命令,void main()/,主函数, /,主函数开始,int,x=0,y=0;/,声明,x,,,y,为整型变量,并初始化为,0,printf,( ,请,输入,x ); /,提示信息,scanf(“%d”,&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,printf,( ,当,x=%d,时, y=%d , x ,y);,/,输出,x,,,y,的值, /,主函数结束,3.6,分支语句,NS,图,图3.6,3.6,分支语句,NS,图,有了上述了解之后,我们来看解“谁做的好事”的程序框图,图3.7,3.6,分支语句,现在我们来分析“谁做的好事”的,NS,流程图。它是由两大块组成的,如图,3.8,循环体,for(k=1; k=4; k+),语句,1;,图3.8,第一块循环结构,第二块分支结构,3.6,分支语句,第一块是,循环结构,,功能是产生被试对象,依次为,A,、,B,、,C,、,D,。并测试四句话有多少句为真,如有,3,句为真,则可确定做好事者,同时置有解标志为,1,。,第二块为,分支结构,,功能是判断是否无解,如为真,则输出无解信息。,这是粗看。再往细看,第一块的循环体又由两块组成,如图,3.9,,,中含两条赋值语句,中含一条分支语句,3.6,分支语句,我们讲这一段是希望你掌握,NS,图,这对今后的学习会有好处。按照程序框图很容易写出程序(如下页所示),thisman,= 64+k;,sum=(,thisman,!=A )+ (,thisman,=C )+ (,thisman,=D )+ (,thisman,!=D );,图3.9,sum = 3,真,假,输出该被测试者;,有解标志置,1,;,3.6,分支语句,/ *,/ *,程 序 名:,3_5.c *,/ *,作 者:,wuwh,*,/ *,编制时间:,2001,年,8,月 *,/ *,主要功能:谁做的好事 *,/ *,#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,句话为真,则输出该人,/,输出做好事者,printf,( ,做好事者为,%c“, char(64+k);,g=1; /,有解标志置,1, / for,循环体结束,if (g!=1) /,则输出无解信息,printf,( Cant found! );, /,主函数结束,3.6,分支语句,#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,),printf,(,做好事者为,%c , char(64+k);,g=1;,if (g!=1),printf,(,Cant found! );,3.6,分支语句,/ *,/ *,程 序 名:,3_6.c *,/ *,作 者:,wuwh,*,/ *,编制时间:,2001,年,8,月 *,/ *,主要功能:谁做的好事 *,/ *,#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,;,/,主函数结束,3.6,分支语句,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,;,. . .,3.6,分支语句,/ *,/ *,程 序 名:,3_7.cpp *,/ *,作 者:,wuwh,*,/ *,编制时间:,2001,年,8,月 *,/ *,主要功能:谁做的好事 *,/ *,#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,;, /,主函数结束,上述程序可以简化为:,3.6,分支语句,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;,3.6,分支语句,for( k= 1; k= 4; k= k+ 1 ),if ( (,( k != 1),+,( k = 3),+,( k = 4 ),+,( k != 4 ),) = 3 ),cout, “,做好事者为,”, char( 64+ k )b)?a:b,,,先运行(,ab),的条件运算,条件运算符的优先级比关系运算符及算术运算符低,,因此,,(ab),的括号可以不要,条件运算符的结合方向为“ 自右向左”,,如:,ab?a:cd?c:d,等价于,ab?a:(cd?c:d),若,a=5,b=15,c=25,d=35,那么整个表达式的值为35,条件表达式不能替代一般的,if,语句,三个表达式的类型可以不一样,但最终类型为表达式,2,和表达式,3,中的较高者,,如,x? a : b,3.6,分支语句,五、,switch,语句,Switch,语句是多分支选择语句,不象,if,,,只有,两个分支可供选择,在分类运算中,经常用到,一般形式,switch (,表达式,),可以是,整型、字符型、枚举型, case,常量表达式,1,:语句,1,case,常量表达式,2,:语句,2,每个常量表达式的值不能相,case,常量表达式,n,:,语句,n,同,次序不影响执行结果,default :,语句,n+1,可以是多个语句,但不必用, ,执行顺序,以,case,中的常量表达式值为入口标号,由此开始顺序执行。因此,每个,case,分支最后应该加,break,语句。,3.6,分支语句,使用,switch,语句应注意的问题,case,分支可包含多个语句,且不用, ,表达式、判断值都是,int,型或,char,型,若干分支执行内容相同可共用一组语句,EXAMPLE,例,2-2.c,计算工资水平下的税率,注意用数值型和字符型,表达式,不过多个,case,也可以执同一组语句。,main(),char a;,int,b,c;,printf(1-Please input the salary leveln);,printf(Between,1 to 4, which is char typen);,scanf(%c,&a,);,switch (a),case 1 :,printf(tax,=100%n); break;,case 2 :,printf(tax,=50%n); break;,case 3 :,printf(tax,=30%n); break;,case 4 :,printf(tax,=8%n); break;,default :,printf(tax,=0%n); break;,printf(n2-Please input the salary leveln);,printf(Between,1 to 4, which is,int,typen);,3.6,分支语句,scanf(%d,&b,);,switch (b),case 1 :,printf(tax,=100%n); break;,case 2 :,printf(tax,=50%n); break;,case 3 :,printf(tax,=30%n); break;,case 4 :,printf(tax,=8%n); break;,default :,printf(tax,=0%n); break;,printf(nPlease,input the salary leveln);,printf(between,1 to 4, which is,int,typen);,3.6,分支语句,scanf(%d,&c,);,switch (c),case 1 :,case 2 :,case 3 :,printf(tax,=30%n); break;,case 4 :,printf(tax,=8%n); break;,default :,printf(tax,=0%n); break;,/* multi-case 13, share with the case 3 */,3.6,分支语句,输入输出是往往程序最基本的功能,也是程序中最重要的组成部分。,C,语言中的输入,/,输出都是由库函数完成的,因此都是函数语句。,3.7,输入输出语句,3.7.1,printf,函数,printf,函数的最简单形式,最简单形式中输出项序列可以省略。此时成为如下格式:,printf,(,输出提示信息字符串,),转义字符的使用,转义字符用来完成某种特定的控制功能。例如:,n,使程序执行时换行。,3.7,输入输出语句,printf,函数调用的一般形式,printf,函数是一个标准库函数,在使用时它可以带两个参数:输出格式控制及输出项序列。,printf,函数调用的一般形式为:,printf,(,格式控制字符串,输出项序列,),其中格式控制字符串必须用引号,(),括起来,用于指定输出格式。注意不能使用汉字操作系统中的全角引号,(“”),。格式控制串可由格式字符串和非格式字符串两种组成。格式字符串是以,%,开头的字符串,在,%,后面跟有各种格式字符,以说明输出数据的类型、形式、长度、小数位数等。非格式字符串输出原样,通常用于显示提示信息。输出项序列中包括各个输出项。注意格式字符串和各输出项在数量和类型上必须一一对应。,3.7,输入输出语句,格式字符串,格式说明符的作用是规定
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!