C语言(分支结构)_第1页
C语言(分支结构)_第2页
C语言(分支结构)_第3页
C语言(分支结构)_第4页
C语言(分支结构)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

if-else分支语句

if分支语句

条件分支的嵌套

if-elseif分支语句

switch开关分支语句第三章分支(选择)结构程序设计根据不同的条件,选择不同的程序块进行处理。主要有if语句和switch语句3.1引例例3-2输入三角形的三条边长,求三角形面积。P30程序代码如下:#include<stdio.h>#include<math.h>voidmain(){floata,b,c,s,area;

printf(”请输入三角形的三条边a,b,c:");

scanf("%f,%f,%f",&a,&b,&c);/*判断能否构成三角形*/

if(a+b>c&&a+c>b&&b+c>a)

{/*条件成立,以下复合语句求面积并输出结果*/ 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"); }

3.1引例P29例3-1有一个函数,定义如下:X<0Y=0Y=XYN图3-1求函数值流程图程序代码如下:#include<stdio.h>voidmain(){

int

x,y;

printf(“Pleaseinputx:”);

scanf(“%f”,&x); /*输入数据*/

if(x<0) /*对数据x进行判断*/

y=0; /*如果x<0,则执行y=0*/

else

y=x; /*如果x≥0,则执行y=x*/

printf(“y=%f\n”,y);/*输出函数值*/}3.2 关系运算和逻辑运算3.2.1关系运算P30运算符<<=>>===!=含义小于小于等于大于大于等于等于不等于优先级673.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例3-3输入一个整数,判断该数是奇数还是偶数。P32程序代码如下:#include<stdio.h>voidmain(){

intx;

printf(“请输入:”)

scanf(“%d”,&x);if(x%2==0)

printf(“该数是偶数.\n”);else

printf(“该数是奇数.\n”);}练习:输入一个整数,判断该数是奇数还是偶数。若是偶数,请同时输出该数是2的几倍。程序代码如下:#include<stdio.h>voidmain(){

intx;

printf(“请输入:”)

scanf(“%d”,&x);if(x%2==0)

//当有多条语句时的使用

{

printf(“该数是偶数.\n”);

printf(“该数是2的%d倍”,x/2);}else

printf(“该数是奇数.\n”);}3.3if语句3.3.2if形式一般形式为:if(表达式) 语句1;执行过程:

先计算表达式的值,若表达式结果为“真”,则执行语句1;否则什么都不做,跳过语句1。表达式语句1假真例3-6输入一个字符,判断该字符是否为英文字母。P34程序代码如下:#include<stdio.h>voidmain(){charch;

printf(“\nPleaseinputch:”);

scanf(“%c”,&ch);if(‘a’<=ch&&ch<=’z’||‘A’<=ch&&ch<=’Z’)

printf(“Yes!\n”);}运行结果:Pleaseinputch:mYes!#include<stdio.h>main(){}例:3-7若输入一个整数是非零数,则显示“OK!”。否则什么也不显示。P34

inta;

printf(“\nPleaseinputa:”);

scanf(“%d”,&a);if(a)

printf(“OK!”);练习3-3:判断输入的数据是否介于0和100之间。如果该数不在此范围内,输出“Errorscore!”。如果该数在此范围内,不输出。

注意:关系、逻辑表达式的使用s2假真e1e2e3s1s3s4假假真真3.3.3if语句的嵌套在If-else分支语句中还包括另外的其它if语句,则称为嵌套的if语句。其结构形式为:

if(表达式1)

if(表达式2)语句1;

else语句2;else if(表达式3)语句3;

else语句4;内嵌if语句内嵌if语句注意:ifelse语句在语法上相当于一句话。例3-8任意输入三个整数,求其中最大的数。P35

maxxx>yYx>zy>zYNNNmaxzmaxymaxzY流程图一句话一句话例:3-8任意输入三个整数,求其中最大的数。P35#include<stdio.h>main(){intx,y,z,max;

printf(“\nPleaseinputx,y,z:”);

scanf(“%d%d%d”,&x,&y,&z);if(x>=y){if(x>z)max=x;elsemax=z;}else{if(y>z)max=y;elsemax=z;}

printf(“\nmax=%d”,max);}因此,本程序中ifelse后面的{}加不加都可以.例3-9写程序,输入某年的年份,判断此年是否闰年。#include<stdio.h>voidmain(){

