大学计算机第四章 - 范文中心

大学计算机第四章

11/15

第4章 分支结构及其应用

学习目标: 掌握关系和逻辑运算,实现分支结构的语句,编写分支结构程序。

学习内容: 关系和逻辑运算符及表达式,if 语句,switch 语句,条件表达式,分支结构嵌套,分支结构程序设计方法。 4.1 一个分支结构程序实例

【例4-1】任意输入两个整数,输出其中的大数。 【程序代码】 #include main() { }

分支结构是C 语言的三种基本结构之一。分支结构有双分支int a,b,max;

printf("请输入两个数据:"); scanf("%d,%d",&a,&b); if(a>b)

max=a;

else

max=b;

printf("二者中的大数为:%d\n",max);

结构和多分支结构,双分支结构是根据条件的成立与否决定程序的执行方向,条件成立时执行一些语句,条件不成立时执行另一方向上的语句。多分支结构通常有两个以上的分支,要根据多个条件才能进行选择。

4.2 分支结构中条件的描述

分支结构把条件判断的结果作为选择的依据。通常情况下,分支结构中的条件是用关系表达式或逻辑表达式表示的。 4.2.1 关系运算符和关系表达式 1、关系运算符

关系运算符是用来比较两个运算量大小关系的。表4-1列出了关系运算符及其示例。 表4-1 关系运算符

2、关系表达式

关系表达式的形式为:

表达式1 关系运算符 表达式2

例如:a>b、a+b>c、x!=y都是合法的关系表达式。 关系表达式的值有两种情况:

(1)当关系成立时,表达式的值为逻辑真,程序中用1表示。

(2)当关系不成立时,表达式的值为逻辑假,用0来表示。 这里的0和1在程序中被看作是整型量。

例如,有关系表达式b

小测验

假设变量a=3、b=2、c=1,执行赋值语句

f=a>b>c;后,变量f 的值是多少?

4.2.2 逻辑运算符和逻辑表达式

1、逻辑运算符

C 语言的逻辑运算符有3个,见表4-2. 表4-2 逻辑运算符

其中,逻辑与(&&)和逻辑或(||)是双目运算符,逻辑非(! )是单目运算符。 2、逻辑表达式 逻辑表达式的形式为:

表达式1 && 表达式2 表达式1 || 表达式2

!表达式

与关系表达式相同,逻辑表达式的值也有两种情况:1或0。

假设用a 表示表示式1,b 表示表达式2,则逻辑表达式的运算规则见表4-3。

表4-3 逻辑运算的运算规则

对于逻辑非(!),如!a ,当a 的值为0时,!a 的值为1,当a 的值为非0时,!a 的值为0。 小测验

用关系或逻辑表达式描述下列条件: (1)判断整数x 是否为偶数。 (2)判断字符变量c 是否为英文字母。

(3)判断三个实数a 、b 、c 能否构成一个三角形。

4.3 实现分支结构的语句

一个分支结构程序的关键在于条件的描述和实现分支结构的语句。通过前面的学习,对条件描述有了一定的了解,在下面的内容中将详细介绍实现分支结构的语句。

在C 语言中,分支结构主要由if 语句和switch 语句实现。

4.3.1 if语句

C 语言的if 语句有三种形式,分别适应不同的分支结构。 1、简单if 语句 (1)一般形式:

if (表达式) {

语句 }

(2)执行过程:计算表达式的值,若值为非0(即为“真”),则执行指定语句,否则跳过if 语句而直接执行下一条语句。

例如:要实现:如果a 大于0,给b 加1,该操作用简单if 语句表示为:

if(a>0) { b++; }

注意:在简单if 语句中,当if 下的语句为一条语句时,两边的花括号“{}”可以省略不写。如果包含有多个语句时,必须要用“{}”括起来组成复合语句(注意:复合语句在语法上认为是一条语句)。

【例4-3】计算函数值。输入整数x ,根据下面的分段函数计算y

的值。

x+1 (x>0) y= x (x=0)

