大学计算机第四章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 6:printf("%d--------及格\n",score);
default:printf("%d-------不及格\n\n",score);
}
}
执行程序,输入95,程序输出结果为:
显然,程序的输出结果并不是预期的效果,原因是当输入95,变量mark的取值为9,执行输出“良好”的输出语句并以此为入口,开始往下执行,直到switch语句的结束符“}”为止,因此程序不能实现分支结构的功能。
条件表达式的一般形式为:
表达式1?表达式2:表达式3
例如:a>b?a:b
条件表达式的运算过程为:先计算表达式1,如果表达式1的值为真,则计算表达式2的值,并以此作为条件表达式的值;如果表达式1的值为假,则计算表达式3的值,并以此作为条件表达式的值。
例如:
【程序段】
if(a>b) max=a;
else max=b;
【程序代码】
#include<stdio.h>
main()
{
intscore;
printf("请输入成绩:");
scanf("%d",&score);
if(score>=60)
printf("及格\n");
else
printf("不及格");
}
小测验:
程序中的判断可以用简单if语句完成吗?
使用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语句实现。
第4章分支结构及其应用
学习目标:掌握关系和逻辑运算,实现分支结构的语句,编写分支结构程序。
学习内容:关系和逻辑运算符及表达式,if语句,switch语句,条件表达式,分支结构嵌套,分支结构程序设计方法。
4.1一个分支结构程序实例
【例4-1】任意输入两个整数,输出其中的大数。
【程序代码】
#include <stdio.h>
4.2分支结构中条件的描述
分支结构把条件判断的结果作为选择的依据。通常情况下,分支结构中的条件是用关系表达式或逻辑表达式表示的。
4.2.1关系运算符和关系表达式
1、关系运算符
关系运算符是用来比较两个运算量大小关系的。表4-1列出了关系运算符及其示例。
表4-1关系运算符
运算符
名称
示例
>
大于
x>y
>=
大于等于
小测验
假设变量a=3、b=2、c=1,执行赋值语句f=a>b>c;后,变量f的值是多少?
提示:关系表达式用于描述简单条件,对于复合条件需要用逻辑表达式来表示。
4.2.2逻辑运算符和逻辑表达式
1、逻辑运算符
C语言的逻辑运算符有3个,见表4-2.
表4-2逻辑运算符
运算符
名称
示例
!(逻辑非)
逻辑非
!(x<0)
&&(逻辑与)
逻辑与
x>=0 && x<=10
||(逻辑或)
逻辑或
x<=0 || x>=10
其中,逻辑与(&&)和逻辑或(||)是双目运算符,逻辑非(!)是单目运算符。
2、逻辑表达式
逻辑表达式的形式为:
表达式1 &&表达式2
表达式1 ||表达式2
!表达式
与关系表达式相同,逻辑表达式的值也有两种情况:1或0。
【程序代码】
#include <stdio.h>
main()
{
intx,y;
printf("请输入x:");
scanf("%d",&x);
if(x>0)
y=x+1;
if(x==0)
y=x;
if(x<0)
y=x-1;
printf("x=%d,y=%d\n",x,y);
}
2、双分支if语句(if-else形式)
4.3.1 if语句
C语言的if语句有三种形式,分别适应不同的分支结构。
1、简单if语句
(1)一般形式:
if(表达式)
{
语句
}
(2)执行过程:计算表达式的值,若值为非0(即为“真”),则执行指定语句,否则跳过if语句而直接执行下一条语句。
例如:要实现:如果a大于0,给b加1,该操作用简单if语句表示为:
可以用条件表达式描述为max=(a>b)?a:b;。条件表达式通常用于赋值语句中。
下面用条件表达式完成例4-1中的分支判断。
【程序代码】
#include <stdio.h>
main()
{
inta,b,max;
printf("请输入两个数据:");
scanf("%d,%d",&a,&b);
max=(a>b)?a:b;
为了得到预期的输出结果,解决方法是在switch语句中使用break语句。例如,在上面程序的switch语句体中假如break语句,用来终止switch的顺序往下执行。
switch(mark)
{
case 10:printf("%d--------优秀\n",score);break;
case 9:printf("%d--------优秀\n",score);break;
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
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);
(4)书写代码时,为了提高程序的可读性,if与else对齐,而子句均向右缩进。
【例4-5】火车站托运行李,从甲地到乙地,按规定每张客票托运行李不超过50千克的部分,按每千克1.35元计算运费,如超过50千克,超过的部分按每千克2.65元计算运费。编写程序计算托运费。
【程序代码】
#include <stdio.h>
x>=y
<
小于
x<y
<=
小于等于
x<=y
==
等于
x==y
!=
不等于
x!=y
提示:在书写关系运算符>=、<=、==、!=时,中间不能出现空格,否则会产生语法错误。
2、关系表达式
关系表达式的形式为:
表达式1关系运算符表达式2
例如:a>b、a+b>c、x!=y都是合法的关系表达式。
关系表达式的值有两种情况:
(2)用表达式的值顺次同case后常量表达式的值进行比较。
(3)若找到值相等的常量表达式,则执行常量表达式冒号后面的语句(这是入口)。注意,该语句执行后,程序会依次执行其后的所有冒号后面的语句。
(4)若找不到匹配的常量表达式的值,则执行default后面的语句。
3、switch语句说明
(1)switch后表达式的值的类型必须是整型或字符型;
main()
{
inta,b,max;
printf("请输入两个数据:");
scanf("%d,%d",&a,&b);
if(a>b)
max=a;
else
max=b;
printf("二者中的大数为:%d\n",max);
}
分支结构是C语言的三种基本结构之一。分支结构有双分支结构和多分支结构,双分支结构是根据条件的成立与否决定程序的执行方向,条件成立时执行一些语句,条件不成立时执行另一方向上的语句。多分支结构通常有两个以上的分支,要根据多个条件才能进行选择。
#include <stdio.h>
main()
{
intscore;
printf("请输入成绩:");
scanf("%d",&score);
if(score>=90)
printf("优秀\n");
else
if(score>=80)
printf("良好\n");
else
if(score>=60)
printf("及格\n",score);
(1)if-else语句中的else子句可以省略,不带else子句时就是简单if语句。
(2)else子句不能作为单独的语句使用,它是wenku.baidu.comf语句的一部分,必须与if搭配使用。
(3)如果if子句或else子句只有一条语句时,“{}”可以省略,如例4-4,但是包含多个语句时,必须要用“{}”括起来组成复合语句。
}
重新执行程序,输入95,程序输出结果为:
4.4分支结构应用实例
【例4-8】输入一个常数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。
说明:多分支if语句中,表达式1的优先级最高,表达式2次之,无论执行完哪个分支语句,接下来都要转到多分支if语句的后续语句继续执行。
【例4-6】对学生的考试成绩进行等级评价,90分以上为优秀,80~90分为良好,60~80分为及格,60分以下为不及格。任意输入一个学生的成绩,判断属于哪个等级。
【程序代码】
if(a>0)
{
b++;
}
注意:在简单if语句中,当if下的语句为一条语句时,两边的花括号“{}”可以省略不写。如果包含有多个语句时,必须要用“{}”括起来组成复合语句(注意:复合语句在语法上认为是一条语句)。
【例4-3】计算函数值。输入整数x,根据下面的分段函数计算y的值。
【编程思路】x为任意的整数,有三种取值可能,只有通过判断才能确定其具体取值情况,以便给y赋值。本例使用3个简单的if语句来完成x的取值的判断。
(2)常量表达式的值也必须是整型或字符型;
(3)每个case后常量表达式的值必须互不相同。
【例4-7】用switch语句处理例4-6中的问题
【程序代码】
#include <stdio.h>
main()
{
intscore,mark;
printf("\n请输入成绩:");
scanf("%d",&score);
简单if语句只在条件为“真”时执行指定的操作。而双分支if语句,在条件为“真”或为“假”时,都有要执行的操作。
(1)一般形式:
if(表达式)
{语句1}
else
{语句2}
(2)执行过程:计算表达式的值,若表达式的值为非0(即“真”),则选择执行语句1,否则选择执行语句2.其执行流程如图4-3所示。
例如:以下两个操作均用if-else语句完成。
(2)判断字符变量c是否为英文字母。
(3)判断三个实数a、b、c能否构成一个三角形。
4.3实现分支结构的语句
一个分支结构程序的关键在于条件的描述和实现分支结构的语句。通过前面的学习,对条件描述有了一定的了解,在下面的内容中将详细介绍实现分支结构的语句。
在C语言中,分支结构主要由if语句和switch语句实现。
main()
{
floatf,w;
printf("请输入行李的重量:");
scanf("%f",&w);
if(w<=50)
f=w*1.35;
else
f=50*1.35+(w-50)*2.65;
printf("您的行李托运费为:%.2f",f);
}
3、条件表达式
双分支结构除了用if-else语句实现外,还可以使用条件表达式实现。
(1)当关系成立时,表达式的值为逻辑真,程序中用1表示。
(2)当关系不成立时,表达式的值为逻辑假,用0来表示。
这里的0和1在程序中被看作是整型量。
例如,有关系表达式b<c,当b的值是5,c的值是8时,b<c关系成立,那么表达式的值为1;而当b的值为9,c的值是6时,b<c关系不成立,那么关系表达式的值为0。
假设用a表示表示式1,b表示表达式2,则逻辑表达式的运算规则见表4-3。
表4-3逻辑运算的运算规则
a的值
b的值
a&&b
a||b
真
真
1
1
真
假
0
1
假
真
0
1
假
假
0
0
对于逻辑非(!),如!a,当a的值为0时,!a的值为1,当a的值为非0时,!a的值为0。
小测验
用关系或逻辑表达式描述下列条件:
(1)判断整数x是否为偶数。
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);
else
printf("不及格");
}
4.3.2switch语句
switch语句是又一个描述多分支结构的语句。
1、一般形式
switch(表达式)
{
case常量表达式1:语句1;
case常量表达式2:语句2;
......
case常量表达式n:语句n;
default:语句n+1;
}
2、执行过程
(1)先计算switch后表达式的值。
default:printf("%d-------不及格\n\n",score);
}
}
执行程序,输入95,程序输出结果为:
显然,程序的输出结果并不是预期的效果,原因是当输入95,变量mark的取值为9,执行输出“良好”的输出语句并以此为入口,开始往下执行,直到switch语句的结束符“}”为止,因此程序不能实现分支结构的功能。
条件表达式的一般形式为:
表达式1?表达式2:表达式3
例如:a>b?a:b
条件表达式的运算过程为:先计算表达式1,如果表达式1的值为真,则计算表达式2的值,并以此作为条件表达式的值;如果表达式1的值为假,则计算表达式3的值,并以此作为条件表达式的值。
例如:
【程序段】
if(a>b) max=a;
else max=b;
【程序代码】
#include<stdio.h>
main()
{
intscore;
printf("请输入成绩:");
scanf("%d",&score);
if(score>=60)
printf("及格\n");
else
printf("不及格");
}
小测验:
程序中的判断可以用简单if语句完成吗?
使用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语句实现。
第4章分支结构及其应用
学习目标:掌握关系和逻辑运算,实现分支结构的语句,编写分支结构程序。
学习内容:关系和逻辑运算符及表达式,if语句,switch语句,条件表达式,分支结构嵌套,分支结构程序设计方法。
4.1一个分支结构程序实例
【例4-1】任意输入两个整数,输出其中的大数。
【程序代码】
#include <stdio.h>
4.2分支结构中条件的描述
分支结构把条件判断的结果作为选择的依据。通常情况下,分支结构中的条件是用关系表达式或逻辑表达式表示的。
4.2.1关系运算符和关系表达式
1、关系运算符
关系运算符是用来比较两个运算量大小关系的。表4-1列出了关系运算符及其示例。
表4-1关系运算符
运算符
名称
示例
>
大于
x>y
>=
大于等于
小测验
假设变量a=3、b=2、c=1,执行赋值语句f=a>b>c;后,变量f的值是多少?
提示:关系表达式用于描述简单条件,对于复合条件需要用逻辑表达式来表示。
4.2.2逻辑运算符和逻辑表达式
1、逻辑运算符
C语言的逻辑运算符有3个,见表4-2.
表4-2逻辑运算符
运算符
名称
示例
!(逻辑非)
逻辑非
!(x<0)
&&(逻辑与)
逻辑与
x>=0 && x<=10
||(逻辑或)
逻辑或
x<=0 || x>=10
其中,逻辑与(&&)和逻辑或(||)是双目运算符,逻辑非(!)是单目运算符。
2、逻辑表达式
逻辑表达式的形式为:
表达式1 &&表达式2
表达式1 ||表达式2
!表达式
与关系表达式相同,逻辑表达式的值也有两种情况:1或0。
【程序代码】
#include <stdio.h>
main()
{
intx,y;
printf("请输入x:");
scanf("%d",&x);
if(x>0)
y=x+1;
if(x==0)
y=x;
if(x<0)
y=x-1;
printf("x=%d,y=%d\n",x,y);
}
2、双分支if语句(if-else形式)
4.3.1 if语句
C语言的if语句有三种形式,分别适应不同的分支结构。
1、简单if语句
(1)一般形式:
if(表达式)
{
语句
}
(2)执行过程:计算表达式的值,若值为非0(即为“真”),则执行指定语句,否则跳过if语句而直接执行下一条语句。
例如:要实现:如果a大于0,给b加1,该操作用简单if语句表示为:
可以用条件表达式描述为max=(a>b)?a:b;。条件表达式通常用于赋值语句中。
下面用条件表达式完成例4-1中的分支判断。
【程序代码】
#include <stdio.h>
main()
{
inta,b,max;
printf("请输入两个数据:");
scanf("%d,%d",&a,&b);
max=(a>b)?a:b;
为了得到预期的输出结果,解决方法是在switch语句中使用break语句。例如,在上面程序的switch语句体中假如break语句,用来终止switch的顺序往下执行。
switch(mark)
{
case 10:printf("%d--------优秀\n",score);break;
case 9:printf("%d--------优秀\n",score);break;
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
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);
(4)书写代码时,为了提高程序的可读性,if与else对齐,而子句均向右缩进。
【例4-5】火车站托运行李,从甲地到乙地,按规定每张客票托运行李不超过50千克的部分,按每千克1.35元计算运费,如超过50千克,超过的部分按每千克2.65元计算运费。编写程序计算托运费。
【程序代码】
#include <stdio.h>
x>=y
<
小于
x<y
<=
小于等于
x<=y
==
等于
x==y
!=
不等于
x!=y
提示:在书写关系运算符>=、<=、==、!=时,中间不能出现空格,否则会产生语法错误。
2、关系表达式
关系表达式的形式为:
表达式1关系运算符表达式2
例如:a>b、a+b>c、x!=y都是合法的关系表达式。
关系表达式的值有两种情况:
(2)用表达式的值顺次同case后常量表达式的值进行比较。
(3)若找到值相等的常量表达式,则执行常量表达式冒号后面的语句(这是入口)。注意,该语句执行后,程序会依次执行其后的所有冒号后面的语句。
(4)若找不到匹配的常量表达式的值,则执行default后面的语句。
3、switch语句说明
(1)switch后表达式的值的类型必须是整型或字符型;
main()
{
inta,b,max;
printf("请输入两个数据:");
scanf("%d,%d",&a,&b);
if(a>b)
max=a;
else
max=b;
printf("二者中的大数为:%d\n",max);
}
分支结构是C语言的三种基本结构之一。分支结构有双分支结构和多分支结构,双分支结构是根据条件的成立与否决定程序的执行方向,条件成立时执行一些语句,条件不成立时执行另一方向上的语句。多分支结构通常有两个以上的分支,要根据多个条件才能进行选择。
#include <stdio.h>
main()
{
intscore;
printf("请输入成绩:");
scanf("%d",&score);
if(score>=90)
printf("优秀\n");
else
if(score>=80)
printf("良好\n");
else
if(score>=60)
printf("及格\n",score);
(1)if-else语句中的else子句可以省略,不带else子句时就是简单if语句。
(2)else子句不能作为单独的语句使用,它是wenku.baidu.comf语句的一部分,必须与if搭配使用。
(3)如果if子句或else子句只有一条语句时,“{}”可以省略,如例4-4,但是包含多个语句时,必须要用“{}”括起来组成复合语句。
}
重新执行程序,输入95,程序输出结果为:
4.4分支结构应用实例
【例4-8】输入一个常数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。
说明:多分支if语句中,表达式1的优先级最高,表达式2次之,无论执行完哪个分支语句,接下来都要转到多分支if语句的后续语句继续执行。
【例4-6】对学生的考试成绩进行等级评价,90分以上为优秀,80~90分为良好,60~80分为及格,60分以下为不及格。任意输入一个学生的成绩,判断属于哪个等级。
【程序代码】
if(a>0)
{
b++;
}
注意:在简单if语句中,当if下的语句为一条语句时,两边的花括号“{}”可以省略不写。如果包含有多个语句时,必须要用“{}”括起来组成复合语句(注意:复合语句在语法上认为是一条语句)。
【例4-3】计算函数值。输入整数x,根据下面的分段函数计算y的值。
【编程思路】x为任意的整数,有三种取值可能,只有通过判断才能确定其具体取值情况,以便给y赋值。本例使用3个简单的if语句来完成x的取值的判断。
(2)常量表达式的值也必须是整型或字符型;
(3)每个case后常量表达式的值必须互不相同。
【例4-7】用switch语句处理例4-6中的问题
【程序代码】
#include <stdio.h>
main()
{
intscore,mark;
printf("\n请输入成绩:");
scanf("%d",&score);
简单if语句只在条件为“真”时执行指定的操作。而双分支if语句,在条件为“真”或为“假”时,都有要执行的操作。
(1)一般形式:
if(表达式)
{语句1}
else
{语句2}
(2)执行过程:计算表达式的值,若表达式的值为非0(即“真”),则选择执行语句1,否则选择执行语句2.其执行流程如图4-3所示。
例如:以下两个操作均用if-else语句完成。
(2)判断字符变量c是否为英文字母。
(3)判断三个实数a、b、c能否构成一个三角形。
4.3实现分支结构的语句
一个分支结构程序的关键在于条件的描述和实现分支结构的语句。通过前面的学习,对条件描述有了一定的了解,在下面的内容中将详细介绍实现分支结构的语句。
在C语言中,分支结构主要由if语句和switch语句实现。
main()
{
floatf,w;
printf("请输入行李的重量:");
scanf("%f",&w);
if(w<=50)
f=w*1.35;
else
f=50*1.35+(w-50)*2.65;
printf("您的行李托运费为:%.2f",f);
}
3、条件表达式
双分支结构除了用if-else语句实现外,还可以使用条件表达式实现。
(1)当关系成立时,表达式的值为逻辑真,程序中用1表示。
(2)当关系不成立时,表达式的值为逻辑假,用0来表示。
这里的0和1在程序中被看作是整型量。
例如,有关系表达式b<c,当b的值是5,c的值是8时,b<c关系成立,那么表达式的值为1;而当b的值为9,c的值是6时,b<c关系不成立,那么关系表达式的值为0。
假设用a表示表示式1,b表示表达式2,则逻辑表达式的运算规则见表4-3。
表4-3逻辑运算的运算规则
a的值
b的值
a&&b
a||b
真
真
1
1
真
假
0
1
假
真
0
1
假
假
0
0
对于逻辑非(!),如!a,当a的值为0时,!a的值为1,当a的值为非0时,!a的值为0。
小测验
用关系或逻辑表达式描述下列条件:
(1)判断整数x是否为偶数。
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);
else
printf("不及格");
}
4.3.2switch语句
switch语句是又一个描述多分支结构的语句。
1、一般形式
switch(表达式)
{
case常量表达式1:语句1;
case常量表达式2:语句2;
......
case常量表达式n:语句n;
default:语句n+1;
}
2、执行过程
(1)先计算switch后表达式的值。