资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,Program Design in C Language,Page,WUCC,算法,if,语句,switch,语句,条件运算符,第五讲,Begin:,第四章,选择结构程序设计,4.1,算法,4.1.1,算法的概念,程序,=,数据,+,算法,程序的主要工作就是处理数据,数据,:,在程序中要指定的数据的类型和数据的组织形式,也叫数据结构,例:两个变量的值的交换,算法,解决某一问题所采取的方法和步骤。,4.1,算法,有穷性,一个算法其操作步骤应当是有限的;,确定性,算法中的每一个步骤应当有确定的意义,不能有二义性;,有效性,算法中的每一个步骤应当正确、可行,并且能有效地执行;,有零个或多个输入,执行算法时需要从外界获取的信息;,有一个或多个输出,执行算法后应当得到正确的结果。,计算机算法的特性,解决某一问题的算法可以有多个,4.1,算法,数据结构和算法是紧密相关的,也是很重要的,可以反映人的智慧,例:,输入,3,个整数,输出其中最大的数,4.1.2,算法的表示,【,例,1-1】,:输入,3,个整数,输出其中最大的数。,自然语言,伪代码,流程图,4.1,算法,1.,用自然语言表示算法,用人们日常使用的语言和语序来表示算法。,【,例,1-1】,:输入,3,个整数,输出其中最大的数。,设置变量:声明三个整型变量,a,b,c,,声明,max,代表,3,个整型变量中的最大数。,步骤,1,:,从键盘输入,3,个整数给变量,a,b,c,;,步骤,2,:求,a,b,中的大数,=max,;,步骤,3,:,求,max,c,中的大数,=max,;,步骤,4,:输出,max,的值;,用自然语言描述算法如下:,4.1,算法,2.,用伪代码表示算法,一种接近于程序设计语言,但又不受语言语法约束的算法表示法。,上例用伪代码表示:,4.1,算法,3.,用流程图表示算法,用一些图框和方向线表示算法的图形表示法。,常用流程图符号及含义如下:,上例用流程图表示:,4.1,算法,用,N-S,流程图表示算法,用一些基本结构图框来表示算法的图形表示法。,语句,A,语句,B,条件,P,成立 不成立,语句,A,语句,B,当条件,P,成立时,语句,语句,直到条件,P,不成立,顺序结构,分支结构,循环结构,基本结构图框及含义如下:,上例用,N-S,流程图表示:,4.1,算法,4.3,用,if,语句实现选择结构,4.3.1 if,语句的三种形式,1,if(,表达式,),语句,单分支结构,:,if,(,),语句,A,;,语句执行过程:,先判断条件,(,表达式,),,若条件成立,就执行语句,A,;,否则,直接执行,if,后面的语句。该结构的流程图如右图所示。,4.3,用,if,语句实现选择结构,例:,if(grade =60),printf(“Pass,n”),;,注意:,单分支结构只有在条件为真时,才执行给定的操作,如果条件为假,则不执行任何操作。,1,)条件均为逻辑表达式或关系表达式,也可以是任意的数值类型。,例:,if,(,3,),printf,(,O.K.n,);,4.3,用,if,语句实现选择结构,说明:,if,(,q,),printf,(,%dn,,,a,);,if(3x&x=5)printf(3xb,),t=a;a=b;b=t;,例:,键盘输入一个整数,输出该数的绝对值。,main,(),int,number,;,printf(,请输入一个整数,%d:n);,scanf(%d,number);,if (number 0),number=-number;,printf(“,该数的绝对值为,:%d,。,n,number);,4.1,用,if,语句实现选择结构,2,双分支结构,:,if,(,)语句,A,;,else,语句,B,;,4.3,用,if,语句实现选择结构,语句执行过程:,先判断条件,(,表达式,),,若条件成立,就执行语句,A,;,否则,执行语句,B,。,即一定会执行语句,A,和语句,B,中的一句,且只能执行其中的一句。该结构的流程图如右图所示。,注意:,else,子句是,if,语句的一部分,它不能作为语句单独使用,必须与,if,配对使用。,4.3,用,if,语句实现选择结构,例:,if(grade =60),printf(“Pass,n”),;,else,printf(“Failure,”);,例:,计算,void main(),float x,y;,printf(,送数,%f:n);,scanf(%f,if(x=0),y=3*x+,;,else,y=-x*x+2*x-8;,printf(y,=%.2fn,y);,4.3,用,if,语句实现选择结构,例,:,任意输入两个不相等的数,将大数放入,X,小数放入,Y,中。,算法,:,1.,定义变量,2.,给变量赋初值,3.,比较,x,、,y,若,xy,直接输出,;,要么,xy,两数交换。,4.3,用,if,语句实现选择结构,4.3,用,if,语句实现选择结构,程序:,main,(),int,x,y,t;,printf(n,请输入两个整数,%d%d:);,scanf(%d%d,if(x y),t=x;x=y;y=t;,printf(,nx,=%d,y=%dn,x,y);,3,多分支结构,if,(,)语句,1,;,else if,(,)语句,2,;,else if,(,),语句,n-1,;,else,语句,n,;,4.3,用,if,语句实现选择结构,语句执行过程:,先判断条件,1(,表达式,1),,若条件,1,成立,就执行语句,1,后,退出该,if,结构;否则,再判断条件,2(,表达式,2),,若条件,2,成立,则执行语句,2,后,退出该,if,结构;否则,再判断条件,3(,表达式,3),,若条件,3,成立,则执行语句,3,后,退出该,if,结构;,。,表达式,1,表达式,2,表达式,3,表达式,n-1,语句,n,语句,n-1,.,语句,3,语句,2,语句,1,.,真,真,真,真,假,假,假,假,例:,计算,4.3,用,if,语句实现选择结构,程序:,#include,void main(),float x,y;,printf(,送数,%f,:,n);,scanf(%f,&x,);,if(x 0)y=x-7;,else if(x=0)y=2;,else y=3*x*x;,printf(%.2f n,y);,在,if,语句中又包含有一个或多个,if,语句称为,if,语句的嵌套,。,请说出以下两段程序的功能:,例,1,:,if(a0),if(b0),printf(%d,%dn,a,b);,如果,a,b,都是正数,则输出,a,b,4.3,用,if,语句实现选择结构,4.3.2 if,语句的嵌套,例,2,:,if(a0),if(b0),printf(%d,%dn,a,b);,else,printf(%dn,a);,else,if(b0),printf(%dn,b);,else printf(n);,输出,a,b,中的正数,4.3,用,if,语句实现选择结构,4.3.2 if,语句的嵌套,为避免错误可用,将内嵌结构括起来以确定,if,与,else,的配对关系属内嵌范围。,说明,:,嵌套不允许交叉。,else,与,if,必须成对出现,且,else,总是与最近的一个未配对的,if,配对。,4.3,用,if,语句实现选择结构,例:,读程序。,main(),int,a=2,b=1,c=2;,if (a),if(b0)c=0;,else c+,;,printf(%dn,c,);,程序运行结果:,3,4.3,用,if,语句实现选择结构,例:,读程序。,main(),int,a=2,b=1,c=2;,if (a),if(b=c,max=c,max=b,max=c,Y,b=c,Y,max=a,a=b,N,N,Y,N,4.3,用,if,语句实现选择结构,程序,:,main(),int,a,b,c,max;,printf(”,请输入三个整数,:%d%d%dn”);,scanf,(%d%d%d,if (a=b),if (a=c)max=a;,else max=c;,else,if(b=c)max=b;,else max=c;,printf(”n,最大数为:,%dn”,,,max);,4.3,用,if,语句实现选择结构,例:,用条件运算符表达,3,个数,a,b,c,中的大数。,思路,1,:先求两个数,b,c,中的大数:,bc?b:c,再求两个数,a,(b,c),中的大数:,a(bc?b:c)?a:(bc?b:c),思路,2,:,ab?,是,则让,a,与,c,比较;否,则让,b,与,c,比较,ab?,(,a c?a:c,),:(b c?b:c),4.3.3,条件运算符和条件表达式,s,witch,语句的格式:,switch,(,表达式),case ,:语句,1,;,break,;,case ,:语句,2,;,break,;,case ,:,语句,n-1,;,break,;,default,:,语句,n,;,break,;,4.4,用,switch,语句实现多分支选择结构,说明:,表达式:,可以是整型表达式,或字符表达式。,4.4,用,switch,语句实现多分支选择结构,case,常量表达式,(,),:,case,也是关键字。,常量表达式应与,switch,后的表达式类型相同,且各常量表达式的值不允许相同。,说明:,语句,:,可省略,或为单语句,或为复合语句。,default,:,关键字,可省略,也可出现在,switch,语句体内的任何位置。,4.4,用,switch,语句实现多分支选择结构,break,语句,格式:,break,;,功能:,跳出当前语句的执行,执行当前语句的下一条语句。,用法:,只能用在,switch,语句和循环体中。,4.4,用,switch,语句实现多分支选择结构,s,witch,语句,执行过程:,执行:,若表达式,=,常量表达式,,则执行语句;,若表达式!,=,常量表达式,,则执行,default,开始的(语句);,计算:,计算表达式的值。,判断:,表达式的值与常量表达式的值是否相等。,4.4,用,switch,语句实现多分支选择结构,注意:,表达式及常数表达式(由常数、符号常量组成的表达式)必须为整型,故它们也可用字符表达式。,4.4,用,switch,语句实现多分支选择结构,例:,输入一个,0,2,的数并输出,否则输入错误。,main(),int,x;,printf,(,请输入一个,02,的整数,:,),;,scanf,(,%d,&x,),;,switch(x),case 0:printf(,输入,0,。,n);,case 1:,printf,(,输入,1,。,n);,case 2:,printf,(,输入,2,。,n);,default:,printf,(,输入错误,!n);,程序运行结果:,请输入一个,02,的整数:,1,输入,1,。,输入,2,。,输入错误,!,4.4,用,switch,语句实现多分支选择结构,4.4,用,switch,语句实现多分支选择结构,例:,x=3;,switch(x),case 0:,printf(“Ture,!”),case 1:,printf(“False,);,该,switch,语句不执行任何操作,多个,case,可以共同使用一个语句序列,4.4,用,switch,语句实现多分支选择结构,例:,switch(n),case 1,:,case 3,:,case 5,:,case 7,:,case 9,:,printf,(”,奇数,n”),;,break,;,case 0,:,case 2,:,case 4,:,case 6,:,case 8,:,printf,(”,偶数,n”),;,break,;,该,switch,语句中,当,n=1,3,5,7,9,时,输出“奇数”;,当,n=0,2,4,
展开阅读全文