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

下载本文档

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

文档简介

项目三选择结构程序设计项目三选择结构程序设计第三部分实验学习

3第一部分任务学习

1第二部分项目学习

2项目三选择结构程序设计在你的人生中,曾经面对什么选择?你们现在有没有思考过毕业之后是工作还是继续上学呢?学编程还是不学编程呢?当你不知向何处走时,会抬头看看路牌,当某个方向满足了要求,则会向那个方向走去。在程序设计中,当某条件成立时执行某段程序;不成立时执行另一段程序,此时,即为选择结构,可使用if或switch语句完成该功能。本章从实例分析着手,使读者了解并掌握C语言选择结构,加深对C语言程序开发设计过程的感性认识,强化培养编程思路,为项目三选择结构程序设计进一步进行C语言程序设计打下基础。

【学习目标】(1)掌握关系运算符、逻辑运算符和条件运算符的用法。(2)掌握选择结构程序设计的方法。(3)能够画出选择结构的流程图。(4)能够用选择结构程序设计解决实际问题。第一部分任务学习

二、单分支选择语句

一、双分支选择语句

三、逻辑运算符

四、多分支选择语句if…else

五、嵌套if语句

六、switch语句

七、switch语句中多个case语句相同情况

的处理

第一部分任务学习

一、双分支选择语句——体重测量仪改进版【问题提出】在日常的生活中经常会碰到两种不同的情况,需要分两支处理的问题。例如,如果学生所有考试都及格了,就可以升级,否则就要留级;痞子蔡说,如果我有一双翅膀,我就会飞过来看你,否则我就不能来看你。在C语言中这类问题需要用选择结构中的双分支选择结构if...else语句来完成。第一部分任务学习

【工作任务】编写一个体重测量仪:要求从键盘输入身高和体重后,能够计算出体重指数。体重指数=体重(kg)/(身高)2;要求实现这样的判断:如果体重指数<25,属于正常;否则属于肥胖。【思路指导】输入:身高、体重。输出:体重指数。第一部分任务学习

定义变量:floatweight,height,index。处理:体重指数=体重(kg)/(身高(米))2,即index=weight/(height*height)。判断条件:index<25。两执行语句:如果index<25,输出“Youareright!”。否则输出“Youarefat!”。选择结构的流程图如图3-1所示。

第一部分任务学习

图3-1选择结构流程图第一部分任务学习

【解决方案】#include<stdio.h>voidmain(){floatweight,height,index;printf("\n请输入你的体重:");scanf("%f",&weight);printf("\n请输入你的身高(米):");scanf("%f",&height);index=weight/(height*height);printf("Theindexofyourweightis:%f",index);if(index<25)printf("Youareright!");elseprintf("Youarefat!");}第一部分任务学习

【运行情况】选择结构程序运行结果如图3-2所示。【归纳分析】(1)关系运算符和关系表达式。

图3-2选择结构程序运行结果第一部分任务学习

index<25是关系表达式,其中<(小于)是关系运算符,关系运算符用于测试两个操作数或两个表达式之间的关系,

其中操作数可以是变量、常量或表达式。C语言中一共提供了6中关系运算符:>、>=、<、<=、==、!=,见表3-1。

表3-1关系运算符C的关系运算符数学中的关系符含义优先级>>大于优先级相同,高于==和!=>=

≥大于或等于<<小于<=≤小于或等于===等于优先级相同,优先级较低!=

≠不等于第一部分任务学习

关系表达式的一般形式为:表达式关系运算符表达式。关系表达式成立,则结果为1,即为真值;否则为0,即为假值,见表3-2。

表3-2关系表达式

表达式(num1=10;num2=5;num3=20;num4=10;)结果(真或假、1或0)(num1+num2)>(num3–num4)真(num1+num2)>=(num3+num4)假num=40;num/10!=2;真num1=2;num1==num4;假注:在关系表达式中不要把关系运算符“==”误写成“=”。“a=4”是赋值表达式,则不管a的原来值是多少,表达式“a=4”的结果永远为真”,因为赋值表达式的值是左边变量得到的值。第一部分任务学习

(2)

