您好,欢迎访问三七文档
if-else分支语句if分支语句条件分支的嵌套if-elseif分支语句switch开关分支语句第四章分支(选择)结构程序设计根据不同的条件,选择不同的程序块进行处理。主要有if语句和switch语句4.1引例1输入三角形的三条边长,求三角形面积。P38程序代码如下:#includestdio.h#includemath.hvoidmain(){floata,b,c,s,area;printf(”请输入三角形的三条边a,b,c:);scanf(%f,%f,%f,&a,&b,&c);/*判断能否构成三角形*/if(a+bc&&a+cb&&b+ca){/*条件成立,以下复合语句求面积并输出结果*/s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(a=%7.2fb=%7.2fc=%7.2f\n,a,b,c);printf(s=%7.2farea=%7.4f\n,s,area);}else/*条件不成立,输出相关信息*/printf(此三条边不能构成三角形!\n);}引例2例3-1有一个函数,定义如下:)0()0(0)(xxxxfyX0Y=0Y=XYN图1求函数值流程图程序代码如下:#includestdio.hvoidmain(){intx,y;printf(“Pleaseinputx:”);scanf(“%f”,&x);/*输入数据*/if(x0)/*对数据x进行判断*/y=0;/*如果x0,则执行y=0*/elsey=x;/*如果x≥0,则执行y=x*/printf(“y=%f\n”,y);/*输出函数值*/}4.2关系运算和逻辑运算4.2.1关系运算P19运算符====!=含义小于小于等于大于大于等于等于不等于优先级674.2.2逻辑运算对真和假两种状态的运算,结果仍为逻辑值运算符!&&||含义逻辑非逻辑与逻辑或优先级21112关系运算符低于算术运算符,高于赋值运算符;逻辑运算的真值表ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假特别注意:(1)a&&b&&c:若a为0,则值为0;(2)a||b||c:若a为1,则值为1。执行过程:先计算表达式的值,如果表达式的结果为真,则执行语句1。否则(表达式的结果为假),则执行语句2。表达式语句1假真1.if–else分支语句if(表达式)语句1;else语句2;一般形式:语句2例4.1输入一个整数,判断该数是奇数还是偶数。程序代码如下:#includestdio.hvoidmain(){intx;printf(“请输入:”)scanf(“%d”,&x);if(x%2==0)printf(“该数是偶数.\n”);elseprintf(“该数是奇数.\n”);}练习:输入一个整数,判断该数是奇数还是偶数。若是偶数,请同时输出该数是2的几倍。程序代码如下:#includestdio.hvoidmain(){intx;printf(“请输入:”)scanf(“%d”,&x);if(x%2==0)//当有多条语句时的使用{printf(“该数是偶数.\n”);printf(“该数是2的%d倍”,x/2);}elseprintf(“该数是奇数.\n”);}4.3if语句4.3.2if形式一般形式为:if(表达式)语句1;执行过程:先计算表达式的值,若表达式结果为“真”,则执行语句1;否则什么都不做,跳过语句1。表达式语句1假真例4.2输入一个字符,判断该字符是否为英文字母。程序代码如下:#includestdio.hvoidmain(){charch;printf(“\nPleaseinputch:”);scanf(“%c”,&ch);if(‘a’=ch&&ch=’z’||‘A’=ch&&ch=’Z’)printf(“Yes!\n”);}运行结果:Pleaseinputch:mYes!#includestdio.hmain(){}例:4.3若输入一个整数是非零数,则显示“OK!”。否则什么也不显示。inta;printf(“\nPleaseinputa:”);scanf(“%d”,&a);if(a)printf(“OK!”);练习:判断输入的数据是否介于0和100之间。如果该数不在此范围内,输出“Errorscore!”。如果该数在此范围内,不输出。注意:关系、逻辑表达式的使用s2假真e1e2e3s1s3s4假假真真4.3.3if语句的嵌套在If-else分支语句中还包括另外的其它if语句,则称为嵌套的if语句。其结构形式为:if(表达式1)if(表达式2)语句1;else语句2;elseif(表达式3)语句3;else语句4;内嵌if语句内嵌if语句注意:ifelse语句在语法上相当于一句话。例4.5任意输入三个整数,求其中最大的数。P52maxxxyYxzyzYNNNmaxzmaxymaxzY流程图一句话一句话例:4.6任意输入三个整数,求其中最大的数。P52#includestdio.hmain(){intx,y,z,max;printf(“\nPleaseinputx,y,z:”);scanf(“%d%d%d”,&x,&y,&z);if(x=y){if(xz)max=x;elsemax=z;}else{if(yz)max=y;elsemax=z;}printf(“\nmax=%d”,max);}因此,本程序中ifelse后面的{}加不加都可以.例4.7写程序,输入某年的年份,判断此年是否闰年。#includestdio.hvoidmain(){intyear,flag;printf(“\n请输入年份:”);scanf(%d,&year);if(year%4==0)if(year%100!=0)flag=1;elseif(year%400!=0)flag=0;elseflag=1;elseflag=0;if(flag)printf(“%d年是闰年.\n”,year);elseprintf(“%d年不是闰年.\n”,year);}能被4整除但不能被100整除的是闰年;能被100整除,又能被400整除的是闰年例4.8有一个函数,定义如下:)10x()010()0(0)(2xxxxxfy程序代码如下:#includestdio.hvoidmain(){floatx,y;scanf(“%f”,&x);if(x0)y=0;elseif(x=10)y=x;elsey=x*x;printf(“x=%f,y=%f”,x,y);}if(e1){if(e2)s1;}elseif(e3)s2;elses3;例如:注意:P51else子句不能作为语句单独使用,它必须与if配对使用。为使程序结构清晰、层次分明,常常采用程序行缩进的书写格式,if和其对应的else写在一列上。但,书写格式不能代替逻辑结构。if和else的配对关系。一个else总是与它上面距它最近的,并且没有其它else与其配对的if相配对。if(e1)if(e2)s1;else;elseif(e3)s2;elses3;必须有if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…….elseif(表达式n-1)语句n-1;else语句n;if-elseif结构是条件分支嵌套常用的一种形式,其一般形式为:4.3.4if-elseif分支语句表达式1语句1表达式2表达式n-1语句2语句n-1语句n真真真假假假if—elseif分支结构图例5:学生成绩分A、B、C、D、E五等。任给一个成绩,判断它属于哪一等,用if-elseif分支语句编程。P52#includestdio.hmain(){floatscore;printf(\nEnterascore:);scanf(%f,&score);if(score100)printf(ErrorData!);elseif(score=90)printf(A\n);elseif(score=80)printf(B\n);elseif(score=70)printf(C\n);elseif(score=60)printf(D\n);elseif(score=0)printf(E\n);elseprintf(ErrorData!);}//嵌套if——排他算法A=90,A.(90-100)。B=80,B.(80-89)。C=70,C.(70-79)。D=60,D.(60-69)。E=0,E.(0-59)。并列if语句:#includestdio.hmain(){floatscore;printf(\nEnterascore:);scanf(%f,&score);if(score100)printf(ErrorData!);if(score=90)printf(A\n);if(score=80)printf(B\n);if(score=70)printf(C\n);if(score=60)printf(D\n);if(score=0)printf(E\n);elseprintf(ErrorData!);}//并列if,无法排他,故必须通过条件加强来解决4.3.5条件运算符规律:当if的两个分支都给同一个变量赋值,可用条件表达式代替main(){charch;scanf(“%c”,&ch);ch=(ch=‘A’&&ch=‘Z’)?(ch+32):ch;printf(“%c\n”,ch);}例:max=(ab)?a:b相当于:if(ab)max=a;elsemax=b;#includestdio.hmain(){intx=10,y=7;inta,b,c;a=(--x==y++)?x:++y;b=x++;c=y;printf(%d%d%d,a,b,c);}例:求出下列程序中x,y,a,b,c的值x=10,y=9,a=9,b=9,c=94.4switch分支语句一般形式为:switch(表达式e){case常量表达式c1:语句1;[break;]case常量表达式c2:语句2;[break;]……case常量表达式cn:语句n;[break;][default:]语句n+1;[break;]}e=?=c1=c2……=cn=其他语句1break语句2break语句nbreak语句n+1break……switch分支结构图例观察程序执行过程。voidmain(){intx;scanf(“%d”,&x);switch(x){case1:printf(“goodmorning!\n”);case2:printf(“goodafternoon!\n”);break;case3:case4:printf(“goodnight!\n”);break;default:printf(“wrong!\n”);}}说明:1.switch后面括号内的表达式可以是整型、字符型或枚举类型。2.当表达式的值与某一个case后面的常量表达式值相等时,就执行此case后面的语句;若所有case后面的值没有与之相匹配的,就执行default后面的语句。3.多个case可以共用一组执行语句。且各个case的出现次序不影响执行结果。4.break语句使控制退出switch结构。例根据百分成绩,输出等级成绩ABCDE。用switch分支语句编程。main(){intc,grade;printf(inputgrade(0-100):);scanf(%d,&grade);if(grade100||grade0)printf(wronggrade\n);else{c=grade/10;switch(c){case6:printf(gradeD\n);break;case7:printf(gradeC\n);break;case8:printf(gr
本文标题:3C语言分支结构
链接地址:https://www.777doc.com/doc-2920062 .html