int

year,flag;

printf(“\n

请输入年份:”);scanf("%d",&year);

if(year%4==0)

if(year%100!=0)

flag=1;

else

if

(year%400!=0)

flag=0;

else

flag=1;

else

flag=0;

if(flag) printf(“%d

年是闰年.\n”,year);

else

printf(“%d

年不是闰年.\n”,year);}能被4整除但不能被100整除的是闰年;能被100整除,又能被400整除的是闰年例3-10有一个函数,定义如下:程序代码如下:#include<stdio.h>voidmain(){

floatx,y;scanf(“%f”,&x);

if(x<0) y=0;

else if(x<=10) y=x; elsey=x*x;printf(“x=%f,y=%f”,x,y);}if(e1){if(e2)s1;}elseif(e3)s2;elses3;例如:注意:P37else子句不能作为语句单独使用,它必须与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结构是条件分支嵌套常用的一种形式,其一般形式为:3.3.4if-elseif分支语句表达式1语句1表达式2表达式n-1语句2语句n-1语句n真真真假假假if—elseif分支结构图例5:学生成绩分A、B、C、D、E五等。任给一个成绩,

判断它属于哪一等,用if-elseif分支语句编程。P41#include<stdio.h>main(){floatscore;

printf("\nEnterascore:");

scanf("%f",&score);

if(score>100)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");

else

printf("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语句:#include<stdio.h>main(){floatscore;

printf("\nEnterascore:");

scanf("%f",&score);

if(score>100)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");

else

printf("ErrorData!");}//并列if,无法排他,故必须通过条件加强来解决3.3.5条件运算符

P39规律:当if的两个分支都给同一个变量赋值,可用条件表达式代替main(){charch;scanf(“%c”,&ch);

ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;

printf(“%c\n”,ch);}例:max=(a>b)?a:b

相当于:if(a>b) max=a; else max=b;#include<stdio.h>main(){

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=93.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分支结构图例3-13观察程序执行过程。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结构。例3-14根据百分成绩,输出等级成绩ABCDE。用switch分支语句编程。main(){intc,grade;

printf("inputgrade(0-100):");

scanf("%d",&grade);

if(grade>100||grade<0)printf("wronggrade\n");else{ c=grade/10;switch(c){case6:printf("gradeD\n");break;case7:printf("gradeC\n");break;case8:printf("gradeB\n”);break;case9:printf("gradeA\n");break;case10:printf("gradeA\n");break;default:printf(“gradeE\n”);break;}}}switch(grade/10)例3-15编写一个实现两个操作数四则运算的程序。

#include<stdio.h>voidmain(){

inta,b,c;

charop; printf("请输入操作数和操作符:"); scanf("%d%c%d",&a,&op,&b);

switch(op)

{ case'+':c=a+b;break; case'-':c=a-b;break;

case'*':c=a*b;break;

case'/':if(b!=0)c=a/b;break;

default:printf("操作符错误!\n");break;

} printf(“%d%c%d=%d\n”,a,op,b,c);}//问题:当走default分支时,不应该输出结果#include<stdio.h>voidmain(){int

a,b,c;charop;

scanf(“%d%d”,&a,&b);

printf(“*****************************************\n”);

printf(“*请输入选项代码(0-4)*\n”);

printf(“* 1——加法*\n”);

printf(“* 2——减法*\n”);

printf(“* 3——乘法*\n”);

printf(“* 4——除法*\n”);

printf(“* 0——退出*\n”);

printf(“*****************************************\n”);op=getchar();

switch(op){case‘1’:c=a+b;printf(“%d+%d=%d\n”,a,b,c);break;case‘2’:c=a-b;printf(“%d-%d=%d\n”,a,b,c);break;case‘3’:c=a*b;printf(“%d*%d=%d\n”,a,b,c);break;case‘4’:if(b!=0){c=a/b;printf(“%d/%d=%d\n”,a,b,c);}break;case‘0’:break;

default:break; }}菜单方式:P42//有问题办法:1.前面加一个getchar(),读取缓冲区2.换op=getche();或op=getch();需(#include<conio.h>)练习:1读下面的程序,写出程序的输出结果。main(){inta=2,b=7,c=5;switch(a>0){case1:switch(b<0){case1:printf(“@”);break;

case0:printf(“!”);break;

default:printf(“+”);break;}break;

case0:switch(c==5)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论