if...else语句。1)

if...else语句形式。if(表达式){语句组1}else{语句组2}2)执行过程。判断表达式的值,如果表达式值为真,则执行花括号括起来的语句组1,然后继续执行选择结构下面的语句;如果第一部分任务学习

表达式值为假,则执行花括号括起来的语句组2,然后继续执行选择结构下面的语句。3)注意。①无论是单分支选择语句,还是双分支选择语句,如果语句组只有一个语句,可以省略{},否则花括号必须存在。因为,在没有花括号的情况下,C编译系统能够识别的语句序列只有一句。②if后面的表达式一定要有括号。③if和else同属于一个if语句,else不能作为语句单第一部分任务学习

独使用,它只是if语句的一部分,与if配对使用,因此程序中不可以没有if而只有else。④只能执行与if有关的语句或者执行与else有关的语句,而不可能同时执行两者。⑤if语句的表达式可以是任意类型C语言的合法表达式,但计算结果必须为整型、字符型或浮点型之一。(4)其执行过程如图3-3所示。

第一部分任务学习

图3-3if…else语句执行过程第一部分任务学习

【技能训练】商场为了提高效益,规定一次性购买物品总价超过1

000元,就会对物品总价打7折,一次性购买物品总价低于1

000元,就会对物品总价打9折。为该商场设计一个收费程序。

第一部分任务学习

程序代码如下:#include<stdio.h>voidmain(){floatx,y;printf("输入你所买物品总价格:");scanf("%f",&x);if(x>1000)

y=x*0.7;

else

y=x*0.9;

printf("你所要支付的价格%.1f\n",y);}第一部分任务学习

图3-4收费程序运行结果程序运行结果如图3-4所示。

第一部分任务学习

二、单分支选择语句——身高预测【问题提出】在日常生活中还会经常碰到单分支的情况。例如,学校举办C语言辅导班,期中考试成绩低于60分的同学必须要参加,对其他的同学不提出任何要求。该问题的特点是只有当某条件成立时才需要处理,否则不处理。在C语言中,处理这种问题时使用省略else的if语句。第一部分任务学习

【工作任务】

每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯和体育锻炼情况等。小孩成人后的身高与其父母的身高和自身的性别密切相关。设faHeight为其父身高,moHeight为其母身高,身高预测公式为:男性成人时身高=(faHeight+moHeight)*0.54(cm)女性成人时身高=(faHeight*0.923+moHeight)/2(cm)此外,如果喜爱体育锻炼,那么可增加身高2%;如果有第一部分任务学习

良好的卫生饮食习惯,那么可增加身高1.5%。【思路指导】输入:性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱)。输出:身高。处理:利用给定公式和身高预测方法对身高进行预测。

第一部分任务学习

判断条件:性别男还是女、是否喜爱体育锻炼、是否有良好的饮食习惯。第一部分任务学习

【解决方案】#include<stdio.h>voidmain(){charsex; /*孩子性别*/charsports; /*是否喜欢体育运动*/chardiet; /*是否有良好的饮食习惯*/floatmyHeight; /*孩子身高*/floatfaHeight; /*父亲身高*/floatmoHeight; /*母亲身高*/printf("你是男孩(M)还是女孩(F)?");scanf("%1s",&sex);printf("你输入你爸爸的身高(cm):");

第一部分任务学习

scanf("%f",&faHeight);printf("你输入你妈妈的身高(cm):");scanf("%f",&moHeight);printf("你是否喜欢体育锻炼(Y/N)?");scanf("%1s",&sports);printf("是否有良好的饮食习惯等条件(Y/N)?");scanf("%1s",&diet);if(sex=='M')myHeight=(faHeight+moHeight)*0.54;elsemyHeight=(faHeight*0.923+moHeight)/2.0;if(sports=='Y')myHeight=myHeight*(1+0.02);

第一部分任务学习

if(diet=='Y')myHeight=myHeight*(1+0.015);printf("Yourfutureheightwillbe%f(cm)\n",myHeight);}第一部分任务学习

【运行情况】身高预测程序运行结果如图3-5所示。图3-5身高预测程序运行结果第一部分任务学习

