c语言基础知识(4)

2019-03-15 15:12

{语句l 语句2

??语句n }

用一对花括号把若干语句括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一对花括号内的语句数量不限。在复合语句中,可以定义本复合语句中的局部变量。 3.4.2 空语句

c程序中的所有语句都必须由一个分号“;”作为结束。如果只有一个分号,这个分号也是一条语句,称为“空语句”,程序执行时不产生任何动作。程序设计中有时需要加一个空语句来表示存在一条语句,但随意加分号也会导致逻辑上的错误,而且这种错误十分隐蔽,编译器也不会提示逻辑错误,初学者一定要小心,需要慎用。 第三章能力点

1、熟练运用printf、scanf、putchar、getchar进行输入/出格式控制的能力; 2、顺序结构程序设计的能力;

3、在VC++6.0环境下进行顺序结构程序调试的能力。

第4章 选择结构

C语言提供了可以进行逻辑判断的若干选择语句,由这些选择语句可构成程序中的选择结构,通常又称为分支结构,它将根据逻辑判断的结果决定程序的不同流程。

选择结构是结构化程序设计的三种基本结构之一。本章将详细介绍如何在C程序中实现选择结构。

4.1关系运算和逻辑运算 4.1.1 C语言的逻辑值

关系表达式和逻辑表达式的运算结果都会得到一个逻辑值。逻辑值只有两个,分别用“真”和“假”来表示。在C语言中,没有专门的“逻辑值”,而是用非0表示“真”,用0表示“假”。

4.1.2 关系运算符和关系表达式

关系运算实际上是“比较运算”,即进行两个数的比较,判断比较的结果是否符合指定的条件。

1、C语言的关系运算符

C言提供了6种关系运算符,它们分别是:

(1) < (小于) (2) <= (小于或等于) (3) > (大于) (4) >= (大于或等于) (5) == (等于) (6) != (不等于)

注意:由两个字符组成的运算符之间不允许有空格,如:<=就不能写成< =。关系运算符是双目运算符,具有自左至右的结合性。

以上运算符中,前四种关系运算符(<、<=、>、>=)的优先级别相同,后两种(==、!=)优先级相同,且前四种的优先级高于后两种。关系运算符、算术运算符和赋值运算符之间的优先级次序是:算术运算符的优先级别最高,关系运算符次之,赋值运算符的优先级别最低。

16 / 26

2、关系表达式及关系表达式的值

由关系运算符构成的表达式,称为关系表达式。关系运算符两边的运算对象可以是C语言中任意合法的表达式。例如,a>=b、(a=3)>(b=4)、a>c==c等都是合法的关系表达式。 关系运算的值为“逻辑值”,只有两种可能:整数0或者整数1。例如,若变量a中的值为10,变量b中的值为6时,表达式a>=b为“真”,其值为1;若a中的值为10,b中的值为l6时,表达式a>=b为“假”,其值为0。

当关系运算符两边值的类型不一致时,例如一边是整型,另一边是浮点型,则系统将自动把整型数转换为浮点数,然后进行比较,其类型转换规则与附录5中所列双目算术运算中的类型转换规则相同。若x和y都是浮点数,应当避免使用x==y这样的关系表达式,因为通常存放在内存中的浮点数是有误差的,因此不可能精确相等,这将导致关系表达式x==y的值总是为0。

4.1.3 逻辑运算符和逻辑表达式 1、C语言的逻辑运算符

C语言提供了三种逻辑运算符,分别是:

(1)&&逻辑“与” (2)||逻辑“或” (3)!逻辑“非”

其中,运算符&&和||为双目运算符,运算符!为单目运算符,出现在运算对象的左边。逻辑运算符具有自左至右的结合性。

以上运算符的优先级次序是:!(逻辑“非”)级别最高,&&(逻辑“与”)次之,||(逻辑“或”)最低。逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑“非”)、算术运算符、关系运算符、&&(逻辑“与”)、||(逻辑“或”)、赋值运算符。

2、逻辑表达式和逻辑表达式的值

