
第三章语句及控制结构.ppt
24页本章的主要内容包括: C语言中的语句 C语言中的控制结构 结构化程序设计方法 第三章 语句及控制结构 回首页语句是C语言中描述计算过程的最基本单位由分号‘;’结束语法:语句在形式上的严格要求语义:每个形式上合法的语句都表示了一种含义,表示了程序执 行时要求进行的一个动作C语句分类: (1)控制语句,完成选择、循环、转移等功能,共9种 (2)函数调用语句,由一次函数调用加一个分号构成一个语句 如:printf(“hello”); (3)表达式语句, 由一个表达式加一个分号构成一个语句 如:a=3;++x;表达式能构成语句是C语言的一个重要特色任何表达式都可以加上分号而成为语句C语言也被叫作“表达式语言” (4)空语句, 只有一个‘;’号的语句5)复合语句,将语句用{}组合起来的结构,用于执行一系列语句,与顺序结构对应语句的书写和注释 3.1 3.1 语句语句 顺序结构:按语句在程序中出现的顺序逐条执行,由这样的语句构成的程序结构是顺序结构3.2.1 3.2.1 赋值语句和复合赋值语句赋值语句和复合赋值语句 3.2.2 3.2.2 数据输入输出数据输入输出 3.2.2.1 字符输入函数getchar getchar()函数从标准输入读入一个字符,没有参数,返回读入字符的ASCII码值(整数),遇文件结束标志返回EOF(EOF 是C系统定义的常数,表示文件结束符,在标准输入上输入文件结束标志方法:CTRL-Z)。
3.2.2.2 字符输出函数putchar putchar(int c)函数向标准输出写一个字符,输出控制字符时,会变成相应的设备动作 3.2 3.2 顺序结构顺序结构 3.2.2.3 格式输出函数printf printf()函数在标准输出设备上按指定格式进行输出 1 1. printf函数的一般调用形式 printfprintf( (格式描述串,格式描述串,< <参数表参数表>)>)格式描述串的作用:(1)为参数表中的输出项提供格式说明:由符号“%”和格式描述符组成如系统规定用d作为int类型的格式描述符2)提供需要原样输出的文字或字符: 如printf(“sum=%d\n”,sum);中“sum=”是希望原样输出的字符,“%d”的位置上输出变量sum的值,最后的“\n”使输出换行格式转换说明的个数与参数表的输出项个数应该相同,且格式描述符要与对应输出项的类型匹配否则输出的结果无法预料,甚至可能会引起严重的运行错误printf函数的返回值,是本次调用中输出字符的个数 3.2 3.2 顺序结构顺序结构3.2.2.3 格式输出函数printf printf()函数在标准输出设备上按指定格式进行输出 2. printf函数中常用的格式说明 每个格式说明都必须用“%”开头,以一个格式字符作结束。
3.2 3.2 顺序结构顺序结构格式字符说 明c输出一个字符d或i输出带符号的十进制整型数o以八进制无符号形式输出整型数(不带前导0)x或X以十六制无符号形式输出整型数(不带前导0x或0X)对x用abcdef输出;对X用ABCDEF输出u按无符号的十进制形式输出整型数f以带小数点的形式输出单精度和双精度数e或E以指数形式输出实数,隐含精度为6,对E用输出大写形式g或G由系统决定使用f或e格式,以使输出宽度最小s输出字符串,直到遇到“\0”,或输出由精度指定的字符数p输出变量的内存地址%输出一个%字符3.2.2 3.2.2 数据输入输出数据输入输出3.2.2.4 格式输入函数scanf 1. scanf函数的一般调用形式 scanfscanf ( (格式描述串,格式描述串,< <参数表参数表>)>)格式描述串是用双引号括起来的字符串,由“%”符号和格式描述符组成作用是指定输入时的数据格式参数表中各输入项用逗号隔开,各输入项只能是合法的地址表达式格式描述串描述了程序所要求的转换方式,它控制着函数scanf由标准输入读入的过程scanf函数返回成功完成输入转换的输入项数。
2. scanf函数常用格式说明每个格式说明都必须用“%”开头,以一个格式字符作结束 3.scanf函数的工作过程 4. scanf函数实例 3.2 3.2 顺序结构顺序结构3.2.3 复合语句和空语句复合语句和空语句 3.2.3.1 复合语句 复合语句也称“语句块”,形式如下: { { 语句语句1 1;语句;语句2 2;;......,语句,语句n; }n; }最后一个语句的分号“;”不能缺少,复合语句内,不仅可以有执行语句,还可以有定义部分,定义部分应该出现在可执行语句的前面C编译将整个{}括起来的结构视作一条语句C语言中复合语句经常用来表示一些控制结构的执行体如循环结构的循环体、选择结构某一条件的执行部分、函数的执行体等等 3.2.3.1 空语句 只有一个分号的语句叫“空语句”空语句执行时不产生任何动作,程序中有时需要用空语句来表示存在一条语句但随意加分号也会导致逻辑上的错误,要特别小心 3.2 3.2 顺序结构顺序结构3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算3.3.1.1 3.3.1.1 C C语言中的逻辑值语言中的逻辑值C语言中规定:(1)用0、1 表示逻辑假和真值;C语言没有专门的逻辑值,而是用1来表示“真”,用0表示“假”。
2)任何基本类型的值都可作为逻辑值使用所有非0的值被当作“真”使用,而0值被当作“假”使用3.3.1.23.3.1.2关系运算符和关系表达式关系运算符和关系表达式 1.关系运算符C语言的关系运算符共6种:① >(大于)② >= (大于等于)③ <(小于)④ <= (小于等于)⑤ ==(等于)⑥ != (不等于)优先级:优先级: 前四种优先级高于后两种 结合方法:结合方法:从左向由结合 3.3 3.3 选择结构选择结构 3.3.1.1 3.3.1.1 C C语言中的逻辑值语言中的逻辑值3.3.1.23.3.1.2关系运算符和关系表达式关系运算符和关系表达式2. 关系表达式由关系运算符将两个表达式连接起来组成的表达式关系表达式求值只有两种可能的结果:① 关系成立,关系表达式取值为1,代表“真”;② 关系不成立,关系表达式取值为0,代表“假”关系表达式计算的注意事项: (1)进行关系运算的两个数据的类型不同,按照算术运算同样的规则进行转换,再比较2)C语言中一般不使用连续关系运算符的描述方式这样的表达式其计算结果往往会出乎人们的预料3)关系表达式中经常出现的一个错误是把“==”写成“=”。
3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算3.3.1.3 3.3.1.3 条件运算符和条件表达式条件运算符和条件表达式 ?:条件运算符是C语言中唯一的三目运算符 表达式表达式1 1 ?表达式?表达式2 2 :表达式:表达式3 3条件运算符的优先级高于赋值运算,低于关系和算术运算符结合方式:从右向左① 关系成立,关系表达式取值为1,代表“真”;② 关系不成立,关系表达式取值为0,代表“假”条件表达式的计算:表达式1先被计算,如果表达式1的值为非0,(条件成立,逻辑为真)就计算表达式2的值并将计算结果作为整个条件表达式的值;如果表达式1的值为0,(条件不成立,逻辑为假)就计算表达式3的值并将计算结果作为整个条件表达式的值; 有一部分表达式不参加求值运算 3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算3.3.1.4 3.3.1.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 1. 逻辑运算符 逻辑运算符: 表示逻辑或命题运算的运算符逻辑表达式: 逻辑运算符和逻辑量组成的表达式下面三种逻辑运算符: && :逻辑与 || :逻辑或 ! :逻辑非优先级:(1)从高到低为:!(非)→ &&(与)→ ||(或)。
2)&&和||的优先级低于关系运算符,高于条件和赋值运算符,!的优先级高于算术运算符结合方式:从左向右3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算3.3.1.4 3.3.1.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 2. 逻辑表达式求值运算 “!”是,表示“否定”;“&&”表示“并且”,“||”表示“或者”它们的运算对象是条件表达式和逻辑量常用:0表示逻辑假值,1表示逻辑真值(非0)表3.4 逻辑运算符的运算规则表3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算 !(a&&b)=!a||!b !(a||b)=!a&&!b 归纳:(1)用逻辑表达式表示复杂条件直观、简捷、可读性好 (2)逻辑表达式计算有时会出现部分表达式不参加运算的情况3.3.1.4 3.3.1.4 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 1. 逻辑运算符 例例 写出判断某一年是闰年和非闰年的逻辑表达式分析:设year是表示年的整型变量,闰年的条件是:year能被4整除,但不能被100整除;或year能被400整除用逻辑表达式表示: (year%4==0 &&year%100!=0)||year%400==0加一个“!”即是用来判断非闰年的条件: !( (year%4==0 &&year%100!=0)||year%400==0) 3.3.1 3.3.1 关系运算和逻辑运算关系运算和逻辑运算if语句用来构造选择结构,作用是实现对某些操作的选择执行。
3.3.2.1 3.3.2.1 if_elseif_else结构结构 1. 语法 if (if (表达式表达式) ) 语句语句1 1 else else 语句语句2 2else子句与它前面最近、不带else的if配对,与书写格式无关 if (n>0) if (n>0) { if (a>b) if (a>b) z=a; z=a; else } z=b; else z=b;2.if_else语句的执行过程 3.3.2 3.3.2 ifif语句语句if语句用来构造选择结构,作用是实现对某些操作的选择执行 3.3.2.2 3.3.2.2 else_ifelse_if结构结构 if (if (表达式表达式1)1) 语句语句1 1else if (else if (表达式表达式2)2) 语句语句2 2else if (else if (表达式表达式3)3) 语句语句3 3......else else 语句语句n n这种嵌套的这种嵌套的ifif语句序列是实现多分支选择结构的最普通的方法。
语句序列是实现多分支选择结构的最普通的方法执行过程执行过程 3.3.2 3.3.2 ifif语句语句1. 1. switchswitch语句语句 switch (switch (表达式表达式) ){ { case case 常量表达式常量表达式1 1:语句:语句1 1 case case 常量表达式常量表达式2 2:语句:语句2 2 ... ... case case 常量表达式常量表达式n n::语句语句n n default : default : 语句语句n+1n+1} }2. switch2. switch语句的执行过程语句的执行过程标号的作用,只是指出选择转移的起点一方面允许多个case标号连接到同一段代码,提供代码共享的能力另一方面,又使得正常选择分支case标号后的语句,一定要加入break语句才能实现多分支选择的功能 3.3.3 3.3.3 switchswitch结构结构 3. 3. breakbreak语句语句 break称间断语句,作用是控制程序跳出switch语句体或循环体标号的作用,只是指出选择转移的起点。
3.3.3 3.3.3 switchswitch结构结构 3.4 3.4 循环结构循环结构 循环结构用于完成程序中需要重复执行的操作是结构化程序设计的三种基本结构之一在C语言中有三种可以构成循环结构的循环语句 3.4.1 while循环循环 1. 语法 while (表达式表达式) 循环体循环体 2. while循环的执行过程 (1)计算表达式的值,当值为非0时,执行(2);当值为0时,执行(3)2)执行循环体中语句,转去执行(1)(3)退出 while循环 3.4 3.4 循环结构循环结构3.4.2 3.4.2 do_whiledo_while循环循环1.语法do 循环体while (表达式);括号、分号是必须的循环体可以是一条语句或复合语句或空语句“;”,do和while表示循环结构的开始和结束,在这种循环结构中要成对使用2. do_while循环的执行过程(1)执行do后面的循环体 (2)计算while后面括号中的表达式,当值为非0时,转去执行 (1);当值为0时,退出do_while循环 3.4 3.4 循环结构循环结构3.4.3 3.4.3 forfor循环循环 1.语法for (for (表达式表达式1 1;表达式;表达式2 2;表达式;表达式3) 3) 循环体循环体 2. for循环的执行过程(1)计算表达式1。
/*表达式1通常为循环变量赋初值,使用赋值表达式和逗号表达式较多/(2)计算表达式2,若其值非0,转(3);若为0,结束循环/*表达式2控制循环条件*/(3)执行循环体4)计算表达式3,转(2) 3.4.4 3.4.4 控制语句控制语句 1. 1. breakbreak语句语句 break break;; breakbreak也也可可用用在在循循环环中中,,使使程程序序跳跳出出本本层层循循环环,,提提前前结结束束本本层层循环 2. 2. continuecontinue语句语句 continue; continue;只只能能用用在在循循环环体体中中,,作作用用是是结结束束本本次次循循环环,,即即跳跳过过本本次次循循环环体体中中其余尚未执行的语句,接着再进行一次循环条件的判定其余尚未执行的语句,接着再进行一次循环条件的判定 在在whilewhile和和do_whiledo_while循循环环中中,,continuecontinue语语句句使使程程序序直直接接跳跳到到循循环环控控制制条条件件的的测测试试部部分分,,在在forfor循循环环中中,,遇遇到到continuecontinue后后,,跳跳过过循循环环体体中中余余下下语语句句,,而而去去对对forfor语语句句的的表表达达式式3 3求求值值,,然然后后进进行表达式行表达式2 2的条件测试,决定的条件测试,决定forfor循环是否执行。
循环是否执行3.4 3.4 循环结构循环结构3.4.4 3.4.4 控制语句控制语句 3. 3. gotogoto语句语句 gotogoto语语句句作作用用是是实实现现在在一一个个函函数数体体内内部部的的任任意意控控制制转转移移必必须须和标号一起使用形式为:和标号一起使用形式为: gotogoto 标号标号标标号号的的形形式式是是一一个个标标号号名名后后跟跟一一个个冒冒号号,,可可以以写写在在任任何何语语句句前前面面标标号号名名是是标标识识符符,,在在程程序序中中起起标标记记作作用用,,连连接接某某个个转转移移和和目目的的地、不分配空间地、不分配空间现现代代程程序序设设计计理理论论已已经经证证明明使使用用顺顺序序、、选选择择、、循循环环结结构构可可以以描描述述程程序序设设计计中中的的所所有有问问题题,,不不需需要要gotogoto语语句句,,使使用用gotogoto语语句句写写的的程序转移随便,可读性差应该少用和不用程序转移随便,可读性差应该少用和不用gotogoto语句C C语语言言中中使使用用gotogoto的的唯唯一一合合理理的的地地方方,,是是从从多多重重循循环环的的内内层层,,直直接跳到最外层。
接跳到最外层 3.4 3.4 循环结构循环结构3.4.5 3.4.5 循环结构中常用机制循环结构中常用机制 ((1 1))增增量量、、减减量量运运算算符符((++++、、----)) 在在循循环环结结构构中中经经常常用用来来改改变变循循环环控控制变量的值制变量的值2 2))逗逗号号运运算算符符((,,)) forfor语语句句头头部部,,表表达达式式1 1中中变变量量赋赋初初值值和和表表达达式式3 3中循环变量更新操作中常用中循环变量更新操作中常用3 3))复复合合赋赋值值 常常使使用用复复合合赋赋值值操操作作在在循循环环体体内内进进行行累累加加、、累累乘乘、、递递减等操作减等操作4 4)空语句)空语句 单独的分号单独的分号““;;””,作为填充,保证语法结构的完整性作为填充,保证语法结构的完整性5 5)无限循环)无限循环 程序中表示无限循环的常用结构是程序中表示无限循环的常用结构是 ① ① while (1) while (1) 循环体循环体 ②② for ( for ( ;;;;) ) 循环体 无限循环的循环体内一定有选择结构和无限循环的循环体内一定有选择结构和breakbreak语句以便最终从循语句以便最终从循环结构中退出来。
环结构中退出来6 6))breakbreak、、continuecontinue、、gotogoto3.4.6 3.4.6 循环结构设计实例循环结构设计实例 3.4 3.4 循环结构循环结构第三章 语句及控制结构使用三种基本结构和它们的组合可以构造各种各样的复杂C程序,本章主要内容是C语言中三种基本结构的语法及使用包括: 顺序结构:赋值、标准输入输出函数和复合语句使用 选择结构:条件、关系、逻辑表达式运算,if、switch语句使用 循环结构:for、while、do_while循环的使用方法 控制语句:break、continue、goto语句的作用和用法三种基本结构是程序设计的基础,要求熟练掌握它们的使用方法,熟悉各种控制机制的机理关键点是:关系、逻辑表达式求值;条件、循环语句的执行过程;标准输入的工作过程;控制语句的合理使用回本章首页。