【归纳分析】(1)

if语句形式:if(表达式){语句组}(2)执行过程:如果表达式的值为真,则执行其后的语句组,否则不执行该语句组。(3)其执行过程如图3-6所示。

第一部分任务学习

图3-6单分支选择语句执行过程第一部分任务学习

【技能训练】在奥运会体操决赛中最后有3个优胜者,现在编程把这3个优胜者的成绩由低到高进行排序。

第一部分任务学习

程序代码如下:#include<stdio.h>voidmain(){floata,b,c;floatt;printf("请输入三个运动员的成绩");scanf("%f%f%f",&a,&b,&c);if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("\n分数由低到高分别是:%5.2f,%5.2f,%5.2f\n",a,b,c);}第一部分任务学习

图3-7成绩排序程序运行结果程序运行结果如图3-7所示。

第一部分任务学习

三、逻辑运算符——电梯控制程序【问题提出】在处理问题的时候经常需要同时判断多个条件。例如,警察在档案库中搜索符合条件(如身高1.80m以上,年龄45岁以下的男性)的犯人档案时,需要使用逻辑运算符。第一部分任务学习

【工作任务】电梯厂商为了提高电梯的利用率,需要一个控制程序,实现如下功能:输入楼层数,如果楼层是1~5,显示提示“请走楼梯!”;如果楼层是6~15,显示提示“请进电梯!”;如果输入的是1~15之外的数据,显示提示“本楼只有1~15层,输入数据错误,请重新输入!”。第一部分任务学习

【思路指导】(1)输入楼层数x。(2)

if(x)在1~15之外,显示提示“本楼只有1—15层,输入数据错误,请重新输入!”;if(x)在1~5之间,显示提示“请走楼梯!”;if(x)在6~15之间,显示提示“请进电梯!”。第一部分任务学习

【解决方案】#include<stdio.h>voidmain(){intx;

printf("请输入你所到的楼层数");scanf("%d",&x);if(x<1&&x>15)printf("本楼只有1~15层,输入数据错误,请重新输入!\n");if(x>=1&&x<=5)printf("请走楼梯!\n");if(x>=6&&x<=15)printf("请进电梯!\n");}

第一部分任务学习

【运行情况】电梯控制程序运行结果如图3-8所示。图3-8电梯控制程序运行结果第一部分任务学习

【归纳分析】(1)逻辑运算符用于连接一个或多个条件,判断这些条件是否成立,C语言中提供了3种逻辑运算符。与运算符“&&”和或运算符“||”均为双目运算符,具有左结合性。非运算符“!”为单目运算符,具有右结合性。逻辑运算符的优先级见表3-3。第一部分任务学习

(2)各种运算符的结合性见表3-4。(3)逻辑运算的值。逻辑运算的值为“真”和“假”两种,用“1”和“0”来表示。表3-3逻辑运算符优先级逻辑运算符含义优先级结合性!逻辑非高自右至左&&逻辑与中自左至右||逻辑或低自左至右第一部分任务学习

表3-4运算符的结合性

高运算符描述结合性优先级()圆括号自左向右低++、--、!自增、自减、逻辑非自右至左*、/、%乘法、除法、取余自左向右+、-加法、减法自左向右>、>=、<、<=大于、大于等于、小于、小于等于自左向右!=、==不等于、等于自左向右&&逻辑与自左向右||逻辑或自左向右=、+=、-=、/=、%=赋值运算符,复合赋值运算符自右至左,逗号运算符自左向右第一部分任务学习

1)与运算“&&”。参与运算的两个量都为真时,结果才为真,否则为假。二级C语言考试的时候,只有笔试和机试都考过去的时候,你的这次考试才算成功,可以用一个表格来表示这之间的关系,见表3-5。

表3-5二级C过关情况笔试机试二级C过关情况表达式1与表达式2结果不及格不及格失败0&&00不及格及格失败0&&10及格不及格失败1&&00及格及格成功1&&11第一部分任务学习

2)或运算“||”。参与运算的两个量只要有一个为真,结果就为真;两个量都为假时,结果为假。现在买东西支付的方式有很多种,你只要用任何一种方式支付就可以,可以用一个表格来表示这之间的关系,见表3-6。