x−1 (x

【编程思路】x 为任意的整数,有三种取值可能,只有通过判断才能确定其具体取值情况,以便给y 赋值。本例使用3个简单的if 语句来完成x 的取值的判断。 【程序代码】 #include main() { }

2、双分支if 语句(if-else 形式) int x,y;

printf("请输入x :"); scanf("%d",&x); if(x>0)

y=x+1;

if(x==0) y=x;

if(x

printf("x=%d,y=%d\n",x,y);

简单if 语句只在条件为“真”时执行指定的操作。而双分支if 语句,在条件为“真”或为“假”时,都有要执行的操作。 (1)一般形式: if(表达式)

{语句1} else

{语句2}

(2)执行过程:计算表达式的值,若表达式的值为非0(即“真”),则选择执行语句1,否则选择执行语句2. 其执行流程如图4-3所示。

例如:以下两个操作均用if-else 语句完成。 【程序1】

if(a>0) {

b++; } else {

b--; } 【程序2】 if(i%2==0)

printf("i是偶数\n");

else

printf("i是奇数\n");

【例4-4】任意提供一个学生的成绩,判断是否及格。 【编程思路】

本题的判断条件只有两种结果:大于等于60分和小于60分,因此,使用if-else 语句实现。 【程序代码】 #include main() { }

int score;

printf("请输入成绩:"); scanf("%d",&score); if(score>=60)

printf("及格\n");

else

printf("不及格");

使用if-else 语句,应注意以下事项:

(1)if-else 语句中的else 子句可以省略,不带else 子句时就是简单if 语句。

(2)else 子句不能作为单独的语句使用,它是if 语句的一部分,必须与if 搭配使用。

(3)如果if 子句或else 子句只有一条语句时,“{}”可以省略,如例4-4,但是包含多个语句时,必须要用“{}”括起来组成复合语句。

(4)书写代码时,为了提高程序的可读性,if 与else 对齐,而子句均向右缩进。

【例4-5】火车站托运行李,从甲地到乙地,按规定每张客票托运行李不超过50千克的部分,按每千克1.35元计算运费,如超过50千克,超过的部分按每千克2.65元计算运费。编写程序计算托运费。 【程序代码】 #include main() {

float f,w;

printf("请输入行李的重量:"); scanf("%f",&w);

}

if(w

3、条件表达式

双分支结构除了用if-else 语句实现外,还可以使用条件表达式实现。

条件表达式的一般形式为:

表达式1?表达式2:表达式3

例如:a>b?a:b

条件表达式的运算过程为:先计算表达式1,如果表达式1的值为真,则计算表达式2的值,并以此作为条件表达式的值;如果表达式1的值为假,则计算表达式3的值,并以此作为条件表达式的值。

例如:

【程序段】

if(a>b) max=a;

else max=b;

可以用条件表达式描述为max=(a>b)?a:b;。条件表达式通常

用于赋值语句中。

下面用条件表达式完成例4-1中的分支判断。

【程序代码】

#include

main()

{

} int a,b,max; printf("请输入两个数据:"); scanf("%d,%d",&a,&b); max=(a>b)?a:b; printf("二者中的大数为:%d\n",max); 4、多分支if 语句(if-else-if 形式)

在实际应用中,存在大量的多分支问题。多分支if 语句就是用来实现多分支结构的语句。

(1)一般形式:

if(表达式1)

语句1

else if(表达式2)

语句2

……

else if(表达式n)

语句n

else

语句n+1

说明:多分支if 语句中,表达式1的优先级最高,表达式

2

次之,无论执行完哪个分支语句,接下来都要转到多分支if 语句的后续语句继续执行。

【例4-6】对学生的考试成绩进行等级评价,90分以上为优秀,80~90分为良好,60~80分为及格,60分以下为不及格。任意输入一个学生的成绩,判断属于哪个等级。

【程序代码】

#include

main()

{

int score; printf("请输入成绩:"); scanf("%d",&score); if(score>=90) printf("优秀\n"); else if(score>=80) printf("良好\n"); else if(score>=60) printf("及格\n",score); else printf("不及格");

}

4.3.2 switch 语句

switch 语句是又一个描述多分支结构的语句。

1、一般形式

switch(表达式)

{

case 常量表达式1: 语句1; case 常量表达式2: 语句2; ...... case 常量表达式n: 语句n;

default: 语句n+1;

}

2、执行过程

(1)先计算switch 后表达式的值。

(2)用表达式的值顺次同case 后常量表达式的值进行比较。

(3)若找到值相等的常量表达式,则执行常量表达式冒号后面的语句(这是入口)。注意,该语句执行后,程序会依次执行其后的所有冒号后面的语句。

(4)若找不到匹配的常量表达式的值,则执行default 后面的语

句。

3、switch 语句说明

(1)switch 后表达式的值的类型必须是整型或字符型;

(2)常量表达式的值也必须是整型或字符型;

(3)每个case 后常量表达式的值必须互不相同。

【例4-7】 用switch 语句处理例4-6中的问题

【程序代码】

#include

main()

{

int score,mark; printf("\n请输入成绩:"); scanf("%d",&score); mark=score/10; switch(mark) { case 10: printf("%d--------优秀\n",score); case 9: printf("%d--------优秀\n",score); case 8: printf("%d--------良好\n",score); case 7: printf("%d--------及格\n",score); case 6: printf("%d--------及格\n",score); default: printf("%d-------不及格\n\n",score);

} }

执行程序,输入95,程序输出结果为:

显然,程序的输出结果并不是预期的效果,原因是当输入95,变量mark 的取值为9,执行输出“良好”的输出语句并以此为入口,开始往下执行,直到switch 语句的结束符“}”为止,因此程序不能实现分支结构的功能。

为了得到预期的输出结果,解决方法是在switch 语句中使用break 语句。例如,在上面程序的switch 语句体中假如break 语句,用来终止switch 的顺序往下执行。

switch(mark) { case 10: printf("%d--------优秀\n",score);break; case 9: printf("%d--------优秀\n",score);break; case 8: printf("%d--------良好\n",score);break; case 7: printf("%d--------及格\n",score);break; case 6: printf("%d--------及格\n",score);break; default: printf("%d-------不及格

\n\n",score);

}

重新执行程序,输入95,程序输出结果为:

4.4 分支结构应用实例

【例4-8】输入一个常数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。

【程序代码】

#include

main()

{

int x; printf("Please input a number:"); scanf("%d",&x); if(x%2==0) printf("%dis an even\n",x); else { printf("%d is an odd\n",x); if(x%5==0)

printf("%d is the times of 5\n",x);

}

} else printf("%d is not the times of 5\n",x);

小测验:

当a=1、b=3、c=5、d=4时,执行完下面程序段后,变量x 的值为: 。

if(a

if(c

else x=7;

提示:在使用if 语句时,为明确关系,避免嵌套错误,书写时请将匹配的if 和else 对齐,将内嵌的if 语句缩进。

《C 语言程序设计实验教程》——习题4


相关内容

  • 考试科目-云南师范大学研究生部
    考试科目 211 翻译硕士英语 考试范围 211 张汉熙, <高级英语> ,外语教学与研究出版社,1995 修订本 333<教育学原理>,王道俊.郭文安主编,人民教育出版社 2009 年 <中国教育史>, ...
  • 衡阳市第四届大学生科技创新大赛通知
    衡阳市第四届大学生科技创新大赛通知 各系团总支: 衡阳市第四届大学生科技创新大赛组委会对入围的各参赛项目实行现场答辩,现将有关事项通知如下: 一.答辩时间:2010年6月18日 老校区参赛选手2010年6月18日(星期五)6:30前在办公楼 ...
  • 北京工业大学关于研究生参与涉密科研课题及涉密研究生学位论文.学位申请的保密管理规定(试行)
    北京工业大学关于研究生参与涉密科研课题及涉密研究生学位论文. 学位申请的保密管理规定(试行) 第一章 总 则 第一条 为加强我校研究生参与涉密科研课题及涉密研究生学位论文及博 士(硕士) 学位申请的保密管理工作,根据<中华人民共和国保 ...
  • 徐州某公司财务报表分析
    毕业设计(论文) 徐州某某公司财务报表分析 Xuzhou letter company financial statement analysis 院系 信息管理技术学院 班级 会计某某 学生姓名 某某 学号 1232318233 指导教师 ...
  • 大学课后题答案
    不用买参考书了!大学课本答案大全!--爱死你了!( 为什么大四才发现啊) 2008-12-18 16:50 | (分类:) 注册可用 公共课程 http://www.10xiao.com/forum-6-1.html 新视野大学英语读写教程 ...
  • 统计学基础
    统计学基础编辑 统计学是收集.分析.表述和解释数据的科学.作为数据分析的一种有效工具,统计方法已广泛应用于社会科学和自然科学的各个领域,是各学科领域研究者和实际工作者的必备知识. 书    名 统计学基础 作    者 贾俊平 ISBN [ ...
  • 华侨大学科学技术研究项目和成果认定办法
    首页部门概况2011计划管理条例办事流程科研平科研统计学术交流企业需求相关下载用户管理联系我们学风建设 华侨大学科学技术研究项目和成果认定办法 来源:科研处 发布时间:2014-03-19 浏览次数: 华大科[2014]5号 关于印发华侨大 ...
  • 大学生学科竞赛简版
    相关的国家级大学生学科竞赛介绍 历史最悠久的全国大学生科技学术竞赛是"挑战杯"全国大学生课外学术实践竞赛.根据<教育部 财政部关于实施高等学校本科教学质量与教学改革工程的通知>(教高[2007]1号)的总体安 ...
  • 机械系机械制造与自动化专业大学生职业生涯规划书
    第一章 认识自我 1.个人基本情况 性格特点:性格外向,待人诚恳,交际能力良好 做事认真,能吃苦耐劳,有良好的学习能力 2.职业兴趣: 做一名机械工程师是我的第一职业兴趣!做一名机械工程师需要具备基本的机械加工工艺知识,比如机床选择.刀具选 ...
  • 校学生会规章制度
    安徽理工大学学生会规章制度目 录序 言 第一章 学生会各部门职责及干部职责 第二章 学生会干部招聘和使用办法 第三章 学生会人事考评办法 第四章 学生会签到.值班及接待制度 第五章 学生会办公室管理制度 第六章 学生会工作证使用管理制度 第 ...