Page 1
C语言程序设计 清华大学 郑莉 安颖莲第三讲 C语言程序的基本控制结构参考书,计算机程序设计基础,第三章
,C程序设计,第四章、第五章
Page 2
C语言程序设计 清华大学 郑莉 安颖莲本讲主要内容
结构化程序设计
if 语句
switch 语句
while 语句
do-while 语句
for 语句
break 和 continue 语句
Page 3
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
计算机程序=算法+数据结构
计算机程序设计=算法+数据结构
+程序设计方法学
Page 4
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
— 结构化算法(一)
算法就是解决问题的方法。
例如,秦九韶在,九章算术,中记载的,求最大公约数的辗转相除法:
第一步,算法开始。
第二步,输入原始数据:取得所给定的自然数 m 和 n。
第三步,当 m≠n 时,顺序执行第四步;反之,转到第六步。
第四步,若 m>n,则 m←m -n ;否则 n←n -m。
第五步,返回第三步。
第六步,输出结果:所求最大公约数为 m。
第七步,算法结束。
Page 5
C语言程序设计 清华大学 郑莉 安颖莲算法的特征:
有穷性如,Sin x=x/1-x3/3!+x5/5!-x7/7!+… 不是算法。
N!=1× 2× 3× … × N 是算法。
确定性如:菜谱中说,加少许盐,不严格,不是算法。
可执行性
0个或多个输入
1个或多个输出结构化程序设计
— 结构化算法(二)
Page 6
C语言程序设计 清华大学 郑莉 安颖莲
算法类型:
–数值算法、非数值算法。
基本结构:
结构化算法必须只能由下列三种基本控制结构所构成:
–顺序结构
–分支结构
–循环结构结构化程序设计
— 结构化算法(三
)
Page 7
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
— 结构化算法(三)
结构化算法的本质属性:
有且仅有一个入口
有且仅有一个出口
无死块(即永远无法执行到的块)
无死循环块
Page 8
C语言程序设计 清华大学 郑莉 安颖莲算法描述工具:
流程图
N- S图
PDL 语言结构化程序设计
— 结构化算法(四)
Page 9
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
— 结构化程序设计技术与方法
模块化结构设计方法在程序设计中,将一个复杂的算法(或程序)分解成若干个相对独立、功能单一的模块,利用这些模块即可适当地组合成所需要的全局算法(或)程序。
自顶向下结构设计方法从总体出发,居高临下,逐层分解和逐步细化。
逐步求精结构设计方法实质上也是一种自顶向下的设计方法。
首先抛开细节设计出抽象算法,然后把抽象数据和操作逐步具体化,直到可以由计算机具体实现为止。
Page 10
C语言程序设计 清华大学 郑莉 安颖莲
if (表达式 ) 语句例,if (x>y) printf("%d",x);
if (表达式 ) 语句 1 else 语句 2
例,if (x>y) printf("%d",x);
else printf("%d",y);
if (表达式 1) 语句 1
else if (表达式 2) 语句 2
else if (表达式 2) 语句 3
…
else 语句 n
if 语句
—— 三种形式
Page 11
C语言程序设计 清华大学 郑莉 安颖莲
一般形式
if ( )
if ( ) 语句 1
else 语句 2
else
if ( ) 语句 3
else 语句 4
注意
– 语句 1,2,3,4 可以是复合语句每层的 if 与
else 配对,或用 { } 来确定层次关系
if 语句
—— 嵌套
Page 12
C语言程序设计 清华大学 郑莉 安颖莲条件运算符
一般形式:
表达式 1?表达式 2:表达式 3
执行顺序:
先求解 表达式 1,若值为非 0,则求解 表达式 2,表达式 2的值为最终结果;
若值为 0,则求解 表达式 3,表达式 3的值为最终结果。
注意:
– 条件 运算符优级 高于 赋值 运算符,低于 关系 运算符和 算术 运算符;
– 结合方向为 自右至左;
– 只能取代简单的 if语句:内嵌语句为赋值语句,且两个分支都给同一个变量赋值;
– 表达式 1,2,3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。
Page 13
C语言程序设计 清华大学 郑莉 安颖莲
一般形式
switch (表达式 )
{ case 常量表达式 1:语句 1
case 常量表达式 2:语句 2
┆
case 常量表达式 n:语句 n
default,语句 n+1
}
switch 语句
执行顺序以 case中的 常量表达式值 为入口标号,由此开始顺序执行。
因此,每个 case分支最后应该加 break语句。
每个常量表达式的值不能相同,次序不影响执行结果。
可以是多个语句,但不必用 { }。
可以是 整型、字符型、枚举型
Page 14
C语言程序设计 清华大学 郑莉 安颖莲使用 switch语句应注意的问题
case分支可包含多个语句,且不用 { }
表达式、判断值都是 int型或 char型
若干分支执行内容相同可共用一组语句
Page 15
C语言程序设计 清华大学 郑莉 安颖莲
while 语句
形式
while (表达式 ) 语句可以是复合语句,其中必须含有改变条件表达式值的语句。
执行顺序先判断表达式的值,非 0 再执行语句。
—— 实现,当型,循环。
Page 16
C语言程序设计 清华大学 郑莉 安颖莲
类似于直到型循环,但不同。
do-while 语句
一般形式
do 语句
while (表达式 )
可以是复合语句,其中必须含有改变条件表达式值的语句。
执行顺序先执行语句,后判断条件。
表达式非 0时,继续执行循环体。
while 语句与 do-while 语句的比较
While 语句执行顺序先判断表达式的值,非 0 再执行语句
—— 实现,当型,循环
。
直到型循环是当条件表达式为“真”时,停止循环。
Page 17
C语言程序设计 清华大学 郑莉 安颖莲
for 语句
形式
for (表达式 1;表达式 2;表达式 3) 语句循环前先求解非 0时执行循环体每次执行完循环体后求解
流程图
P70 图 5.6
注意事项
P70- 71
Page 18
C语言程序设计 清华大学 郑莉 安颖莲
break 和 continue 语句
break语句使程序从循环体和 switch语句内跳出,继续执行逻辑上的下一条语句。不能用在别处。
continue 语句结束本次循环,接着进行是否执行下一次循环的判断。
Page 19
C语言程序设计 清华大学 郑莉 安颖莲
,C 程序设计,P64 4.5- 4.8
,C 程序设计,P79 5.2,5.6,
5.10,5.15
复习:,C 程序设计,第四、五章
,计算机程序设计基础,第三章
熟悉一种 C语言编译环境的调试方法。
作 业
C语言程序设计 清华大学 郑莉 安颖莲第三讲 C语言程序的基本控制结构参考书,计算机程序设计基础,第三章
,C程序设计,第四章、第五章
Page 2
C语言程序设计 清华大学 郑莉 安颖莲本讲主要内容
结构化程序设计
if 语句
switch 语句
while 语句
do-while 语句
for 语句
break 和 continue 语句
Page 3
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
计算机程序=算法+数据结构
计算机程序设计=算法+数据结构
+程序设计方法学
Page 4
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
— 结构化算法(一)
算法就是解决问题的方法。
例如,秦九韶在,九章算术,中记载的,求最大公约数的辗转相除法:
第一步,算法开始。
第二步,输入原始数据:取得所给定的自然数 m 和 n。
第三步,当 m≠n 时,顺序执行第四步;反之,转到第六步。
第四步,若 m>n,则 m←m -n ;否则 n←n -m。
第五步,返回第三步。
第六步,输出结果:所求最大公约数为 m。
第七步,算法结束。
Page 5
C语言程序设计 清华大学 郑莉 安颖莲算法的特征:
有穷性如,Sin x=x/1-x3/3!+x5/5!-x7/7!+… 不是算法。
N!=1× 2× 3× … × N 是算法。
确定性如:菜谱中说,加少许盐,不严格,不是算法。
可执行性
0个或多个输入
1个或多个输出结构化程序设计
— 结构化算法(二)
Page 6
C语言程序设计 清华大学 郑莉 安颖莲
算法类型:
–数值算法、非数值算法。
基本结构:
结构化算法必须只能由下列三种基本控制结构所构成:
–顺序结构
–分支结构
–循环结构结构化程序设计
— 结构化算法(三
)
Page 7
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
— 结构化算法(三)
结构化算法的本质属性:
有且仅有一个入口
有且仅有一个出口
无死块(即永远无法执行到的块)
无死循环块
Page 8
C语言程序设计 清华大学 郑莉 安颖莲算法描述工具:
流程图
N- S图
PDL 语言结构化程序设计
— 结构化算法(四)
Page 9
C语言程序设计 清华大学 郑莉 安颖莲结构化程序设计
— 结构化程序设计技术与方法
模块化结构设计方法在程序设计中,将一个复杂的算法(或程序)分解成若干个相对独立、功能单一的模块,利用这些模块即可适当地组合成所需要的全局算法(或)程序。
自顶向下结构设计方法从总体出发,居高临下,逐层分解和逐步细化。
逐步求精结构设计方法实质上也是一种自顶向下的设计方法。
首先抛开细节设计出抽象算法,然后把抽象数据和操作逐步具体化,直到可以由计算机具体实现为止。
Page 10
C语言程序设计 清华大学 郑莉 安颖莲
if (表达式 ) 语句例,if (x>y) printf("%d",x);
if (表达式 ) 语句 1 else 语句 2
例,if (x>y) printf("%d",x);
else printf("%d",y);
if (表达式 1) 语句 1
else if (表达式 2) 语句 2
else if (表达式 2) 语句 3
…
else 语句 n
if 语句
—— 三种形式
Page 11
C语言程序设计 清华大学 郑莉 安颖莲
一般形式
if ( )
if ( ) 语句 1
else 语句 2
else
if ( ) 语句 3
else 语句 4
注意
– 语句 1,2,3,4 可以是复合语句每层的 if 与
else 配对,或用 { } 来确定层次关系
if 语句
—— 嵌套
Page 12
C语言程序设计 清华大学 郑莉 安颖莲条件运算符
一般形式:
表达式 1?表达式 2:表达式 3
执行顺序:
先求解 表达式 1,若值为非 0,则求解 表达式 2,表达式 2的值为最终结果;
若值为 0,则求解 表达式 3,表达式 3的值为最终结果。
注意:
– 条件 运算符优级 高于 赋值 运算符,低于 关系 运算符和 算术 运算符;
– 结合方向为 自右至左;
– 只能取代简单的 if语句:内嵌语句为赋值语句,且两个分支都给同一个变量赋值;
– 表达式 1,2,3的类型可以不同,条件表达式的最终类型为 2 和 3 中较高的类型。
Page 13
C语言程序设计 清华大学 郑莉 安颖莲
一般形式
switch (表达式 )
{ case 常量表达式 1:语句 1
case 常量表达式 2:语句 2
┆
case 常量表达式 n:语句 n
default,语句 n+1
}
switch 语句
执行顺序以 case中的 常量表达式值 为入口标号,由此开始顺序执行。
因此,每个 case分支最后应该加 break语句。
每个常量表达式的值不能相同,次序不影响执行结果。
可以是多个语句,但不必用 { }。
可以是 整型、字符型、枚举型
Page 14
C语言程序设计 清华大学 郑莉 安颖莲使用 switch语句应注意的问题
case分支可包含多个语句,且不用 { }
表达式、判断值都是 int型或 char型
若干分支执行内容相同可共用一组语句
Page 15
C语言程序设计 清华大学 郑莉 安颖莲
while 语句
形式
while (表达式 ) 语句可以是复合语句,其中必须含有改变条件表达式值的语句。
执行顺序先判断表达式的值,非 0 再执行语句。
—— 实现,当型,循环。
Page 16
C语言程序设计 清华大学 郑莉 安颖莲
类似于直到型循环,但不同。
do-while 语句
一般形式
do 语句
while (表达式 )
可以是复合语句,其中必须含有改变条件表达式值的语句。
执行顺序先执行语句,后判断条件。
表达式非 0时,继续执行循环体。
while 语句与 do-while 语句的比较
While 语句执行顺序先判断表达式的值,非 0 再执行语句
—— 实现,当型,循环
。
直到型循环是当条件表达式为“真”时,停止循环。
Page 17
C语言程序设计 清华大学 郑莉 安颖莲
for 语句
形式
for (表达式 1;表达式 2;表达式 3) 语句循环前先求解非 0时执行循环体每次执行完循环体后求解
流程图
P70 图 5.6
注意事项
P70- 71
Page 18
C语言程序设计 清华大学 郑莉 安颖莲
break 和 continue 语句
break语句使程序从循环体和 switch语句内跳出,继续执行逻辑上的下一条语句。不能用在别处。
continue 语句结束本次循环,接着进行是否执行下一次循环的判断。
Page 19
C语言程序设计 清华大学 郑莉 安颖莲
,C 程序设计,P64 4.5- 4.8
,C 程序设计,P79 5.2,5.6,
5.10,5.15
复习:,C 程序设计,第四、五章
,计算机程序设计基础,第三章
熟悉一种 C语言编译环境的调试方法。
作 业