表3-6支付情况钱信用卡支付情况表达式1或表达式2结果没有没有失败0||00有没有成功1||01没有有成功0||11有有成功1||11第一部分任务学习

3)非运算“!”。参与运算量为真时,结果为假;参与运算量为假时,结果为真。(4)逻辑表达式。1)逻辑表达式是用逻辑运算符将两个表达式连接起来的式子。2)逻辑表达式也只有两个值,分别是0和1。逻辑表达式结果非0,非0为真,真为1;逻辑表达式结果为0,0为假,假为0。阅读下面这个程序,分析程序结果。第一部分任务学习

#include<stdio.h>voidmain(){inta=-5,i,j,k,l,m;floatb=0.01;i=!a;j=a&&b;k=a||b;l=(5>3&&2||8<4-!0);m='a'<'b'&&'5'>'9';printf("i=%d,j=%d,k=%d,l=%d,m=%d\n",i,j,k,l,m);}运行结果:i=0,j=1,k=1,l=1,m=0

第一部分任务学习

3)短路特性。逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。①逻辑与运算符“&&”。如逻辑表达式a&&b&&c,执行过程是:当a为0时,b和c不需要再判断,逻辑与运算符将不再执行,结果为0,否则还要继续后边的运算。②逻辑或运算符“||”。如逻辑表达式a||b||c,执行过程是:当a为非0时,b和第一部分任务学习

c不需要再判断,逻辑或运算符将不再执行,其结果为1,否则继续执行后面的运算。阅读下面这个程序,分析程序结果。#include<stdio.h>voidmain(){inta,b=0,c=0,d=0;scanf("%d",&a);d=a&&(b=5)&&(c=3);printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);}运行结果:第一部分任务学习

输入:1输出:a=1,b=5,c=3,d=1输入:0输出:a=0,b=0,c=0,d=04)熟练的将现实生活中的条件转换为C条件表达式,是编写选择程序的基础。体会下列常用的C语言条件表达式。①关系式1≤x≤5:x>=1&&x<=5。②x是3或5的倍数:x%3==0||x%5==0。③a、b同号:a>0&&b>0||a<0&&b<0或者a*b>0。④a、b同时为零:a==0&&b==0,或者a*a+b*b==0。⑤x是字母:(x>='a'&&x<='z')||(x>='A'&&x<='Z')。

第一部分任务学习

⑥ch是否为小写英文字母:(ch>='a')&&(ch<='z')或ch>='a'&&ch<='z'。⑦ch是空格或者回车:ch==''||ch=='\n'。⑧number是偶数:number%2==0。⑨year是闰年:(year%4==0&&year%100!=0)||(year%400==0)。【技能训练】输入三角形三边长,求三角形面积。程序代码如下:第一部分任务学习

#include<stdio.h>#include<math.h>voidmain(){floata,b,c,l,s;printf("请输入三边长a,b,c的值:");scanf("%f,%f,%f",&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b){l=(a+b+c)/2;s=sqrt(l*(l-a)*(l-b)*(l-c));printf("s=%.2f\n",s);}

elseprintf("你所输入的数据有问题!\n");}第一部分任务学习

程序运行结果如图3-9所示。

图3-9求三角形面程序运行结果第一部分任务学习

四、多分支选择语句if…else——体重测量仪改进版【问题提出】一个人站在交叉路口正在思考:这么多条路让我选择我到底应该选择哪条路呢?他通过看路牌,然后选择了一条能够到达自己目的地的路。例如,评分等级为A、B、C、D,如果分数大于等于85,则为A级,否则(分数小于85)继续判断;如果分数大于等于75,则为B级,否则(分数小于75)继第一部分任务学习

续判断;如果分数大于等于60,则为C级,否则(分数小于60)为D级。这个问题不是一个或者两个的选择,而是多分支的选择,在C语言中可以选用多分支选择语句if-else来解决这类问题。第一部分任务学习

【工作任务】编写一个体重测量仪:要求从键盘输入身高和体重后,能够计算出体重指数。体重指数=体重(kg)/(身高)2。要求实现如下的判断。偏瘦:体重指数<18。

正常:18<=体重指数<25。微胖:25<=体重指数<30。较胖:30<=体重指数<35。肥胖:35<=体重指数<40。很胖:体重指数>=40。第一部分任务学习

【思路指导】输入:身高、体重。输出:体重指数。定义变量:floatweight,height,index;。

处理:体重指数=体重(kg)/(身高)2;。判断条件:如果体重指数小于18,偏瘦否则如果体重指数小于25,标准否则如果体重指数小于30,微胖否则如果体重指数小于35,较胖否则如果体重指数小于40,肥胖否则很胖

第一部分任务学习

【解决方案】#include<stdio.h>voidmain(){floatweight,height,index;printf("\n请输入你的体重:");scanf("%f",&weight);printf("\n请输入你的身高(米):");scanf("%f",&height);index=weight/(height*height);printf("Theindexofyourweightis:%f",index);if(index<18)printf("偏瘦!\n");elseif(index<25)printf("标准!\n");

elseif(index<30)printf("微胖!\n");elseif(index<35)printf("较胖!\n");elseif(index<40)printf("肥胖!\n");elseprintf("很胖!\n");}

第一部分任务学习

【运行情况】程序运行结果如图3-10所示。

图3-10多分支选择语句程序运行结果第一部分任务学习

【归纳分析】(1)要处理多重条件判断的情况,需要使用多分支选择结构,如图3-11所示。图3-11多分支选择结构第一部分任务学习

(2)多分支if…else语句。1)一般形式为:if(表达式1){语句组1}elseif(表达式2){语句组2}elseif(表达式3){语句组3}…elseif(表达式n){语句组n}else{语句组n+1}2)执行过程。如果表达式1为真,执行花括号括起来的语句组1,然后第一部分任务学习

自动退出多分支语句结构,继续执行选择结构下面的语句。如果表达式1为假,不执行花括号括起来的语句组1,再来判断表达式2是否为真。如果表达式2为真,执行花括号括起来的语句组2,然后自动退出多分支语句结构,继续执行选择结构下面的语句。如果表达式2为假,不执行花括号括起来的语句组2,再来判断表达式3是否为真。依此类推……如果所有的条件都不成立,则执行最后一个else下的语句组n+1,然后继续执行选择结构下面的语句。

第一部分任务学习

3)多分支if…else语句的执行过程如图3-12所示。

图3-12多分支if…else语句的执行过程第一部分任务学习

【技能训练】从键盘输入一个学生的分数,要求实现这样的判断功能:如果分数大于100,输出“Inputerror!”;如果分数介于100到90之间,输出“VeryGood!”;如果分数介于80到90之间,输出“Good!”;如果分数介于70到80之间,输出“Middle!”;如果分数介于60到70之间,输出“Pass!”;如果分数小于60,输出“NoPass!”。程序代码如下:第一部分任务学习

#include<stdio.h>voidmain(){floatscore;printf("pleaseinputanumber:\n");scanf("%f",&score);if(score>100)printf("Inputerror!");elseif(score>=90)printf("verygood!");elseif(score>=80)printf("good!");elseif(score>=70)printf("middle!");elseif(score>=60)printf("pass!");elseprintf("nopass!");}第一部分任务学习

图3-13考试通过情况判断程序进行结果程序运行结果如图3-13所示。

第一部分任务学习

五、嵌套if语句——求解分段函数【问题提出】在日常生活中,经常遇到两个分支的问题,也经常遇到其中一个分支或两分支中又包含另外分支的问题。例如,在一个交叉路口选择一条路线,过了该交叉口,又遇到另一个交叉路口。程序设计中也经常会遇到同类问题,例如,根据学生性别判断该学生是否男生,对于男生,再判断是否大于20岁。此类问题需要在if语句中包含另一个if语句。第一部分任务学习

【工作任务】编写程序,输入x值,求下面分段函数的值。

第一部分任务学习

【思路指导】在嵌套if语句中要注意条件的组织顺序。【解决方案】#include<stdio.h>voidmain(){floatx=0,y=0;printf("请输入x的值:\n");scanf("%f",&x);if(x<0)y=0;elseif(x<5)y=2*x+4;elseif(x<10)y=x*x;

elsey=8;

printf("x=%f,y=%f\n",x,y);}第一部分任务学习

【运行情况】嵌套if语句程序运行结果如图3-14所示。

图3-14嵌套if语句程序运行结果第一部分任务学习

【归纳分析】(1)在一个if语句中又包含另一个if语句,从而构成了if语句的嵌套使用。内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。1)if嵌套if…else。if()if()语句1 /*内层的if…else语句*/else语句22)if…else嵌套if…else。if()

第一部分任务学习

if()语句1 /*内层的if…else语句*/else语句2elseif()语句1 /*内层的if…else语句*/else语句23)if…else嵌套if。if()if()语句/*内层的if语句*/elseif()语句/*内层的if语句*/第一部分任务学习

(2)

if语句的嵌套形式不是刻意去追求的,而是在解决问题过程中随着解决问题的需要而采用的。if与else的配对规则,if语句出现嵌套形式时,C语言规定,else子句总是和前面最近的不带else子句的if语句配对,与书写格式无关。注意书写格式要有层次感(好的程序员应该养成这一习惯,以便他人理解你的程序和自己将来的修改)。如果if的数目和else的数目相同,从内层到外层一一对应,不易出错。如果if与else的数目不一致,为实现编程者的意图,必要的时候必须加“{}”,来强制确定配对关系。否则,就不能实现编程者的真正意图。

第一部分任务学习

(3)大家可以尝试其他的解法来解决这一题。注意嵌套的层数不要太多,否则容易出现问题。【技能训练】输入学生平时成绩和期末成绩,计算总评成绩。总评成绩由平时成绩的40%和期末成绩的60%相加产生。如果学生在该门课的竞赛中获奖,则对于平时成绩高于90分的学生,平时成绩按100分处理,否则附加10分;对于期末成绩高于85分的学生,期末成绩按100分处理,否则附加15分。第一部分任务学习

程序代码如下:#include<stdio.h>voidmain(){floata,b;charc;doubletotal;printf("请输入平时成绩、期末成绩和是否获奖(Y/y):");scanf("%f,%f,%c",&a,&b,&c);if(c=='Y'||c=='y'){if(a>90)a=100;

第一部分任务学习

elsea=a+10;if(b>85)b=100;elseb=b+15;}total=a*0.4+b*0.6;printf("a=%.1f,b=%.1f,total=%.1f\n",a,b,total);}

第一部分任务学习

图3-15运行结果程序运行结果如图3-15所示。

第一部分任务学习

六、switch语句——模拟自动饮料机【问题提出】在日常生活经常会遇到命令操作。例如,乘电梯时,按8则到第8层,按12则到第12层,按20则到第20层;再如,按自动售货机上不同的按钮会落下相应的商品等。在C语言中也经常要处理相同情况的问题,处理键盘命令操作,一般使用switch语句。当处理多分支问题时,虽然使用嵌套的if语句也能解决,但因嵌套层次多,编程时容易出错,所以常使用switch语句。第一部分任务学习

【工作任务】模拟自动饮料机,按屏幕所示功能,输入所选择的合法数字,输出可获得的相应饮料名称。【思路指导】(1)如何组织屏幕显示。(2)对各种选择如何响应。(3)如何选择不在规定范围内怎么办。第一部分任务学习

【解决方案】#include"stdio.h"voidmain(){intbutton;printf("==========自动饮料机==========\n");

printf("1.可口可乐\n");printf("2.雪碧\n");printf("3.芬达\n");printf("4.百事可乐\n");printf("5.非常可乐\n");printf("请按1--5键选择饮料:\n");scanf("%d",&button);switch(button){case1:printf("\n你获得一听可口可乐\n");break;

第一部分任务学习

case2:printf("\n你获得一听雪碧\n");break;case3:printf("\n你获得一听芬达\n");break;case4:printf("\n你获得一听百事可乐\n");break;case5:printf("\n你获得一听非常可乐\n");break;

default:printf("\n非法操作!\n");break;}}第一部分任务学习

【运行情况】程序运行结果如图3-16所示。

图3-16自动饮料机程序运行结果第一部分任务学习

【归纳分析】(1)switch语句。1)switch语句的一般形式。switch(表达式){case 常量表达式1:语句组1;case 常量表达式2:语句组2;case 常量表达式3:语句组3;……case 常量表达式n:语句组n;default:语句组n+1;}第一部分任务学习

2)

switch语句的执行过程。先拿switch后的表达式与第一个case后面的常量表达式1的值相比,如果相同,就执行语句组1(语句组1后如果有break语句,就退出switch语句,继续执行switch语句后的语句;语句组1后如果没有break语句,继续执行下一个case后的语句组2;依此类推……);如果不同,再拿switch后的表达式与第二个case后面的常量表达式2的值相比,如果相同,就执行语句组2(同上面括号内),依此类推;如果找不到匹配的case值则执行default语句,如果找不到匹配的第一部分任务学习

case值且不存在默认语句(default),则跳过switch语句体,什么也不做。3)注意。①switch后面的“表达式”,可以是int、char和枚举型中的一种。②每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(对表达式的同一值,有两种或两种以上的执行方案)。③case后面的常量表达式仅起语句标号作用,并不进第一部分任务学习

行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。④各case及default子句的先后次序,不能影响程序执行结果。⑤多个case子句,可共用同一语句(组)。⑥用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。(2)本程序的执行过程。第一部分任务学习

1)case1、case2、case3、case4、case5、default是6个分支位置,通过switch(button)中的button的值决定要执行的分支。2)当button的值为“1”、“2”、“3”、“4”、“5”时,分别执行case1、case2、case3、case4、case5后的语句,遇到break语句,立即退出switch语句;当button的值为其他字符时,执行default后面的语句,遇到break语句,也立即退出switch语句。3)使用switch语句处理分支结构时,不能随意丢掉第一部分任务学习

break语句,否则无法实现分支效果。假设程序做出如下修改,当从键盘输入2时候,则输出“你获得一听雪碧”,然后又输出“你获得一听芬达”和“你获得一听百事可乐”。由于当你输入2时,则执行case2后的语句,但是由于没有break语句,程序不能退出switch语句,继续向下执行,并且不再判断button的值和常量表达式是否一样,而是无条件的直接执行后面的语句直到遇到break语句后才退出switch语句。程序代码如下:第一部分任务学习

#include"stdio.h"voidmain(){intbutton;printf("==========自动饮料机==========\n");printf("1.可口可乐\n");printf("2.雪碧\n");printf("3.芬达\n");printf("4.百事可乐\n");printf("5.非常可乐\n");printf("请按1--5键选择饮料:\n");scanf("%d",&button);switch(button)

{case1:printf("\n你获得一听可口可乐\n");case2:printf("\n你获得一听雪碧\n");case3:printf("\n你获得一听芬达\n");

第一部分任务学习

case4:printf("\n你获得一听百事可乐\n");break;case5:printf("\n你获得一听非常可乐\n");}}程序运行结果如图3-17所示。

图3-17无break语句的Switch语句运行结果第一部分任务学习

【技能训练】设计简单的菜单。修改在顺序程序章节编写的菜单程序,设计如图2-1所示的菜单。程序代码如下:#include<stdio.h>voidmain(){intk;printf("********************************\n");printf("||--------请输入(0-5)---------||\n");printf("||1--------信息录入||\n");printf("||2--------成绩计算||\n");printf("||3--------成绩排序||\n");

第一部分任务学习

printf("||4--------查询成绩||\n");printf("||5--------修改成绩||\n");printf("||0--------退出||\n");printf("********************************\n");printf("请输入你的选择\n");scanf("%d",&k);switch(k){case1:printf("\n1--------信息录入\n");break;case2:printf("\n2--------成绩计算\n");break;

case3:printf("\n3--------成绩排序\n");break;case4:printf("\n4--------查询成绩\n");break;case5:printf("\n5--------修改成绩\n");break;case0:printf("\n0--------退出\n");break;default:printf("\n非法操作!\n");break;}}第一部分任务学习

