第4章 选择结构程序设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 选择结构程序设计 4.1 if语句
【学习目标】 (1) 掌握if语句的语句格式与应用 (2) 掌握复合if语句的语句格式与应用 (3) 掌握条件运算符的用法
实例13 if语句——根据条件确定公司是否已经为司机投保
【实例任务】 如果司机满足下列条件之一,公司则为他们投保。这三个条件是: (1)司机已婚。(2) 司机为30岁以上的未婚男性。(3)司机为25岁 以上的未婚女性。如果以上条件一个也不满足,则公司不为司机投保。 请编写一个程序,根据用户输入司机的婚姻状态、性别和年龄,判断该 司机是否已投保。运行结果如图4-1所示。
4.多分支选择if语句 多分支选择if语句的形式为: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; ……… else if(表达式n) 语句n; else 语句n+1; 其语句是,依次判断表达式的值,当出现某个值为真时,则执行其对 应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式 均为假,则执行语句n+1。然后继续执行后续程序。 实际上第三种if语句是第二种语句的嵌套形式。我们可以把第一个 判断的else部分看成是一个内嵌语句,它本身是一个语句,而且可以依 次类推,即可写成: if(表达式1) 语句1; else{if(表达式2) 语句2; else{if (表达式3) 语句3; ……… else{if (表达式n) 语句n; else 语句n+1;}…}} 关于这三种形式的语句的使用,有几点请注意: (1)if之后的条件,必须以“(表达式)”的形式出现,即括号不可 少,而表达式可为任意表达式,可以是关系表达式或逻辑表达式,也可 以为其他表达式。 (2)在后两种if语句中,有多个内嵌语句,每个内嵌语句都必须 以“;”结束。 (3)三种形式的if语句中内嵌语句处只能有一个语句。如果要用n个 语句,则必须使用{}将它们组成一个复合语句。 5. if语句的嵌套 在if语句中又内嵌if语句则称为语句的嵌套。前面已说明,多分支选 择if语句本身就可看成为if语句的嵌套形式。其一般形式为: if () if () 语句1; /*内嵌if语句*/ else 语句2; else if 语句3; /*内嵌if语句*/
实例14 switch语句——计算长方形、圆形、和三角形的面 积
【实例任务】 编写一个程序,用于计算长方形、圆形和三角形的面积。根据用户 的选择要能计算相应形状的面积。程序的运行结果如图4-4所示。
图4-4程序运行结果 【程序代码】 #include "stdio.h" #define PI 3.14 main() { float radius,length,breadth,height,base; double area; int choice; printf("\n\t形状的类型\n"); printf("\n\t1.长方形\n"); printf("\t2.圆形\n"); printf("\t3.三角形\n"); printf("\t4.退出\n"); printf("\n\t 请输入选项(1/2/3/4):"); scanf("%d",&choice); switch(choice) { case 1: printf("\n请输入长方形的详细信息"); printf("\n 长为 :");
图4-5 程序运行结果 根据程序运行结果,请将下面程序补充完整并调试。 #include "stdio.h" main() { int g; printf ("请输入成绩为:");
else 语句4; 在使用内嵌if语句时,要注意if和else的配对,因为if语句的第一种形式 中只有if没有else。C语言在编译源程序时总是将else与它前面最近的if配 对。 6.条件表达式构成的选择结构 C语言另外还提供了一个特殊的运算符——条件运算符,由此构成 的表达式也可以形成简单的选择结构,这种选择结构能以表达式的形式 内嵌在允许出现表达式的地方,使得可以根据不同的条件使用不同的数 据参与运算。它的运算符符号是“?:”。这使C语言提供的唯一的三目 运算符,即要求有三个运算对象。它的表达式形式如下: 表达式1?表达式2:表达式3 条件表达式的运算功能,当“表达式1”的值为非零时,“表达式2”的 值就是整个条件表达式的值;当“表达式1”的值为零时,“表达式3”的值 作为整个条件表达式的值。此运算符优先于赋值运算符,但低于关系运 算符与算术运算符。例如有如下表达式: y=x>10?100:200 首先要求出条件表达式的值,然后赋给y。在条件表达式中,要先 求出x>10的值。若x大于10,取100作为表达式的值并赋予变量y;若x小 于或等于10,则取200作为表达式的值并赋予变量y。 【课堂精练】 1.输入三个实数,按从小到大顺序输出。程序运行结果如图4-2所示。
图4-1运行结果 【程序代码】 #include "stdio.h" main() {char gender,ms;
Βιβλιοθήκη Baidu
int age; /*接受司机的详细信息*/ printf("\n\n\t司机的详细信息\n\n"); printf("\n\t司机的婚姻状况(y/n):"); scanf("\n%c",&ms); printf("\n\t司机的性别(M/F):"); scanf("%d",&age); /* 多重 if 结构 */ if (ms=='Y'||ms=='y') /*检查司机的婚姻状况*/ printf("\n\t该司机已投保\n"); else if((gender=='M'||gender=='m')&&(age>30)) /*如果未婚,检查是否是30岁以上的男性 */ printf("\n\t该司机已投保\n"); else if((gender=='F'||gender=='f'&&age>25)) /* 检查是否是25岁以上的女性*/ printf("\n\t该司机已投保\n"); else printf("\n\t该司机已投保\n"); getch(); } 【相关知识】 1.选择结构程序设计 选择结构又称分支结构,有二分支或多分支结构。这种结构根据条 件判断结果,选择执行不同的程序分支。选择结构是程序的基本结构之 一,几乎所有程序都包含选择结构。C语言中可以用两种控制语句来实 现程序的分支控制,即if语句和switch语句。用它们均可构成选择结构。 2.单分支选择if语句 单分支选择if语句的形式为: if(表达式)语句; 执行过程,先判断表达式的值,如果成立,则行后面的语句。否则什 么也不执行。 3.双分支选择if语句 双分支选择if语句的形式为: if(表达式)语句l; else 语句2; 这个条件语句的执行过程,先判断表达式的值,如果成立,执行语 句1,如果不成立,执行语句2。
scanf("%f",&length); printf("\n 宽为 :"); scanf("%f",&breadth); area=length * breadth; printf("\n 该长方形的面积为 %7.2f\n",area); break; case 2: printf("\n请输入圆形的详细信息"); printf("\n 半径为 :"); scanf("%f",&radius); area=PI *radius*radius; printf("\n该圆形的面积为%7.2f\n",area); break; case 3:printf("\n请输入三角形的详细信息"); printf("\n 高为 :"); scanf("%f",&height); printf("\n 底边为 :"); scanf("%f",&base); area=0.5*height*base; printf("\n该三角形为%7.2f\n",area); break; case 4: printf("\n退出程序\n"); break; default:printf("\n 选项错误\n"); } getch(); } 【相关知识】 1.switch语句以及用switch语句和break语句构成的选择结构 switch语句是一种多分支选择结构,语句形式如下: switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; …… case 常量表达式n:语句n; default :语句n+1;} switch语句是C语言的关键字,switch后面用花括号括起来的部分称 为switch语句体。紧跟在switch 后一对圆括号中的表达式可以是整型表
_________________________________________ else printf("B"); } else { if(tall>=172) printf("A"); else printf("B"); } getch(); }
4.2 switch语句
【学习目标】 (1)掌握switch语句的语句格式与应用 (2)掌握switch语句中break语句的用法
达式及后面将要学习的字符型表达式。表达式两边的一对括号不能省 略。 case 也是关键字,与其后面的常量表达式合称 case 语句标号。常 量表达式的类型必须与switch 后面圆括号中的表达式类型相同,各case 语句标号的值应该互不相同。case语句标号后的语句1,语句2等,可以 使一条语句,也可以是若干语句。必要时,case语句标号后的语句可以 省略不写。 default 也是关键字,起标号的作用,代表所有case 标号之外的那些 标号。default 标号可以出现在语句体中任何标号位置上。在switch语句 中也可以没有default 标号。 在关键字case 和常量表达式之间一定要有空格,例如case 10:不能写成 case10:。 2.switch语句的执行过程 当执行switch语句时,首先计算紧跟其后一对括号中的表达式的 值,然后在switch语句体内寻找与该值吻合的 case 标号。如果有与该值 相等的标号,则执行该标号后开始的各语句,包括在其后的所有case 和 default 中的语句,直到switch语句体结束;如果没有与该值相等标号, 并且存在default 标号,则从 default 标号后的语句开始执行,直到switch 语句体结束;如果没有与该值相等的标号,同时又没有default 标号,则 跳过switch语句体,执行之后的语句。 【课堂精练】 1.根据输入的成绩段,输出成绩的等级。程序运行结果如图4-5所示。
图4-2 程序的运行结果 根据程序的运行结果,请将下面程序补充完整并调试。 #include "stdio.h" main()
{ float a,b,c,t; printf("请输入三个数 a,b and c:\n"); scanf ("%f%f%f",&a,&b,&c); printf("输入的三个数为:"); printf ("%6.2f,%6.2f,%6.2f\n",a,b,c); if(a>b) {t=a;a=b;b=t;} if(a>c) ___________________________________ if(b>c) {t=b;b=c;c=t;} printf("排序后的三个数为:"); printf ("%6.2f,%6.2f,%6.2f\n",a,b,c); getch(); } 2.编程实现:根据性别sex和身高tall给某数据分类,如果sex为‘F’,当 tall>=150时,输出A,否则输出B;若sex不为‘F’,当tall>=172时,输出 A,否则输出B。程序的运行结果如图4-3所示。
图4-3 程序运行结果 根据程序运行结果,请将下面程序补充完整并调试。 #include "stdio.h" main() { int tall; char sex; printf(" 请输入性别和身高:"); scanf("%c%d",&sex,&tall); if (sex=='F') { if(tall>=150) /*内嵌if-else语句*/
【学习目标】 (1) 掌握if语句的语句格式与应用 (2) 掌握复合if语句的语句格式与应用 (3) 掌握条件运算符的用法
实例13 if语句——根据条件确定公司是否已经为司机投保
【实例任务】 如果司机满足下列条件之一,公司则为他们投保。这三个条件是: (1)司机已婚。(2) 司机为30岁以上的未婚男性。(3)司机为25岁 以上的未婚女性。如果以上条件一个也不满足,则公司不为司机投保。 请编写一个程序,根据用户输入司机的婚姻状态、性别和年龄,判断该 司机是否已投保。运行结果如图4-1所示。
4.多分支选择if语句 多分支选择if语句的形式为: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; ……… else if(表达式n) 语句n; else 语句n+1; 其语句是,依次判断表达式的值,当出现某个值为真时,则执行其对 应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式 均为假,则执行语句n+1。然后继续执行后续程序。 实际上第三种if语句是第二种语句的嵌套形式。我们可以把第一个 判断的else部分看成是一个内嵌语句,它本身是一个语句,而且可以依 次类推,即可写成: if(表达式1) 语句1; else{if(表达式2) 语句2; else{if (表达式3) 语句3; ……… else{if (表达式n) 语句n; else 语句n+1;}…}} 关于这三种形式的语句的使用,有几点请注意: (1)if之后的条件,必须以“(表达式)”的形式出现,即括号不可 少,而表达式可为任意表达式,可以是关系表达式或逻辑表达式,也可 以为其他表达式。 (2)在后两种if语句中,有多个内嵌语句,每个内嵌语句都必须 以“;”结束。 (3)三种形式的if语句中内嵌语句处只能有一个语句。如果要用n个 语句,则必须使用{}将它们组成一个复合语句。 5. if语句的嵌套 在if语句中又内嵌if语句则称为语句的嵌套。前面已说明,多分支选 择if语句本身就可看成为if语句的嵌套形式。其一般形式为: if () if () 语句1; /*内嵌if语句*/ else 语句2; else if 语句3; /*内嵌if语句*/
实例14 switch语句——计算长方形、圆形、和三角形的面 积
【实例任务】 编写一个程序,用于计算长方形、圆形和三角形的面积。根据用户 的选择要能计算相应形状的面积。程序的运行结果如图4-4所示。
图4-4程序运行结果 【程序代码】 #include "stdio.h" #define PI 3.14 main() { float radius,length,breadth,height,base; double area; int choice; printf("\n\t形状的类型\n"); printf("\n\t1.长方形\n"); printf("\t2.圆形\n"); printf("\t3.三角形\n"); printf("\t4.退出\n"); printf("\n\t 请输入选项(1/2/3/4):"); scanf("%d",&choice); switch(choice) { case 1: printf("\n请输入长方形的详细信息"); printf("\n 长为 :");
图4-5 程序运行结果 根据程序运行结果,请将下面程序补充完整并调试。 #include "stdio.h" main() { int g; printf ("请输入成绩为:");
else 语句4; 在使用内嵌if语句时,要注意if和else的配对,因为if语句的第一种形式 中只有if没有else。C语言在编译源程序时总是将else与它前面最近的if配 对。 6.条件表达式构成的选择结构 C语言另外还提供了一个特殊的运算符——条件运算符,由此构成 的表达式也可以形成简单的选择结构,这种选择结构能以表达式的形式 内嵌在允许出现表达式的地方,使得可以根据不同的条件使用不同的数 据参与运算。它的运算符符号是“?:”。这使C语言提供的唯一的三目 运算符,即要求有三个运算对象。它的表达式形式如下: 表达式1?表达式2:表达式3 条件表达式的运算功能,当“表达式1”的值为非零时,“表达式2”的 值就是整个条件表达式的值;当“表达式1”的值为零时,“表达式3”的值 作为整个条件表达式的值。此运算符优先于赋值运算符,但低于关系运 算符与算术运算符。例如有如下表达式: y=x>10?100:200 首先要求出条件表达式的值,然后赋给y。在条件表达式中,要先 求出x>10的值。若x大于10,取100作为表达式的值并赋予变量y;若x小 于或等于10,则取200作为表达式的值并赋予变量y。 【课堂精练】 1.输入三个实数,按从小到大顺序输出。程序运行结果如图4-2所示。
图4-1运行结果 【程序代码】 #include "stdio.h" main() {char gender,ms;
Βιβλιοθήκη Baidu
int age; /*接受司机的详细信息*/ printf("\n\n\t司机的详细信息\n\n"); printf("\n\t司机的婚姻状况(y/n):"); scanf("\n%c",&ms); printf("\n\t司机的性别(M/F):"); scanf("%d",&age); /* 多重 if 结构 */ if (ms=='Y'||ms=='y') /*检查司机的婚姻状况*/ printf("\n\t该司机已投保\n"); else if((gender=='M'||gender=='m')&&(age>30)) /*如果未婚,检查是否是30岁以上的男性 */ printf("\n\t该司机已投保\n"); else if((gender=='F'||gender=='f'&&age>25)) /* 检查是否是25岁以上的女性*/ printf("\n\t该司机已投保\n"); else printf("\n\t该司机已投保\n"); getch(); } 【相关知识】 1.选择结构程序设计 选择结构又称分支结构,有二分支或多分支结构。这种结构根据条 件判断结果,选择执行不同的程序分支。选择结构是程序的基本结构之 一,几乎所有程序都包含选择结构。C语言中可以用两种控制语句来实 现程序的分支控制,即if语句和switch语句。用它们均可构成选择结构。 2.单分支选择if语句 单分支选择if语句的形式为: if(表达式)语句; 执行过程,先判断表达式的值,如果成立,则行后面的语句。否则什 么也不执行。 3.双分支选择if语句 双分支选择if语句的形式为: if(表达式)语句l; else 语句2; 这个条件语句的执行过程,先判断表达式的值,如果成立,执行语 句1,如果不成立,执行语句2。
scanf("%f",&length); printf("\n 宽为 :"); scanf("%f",&breadth); area=length * breadth; printf("\n 该长方形的面积为 %7.2f\n",area); break; case 2: printf("\n请输入圆形的详细信息"); printf("\n 半径为 :"); scanf("%f",&radius); area=PI *radius*radius; printf("\n该圆形的面积为%7.2f\n",area); break; case 3:printf("\n请输入三角形的详细信息"); printf("\n 高为 :"); scanf("%f",&height); printf("\n 底边为 :"); scanf("%f",&base); area=0.5*height*base; printf("\n该三角形为%7.2f\n",area); break; case 4: printf("\n退出程序\n"); break; default:printf("\n 选项错误\n"); } getch(); } 【相关知识】 1.switch语句以及用switch语句和break语句构成的选择结构 switch语句是一种多分支选择结构,语句形式如下: switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; …… case 常量表达式n:语句n; default :语句n+1;} switch语句是C语言的关键字,switch后面用花括号括起来的部分称 为switch语句体。紧跟在switch 后一对圆括号中的表达式可以是整型表
_________________________________________ else printf("B"); } else { if(tall>=172) printf("A"); else printf("B"); } getch(); }
4.2 switch语句
【学习目标】 (1)掌握switch语句的语句格式与应用 (2)掌握switch语句中break语句的用法
达式及后面将要学习的字符型表达式。表达式两边的一对括号不能省 略。 case 也是关键字,与其后面的常量表达式合称 case 语句标号。常 量表达式的类型必须与switch 后面圆括号中的表达式类型相同,各case 语句标号的值应该互不相同。case语句标号后的语句1,语句2等,可以 使一条语句,也可以是若干语句。必要时,case语句标号后的语句可以 省略不写。 default 也是关键字,起标号的作用,代表所有case 标号之外的那些 标号。default 标号可以出现在语句体中任何标号位置上。在switch语句 中也可以没有default 标号。 在关键字case 和常量表达式之间一定要有空格,例如case 10:不能写成 case10:。 2.switch语句的执行过程 当执行switch语句时,首先计算紧跟其后一对括号中的表达式的 值,然后在switch语句体内寻找与该值吻合的 case 标号。如果有与该值 相等的标号,则执行该标号后开始的各语句,包括在其后的所有case 和 default 中的语句,直到switch语句体结束;如果没有与该值相等标号, 并且存在default 标号,则从 default 标号后的语句开始执行,直到switch 语句体结束;如果没有与该值相等的标号,同时又没有default 标号,则 跳过switch语句体,执行之后的语句。 【课堂精练】 1.根据输入的成绩段,输出成绩的等级。程序运行结果如图4-5所示。
图4-2 程序的运行结果 根据程序的运行结果,请将下面程序补充完整并调试。 #include "stdio.h" main()
{ float a,b,c,t; printf("请输入三个数 a,b and c:\n"); scanf ("%f%f%f",&a,&b,&c); printf("输入的三个数为:"); printf ("%6.2f,%6.2f,%6.2f\n",a,b,c); if(a>b) {t=a;a=b;b=t;} if(a>c) ___________________________________ if(b>c) {t=b;b=c;c=t;} printf("排序后的三个数为:"); printf ("%6.2f,%6.2f,%6.2f\n",a,b,c); getch(); } 2.编程实现:根据性别sex和身高tall给某数据分类,如果sex为‘F’,当 tall>=150时,输出A,否则输出B;若sex不为‘F’,当tall>=172时,输出 A,否则输出B。程序的运行结果如图4-3所示。
图4-3 程序运行结果 根据程序运行结果,请将下面程序补充完整并调试。 #include "stdio.h" main() { int tall; char sex; printf(" 请输入性别和身高:"); scanf("%c%d",&sex,&tall); if (sex=='F') { if(tall>=150) /*内嵌if-else语句*/