大学计算机第四章

第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

第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


相关文章

  • 世界上最好的大学排名
  • 世界上最好的大学排名 http://edu.QQ.com 2003年11月14日 12:10 来源:自定义来源 1----哈佛大学 (8: 数学, 分子生物学及遗传学, 生物学及生物化学, 微生物学, 神经科学 及行为学, 免疫学, 精神病 ...查看


  • 第四届读书节宣传语
  • "经典与我同行,书香溢满校园" 南京理工大学第四届读书节系列活动之--读书讲座(开幕式) 大学里的读书,其主要目的是在于教会我们怎样做人,做什么样的人.作为中国未来希望的新一代,我们身负着重大的历史使命.读书为学做研究, ...查看


  • 大学几乎所有学科的课本答案[2]
  • 大学几乎所有学科的课本答案! 来源: 任明嘉的日志 经济金融 [PDF格式]<会计学原理>同步练习题答案 [Word格式]<成本会计>习题及答案(自学推荐,23页) [Word格式]<成本会计>配套习题集 ...查看


  • 华东政法大学招生目录
  • 附1: 2011年硕士研究生招生入学考试初试科目 附2: 2011年硕士研究生入学考试参考书目 020205产业经济学:<西方经济学>高鸿业主编,中国人民大学出版社2004年版(第三版):<现代西方经济学简明教程>尹 ...查看


  • 哈佛人力资源管理制度全集目录
  • <哈佛模式-培训管理>电子书 [内容介绍]: 哈佛模式·培训管理 --帮助中国企业家打造防部高绩效企业团队 培训作为提升企业核心竞争力,增强企业盈利能力以及可持续发展的重要手段,在国内企业界逐渐达成共识.当前,在加入WTO的大背 ...查看


  • 本科毕业设计_某科研办公楼框架结构设计
  • 本科毕业设计 某科研办公楼框架结构设计 摘要 摘要 本设计5层办公楼,总建筑面积约5467平方米.标准层高3.8米.主体采用框架结构体系,填充墙采用陶粒混凝土砌块墙,基础采用独立基础. 毕业设计目的是熟悉多层建筑结构设计的步骤,方法,掌握结 ...查看


  • 会计专业以及英语专业的就业方向
  • 会计专业以后的就业方向主要有: 1.财务工作.包括会计.出纳等.工作比较稳定,相对清闲,但是工资未必会很高.而且从事具体财务工作的人,更多的是看经验,刚入职待遇不会太好,随着经验的积累会越来越吃香 2.审计.很多财务制度健全的单位都有自己的 ...查看


  • 河北省专接本考试专业课考试所考科目用参考教材目录
  • 河北省 专接本考试专业课考试 所考科目 用参考教材目录.txt真正的好朋友并不是在一起有说不完的话题,而是在一起就算不说话也不会觉得尴尬.你在看别人的同时,你也是别人眼中的风景.要走好明天的路,必须记住昨天走过的路,思索今天正在走着的路. ...查看


  • 西安理工大学考研机械设计基础掌握重点
  • 机械设计基础 (第五版) 杨可桢 程光蕴主编 高等教育出版社 22.5 7-04-019209-8 机械设计基础 知识点 第一讲:绪论 掌握一些小的概念比如机械 机构 机器的概念就行 第二讲:第一章平面机构的自由度 重点 必须会算自由度 第 ...查看


  • 成都理工学士学位授予细则
  • 成都理工大学学士学位授予工作细则 (征求意见稿) 第一条 根据现行<中华人民共和国学位条例>和<中华人民共和国学位条例暂行实施办法>等文件的规定和要求,制订本细则. 第二条 本细则是<成都理工大学全日制本科生学 ...查看


热门内容