由逻辑运算符和运算对象组成的表达式称为逻辑表达式。逻辑运算的对象可以是C语言中任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。由逻辑运算符构成的逻辑表达式,其运算规则如下所示。 a 非0 非0 O O b 非0 O 非0 0 !a O 0 1 1 !b 0 1 O 1 a&&b 1 O O 0 a||b 1 l 1 0 注:其中a和b为任意合法表达式。 在数学上关系式0

因此无论x取什么值,结果总为1。C语言的正确表达式应为x>0 && x<10。 在C语言中,由&&或||构成的逻辑表达式,在特定的情况下会产生“短路”

17 / 26

现象。例如,对以下表达式:a++ && b++,若a的值为0,表达式首先去求a++的值,由于表达式a++的值为0,系统完全可以确定逻辑表达式的运算结果总是为0,因此将跳过b++不再对它进行求值。在这种情况下,a的值将自增1,由0变成1,而b的值将不变。若a的值不为0,则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符&&右边的表达式b++进行求值,这时将进行b++的运算,使b的值改变。又例如以下逻辑表达式:a++||b++,若a的值为1,表达式首先去求a++的值,由于表达式a++的什为1,无论表达式b++为何值,系统安全可以确定逻辑表达式的运算结果总是为1,因此也将跳过b++不再对它进行求什。在这种情况下,a的值将自增1,b的值将不变。若a的值为0,则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符||右边的表达式b++进行求值,这时将进行b++的运算,运算结果不仅使a的值改变,也改变了b的值。

4.2 if语句和用if语句构成的选择结构 4.2.1 if语句

C语言的if语句有以下两种基本形式:

(1)if(表达式)语句 /*不含else子句的if语句*/ (2)if(表达式)语句l /*含else子句的if语句*/ else语句2

1、不含else子句的if语句 (1)语句形式 if (表达式) 语句

其中,if是C语言的关键字,在其后一对圆括号中的表达式可以是C语言中任意合法的表达式。表达式之后只能是一条语句,称为if子句。如果该子句中含有多个语句(两个以上),则必须使用复合语句,即用花括号把一组语句括起来,因为复合语句可以看成是“一条语句”。 (2)if语句的执行过程

执行if语句时,首先计算紧跟在if后面一对圆括号中的表达式的值。如果表达式的值为非零(“真”),则执行其后的if子句,然后去执行if语句后的下一条语句;如果表达式的值为零(“假”),则跳过if子句,直接执行if语句后的下一条语句。 2、含else子句的if语句 (1)语句形式 if (表达式) 语句1 else 语句2

在这里,if和else是C语言的关键字,“语句1”称为if子句,“语句2”称为else 子句,这些子句只允许为一条语句,若需要多条语句时,则应该使用复合语句{}。

注意:else 不是一条独立的语句,它只是if 语句的一部分,不允许有这样的语句: else printf(“***”);

在程序中 必须与if配对,共同组成一条 if-else 语句。 (2)if-else语句的执行过程 执行if-else语句时,首先计算紧跟在if后面一对圆括号内表达式的值。如果表达式的值为非0,执行if子句,然后跳过else子句,去执行if语句之后的下一条语句;如果表达式的值为0,跳过if子句,去执行else子句,执行完之后接着去执行if语句之后的下一条语句。 3、关于if语句的说明

(1)if后面圆括号中的表达式,可以是任意合法的C语言表达式(如:逻辑表达式、关系表达式、算术表达式、赋值表达式等),也可以是任意类型的数据(如:整型、实型、字符型、

18 / 26

指针型等)。

(2)无论是否有else子句,if子句中如果只有一条语句,则此语句后的分号不能省略。如:if (x!=0) printf(\%f\,x); 4.2.2嵌套的if语句

if子句和else子句中可以是任意合法的c语句,因此当然也可以是if语句,通常称此为嵌套的if语句。内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。 1、在if子句中嵌套

具有else子句的if语句形式如下: if(表达式1)

if (表达式2) 语句l else 语句2 else 语句3

