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

下载本文档

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

文档简介

第4章选择结构程序设计

本章主要内容4.1选择结构程序的引入4.2条件语句4.3开关语句4.4选择结构程序设计及实例【引例】求一元二次方程ax2+bx+c=0的根(包括实根或复根)。问题分析:本例需要根据一元二次方程ax2+bx+c=0中系数a、b、c的不同情况进行判断,选择不同的计算或处理方法。4.1选择结构程序的引入本例具体有下列几种情况:(1)a=0,b=0时,如果c=0,则方程为同义反复;否则(即c≠0),则方程为矛盾;(2)a=0,b≠0时,方程只有一个根为:x=-c/b;(3)a≠0时,方程有两个根:①d=b2-4ac=0时,有两个相等的实根:

②d=b2-4ac>0时,有两个不相等的实根:

③d=b2-4ac<0时,有两个不相等的复根:

4.1.1问题与引例选择结构就是对给定条件进行判断,从而选择执行不同的执行分支。条件的表示通常是关系表达式,也可能是逻辑表达式或一般的算术表达式。选择结构实现的方法是采用条件语句和开关选择语句。

4.1选择结构程序的引入4.1.2选择结构的基本概念4.2条件语句条件语句if是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的操作,有三种形式:单分支结构双分支结构多分支选择结构4.2.1单分支结构1.语法格式

if(条件)语句;2.说明(1)执行过程:

当条件为“真”时,执行语句;为“假”时,跳过语句,而直接执行整个if语句后的其它语句。(2)条件中的结果为逻辑值。(3)语句如果有多条语句,要用一对花括号“{}”将其括起来,构成为一个复合语句。#include<stdio.h>voidmain(){floata;printf("pleaseinputthescore:");scanf("%f",&a);if(a>=60&&a<=100)printf("pass\n");}【例】从键盘输入学生成绩并判断是否及格,若及格输出“pass”。单分支结构控制流程单分支结构举例

【例4.1】比较a、b两个数的大小,将较大数赋给max。方法1:#include<stdio.h>voidmain(){ inta,b,max; a=1;b=2;

if(a>b)max=a; if(a<=b)max=b; printf("%d",max);}该法思路较明确,接近我们平常的思维模式。方法2:#include<stdio.h>voidmain(){ inta,b,max; a=1;b=2;

max=a; if(a<=b)max=b; printf("%d",max);}该法的思路是:假设max=a,判断if后的条件,如果a<b,则执行max=b,输出的max为b的值;如果a>b,则跳过max=b,直接输出max为a的值。单分支结构举例

4.2.2双分支结构1.语法格式if(条件)语句1else语句22.说明(1)执行过程:当条件为“真”时,执行语句1;为“假”时,执行语句2。(2)语句1和语句2都可为复合语句。双分支结构的执行

【例】从键盘输入两个整数,输出其中最大者。#include<stdio.h>voidmain(){inta,b;printf("inputthetwonumbers:");scanf("%d,%d",&a,&b);if(a>b)printf("max=%d\n",a);elseprintf("max=%d\n",b);}

单行书写多行书写有缩进if(a>b)max=a;elsemax=b;if(a>b)max=a;elsemax=b;if(a>b)max=a;elsemax=b;推荐写法,这样层次结构更清晰双分支结构的书写

C语言书写形式比较自由。可写在一行,也可写在多行。一般为了认读方便,特别是语句较多时,会分多行书写,还会有缩进,以体现语句结构。双分支结构语句可写成下面3种形式:【例4.2】编制程序求一个数的绝对值。#include<stdio.h>voidmain(){intx,y;printf("输入一个数:");scanf("%d",&x);//输入xif(x>=0)

//双分支结构

y=x;//x>=0时,把x赋给yelsey=-x;//x<0时,把-x赋给y

printf("|%d|=%d\n",x,y);//输出x,y}4.2.3多分支结构1.语法格式if(条件1)语句1elseif(条件2)语句2elseif(条件3)语句3……elseif(条件n)语句nelse语句n+12.执行过程当条件1成立时,执行语句1;当条件1不成立时判断条件2;当条件2成立时,执行语句2;当条件2不成立时判断条件3;以此类推;如果一直到条件n都不成立就执行语句n+1。

4.2.3多分支结构注意:条件的判断有层级关系,是在前面条件不成立的情况下才会判断后面的条件,比如当条件1成立后,执行语句1,然后就直接跳出if语句,执行后面的其它程序语句了,条件2、3等根本就不会被执行到。【例4.3】根据考试的百分制成绩输出相应的等级。设成绩90至100分为“优秀”,80至89分为“良好”,70至79分为“中等”,60至69分为“及格”,60分以下为“不及格”。#include<stdio.h>voidmain(){intg;printf("请输入一个百分制成绩:");scanf("%d",&g);//输入一个成绩if(g>=90)输入一个百分制成绩

printf("成绩为优秀\n");//成绩大于或等于90elseif(g>=80)printf("成绩为良好\n");//成绩小于90且大于或等于80elseif(g>=70)printf("成绩为中等\n");//成绩小于80且大于或等于70elseif(g>=60)printf("成绩为及格\n");//成绩小于70且大于或等于60elseprintf("成绩为不及格\n");//成绩小于60}【例4.4】从键盘输入一个字符,并根据输入字符的ASCII码来判别其类型。#include<stdio.h>voidmain(){charc;printf("请输入一个字符:");c=getchar();//输入一个字符if(c<32)printf("这是一个控制字符\n");//ASCII码小于32elseif(c>='0'&&c<='9')printf(“这是一个数字\n”);

