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