单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,5.,3,if语句嵌套,Teacher teaching design,CONTENTS,目 录,自主学习 明确考点,案例分析 交流提升,课后作业 自我提升,仿真演练,体验探索,自主学习,明确考点,PART,01,选择结构的嵌套语句,PART,01,选择结构的嵌套语句,条件1,条件2,条件n,程序段1,程序段2,程序段n,程序段n+1,if后程序段,真,假,假,假,真,真,选择结构的嵌套语句形式如下:,if(条件表达式1),语句序列1,else if(条件表达式2),语句序列2,else if(条件表达式3),语句序列3,else,语句序列n,选择结构的嵌套语句,执行过程,选择结构的嵌套语句,说明,1,(1)除与前面两种格式的要求外还要注意格式三中最后的else语句可以没有,即判断各种情况,若没有一种条件成立时,可以不执行任何操作。,说明,2,(2)格式三中的各表达式其条件要互不相容。,说明,3,(3)if语句允许嵌套,但嵌套的层数不宜太多,应适当控制嵌套层数(2-3层)。,说明,案例分析 交流提升,PART,0,2,程序1,#include,main(),int a,b,c,max;,printf(a=);scanf(%d,printf(b=);scanf(%d,printf(c=);scanf(%d,if(a b),if(a c),max=a;,else,max=c;,else,if(b c),max=b;,else,max=c;,printf(Max=%dn,max);,算法思路1:设三个数分别为a,b,c,首先设置外层,任取两个数a,b进行比较,如果a大于b成立,则只要把a与c进行比较(作为内层),取二者中最大值就可;否则只要把b与c进行比较(作为内层),取其中的最大值。,【例1】、任意输入三个整数,比较大小,输出其中最大值。,案例分析 交流提升,1,程序2:,main(),int a,b,c,max;,printf(Please input three numbers:);,scanf(%d,%d,%d,if(ab),max=a;,else,max=b;,if(cmax),max=c;,printf(The three numbers are:%d,%d,%dn,a,b,c);,printf(max=%dn,max);,第一步:将a,b比较,如果a大于b,则把a的值放在max中,否则,将b的值放在此max中;第二步:将c与max比较,如c大于max,则将c的值放在max中。最后所求的那个数就为最大数。,【例1】、任意输入三个整数,比较大小,输出其中最大值。,案例分析 交流提升,1,运行结果:,Please input three numbers:15,8,27,The three numbers are:15,8,27,max=27,main(),float x,y,a;,printf(please input two number to x and y:n);,scanf(%f,%f,if(x=0),if(y=0)a=x+y;,else a=x-y;,else,if(y=0)a=-x+y;,else a=-x+(-y);,printf(the value is:%fn,a);,根据数学知识可知,任意一个未知数绝对值的取值,可能存在大于0、等于0、小于0三种情况,在这里可知,只要变量x、y中,如果假设有一个数大于等于0或小于等于0,那么只需判断另一个数的情况。,求|x|+|y|=a,案例分析 交流提升,2,#include stdio.h,void main(),int x,a,b,c,d;/*a,b,c,d代表千位、百位、十位、个位*/,scanf(%d,a=x/1000;b=x%1000/100;c=x%100/10;d=x%10;/*分解出千位、百位、十位、个位*/,if(a!=0)printf(4:%d%d%d%dn,d,c,b,a);,else if(b!=0)printf(3:%d%d%dn,d,c,b);,else if(c!=0)printf(2:%d%dn,d,c);,else if(d!=0)printf(1:%dn,d);,案例分析 交流提升,3,思考:本例的算法思路,【例3】、给一个不多于4位的正整数,求出它是几位数,逆序打印出各位数字。,#include stdio.h,void main(),float a,b,c;,scanf(%f,%f,%f,if(a+bc&a+cb&b+ca),if(a=b&b=c),printf(equalateral triangle.n);,else if(a=b|a=c|b=c),printf(isoscelestrianglen);,else printf(other trianglen);,else,printf(can notn);,【例4】、任意输入三个数,判断能否构成三角形?若能构成三角形,是等边三角形、等腰三角形还是其它三角形;,案例分析 交流提升,4,:,:,#include,main(),float a,b,c,d,x1,x2,p,q;,printf(a=);,scanf(%f,printf(b=);,scanf(%f,printf(c=);,scanf(%f,d=b*b-4*a*c;,if(d=0),if(d 0),x1=(-b+sqrt(d)/2*a;,x2=(-b-sqrt(d)/2*a;,printf(方程有两个不同的实根:);,printf(x1=%6.2fn,x1);,printf(x2=%6.2f,x2);,案例分析 交流提升,5,【例5】、输入一个一元二次方程ax2+bx+c=0的三个系数,求方程的两个根,根的计算公式,else,x1=(-b)/2*a;,printf(方程有两个相同的实根:);,printf(x1=x2%6.2f,x1);,else,p=(-b)/2*a;,q=sqrt(-d)/2*a;,printf(方程有两个不同的虚根:n);,printf(x1=%6.2f+%6.2f in,p,q);,printf(x1=%6.2f-%6.2f in,p,q);,【例6】,#includestdio.h,main(),char c;,printf(input a character:);,c=getchar();,if(c=0&c=A&c=a&c=z),printf(This is a small lettern);,else,printf(This is an other charactern);,案例分析 交流提升,6,仿,真演,练 体验探索,PART,04,1、以下程序运行后的输出结果是(),main(),int a=3,b=4,c=5,t=99;,if(ba,if(ac,printf(%d%d%dn,a,b,c);,仿,真演,练 体验探索,2,、当a=1,b=3,c=5,d=5时,执行下面的程序段后,x的值为(),if(ab),if(cd)x=1;,else,if(ac),if(bb),if(bc),printf(%d,d+1);,else,printf(%d,+d+1);,printf(%dn,d);,仿,真演,练 体验探索,有以下程序程序输出(),main(),int a=0,b=0,c=0,d=0;,if(a=1),b=1;c=2;,else,d=3;,printf(%d,%d,%d,%dn,a,b,c,d);,以下程序运行后的结果是(),main(),int a=1,b=2,c=3;,if(c=a),printf(%dn,c);,else,printf(%dn,b);,有以下程序执行后输出结果是(),main(),int n=0,m=1,x=2;,if(!n)x-=1;,if(m)x-=2;,if(x)x-=3;,printf(%dn,x);,仿,真演,练 体验探索,课后作业,自我提升,PART 05,【1】计算分数段,【3】输入一个字符,判断输入字符的种类(数字、字符、其他),【2】判断一个数是否既是2的倍数,又是3的倍数,【4】上机演练各程序,并写好实习报告,课后作业 自我提升,