//字符大于或等于'0'且小于或等于'9'elseif(c>='A'&&c<='Z')printf("这是一个大写字母\n");//字符大于或等于'A'且小于或等于'Z'elseif(c>='a'&&c<='z')printf("这是一个小写字母\n");//字符大于或等于'a'且小于或等于'z'elseprintf("这是一个其它字符\n");//以上四种情况都不是}4.2.4条件语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。1.语法格式if(条件) 内嵌if语句else

内嵌if语句可为if语句3中基本形式的任意一种可为if语句3中基本形式的任意一种2.说明(1)内嵌形式“内嵌的if语句”可以为前面讲的三种基本形式(单分支、双分支、多分支)中的任意一种。(2)配对关系if语句的嵌套形式中,可能会出现多个if和多个else重叠的情况,这时要特别注意if和else的配对问题。C语言规定:else总是与它前面最近的还没有配对的if配对。

4.2.4条件语句的嵌套条件语句嵌套形式比较如果没有任何缩进,应准确判断出if和else的配对关系。比较下列正确的嵌套形式和错误的嵌套形式。

原型嵌套:正确理解嵌套:错误理解m=0;if(a<b)if(a<c)m=10;Elsem=20;printf("m=%d",m);m=0;

if(a<b)

{if(a<c)

m=10;

else

m=20;}printf("m=%d",m);m=0;

if(a<b)

{if(a<c)

m=10;}

else

m=20;

printf("m=%d",m);当a=2;b=1;c=3;时,结果:m=0当a=2;b=1;c=3;时,结果:m=0当a=2;b=1;c=3;时,结果:m=20当a=2;b=3;c=1;时,结果:m=20当a=2;b=3;c=1;时,结果:m=20当a=2;b=3;c=1;时,结果:m=0当a=1;b=2;c=3;时,结果:m=10当a=1;b=2;c=3;时,结果:m=10当a=1;b=2;c=3;时,结果:m=10【例4.5】比较两个数的大小关系。#include<stdio.h>voidmain(){inta,b;printf("请输入a,b:");scanf("%d,%d",&a,&b);//输入a、b的值

if(a!=b)//在if与else之间嵌套一个双分支结构

if(a>b)printf("a大于b\n");//a不等于b时,a大于belseprintf("a小于b\n");//a不等于b时,a小于belseprintf("a等于b\n");//a不等于b条件不成立时,即a等于b}1.在三种形式的if语句中,在if关键字之后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。

main(){inta=2,b=3;if(a=b)printf("%d",a);

if(3)printf("OK");if(’a’)printf("%d",’a’);}3OK974.2.5条件语句使用注意点2.在if语句中,条件判断表达式必须用括号括起,在语句之后必须加分号。3.在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用“{}”括起来组成一个复合语句。但要注意的是在“}”之后不能再加分号。例如:

if(a>b){a++;b++;}else{a=0;b=10;}4.2.5条件语句使用注意点4.3.1开关语句的一般形式4.3开关语句switch(表达式){case常量表达式1:[语句序列1];[break;]case常量表达式2:[语句序列2];[break;]…case常量表达式n:[语句序列n];[break;][default:语句序列]}

首先计算switch后面表达式的值,然后进行判断:当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句;如果遇到break语句,就结束整个switch语句;若所有的case中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。4.3.2开关语句的执行4.3开关语句(1)switch后括号内的表达式,为任意复合C语言语法规则的表达式,但其值只能是整型或字符型。(2)每个case只能列举一个整型常量或一个字符常量。(3)每个case后的常量表达式的值必须互不相同,否则就会出现互相矛盾的现象。(4)语句执行时碰到break才会停止,否则从执行处接着往后执行,不会再判断条件。(5)“default”和各个“case”出现的次序不影响执行结果;如果不需要,default可省略不写。4.3开关语句开关语句的使用注意点【例4.6】根据学生考试成绩的等级输出相应的百分制分数段。算法分析:

设学生的考试成绩分为五个等级。等级A表示90~100分,等级B表示80~89分,等级C表示70~79分,等级D表示60~69分,等级E表示0~59分。本例共有5种情况,使用switch语句实现很方便。4.4选择结构程序设计及举例#include<stdio.h>voidmain(){charg;printf("请输入学生考试成绩的等级:");scanf("%c",&g);//输入一个考试成绩的等级

switch(g){case'A'://考试成绩的等级为'A'时printf("90~100分\n");case'B'://考试成绩的等级为'B'时printf("80~89分\n");case'C'://考试成绩的等级为'C'时printf("70~79分\n");case'D'://考试成绩的等级为'D'时printf("60~69分\n");default://考试成绩的等级不为'A'、'B'、'C'、'D'、时

printf("60分以下\n");

}}break;break;break;break;【例4.7】输入一个1~7之间的数字,输出这个数字是对应的星期几。#include<stdio.h>voidmain(){inta;printf("输入一个整数:");scanf("%d",&a);//输入一个整数switch(a){ case1:printf("星期一\n");break;//a的值为1时 case2:printf("星期二\n");break;//a的值为2时 case3:printf("星期三\n");break;//a的值为3时 case4:printf("星期四\n");break;//a的值为4时 case5:printf("星期五\n");break;//a的值为5时 case6:printf("星期六\n");break;//a的值为6时 case7:printf("星期日\n");break;//a的值为7时 default:printf(“输入错误!\n”);//以上七种情况都不是}}

break:跳出swi

温馨提示

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

评论

0/150

提交评论