表达式l的值为非0时,执行内嵌的if-else语句;表达式1的值为0时,执行语句3。 2、在if子句中嵌套不含else子句的if语句 语句形式如下: if(表达式1)

{if(表达式2) 语句1} else 语句2

注意:在if子句中的一对花括号不可缺少。因为C语言的语法规定:else子句总是与前面最近的不带else的if相结合,与书写格式无关。 3、在else子句中嵌套if语句 语句形式如下:

(1)内嵌的if语句带有else: if (表达式1) 语句1 else if (表达式2) 语句2 else 语句3

(2)内嵌的if语句不带else: if (表达式1)语句1 else if (表达式2)语句2

由以上两种语句形式可以看到,内嵌在else子句中的if语句无论是否有else子句,在语法上都不会引起误会,因此建议读者在设计嵌套的if语句时,尽量把内嵌的if语句嵌在else子句中。

C语言程序有比较自由的书写格式,但是过于“自由”的程序书写格式往往使人们很难读懂,因此要求按层缩进的书写格式来写自己的程序。 不断在else子句中嵌套if语句可形成多层嵌套。如: if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 ??

else if (表达式n) 语句n else 语句n+1

从上向下逐一对if后的表达式进行检测。当某一个表达式的值为非0时,就执行与此有关子句中的语句,阶梯形中的其余部分不执行,直接越过去。如果所有表达式的值都为0,则执行最后的else子句,此时如果程序中最内层的if语句没有else子句,即没有最后的那

19 / 26

个else子句,那么将不进行任何操作。

4.3 条件表达式构成的选择结构

前面介绍的是使用C语言中的if语句来构成程序中的选择结构。C语言另外还提供了一个特殊的运算符——条件运算符,由此构成的表达式也可以形成简单的选择结构,这种选择结构能以表达式的形式内嵌在允许出现表达式的地方,使得可以根据不同的条件使用不同的数据参与运算。 1.条件运算符

条件运算符由两个运算符组成,它们是:?:。这是C语言提供的唯一的三目运算符,即要求有三个运算对象。

2.由条件运算符构成的条件表达式 条件表达式的形式如下:

表达式1?表达式2:表达式3 3.条件表达式的运算功能

当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条件表达式的值;当“表达式1”的值为零时,则求“表达式3”的值,这时便把“表达式3”的值作为整个条件表达式的值。 4.条件运算符的优先级

条件运算符优先于赋值运算符,但低于关系运算符和算术运算符。 例如:

(1)y=x>10?100:200

(2)printf(“abs(x)=%d\\n”,x<0?(-1)*x:x)

4.4 switch语句以及用switch 语句和break 语句构成的选择结构 4.4.1 switch 语句

switch语句形式如下: switch (表达式)

{ case常量表达式1:语句1 case常量表达式2:语句2 case常量表达式n:语句n default:语句n+1 } 说明:

(1)switch是C语言的关键字,switch后面用花括号括起来的部分称为switch语句体。 (2)紧跟在switch后一对圆括号中的表达式可以是整型表达式及后面将要学习的字符型表达式等。表达式两边的一对括号不能省略。

(3)case也是关键字,与其后面的常量表达式合称case语句标号。常量表达式的类型必须与swicth后圆括号中的表达式类型相同,各case语句标号的值应该互不相同。

(4)default也是关键字,起标号的作用,代表所有case标号之外的那些标号。default标号可以出现在语句体中任何标号位置上。在switch语句体中也可以没有default标号。

(5)case语句标号后的语句1,语句2等,可以是一条语句,也可以是若干语句。 (6)必要时,case语句标号后的语句可以省略不写。

(7)在关键字case和常量表达式之间一定要有空格,例如case 10:不能写成casel0:。 4.4.2 switch语句的执行过程

当执行swicth语句时,首先计算紧跟其后一对括号中的表达式的值,然后在switch语句体内寻找与该值吻合的case标号。如果有与该值相等的标号,则执行该标号后开始的各语句,包括在其后的所有case和default中的语句,直到switch语句体结束;如果没有与该

20 / 26


c语言基础知识(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:淘宝大学美工考试答案与试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: