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

下载本文档

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

文档简介

信息工程学院电子信息技术专业项目3选择结构程序设计条件结构就像一个岔路口,可以向左走,也可以向右走。比如上洗手间,我们知道我们的性别,这时候我们需要根据洗手间提供的条件,左边男洗手间,右边女洗手间,或者正好相反,其中性别就是这个条件结构的条件。再比如,现在的分数都流行使用A、B、C来分级,假设考试成绩是93分,可以将其设置为等级A,考试成绩是87,可以将其设置为等级B,这里分数区间即为条件结构中的条件。任务3.1用if语句实现的选择结构

任务说明与顺序结构一样,选择结构(或分支结构)也是程序设计的基本结构之一。所谓选择结构,就是根据不同的条件作出判断,进而选择执行不同的操作。用if语句可以构成选择结构。在本任务中,将学习if语句的使用方法。任务实施1.任务功能编写程序,求下面分段函数的值,要求x的值从键盘输入。图3-1求解函数流程图2.编程思路

首先,判断x的值是否小于等于0,当x的值小于等于0时,根据表达式y=0计算函数的值。否则,再判断x的值是否大于10,当x的值大于10时,根据表达式y=2x+3计算函数的值。否则,根据表达式计算函数的值。求分段函数值的流程如图3-1所示。3.编写程序Ex3-1.c#include<stdio.h>/*包含头文件*/#include<math.h>/*包含头文件*/voidmain(){floatx,y;/*定义两个实型变量*/printf("请输入x的值:\n");scanf("%f",&x);/*从键盘输入x的值*/if(x<=0)/*如果x≤0*/y=0;else{ if(x>10)/*如果x>10*/ y=2*x+3;/*计算y的值*/

else/*隐含0<x≤10*/

y=sqrt(x);/*计算y的值*/

}printf("y=%.2f\n",y);/*输出y的值*/

}

4.运行、调试在VC++6.0开发环境下,编辑、编译和调试源程序Ex3-1.c。程序运行的结果为:请输入x的值:5<回车>y=2.24任务拓展将源程序Ex3-1.c中用if嵌套语句求分段函数的值改为用if-else-if语句(即多分支选择结构)来实现,并比较二者有什么不同。相关知识一、关系运算符与关系表达式(1)关系运算符。关系运算符用于判断两边操作数的大小关系。C语言中提供了6种关系运算符,如表3-1所示。其中,前4种关系运算符的优先级相同,后2种关系运算符的优先级相同,且前4种关系运算符的优先级又高于后2种。关系运算符的优先级低于算术运算符,但又高于赋值运算符。关系运算符都是双目运算符,其结合性均为左结合。表3-1关系运算符注意,在C语言中“==”和“=”是两种完全不同的运算符,前者为关系运算符中的相等运算符,后者为赋值运算符。运算符说明运算符说明>大于<=小于或等于<小于==等于>=大于或等于!=不等于(2)关系表达式。用关系运算符把两个C语言表达式连接起来的式子称为关系表达式。a<b、a+b>c-d、(a=3)<=(b=5)、'a'>='b'、(a>b)==(b>c)都是合法的关系表达式。若关系表达式成立,则结果为“真”,用整数“1”表示;若关系表达式不成立,则结果为“假”用整数“0”表示。例如:a=5,b=4,c=1。则:①关系表达式“a>b”成立,其值为“真”,即表达式的值为1。②关系表达式“(a>b)==c”成立,其值为“真”,即表达式的值为1。因为“a>b”成立,其值为1,等于c的值。③关系表达式“b+c<a”不成立,其值为“假”,即表达式的值为0。二、逻辑运算符与逻辑表达式(1)逻辑运算符。C语言中提供了3种逻辑运算符,如表3-2所示。表3-2逻辑运算符运算符说明&&逻辑与||逻辑或!逻辑非逻辑运算符的运算规则如下:①逻辑与“&&”。当且仅当两个运算对象都为“真”时,运算结果为“真”,否则为“假”。②逻辑或“||”。当且仅当两个运算对象都为“假”时,运算结果为“假”,否则为“真”。③逻辑非“!”。当运算对象为“真”时,运算结果为“假”;当运算对象为“假”时,运算结果为“真”。注意,参与逻辑运算的对象,非0即认为“真”,0认为“假”。而运算结果为“真”时,用整数1表示,运算结果为“假”时,用整数0表示。

逻辑运算符的优先级如下:①三者相比较。逻辑非的优先级最高,逻辑与次之,逻辑或最低。!(非)→&&(与)→||(或)。②与其它种类运算符的优先级比较。!→算术运算符→关系运算符→&&→||→赋值运算符→逗号运算符根据运算符的优先级可知,表达式“a>b&&c>d”等价于“(a>b)&&(c>d)”,“a+b>c&&x+y<b

”等价于“((a+b)>c)&&((x+y)<b)”。(2)逻辑表达式。用逻辑运算符将一个或多个表达式连接起来的式子称为逻辑表达式。例如,a=7,b=9,则逻辑表达式“a&&b”的值为1。因为运算对象a和b均为非0的数,即都为“真”,“a&&b”运算的结果为“真”,即为1。三、条件运算符与条件表达式“?:”为条件运算符,它要求有3个操作对象,故称为三目运算符。它是C语言中唯一的一个三目运算符。由条件运算符连接的表达式称为条件表达式。其一般形式为:表达式1?表达式2:表达式3条件运算符的执行顺序是,先求解表达式1的值,若为非0(即为“真”)则求解表达式2,表达式2的值就作为整个条件表达式的值。若表达式1的值为0(即为“假”),则求解表达式3,表达式3的值就是整个条件表达式的值。如a=2、b=3、max=(a>b)?a:b,则max的值为3。其执行过程是,先求解表达式“a>b”,由于“a>b”的值为0,故max的值等于b的值3。ABab条件pYN当p为“真”当p为“假”

四、if语句的三种形式

选择结构程序又称分支结构程序。程序一般是顺序执行的,即按书写顺序一条语句一条语句地执行,但是选择结构可以改变程序的执行顺序。选择结构还可能造成某些语句不被执行,选择结构也使计算机具备了逻辑判断能力。

选择结构是根据条

件有选择地执行程序

代码,如图3-2所示。图3-2选择结构程序执行示意图如果(用户输入的密码是:123)

输出:密码正确!否则

输出:密码错误!if(判断式){判断式成立时所执行的语句}else{判断式不成立时所执行的语句}程序代码:#include<stdio.h>main(){inta;printf(“请输入密码:”);

scanf(“%d”,&a);/*用户输入密码*/

if(a==123)/*密码判断*/{printf(“密码正确!\n”);

}else{printf(“密码错误!\n”);

}}实例一:根据上网用户输入的年龄,决定弹出信息,如年龄小于18,则弹出“你太小了,还不能到网吧上网哦!”,否则弹出“祝你玩得愉快!”程序代码:#include<stdio.h>voidmain(){inta;printf("请输入你的年龄:");scanf(“%d”,&a);

if(a>=18){printf(“祝你玩得愉快!\n”);

}

else{printf(“你太小了,还不能到网吧上网哦!\n”);

}}实例二:

if语句有3种形式:if单分支选择结构,if…else…双分支选择结构,if…elseif多分支选择结构。

1.单分支选择结构。单分支选择结构的一般形式为:

if(表达式)语句;

表达式后面的语句可以是一条语句,也可以是复合语句。程序执行的流程是:先计算表达式的值,若值为非0(即为“真”),则执行语句,否则就跳过语句。执行流程如图3-3所示。例如,如果学生的成绩grade大于等于60,在屏幕上显示“恭喜你,通过了!”。该操作用if语句描述为:

if(grade>=60)printf("恭喜你,通过了!");图3-3单分支选择结构流程图2.双分支选择结构。双分支选择结构的一般形式为:

if(表达式)

语句1;else

语句2;

语句1和语句2可以是一条语句,也可以是复合语句。程序执行的流程是:先计算表达式的值,若值为非0(即为“真”),则执行语句1,否则执行语句2。执行流程如图3-4所示。图3-4双分支选择结构流程图【例3-1】输入两个整数,求其中较大的整数。#include<stdio.h>/*包含头文件*/voidmain(){inta,b,max;/*定义三个整型变量*/

printf("请输入两个整数:");scanf("%d,%d",&a,&b);/*从键盘输入变量的值*/if(a>b)

/*如果a大于b*/

max=a;

/*变量a的值赋给max*/else

/*否则*/

max=b;

/*变量b的值赋给max*/printf("max=%d\n",max);/*输出max的值*/

}程序运行的结果为:请输入两个整数:5,9<回车>max=93.多分支选择结构。多分支选择结构的一般形式为:if(表达式1)

语句1;elseif(表达式2)

语句2;elseif(表达式3)

语句3;

……elseif(表达式n-1)

语句n-1;else

语句n;

语句1、语句2、……、语句n可以是一条语句,也可以是复合语句。

程序执行的流程是,若表达式1的值为非0(即为“真”),则执行语句1。否则,去判定elseif后面的表达式2,如果其值为非0,则执行语句2。否则,去判定下一个elseif后面的条件3,如果值为非0,则执行语句3。以此类推。如果条件1、条件2、条件3、……、条件n−1都为0,那么执行else后面的语句n。执行流程如图3-5所示。

图3-5多分支选择结构流程图23【例3-2】根据输入的学生的成绩打印出对应的等级。#include<stdio.h>/*包含头文件*/voidmain(){floatscore;/*定义一个实型变量*/

printf("请输入考试分数:");scanf("%f",&score);/*从键盘输入score的值*/if(score>=90)/*如果score≥90*/

printf("优秀\n");elseif(score>=80)/*否则如果90>score≥80*/printf("良好\n");elseif(score>=60)/*否则如果80>score≥60*/printf("及格\n");else/*否则score<60*/printf("不及格\n");}程序运行的结果为:请输入考试分数:85.5<回车>良好课堂练习:设计一个程序计算以下函数的结果。

0(x<0)y=x2(0≤x<10)2x+3(x≥10)2.编程思路分析

分段函数的求解,当输入一个x的值后,先判断它落在什么区间,然后再决定采用哪一个函数进行计算。设计流程如图3-6所示。可用以下两种方法实现。图3-6函数计算流程图方法一:#include<stdio.h>voidmain(){floatx,y;printf("inputx:\n");scanf("%f",&x);

if

(x>=10)

y=2*x+3;

else

if(x>=0)y=x*x;

else

y=0;printf("y=%f\n",y);}作业P533.编程题(1)思考与练习P521.填空题2.选择题方法二:#include<stdio.h>voidmain(){floatx,y,k;printf("inputx:\n");scanf("%f",&x);

k=1*(x<0)+2*(x>=0&&x<=10)+3*(x>10);switch(k){case1:y=0;break;case2:y=x*x;break;case3:y=2*x+3;break;}}

5.if语句的嵌套在一个if语句中可以包含另外一个或多个if语句的形式称为if语句的嵌套。

if语句嵌套的一般形式为:

if(表达式1)

if(表达式2)

语句1; else

语句2;

else

if(表达式3)

语句3; else

语句4;

其执行过程是:如果表达式1的值为非0(即为“真”),则执行第一个if-else语句,如果表达式1的值为假,则执行第二个if-else语句。然后跳到整个if语句之外继续执行程序。if语句嵌套的执行流程如图3-7表示。关于if语句嵌套的几点说明:(1)在嵌套内的if语句可以是单分支选择if语句也可以是双分支if-else语句,else总是与位于它之前、离它最近的一个未配对的if配对。(2)为避免错误,可用大括号“{}”将内嵌的if-else语句括起来,以此来确定if与else的配对关系属于内嵌范围。

图3-7if语句的嵌套任务3.2用switch语句实现的多分支结构任务说明用if语句可以实现多分支的选择结构,但程序冗长,可读性差。switch语句专门用于处理多分支选择,使程序结构简洁、清晰。在本任务中,将学习switch语句的基本结构及使用方法。

任务实施1.任务功能编写简易计算器程序,完成任意两个数的“+”、“-”、“*”、“/”运算。2.编程思路可根据输入的运算符由switch语句来完成相应的算术运算。用户先输入两个运算量x和y,再输入算术运算符。当用户输入的运算符不是“+”、“-”、“*”或“/”时,给出提示后退出程序。程序的执行流程如图3-8所示。

图3-8两个数进行算术运算的流程图

3.源程序Ex3-2.c#include<stdio.h>/*包含头文件*/#include<stdlib.h>/*函数exit()包含于头文件stdlib.h*/voidmain(){floatx,y,z;/*定义三个实型变量*/charopt;/*定义一个字符型变量*/printf("请输入两个运算量:");scanf("%f,%f",&x,&y);/*从键盘上输入x、y的值*/getchar();//用来抵消回车符,以便opt能正确取值printf("请输入运算符+、-、*或/:");opt=getchar();/*从键盘上输入一个运算符*/switch(opt){case'+':z=x+y;break;case'-':z=x-y;break;case'*':z=x*y;break;

case'/':z=x/y;break;default:printf("%c不是运算符。\n",opt);exit(0);

//函数exit(0)用于退出程序

}printf("%.2f%c%.2f=%.2f\n",x,opt,y,z);}4.运行、调试在VC++6.0开发环境下,编辑、编译和调试源程序Ex3-2.c。程序运行的结果为:请输入两个运算量:15.3,6<回车>请输入运算符“+”、“-”、“*”或“/”:<回车>15.30*6.00=91.80任务拓展将源程序Ex3-1.c中用if语句求分段函数的值改为用switch语句实现。提示:定义一个整型变量k,用表达式k=1*(x<=0)+2*(x>0&&x<=10)+3*(x>10)将x的三个值域对应的转换为三个整数,即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");break;case2:printf("你获得一听雪碧\n");break;case3:printf("你获得一芬达\n");break;case4:printf("你获得一听百事可乐\n");break;case5:printf("你获得一听非常可乐\n");break;default:printf("非法操作!\n");break;}}运行结果:=============自动饮料机==============1.可口可乐2.雪碧3.芬达4.百事可乐5.非常可乐请按1-5按钮选择饮料:3<CR>你获得一听芬达程序执行流程如图3-9所示。图3-9程序执行流程图课堂练习:输入某学生的成绩,输出相应的信息。成绩在90-100之间,输出“Verygood!”,成绩在70-89之间,输出“Good!”,成绩在60-69之间,输出“Pass!”,60分以下输出“Nopass!”。(switch语句实现)解题思路:流程图如图3-10所示。图3-10程序执行流程图

程序代码:#include<stdio.h>voidmain(){intscore,mark;printf("请输入考试分数:\n");scanf("%d",&score);mark=score/10;switch(mark){ case10:printf("Verygood!\n");break; case9:printf("Verygood!\n");break;case8:printf("Good!\n");break; case7:printf("Good!\n");break;case6:printf("Pass!\n");break;default:printf("Nopass!\n");}}

switch语句的一般形式为:

switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……

case常量表达式n:语句n;break;default:语句n+1;}break语句的功能是终止switch语句的执行。

switch语句的执行过程:首先计算switch后面表达式的值,然后逐个与case后常量表达式的值相比较,当找到值相等的某个常量表达式时,则执行其后的语句。如果没有break语句,程序将继续执行后面case后的语句。如果有break语句,则程序不再执行后面case后的语句,而是立即跳出switch语句,去执行switch后面的语句。如表达式的值与所有case后常量表达式的值均不相等,则执行default后的语句。switch语句的执行过程如图3-11表示。图3-11switch语句的执行流程(包含break语句)关于switch语句的几点说明:(1)switch后面表达式的值的类型只能是整型或字符型。(2)常量表达式通常是整型常量或字符型常量。(3)case与常量表达式之间必须用空格分开。(4)当某个case后面包含多条语句时,可以不用大括号“{}”括起来,系统会自动识别并顺序执行该case后的所有语句。

【例3-3】对学生的考试成绩score(百分制)进行等级评定:score≥90分为优秀,70≤score<90分为良好,60≤score<70分为及格,score<60分为不及格。(用switch语句实现)#include<stdio.h>

温馨提示

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

评论

0/150

提交评论