




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章项目主菜单的选择执行设计
用顺序结构只能解决一些简单的问题,进行一些简单的计算。在实际生活中,往往要根据不同的情况做出不同的选择,即给出一个条件,让计算机判断是否满足条件,并按照不同的情况进行处理。这种程序结构称为选择结构。C语言中有两种选择结构语句:if语句和switch语句。本章将结合简易计算器项目主菜单的选择执行设计,详细介绍如何在C程序中实现选择结构。学习目标:理解选择结构程序设计的基本思想和设计方法;理解各种选择语句的定义格式和执行过程;掌握用if语句实现分支结构的方法;掌握用switch语句实现多分支结构的方法。4.1任务三项目主菜单的选择执行设计
一、任务描述分别用if语句和switch语句实现项目主菜单的选择执行。要求能根据用户输入的主菜单选项进行相应的运算,并输出运算结果。二、任务涉及知识要点该任务涉及到的新知识点主要有:if语句和switch语句三、任务分析简易计算器项目主菜单含有加、减、乘、除和退出五个菜单项,属于多分支选择结构。C语言有两种方法实现多分支结构,一种是用if-else语句实现,另一种是用switch语句实现。该任务分别用两种语句实现主菜单的选择执行。四、任务实现
需要说明的是,为了突出两种语句的区别,压缩源程序的篇幅,将主菜单的显示部分用程序段A表示,两个运算数的输入部分用程序段B表示。程序段A:system("cls");//调用清屏函数。若在TC下运行,改用clrscr()printf("\n\n");printf("\t\t|---------------------------------|\n");printf("\t\t|简易计算器|\n");printf("\t\t|---------------------------------|\n");printf("\t\t|1---加法|\n");printf("\t\t|2---减法|\n");printf("\t\t|3---乘法|\n");printf("\t\t|4---除法|\n");printf("\t\t|0---退出|\n");printf("\t\t|---------------------------------|\n");printf("\t\t请选择运算类型(0~4):");scanf("%d",&choose);程序段B:if(choose>=1&&choose<=4){ printf("\n\t\t请输入第一个运算数:"); scanf("%f",&data1); printf("\n\t\t请输入第二个运算数:"); scanf("%f",&data2); printf("\n\t\t运算结果为:\n");}1.用if语句实现项目主菜单的选择执行#include<stdio.h>#include<stdlib.h>//使用system("cls")函数时需加此行main(){floatdata1,data2;//存放参与运算的两个操作数intchoose;//存放用户输入的菜单选项程序段A程序段Bif(choose==1)printf("\n\t\t%f+%f=%f\n",data1,data2,data1+data2);elseif(choose==2) printf("\n\t\t%f-%f=%f\n",data1,data2,data1-data2);elseif(choose==3)printf("\n\t\t%f*%f=%f\n",data1,data2,data1*data2);elseif(choose==4){ if(data2==0) printf("\n\t\t除数不能为零!");else printf("\n\t\t%f÷%f=%f\n",data1,data2,data1/data2);}elseif(choose==0)exit(0);else printf("\n\t\t输入选项错误!\n");}2.用switch语句实现项目主菜单的选择执行#include<stdio.h>#include<stdlib.h>//使用system("cls")函数时需加此行main(){floatdata1,data2;//存放参与运算的两个操作数intchoose;//存放用户输入的菜单选项程序段A程序段Bswitch(choose){case1:printf("\n\t\t%f+%f=%f\n",data1,data2,data1+data2);break;case2:printf("\n\t\t%f-%f=%f\n",data1,data2,data1-data2);break;case3:printf("\n\t\t%f*%f=%f\n",data1,data2,data1*data2);break;case4: if(data2==0) printf("\n\t\t除数不能为零!");else printf("\n\t\t%f÷%f=%f\n",data1,data2,data1/data2);break;case0:exit(0);default:printf("\n\t\t输入选项错误!\n");}}程序说明:(1)程序中exit(0)的功能是结束程序的执行。exit()函数包含在“stdlib.h”头文件中。(2)因为加、减、乘、除每一种运算都要输入两个运算数,为了减少程序代码的重复,在if-else和switch语句之前,增加一个单分支if语句,即程序段B,对这四种运算的运算数输入进行统一处理。(3)当运算类型为除法时,应当判断输入的除数(即data2)是否为0。如果除数为0,则给出错误信息,并结束本次运算。(4)程序中用来存放用户输入菜单选项的变量choose也可以定义为char型。请读者思考:如果将choose定义为char型,应如何修改程序?(5)该任务只能实现一次主菜单的选择执行,主菜单的重复执行将在第5章任务四中详细介绍。(6)程序中的程序段A和程序段B在输入源程序时要用相应的代码替换。程序段A和程序B也可以写成函数的形式。有关函数的具体内容将在第6章详细介绍。五、要点总结
一个程序虽然经过多次修改、编译、连接和运行,但还不能断定该程序就是正确的,因为程序中可能存在逻辑错误,这些错误往往很难用眼睛检查出来,因此需要进行测试与调试。在进行程序的测试与调试时,应注意精选数据,既具有代表性,又能涵盖可能出现的各种情况。如该程序运行时,菜单的选项可分别输入1,2,3,4,0和0~4以外的数据来测试程序是否能达到预期效果,以保证程序的正确性,提高调试效率4.2理论知识4.2.1if语句
if语句根据给定的条件进行判断,以决定执行某个分支程序段。if语句有三种使用形式。一、单分支if语句单分支if语句的一般形式如下:
if(表达式)语句;
功能:先计算表达式的值,如果表达式的值为真,则执行其后的语句,否则不执行该语句。其执行过程见图4-1。图4-1单分支if语句的执行过程说明:(1)表达式通常是逻辑表达式或关系表达式,但也可以是其他表达式或任意的数值类型(包括整型、实型、字符型等)。因为在执行if语句时先对表达式求解,若表达式的值为0,则按“假”处理,若表达式的值为非0,则按“真”处理。如下面的if语句均为合法的语句:
if(3)printf("O.K.");if('a')printf("%d",'a');(2)表达式后面的语句可以是一个单语句,也可以是用花括号“{}”括起来的复合语句。花括号“}”外面不需要再加分号,但括号内最后一个语句后面的分号不能省略。例如,任务三中判断用户输入的运算类型是否合法的程序段:…if(choose>=1&&choose<=4){ printf("\n\t\t请输入第一个运算数:"); scanf("%f",&data1); printf("\n\t\t请输入第二个运算数:"); scanf("%f",&data2); printf("\n\t\t运算结果为:\n");}…【例4.1】输入三个整数x,y,z,按从小到大的顺序排序输出。#include<stdio.h>main(){ intx,y,z,temp; printf("请输入三个整数:"); scanf("%d,%d,%d",&x,&y,&z); if(x>y) {temp=x;x=y,y=temp;}//交换x,y的值
if(x>z) {temp=x;x=z;z=temp;}//交换x,z的值
if(y>z) {temp=y;y=z;z=temp;}//交换y,z的值
printf("三个整数从小到大排序结果为:%d,%d,%d\n",x,y,z);}程序运行结果:请输入三个整数:3,2,5↙三个整数从小到大排序结果为:2,3,5二、双分支if语句双分支if语句的一般形式如下:if(表达式)语句1;else语句2;
功能:先执行表达式的值,如果表达式的值为真,则执行语句1,否则执行语句2。其执行过程见图4-2。图4-2双分支if语句的执行过程例如,任务三中判断除数是否为0的程序段:…if(data2==0) printf("\n\t\t除数不能为零!");else printf("\n\t\t%f÷%f=%f\n",data1,data2,data1/data2);…说明:(1)双分支if语句中的else子句不能作为语句单独使用,必须与if配对使用。(2)if语句允许嵌套。所谓if语句嵌套,是指在“语句1”和“语句2”中,又包含有if语句的情况。C语言规定,在嵌套的if语句中,else总是与其上面最近的且尚未匹配的if配对。为明确匹配关系,避免匹配错误,建议最好将内嵌的if语句一律用花括号“{}”括起来。如:if(…){if(…)语句1;}else
语句2;【例4.2】输入三个整数,输出其中的最大数。#include<stdio.h>main(){ inta,b,c,max; printf("请输入三个整数:"); scanf("%d,%d,%d",&a,&b,&c); if(a>b) max=a; else max=b; if(max<c) max=c; printf("最大数是%d\n",max);}程序运行结果:请输入三个整数:5,8,2↙最大数是8例4.2也可用两个单分支的if语句实现,程序如下:#include<stdio.h>main(){ inta,b,c,max; printf("请输入三个整数:"); scanf("%d,%d,%d",&a,&b,&c); max=a; if(max<b) max=b; if(max<c)max=c; printf("最大数是%d\n",max);}程序运行结果与例4.2相同。
这种方法的基本思想是:首先取一个数假定为max(最大值),然后将max依次与其余的数逐个比较,如果发现有比max大的数,就用它给max重新赋值,比较完所有的数后,max中的数就是最大值。这种方法,常常用来求多个数中的最大值(或最小值)。三、多分支if语句多分支if语句的一般形式如下:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…elseif(表达式n)语句n;else语句n+1;
功能:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句,其余语句不被执行。如果所有的表达式均为假,则执行语句n+1。其执行过程如图4-3所示。【例4.3】编写程序,根据输入的学生成绩,给出相应的等级。90分以上的等级为优秀,60分以下的等级为不及格,其余每10分一个等级。#include<stdio.h>main(){ intscore; printf("请输入学生成绩(0-100):"); scanf("%d",&score); if(score>=90) printf("优秀!\n");elseif(score>=80) printf("良好!\n"); elseif(score>=70) printf("中等!\n"); elseif(score>=60) printf("及格!\n"); else printf("不及格!\n");}程序运行结果:请输入学生成绩(0-100):86↙良好!4.2.2switch语句使用if语句实现复杂问题的多分支选择时,程序的结构显得不够清晰,因此,C语言提供了一种专门用来实现多分支选择结构的switch语句,又称开关语句。switch语句的一般形式如下:switch(表达式){case常量表达式1:语句1;break;case常量表达式2:语句2;break;
…case常量表达式n:语句n;break;[default:语句n+1;]}
功能:首先计算switch后表达式的值,然后将该值与各常量表达式的值相比较。当表达式的值与某个常量表达式的值相等时,即执行其后的语句,当执行到break语句时,则跳出switch语句,转向执行switch语句下面的语句(即右花括号下面的第一条语句)。如果表达式的值与所有case后的常量表达式的值均不相同,则执行default后面的语句。若没有default语句,则退出此开关语句。说明:(1)switch后面的表达式可以是int,char和枚举型中的一种。(2)常量表达式后的语句可以是一个语句,也可以是复合语句或是另一个switch语句。(3)各case及default子句的先后次序不影响程序执行结果,但default通常作为开关语句的最后一个分支。(4)每个case后面常量表达式的值必须各不相同,否则会出现相互矛盾的现象。(5)switch语句中允许出现空的case语句,即多个case共用一组执行语句。(6)break语句在switch语句中是可选的,它是用来跳过后面的case语句,结束switch语句,从而起到真正的分支作用。如果省略break语句,则程序在执行完相应的case语句后不能退出,而是继续执行下一个case语句,直到遇到break语句或switch结束。使用switch语句还需要注意以下几点:(1)常量表达式与case之间至少应有一个空格,否则可能被编译系统认为是语句标号,如case1,并不出现语法错误,这类错误较难查找。(2)每个case只能列举一个整型或字符型常量,否则会出现语法错误,如下列程序段所示。 floatx=1.5; inta=3,b=4,c; switch(x)//错:x为实型数据。可改为:switch((int)x) { case4.5://错:4.5非整型常量。可改为:case(int)4.5: c=1;break; casea+b://错:a+b不是常量表达式。可改为:case3+4: c=2;break;case1,2,3://错:不允许。可改为:case1:case2:case3: c=3; }
(3)switch语句结构清晰,便于理解,用switch语句实现的多分支结构程序,完全可以用if语句来实现,但反之不然。原因是switch语句中的表达式只能取整型、字符型和枚举型值,而if语句中的表达式可取任意类型的值。
【例4.4】用switch语句实现例4.3#include<stdio.h>main(){ intscore; printf("请输入学生成绩(0-100):");scanf("%d",&score); switch(score/10) { case10:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微生物检验技术人员的职业素养与试题及答案
- 童车制造企业生产调度与优化练习考核试卷
- 室外拱形廊道施工方案
- 垃圾运输防渗漏施工方案
- 2025年【光气及光气化工艺】模拟考试题及答案
- 移动通信技术在智慧工厂行业的应用考核试卷
- 项目材料采购的试题及答案
- 2024年花艺师考试的学习方法与技巧试题及答案
- 畜牧业绿色发展政策建议考核试卷
- 纸张表面装饰技术的创新与发展考核试卷
- FANUC发那科机器人常规点检保养
- 医药有限公司公司奖惩制度
- 微电子学概论全套课件
- 实验室气瓶使用记录
- DB37T 2974-2017 工贸企业安全生产风险分级管控体系细则
- DB13(J)∕T 8054-2019 市政基础设施工程施工质量验收通用标准
- 混杂纤维增强的复合材料介绍、特点和应用
- 星巴克哈佛商学院案例
- 工程项目内部控制流程图表
- 强夯试夯报告(共12页)
- 骨优导介绍PPT
评论
0/150
提交评论