程序运行结果如图3-18所示。

图3-18学生信息系统程序运行结果第一部分任务学习

七、switch语句中多个case语句相同情况的处理【问题提出】有时在多个不同分支中需要处理的操作相同,例如在键盘上按大写字母“A”或小写字母“a”时都显示“again”,按大写字母“E”或小写字母“e”时都显示“end”,这时可以简化switch语句。第一部分任务学习

【工作任务】假设要处理的年份是2008年,编写程序,输入该年的某月份,输出该月的天数。【思路指导】在2008年,一月、三月、五月、七月、八月、十月、十二月的天数是31,二月的天数是29,四月、六月、九月、十一月的天数是30,要输出某月的天数,需要处理13个分支(一月、二月、……、十二月和非法数据)。第一部分任务学习

【解决方案】#include<stdio.h>voidmain(){intmonth=0,day=0;printf("请输入月份:\n");scanf("%d",&month);switch(month){case1:case3:case5:case7:case8:case10:

第一部分任务学习

case12:day=31;break;case2:day=29;break;case4:case6:case9:case11:day=30;break;default:printf("非法数据!\n");}printf("day=%d\n",day);}第一部分任务学习

【运行情况】日历程序运行结果如图3-19所示。

图3-19日历程序运行结果第一部分任务学习

【技能训练】要求用switch语句编程设计一个简单的计算器程序。程序代码如下:#include<stdio.h>#include<math.h>voidmain(){floatdata1,data2; /*定义两个操作符*/charop; /*定义运算符*/printf("Pleaseentertheexpression:\n");scanf("%f%1s%f",&data1,&op,&data2); /*输入运算表达式*/switch(op)/*根据输入的运算符确定要执行的运算*/{第一部分任务学习

case'+':printf("%f+%f=%f\n",data1,data2,data1+data2);break;

case'-':printf("%f-%f=%f\n",data1,data2,data1-data2);break;case'*':printf("%f*%f=%f\n",data1,data2,data1*data2);break;case'/':if(fabs(data2)<=1e-7) /*与实数0比较*/printf("Divisionbyzero!\n");

elseprintf("%f/%f=%f\n",data1,data2,data1/data2);break;default:printf("Unknownoperator!\n");}}第一部分任务学习

程序运行结果如图3-20所示。

图3-20计算器程序运行结果第二部分项目学习

项目学习五菜单设计

第二部分项目学习

项目学习五菜单设计【工作任务】本节只实现显示功能,即显示成绩管理系统的进入界面,用户可以通过界面进行菜单选择,选择所要进入的模块。程序开始运行时出现如图2-18所示的菜单选择界面。【思路指导】菜单设计的知识涉及的知识是顺序结构,如果想实现菜单选择要使用多分支的选择语句。

第二部分项目学习

【解决方案】#include<stdio.h>voidmain(){intkprintf("\n\n\t||=========================||");printf("\n\n\t||------------------欢迎使用成绩管理系统--------------||");printf("\n\n\t||----------------------welcome-------------------||");printf("\n\n\t||--------------------谢谢使用本系统----------------||");printf("\n\n\t||-----------------徐州工业职业技术学院---------------||");

第二部分项目学习

printf("\n\n\t||=========================||");printf("\n\n\t||---------------------请选择(1-6)-----------------||");printf("\n\n\t||------------------------------------------------||");printf("\n\n\t||1.输出信息||");printf("\n\n\t||2.计算结果||");printf("\n\n\t||3.排序信息||");printf("\n\n\t||4.查找信息||");printf("\n\n\t||5.修改信息||");printf("\n\n\t||6.退出系统||");printf("\n\n\t||------------------------------------------------||");do

第二部分项目学习

{printf("\n密码:1(输入)&2(计算)&3(排序)&4(查找)&5(修改)&6(完成):");scanf("%d",&k);switch(k){case1:(input());break;case2:(aver_stu());break;case3:(sort());break;case4:(cha());break;case5:(xiu());break;

温馨提示

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

评论

0/150

提交评论