第4章 选择结构程序设计_第1页
第4章 选择结构程序设计_第2页
第4章 选择结构程序设计_第3页
第4章 选择结构程序设计_第4页
第4章 选择结构程序设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第4章选择结构程序设计基本问题1.选择结构是结构化程序设计的三种基本结构之一。2.选择结构程序就是根据条件,选择程序若干个流向中的一个执行,因此它也被称为分支结构。3.C语言选择结构中的“条件”实际上是一个表达式,它可以是算术表达式、关系表达式、逻辑表达式等,所有可以求值的表达式都是允许的。4.程序执行的流向是根据表达式的值是0还是非0来决定的。非0代表条件成立,0代表条件不成立。4.1if语句一、if语句的三种基本形式1.形式之一(单分支结构形式)(1)格式

if(条件)语句;后续语句;(2)功能:如果条件满足(表达式值为非0),则执行内嵌语句,之后执行if结构的后续语句;如果条件不成立(表达式的值为0),则内嵌语句不执行,直接执行后续语句。(3)说明:作为条件的表达式可以是能求值的各种类型的表达式;if的内嵌语句可以是一条语句,也可以是多条语句,但注意如果是2条以上语句,则多条语句必须加一对{}构成复合语句。if结构是一个不可分隔的整体,后续语句是指if结构之后的第1条语句。(4)举例分析例1:编制一个程序,其功能是输入一个字符,如果是字母则输出"yes",否则无输出。#include<stdio.h>voidmain(){charc;c=getchar();if(c>='A'&&c<='Z'||c>='a'&&c<='z') printf("Yes");}例2:编制一个程序,其功能是输入2个整数,如果第1个数比第2个数小,则交换这2个数,并输出这2个数。#include<stdio.h>voidmain(){inta,b,t;scanf("%d%d",&a,&b);if(a<b){ t=a; a=b;b=t;}printf("%d,%d",a,b);}2.形式之二(双分支结构形式)(1)格式

if(条件)语句1;

else

语句2;后续语句;(2)功能:如果条件满足(表达式值为非0),则执行语句1,之后执行if结构的后续语句;如果条件不成立(表达式的值为0),则执行语句2,之后执行后续语句。(3)说明:作为条件的表达式可以是能求值的各种类型的表达式;if的内嵌语句可以是一条语句,也可以是多条语句,但注意如果是2条以上语句,则多条语句必须加一对{}构成复合语句。if结构是一个不可分隔的整体,后续语句是指if结构之后的第1条语句。(4)举例分析例3:编制一个程序,其功能是输入一个字符,如果是字母则输出"Yes!",否则输出"No!"。#include<stdio.h>voidmain(){charc;c=getchar();if(c>='A'&&c<='Z'||c>='a'&&c<='z') printf("Yes");elseprintf(“No");}例4:有一函数编程输入x的值,计算并输出y的值。#include<stdio.h>voidmain(){intx,y;scanf("%d",&x);if(x<0) y=x*x+5;elsey=5*x;printf("x=%d,y=%d",x,y);}(x<0)(x≥0)简单的双分支结构也可以用条件运算符表达式实现。例如输入两个整数,把其中的大数赋值给max变量。if(a>b)max=a;elsemax=b;可以改写为:

max=(a>b?a:b);3.形式之三(多分支结构形式)(1)格式:if(表达式1)

语句1;elseif(表达式2)

语句2;elseif(表达式3)

语句3;

……else

语句n+1;(2)功能:依次去对各个条件进行判断测试,当满足某一个条件i,则执行相应的语句i,若一个条件都不满足,执行else后面的语句,之后均执行if结构的后续语句。(3)说明:在这种结构中,语句1~语句n+1任何时候只执行一个语句。如果没有语句n+1,则最后一个else可省略,这种情况下,if结构中若一个条件也不满足,则相当于不执行任何操作。例5:编写一个通用程序,求解方程ax2+bx+c=0的根。算法分析:通用程序应能求解任意一元二次方程,方程系数a,b,c应从键盘输入。另外必须考虑以下各种可能的情况。(1)a=0,b=0,c=0时,方程有无数解。(2)a=0,b=0,c≠0时,方程无解。(3)a=0,b≠0时,方程有一个单根。(4)a≠0,b2-4ac>0时,方程有两个不等实根。(5)a≠0,b2-4ac=0时,方程有两个等实根。(6)a≠0,b2-4ac>0时,方程有两个复数根。4.if语句的嵌套形式(1)if语句的嵌套所谓if语句嵌套就是在一个if结构中,如果<语句>处出现的又是一个if语句,就把它称为if嵌套。(2)结构形式:if(表达式) if(表达式11)

语句1;

else

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

语句3;

else

语句4;(3)说明:当if结构出现嵌套时,应该以缩进格式书写,以提高程序的可读性和美观性;

if(a>0)if(b>0)

x=1; else x=2;elsex=0;内、外层的if语句都可以是三种基本形式中的任意一种。else子句总是与它前面最近的、尚未配对的if子句进行配对。if(a==b)if(b==c)

printf("a=b=c\n");else

printf("b!=c\n");如果if子句和else子句数目不一样,可以加大括号{}来确保配对关系。if(a==b)

{if(b==c)

printf("a=b=c\n");}else

printf("b!=c\n");例6:计算退休工资。男职工60岁退休工资3000元,60岁之前退休工资2500;女职工55岁退休工资2900元,55岁之前退休2400工资。if(sex=='M') if(age>=60) salary=3000; else salary=2500;else if(age>=55) salary=2900; else salary=2400;4.3switch语句1.switch语句的作用

switch语句是多分支选择语句,用它将更简单、方便地实现多路选择结构。2.语句格式:switch(表达式){case常量表达式1:语句1;

case常量表达式2:语句2;

……

case常量表达式n:语句n;

default:语句n+1;

}

3.执行过程:多路分支选择取决于“表达式”的特定值。当表达式的值和某个case后面的“常量表达式”的值相同时,程序就从这个case后边的“语句i”开始执行,然后接着一个个执行其下面的全部case后面的语句。4.使用说明(1)switch后面的“表达式”可以是任何类型的表达式,在与常量表达式比较时被自动取整。(2)常量表达式是由常量或符号常量组成的常量表达式(不允许出现变量)。每个常量表达式的值必须互不相同,否则程序执行的流程会产生矛盾。(3)如果有default项,那么在与所有case情况都不匹配时,程序将执行语句n+1。(4)case后面的常量表达式,仅起入口标号的作用,一旦匹配,由此进入,在执行有关语句后,马上继续执行下面的所有case后面的语句,而不再判别是否与别的case匹配,这一点要特别注意。switch(x){case1:语句1;

case2:语句2;

……

casen:语句n;

default:语句n+1;

}

(5)对于多分支程序,我们希望在执行完某一符合要求的case后面的语句后,使程序流程退出switch结构,解决的办法是使用break(中断)语句。switch(x){case1:语句1;break;

case2:语句2;break;

……

casen:语句n;break;

default:语句n+1; }break语句的作用是终止switch语句的执行,使流程跳出switch结构,去执行switch结构的后续语句。(6)case后面可以有两个以上的执行语句,会被顺序执行,而且允许不加大括号{}。(7)多个case可以共用一组执行语句,如:

case'a':case'b':case'c':printf(">60\n");break;

当表达式等于‘a’,‘b’,‘c’时,均执行print语句。例7:用switch语句编写一个可以完成任意两个数进行+-*/四则运算的程序。floatx,y;charc; scanf("%f%c%f",&x,&c,&y); switch(c) { case'+':printf("%.2f%c%.2f=%.2f\n",x,c,y,x+y);break; case'-':printf("%.2f%c%.2f=%.2f\n",x,c,y,x-y);break; case'*':printf("%.2f%c%.2f=%.2f\n",x,c,y,x*y);break; case'/': if(y!=0)printf("%.2f%c%.2f=%.2f\n",x,c,y,x+y); elseprintf("除数不能为0"); break; default:printf("%c不是合法运算符",c); }例8:用switch语句编写程序,对输入的百分制的学生成绩,判别所属等级’A’,’B’,’C’,’D’,’E’。90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。【分析】switch后面的表达式如何确定。如果百分制成绩存于score变量中,那么可以用score/10作为表达式。

floatscore;

scanf("%f",&score); switch((int)score/10) { case10: case9:printf("等级为:A\n");break; case8:printf("等级为:B\n");break; case7:printf("等级为:C\n");break; case6:printf("等级为:D\n");break;

default:printf("等级为:E\n"); }例:读程序,给出运行结果#include<stdio.h>voidmain(){ inti=0,x; scanf("%d",&x); switch(x) { case1:i+=1; case2:i+=2; case3:i+=3; } printf("%d",i); }若输入:1输出为6若输入:2输出为5

温馨提示

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

评论

0/150

提交评论