haihongyuan.com
海量文库 文档专家
全站搜索:
您现在的位置:首页 > 初中教育 > 初中作文初中作文

c3

发布时间:2013-11-01 13:30:16  

C语言程序设计基础知识 问题: 章节:

Slide: 3-1

傅忠传
哈尔滨工业大学 计算机学院
2003年9月

C语言程序设计基础知识 问题: 章节:

Slide: 3-2

第三章 程序的控制结构 与结构化程序设 计方法

C语言程序设计基础知识 问题: 章节:

Slide: 3-3

该章的学习内容
学点什么哪
?
1. 了解算法的表示方法及其在程序设计 中的重要地位; 2. 掌握C语言的基本控制结构和基本控 制语句的使用方法; 3. 熟练掌握用C语言的基本控制语句进 行顺序、选择和循环结构程序设计的 方法; 4. 掌握一些常用的算法,如递推法、迭 代法、穷举法等; 5. 了解结构化程序设计的基本思想; 6.了解程序测试用例的选取方法和简单 的程序调试方法。

C语言程序设计基础知识 问题: 章节:

Slide: 3-4

本章的学习难点

1. 设计累加和累乘算法,并寻找累加项或累乘项 的构成规律; 2. 三种循环语句在控制流程时区别和相互联系; 3. 条件语句的嵌套和循环语句的嵌套; 4. break语句在switch语句和循环语句中的作用; 5. continue语句在循环语句中的作用。

C语言程序设计基础知识 问题: 章节:

Slide: 3-5

本章目录
1. 算法与算法的表示方法 2. 顺序结构 3. 选择结构 4. 循环结构 5. *结构化程序设计方法简介 6. *自顶向下、逐步求精的程序设计方法 7. 简单的程序调试方法

C语言程序设计基础知识 问题: 章节:

Slide: 3-6

算法与算法的表示方法
1. 算法的概念 2.算法的表示方法 2.1.自然语言表示 2.2.流程图表示 2.3. N-S结构化流程图表示 2.4. 伪码表示

C语言程序设计基础知识 问题: 章节:

Slide: 3-7

就是一个有穷规则的集合,其中的规则确定 了一个解决某一特定类型问题的运算序列。 解题方法的精确描述。即为解决一个特定问 题而采取的确定的有限操作步骤。广义地说做任 何事情都有其算法。

算法的概念

算法分类

数值运算算法: 非数值运算算法:

C语言程序设计基础知识 问题: 章节:

Slide: 3-8

算法的特点
1.有穷性。 即算法包含的操作步骤应是有限的, 每一步都应在合理的时间内完成。 即算法的每个步骤都应是确定的,不 2.确定性。 允许有歧义性。 算法中的每个步骤都应是能有效执行 3.有效性。 的,而且能得到确定的结果。 4.没有输入或有多个输入。 5.有一个或多个输出。

C语言程序设计基础知识 问题: 章节:

Slide: 3-9

算法举例(1)
举例

求任意两个数m、n(m>n)的最大 公约数。

算法1 用从1到n的每一个数去除m和n,最后 能同时整除m和n的数即是最大公约数。 算法2 用从n到1的每一个数去除m和n,第一 个能同时整除m和n的数即是最大公约数。

C语言程序设计

基础知识 问题: 章节:

Slide: 3-10

算法举例(2)
算法3 A: B:

m/n

p

当P=0 则 n 为最大公 约数 否则: m n,n p,转A。

C:

C语言程序设计基础知识 问题: 章节:

Slide: 3-11

算法验证
求28和16的最大公约数。

28/16 16/12 12/4

余 余 余

12 4 0

4为最大公约数。

C语言程序设计基础知识 问题: 章节:

Slide: 3-12

算法的表示方法
自然语言表示法

传统流程图表示法 N-S结构流程图表示法
伪码表示法

C语言程序设计基础知识 问题: 章节:

Slide: 3-13

算法的自然语言表示法
求任意两个数m、n(m>n)的最大 公约数。
A: B: m/n p 当P=0 则 n 为最大公 约数 否则: C: m n,n p,转A。

C语言程序设计基础知识 问题: 章节:

Slide: 3-14

传统流程图表示法的图素
表示顺序执行语句 表示输入输出语句 表示条件判断语句

表示循环判断语句

C语言程序设计基础知识 问题: 章节:

Slide: 3-15

传统流程图图素(2)
表示起始、结束框 表示连接点
表示程序的走向

C语言程序设计基础知识 问题: 章节:

Slide: 3-16

开始 输入m, n

Mod(m, n)→R
While R≠0 yes n→m, R→n mod(m,n)→R 输出n 结束 no

传 统 流 程 图 举 例

C语言程序设计基础知识 问题: 章节:

Slide: 3-17

N-S结构化流程图表示
特点 最重要的特点就是完全取消了流程线, 这样算法被迫只能从上到下顺序执行, 从而避免了算法流程的任意转向,保证了 程序的质量。
优点 与传统的流程图相比,N-S图的另一个优 点就是既形象直观,画出来后又比较节 省篇幅,尤其适合于结构化程序的设计。

C语言程序设计基础知识 问题: 章节:

Slide: 3-18

N-S流程图举例
输入正整数m,n Mod(m,n) →R 当R不为0 n→m R→n Mod(m,n) →R 1111 输出n

C语言程序设计基础知识 问题: 章节:

Slide: 3-19

伪码表示
input m,n 是介于自然语言和计算机语言之间的一种 r=mod(m,n) 代码,是帮助程序员制定算法的智能化语言。 loop: if(r≠0) then m=n n=r r=mod(m,n) goto loop endif print n

C语言程序设计基础知识 问题: 章节:

Slide: 3-20

顺序结构
1. 算法与算法的表示方法 2. 顺序结构 2.1.顺序结构的流程图表示 2.2.顺序结构应用举例 3. 选择结构 4. 循环结构 5. 结构化程序设计方法简介 6. 自顶向下、逐步求精的程序设计方法 7. 简单的程序调试方法

C语言程序设计基础知识 问题: 章节:

Slide: 3-21

顺序结构的流程图表示
顺序执行语句A 顺序执行语句B 顺序执行语句A 顺序执行语句B

当A执行完后,无条件地执行B。

C语言程序设计基础知识 问题: 章节:

Slide: 3-22

顺序结构应用举例
#include <math.h> #include <stdio.h> int:强制类型转换 main( ) 求一个圆的圆周和面积。只保留两位 格式: {floa

t r, l, s; 小数,第三位四舍五入。 (int)表达式; printf("input r: "); scanf("%f", &r); (float)表达式; s=3.14*r*r; l=2*3.14*r; %.2f 四舍五入 s=((int)(s*100+0.5))/100.0; l= ((int)(l*100+0.5))/100.0; printf("s=%f, l=%f\n ", s, l); }

C语言程序设计基础知识 问题: 章节:

Slide: 3-23

全局变量说明; main( ) { 局部变量的说明; 语句序列; } 函数类型 f1(参数) 参数说明; { 局部变量说明; 语句序列; } ……

一语 言 般 形程 式序 的

C

C语言程序设计基础知识 问题: 章节:

Slide: 3-24

开始
编辑

编译
有 有无错误 无 连接 有无错误 无 执行





编 源程序f.c 序 写 的 目标程序f.o 全语 库函数和其 它目标程序 过 言 执行文件 程 f.out 程 C

结果正确否 正确 结束

C语言程序设计基础知识 问题: 章节:

Slide: 3-25

选择结构
3.1.选择结构的应用场合 3.2.关系运算符和关系表达式 3.3.逻辑运算符和逻辑表达式 3.4.选择结构的流程图表示 3.5.条件语句 3.6.开关语句

C语言程序设计基础知识 问题: 章节:

Slide: 3-26

选择结构的应用场合
当我们不知向何处走时,会抬头
看看路牌,当某个方向满足了我们的 要求,则会走去。在程序设计中当某 条件成立,执行某段程序;不成立, 执行另一段程序。此时,即为选择结

构,可使用 if 或 switch 语句完成
该功能。例如:……

C语言程序设计基础知识 问题: 章节:

Slide: 3-27

关系运算符
C的关系运算符 数学中的关系符 含义

> >= < <= == !=

> ≥ < ≤ = ≠

大于 大于或等于 小于 小于或等于 等于 不等于

注意:关系运算符中的相等用“==”表示

不要与赋值号“=”混淆!

C语言程序设计基础知识 问题: 章节:

Slide: 3-28

关系运算的运算规则(1)
1.关系运算符的优先顺序为>、>=、<、<= 相同,= =、!=相同,前组优先于后组。 举例:c1<c2<c3 c1!=c2<c3 2.关系表达式成立, 则结果为1, 即为真值; 否则为0,即为假值。 1 举例:18>5 48>18>8 9>18 1>8 0 0

C语言程序设计基础知识 问题: 章节:

Slide: 3-29

关系运算的运算规则(2)
3.关系运算的操作数可为算术表达式。 举例:a+b>c+d

4.关系运算符的优先级低于算术运算符的 优先级。
举例:2*5<10-7 10<3 0

C语言程序设计基础知识 问题: 章节:

Slide: 3-30

关系运算的运算规则⑶
5. 表面看起来合法的关系表达式,在逻辑 上并不一定是正确的。 举例:当a=3;b=2; c=1时 a>b>c? 3>2>1 1>1 0 6.C语言没有提供“逻辑型”或“布尔型” 等数据类型。只要合法,任何类型表达式 都可作为判断条件,可作逻辑量使用,表达 式值为非0,即为真值,0为假! 举例:当a=3时 a+1为真值;a-3为假值。

C语言程序设计基础知识 问题: 章节:

Slide: 3-31

逻辑运

算符
逻辑运算符 A T T F F
&& || !
逻辑与(并且) 逻辑或(或者) 逻辑非

B !A !B A&&B A||B T F F T T F F T F T T T F F T F T T F F

C语言程序设计基础知识 问题: 章节:

Slide: 3-32

逻辑运算的运算规则(1)
1.只有在两个操作数都为真时,逻辑与的 结果为真,否则为假。 2.只有在两个操作数都为假时,逻辑或的 结果为假,否则为真。 3.逻辑非为一元运算, 真变假, 而假变真。

4.用逻辑运算符连接的两个逻辑量, 构成 的式子称为逻辑表达式。

C语言程序设计基础知识 问题: 章节:

Slide: 3-33

逻辑运算的运算规则(2)
5.逻辑运算符的优先顺序为: ! && || 按顺序递减。 举例:L1 && L2 || !L3 6.算术、关系、逻辑运算符的优先顺序为: 算术运算 关系运算 逻辑运算
举例:a+b>c*d && L1 && !L2

C语言程序设计基础知识 问题: 章节:

Slide: 3-34

逻辑表达式举例
判断某一年year是否是闰年。
能被4整除,但不能被100整除;或能被400整除; year%4= =0&&year%100!=0 或year%400= =0

(year%4= =0&&year%100!=0)||(year%400= =0)

C语言程序设计基础知识 问题: 章节:

Slide: 3-35

单选择结构的框图结构
入口
条件成立否 yes 语句A 出口 no

条件
yes no

语句A

C语言程序设计基础知识 问题: 章节:

Slide: 3-36

双选择结构的框图结构
入口
yes

条件成立否

no

程序段A

程序段B

出口

C语言程序设计基础知识 问题: 章节:

Slide: 3-37

双向选择分支结构N-S图
条件

yes
语句A

no
语句B

C语言程序设计基础知识 问题: 章节:

Slide: 3-38

条件语句
?单选择条件语句 ?双选择条件语句 ?多选择条件语句 ?条件运算符 ?IF语句的说明 ?程序举例1,2,3

C语言程序设计基础知识 问题: 章节:

Slide: 3-39

单选择条件语句
功能
格式 框图 执行过程
当表达式为真值时,执行语 句A,否则,不执行。 表达式 if (表达式) 语句A T 语句A
F

C语言程序设计基础知识 问题: 章节:

Slide: 3-40

双选择条件语句
功能
格式 框图 执行过程
当表达式为真值时,执行语 句A;否则,执行语句B。 if (表达式) 语句A else 语句B
T

表达式

F

语句A

语句B

C语言程序设计基础知识 问题: 章节:

Slide: 3-41

为执 真行 功 执行过程 框图 值 语 能 T if (表达式1) 表达式1 时句当 格式 表达式 F 语句1 , 1 表 else if (表达式2)语句2 T 表达式2 F 执;达 表达式 语句1 …… 行否式 T 表达式3 else if (表达式m)语句m F 语 则 1 表达式 句,为 else 语句m+1 语句2 2 当真 语句3 语句4 , 表 值 否达时 则式, 2 …

多选择条件语句

C语言程序设计基础知识 问题: 章节:

Slide: 3-42

条件运算
算式格式 E1?E2:E3
算式框图 举例
yes

(属三目运算符)
no

E1为真? A = (x>y

) ? x : y 相当于: E2 E3 if(x>y)A=x; else A=y; 又: (+ +I%8)? ' ' : '\n'

C语言程序设计基础知识 问题: 章节:

Slide: 3-43

if语句的说明
1.表达式既可以是关系表达式、逻辑表达式,也 可以是数值类型表达式。当为0时,为假值; 非0为真值。
2.关系运算符= = 不能写成赋值运算符=。 3.在if 语句和else语句中若有多个操作语句,则应 用花括号{ 和} 将它们括起成为一个复合语句。

C语言程序设计基础知识 问题: 章节:

Slide: 3-44

条件语句举例--1
#include <stdio.h> main( ) 输入两个整数,按从小到大的顺序 { int a, b, t; 输出它们。 scanf("%d, %d", &a, &b); if (a>b) { t=a; a=b; b=t; }; printf("%d, %d", a, b); }

C语言程序设计基础知识 问题: 章节:

Slide: 3-45

条件语句举例--1
#include <stdio.h> main( ) { int a, b; scanf("%d, %d", &a, &b); if (a>b) { a=a+b; b=a-b; a=a-b; }; printf("%d, %d", a, b); }

C语言程序设计基础知识 问题: 章节:

Slide: 3-46

条件语句举例--1
#include <stdio.h> main( ) { int a, b; scanf("%d, %d", &a, &b); printf("%d, %d", a>b?b:a, a>b?a:b ); }

C语言程序设计基础知识 问题: 章节:

Slide: 3-47

条件语句举例--2
#include <stdio.h> main(输入三个整数,按从小到大的顺序 ) { int a, b, c, t; 输出它们。 scanf("%d, %d, %d", &a, &b, &c); if (a>b) { t=a; a=b; b=t; } if (a>c) { t=a; a=c; c=t; } if (b>c) { t=b; b=c; c=t; } printf("%d, %d, %d", a, b, c); }

C语言程序设计基础知识 问题: 章节:

条件语句举例--3

Slide: 3-48

#include <stdio.h> main( ) #include <stdio.h> { int x, y; main( ) 有一函数:&x); -1 (x<0) scanf("%d", { int x, y; if (x>=0) y= /*条件语句嵌套 */ 0 (x=0) scanf("%d", &x); if (x= =0) y=0; /*注意:内、外重条件语句*/ 1 (x>0) if (x<0) y=-1; else y=1; /* if-else配对使用原则:*/ 编一程序,输入一个x值,输出y值。 else if (x=/* else总是与距离它最近的且没有*/ =0) y=0; else y=-1; else y=1; /*配对的if相结合,与缩进格式无关!*/ printf("x=%d, y=%d", x, y); printf("x=%d, y=%d", x, y) ; } }

C语言程序设计基础知识 问题: 章节:

Slide: 3-49

开关语句--switch
功能 格式 说明 举例

有了if 语句,为什么还 要switch语句?

switch (表达式) switch (表达式) ⑶由于每个case语句后的常量只起语句标号 ⑵执行时,先求表达式的值,然后自上而下 ⑴switch后括号内表达式的值只能是整形、 开关语句就像多路开关一样,程序可根据 ⑷独立分支时每个case语句和default语句的 {case 常量1 :: 语句系列1;break; {case 常量1 语句系列1 的作用,所以它们的值必须互不相同,否则 字符型或枚举类型,每个常量的类型和表达 依次测试每一个常量,若与常量I相匹配, 一个表达式可能产生的不同结果值,选择其中 出现的前后次序发生改变时,不影响运行

结 case 常量2 :: 语句系列2;break; case 常量2 语句系列2 会出现互相矛盾的现象(C语言系统不允许, 式的类型应相同,每个语句序列可以是零个 则从其后的语句序列i开始执行每个语句序列, 果,但在一般情况下,常量出现频率较高的 一个——独立分支结构,或几个分支 …… …… 编译出错)。 若没有常量与之匹配,则执行default后面的 或若干个语句。 放在前面。case 常量m :: 语句系列m;break; 语句系列m 去执行。 case 1: case 常量m case 1: 的语句1: 语句序列——非独立分支结构。 3: case ——非独立分支结构 default :: 语句系列m+1; default 语句系列m+1 case 1: printf(“%d”, case 2: 若只执行语句系列I,则在语句系列I后 4: d1); break; default: } case 3: } 加break语句——独立分支结构。 default: case 2: case 3: case 3: deault:

C语言程序设计基础知识 问题: 章节:

Slide: 3-50

开关语句举例
?独立分支开关语句举例 ?非独立分支开关语句举例

C语言程序设计基础知识 问题: 章节:

Slide: 3-51

独立分支开关语句举例
#include <stdio.h> main() X 0≤X<10 {int x 2X+1 10≤X<20 scanf("%d", &x); switch ( x/10 ) Y= 41 20≤X<30 {case 0 71-X : printf("y=%d\n", x); break; 30≤X<40 case 1: printf("y=%d\n", 2*x+1); break; 0 X<0或X≥40 case 2: printf("y=20\n"); break; case 3: printf("y=%d\n", 71-x); break; default: printf("y=0\n"); } }

C语言程序设计基础知识 问题: 章节:

Slide: 3-52

非独立分支开关语句举例
设有语句:int a=1,b=0;则执行下面语句后输出为( B ) switch(a) { case 1 : switch(b): { case 0 : printf(“**0**”);break; case 1 :printf(“**1**”);break; } case 2 : printf(**2**);break; } B.**0****2** A. **0** B.**0****2** C.**0****1****2** D.错误

P107习题3.2-(2)

C语言程序设计基础知识 问题: 章节:

Slide: 3-53

循环结构
3.1.循环结构的应用场合 3.2.循环结构的流程图表示 3.3.循环语句 3.4.单重循环问题应用举例 3.5.嵌套循环及其应用举例 3.6.转移控制语句

C语言程序设计基础知识 问题: 章节:

Slide: 3-54

循环结构的应用场合
s?=1*1+2*2+… s=1*1+2*2+3*3 …+100*100
1*1+2*2+…… 1*1+2*2+3*3 +99*99+ =? 100*100=?

for(I=1,s=0;I<=100;I++) s+=I*I;

C语言程序设计基础知识 问题: 章节:

Slide: 3-55

循环结构的框图结构(1)
初始化变量
no 条件成立否 yes

当p为真值
A

程序段 修改循环变量

先 判 断 后 执 行

C语言程序设计基础知识 问题: 章节:

Slide: 3-56

循环结构的框图结构(2)
初始化变量 程序段
修改循环变量
条件成立否 yes no

A
当p为假值

先 执 行 后 判 断

C语言程序设计基础知识 问题: 章节:

Slide: 3-57

循环语句
定义
在给定条件成立时,重复执行某个程序段的语句 称为循环语句,重复执行的程序段称为循环体。

循环体

循环体可以是单个C语句、空语句或复合语句。 当循环体中是空语句(只有一个分号)时,表 示在循环体中什么也不做。

循环结构
while语句 do--while语句 for语句

C语言程序设计基础知识 问题: 章节:

Slide: 3-58

while语句
功能 当表达式值为非0时,执行其后语句。

格式 框图 举例

While(表达式) 语句
表达式

0

非0
语句

C语言程序设计基础知识 问题: 章节:

Slide: 3-59

While程序举例
#include <stdio.h> main () {int sum, i; sum=0, 用while语句编程求 ? i i=1 i=1; sum=0; /*循环初始化*/ 当i小于等于100 while(i<=100) {sum=sum+i; sum=sum+i i++; /*修改循环变量*/
100 i ?1

} printf("%d", sum); }

i=i+1 输出总和sum

C语言程序设计基础知识 问题: 章节:

Slide: 3-60

do~while语句
格式 功能 框图 举例

实现的是直到型循环,do~while语 Do 语句 句先执行语句,然后再判断表达式的值是 语句 非0 否为0,为非0时,重复执行语句,否则, 表达式 While(表达式); 退出循环。 0

C语言程序设计基础知识 问题: 章节:

Slide: 3-61

do~while语句程序举例
#include <stdio.h> main () {int sum, i; 用do~while语句编程求 i=1; sum=0; /*循环变量赋初值*/ ? i do {sum+=i; i++; /*修改循环变量*/ } while(i<=100); printf("%d", sum); }
100 i ?1

C语言程序设计基础知识 问题: 章节:

Slide: 3-62

for语句
格式 功能 框图 举例 用表达式1给循环变量赋初值,然后再 for(I=1;I<=100;I++) for (表达式1;表达式2;表达式3) 判断表达式2的值是否为0,为非0时,重 0 for(I=1;I<=100;++I) 语句 表达式2 复执行循环体,然后再利用表达式3修改循 非0 其中:表达式1为循环变量赋初值; 是等价的 环变量,再判断表达式2的值;表达式2的值 语句 表达式2为循环重复执行的条件; 表达式3 为0时,退出循环。 表达式3用来给循环变量增值。
表达式1

C语言程序设计基础知识 问题: 章节:

Slide: 3-63

三种循环的比较
3.while和do--while语句只在while后指定 1.for语句可由while语句构造。 4.while和do--while语句的循环初始化应在 2.for语句和while语句是先判断,后执行。 循环条件,循环体中应包含使循环结束 for(表达式1;表达式2;表达式3;)语句 while和do--while语句前完成。 对于该循环的循环体有可能一次也不执 等价于: 的语句(修改循环变量)。 表达式1; for循环的循环初始化可以在表达式1中实 行。 for循环可在表达式3中包含使循环趋于结 while(表达式2) 现。 do—while语句是先执行,后判断。至少 束的语句(修改循环变量),甚至可将循环 {语句; 执行一次循环体。 体全部放入表达式3中。凡用while循环能 表达式3;
实现的,用for循环都能实现! }

C语言程序设计基础知识

问题: 章节:

Slide: 3-64

for语句程序举例--1
#include <stdio.h> main () 用for语句编程求 ? i {int sum, i; sum=0; for (i=1;i<=100;i++) sum=sum+i; printf("%d", sum); }
100 i ?1

C语言程序设计基础知识 问题: 章节:

Slide: 3-65

for语句程序举例--2
#include <stdio.h> #include <stdio.h> main( ) main( ) {long s=0, t; int n, i, j; {long s=0, t=1; int n, i; 求 ? i! =1!+2!+……+n! scanf("%d", &n); scanf("%d", &n); for (i=1; i<=n; i++) for (i=1; i<=n; i++) { t=1 ; /*i的阶乘*/ { t*=i ; for(j=1; j<=i; j++) t*=j; s+=t;} s+=t;} printf("s=%ld", s); printf("s=%ld", s); } } 使用双重循环 使用单重循环
100 i ?1

C语言程序设计基础知识 问题: 章节:

Slide: 3-66

for语句程序举例--2
#include <stdio.h> #include <stdio.h> main( ) main( ) {long s=0, t; int n, i, j; {long s=0, t=1; int n, i; scanf("%d", &n); scanf("%d", &n); for (i=1; i<=n; i++) for (i=1; i<=n; i++) { t=1 ; { t*=i ; for(j=1; j<=i; j++) t*=j; s+=t;} s+=t;} printf("s=%ld", s); printf("s=%ld", s); } } 寻找累加项的方法:1.用通项公式表示累加项。 寻找累加项的方法:2. 利用前后项之间的规律。

C语言程序设计基础知识 问题: 章节:

Slide: 3-67

for语句程序举例--3
求Fibonacci数列:1,1,2,3,5,8, ……的 前20项。 即第一、二项都是1,第三项以后的 每一项都是前两项的和。

C语言程序设计基础知识 问题: 章节:

Slide: 3-68

#include <stdio.h> main( ) {long int f1, f2; int i; f1=1; f2=1; for(i=1; i<=10; i++) {printf("%12ld %12ld ", f1, f2); if(i%2= =0) printf("\n"); f1=f1+f2; f2=f1+f2; } }

上机测试!

C语言程序设计基础知识 问题: 章节:

Slide: 3-69

单重循环问题应用举例
?公式计算 ?水仙花数

?*求定积分
?*解高次方程

C语言程序设计基础知识 问题: 章节:

Slide: 3-70

程序举例--1
π 1 1 1 用—≈1- —+— - —+……公式求π 4 3 5 7 的近似值,直到最后一项的绝对值小于
10-6为止。

1 通项公式: Sign * — n 其中 n=1,3,5,… … Sign=1或-1

C语言程序设计基础知识 问题: 章节:

Slide: 3-71

程序举例--1
#include <stdio.h> #include <math.h> main( ) {int Sign=1; float n=1.0, t=1.0, pi=0.; while(fabs(t)>=1e-6) { pi=pi+t; n=n+2;
Sign= -Sign; t=Sign/n; }

} pi=pi*4; printf("pi=%10.6f\n",pi);

C语言程序设计基础知识 问题: 章节:

Slide: 3-72

程序举例--2

打印出所有的“水仙花数”,所谓“水仙花数 是指一个三位数,其各位数字立方和等于该数字 本身。 例如: 153=13+53+33

C语言程序设计基础知识 问题: 章节:

Slide: 3-73

水仙花数程序实例
#include <stdio.h> main() {int l1, l2, l3, l4; for (l4=100; l4<=999; l4++) {l1=l4%10; /*个位*/ l2=(l4%100)/10; /*十位*/ l3=l4/100; /*百位*/ if (l4==l1*l1*l1+l2*l2*l2+l3*l3*l3) printf("Daffodil's number is %d\n",l4); } }

C语言程序设计基础知识 问题: 章节



Slide: 3-74

求定积分--3
求定积分 ? sin(x)dx 的值。
1 0

C语言程序设计基础知识 问题: 章节:

Slide: 3-75

求定积分 ?a f ( x)dx

b

将a-b进行n等分, 区间段为(a-b)/n, 而两条直线之间构成 近似梯形,
F(x)在a与b之间的定积 分的值就是各梯形的面 积之和。

f(x)

a

a+3h a+h

b

C语言程序设计基础知识 问题: 章节:

Slide: 3-76

求面积公式
?
b a

f ( x)dx =S1+S2+S3+……+Sn

=h/2*(f(a)+f(a+h))+h/2*(f(a+h)+f(a+2h))+…… +h/2*(f(a+(n-1)h)+f(b)) =h/2(f(a)+2f(a+h)+2f(a+2h)+…… +2f(a+(n-1)h)+f(b)) =h/2(f(a)+f(b)+2(f(a+h)+f(a+2h)+……+f(a+(n-1)h)) =h((f(a)+f(b))/2+f(a+h)+f(a+2h)+……+f(a+(n-1)h)))

C语言程序设计基础知识 问题: 章节:

Slide: 3-77

#include <stdio.h> main( ) {int n, i; float S, h, a, b; scanf("%f, %f, %d", &a, &b, &n); h=(b-a)/n; S=(sin(a)+sin(b))/2; for (i=1; i<n; ++i) S=S+sin(a+i*h); S=S*h; printf("S=%f\n", S); }

求 定 积 分 程 序

C语言程序设计基础知识 问题: 章节:

Slide: 3-78

程序举例--4
求方程F(x)=2x3-4x2+3x-6=0在1.5附近的 一个根。

牛顿迭代法解一元高次方程
二分法解一元高次方程

C语言程序设计基础知识 问题: 章节:

Slide: 3-79

牛顿迭代法
过x1的f(x)切线方程为

Y

Y=X-X1+F(X1)/F?(X1)
X2=X1-F(X1)/F?(X1)

Xn=Xn-1-F(Xn-1)/F?(Xn-1)
当│ Xn-Xn-1 │≤ε时

Xn为方程F(x)在X1附近
的一个根。

X3 X2 X1

X

C语言程序设计基础知识 问题: 章节:

Slide: 3-80

#include <stdio.h> #include <math.h> main( ) {float x0, x1, d; x0=1.5; d=( ( (2*x0-4)*x0+3)*x0-6)/((6*x0-8)*x0+3); x1=x0-d; while (fabs(d)>1e-6) {x0=x1; d=(((2*x0-4)*x0+3)*x0-6)/((6*x0-8)*x0+3); x1=x0-d; } printf("x1=%f\n",x1); }

解 法 1

C语言程序设计基础知识 问题: 章节:

Slide: 3-81

#include <stdio.h> #include <math.h> main( ) {float x, d; x=1.5; d=( ( (2*x-4)*x+3)*x-6)/((6*x-8)*x+3); x-=d; while (fabs(d)>1e-6) {d=(((2*x-4)*x+3)*x-6)/((6*x-8)*x+3); x-=d; } printf("x=%f\n",x); }

解 法 2

C语言程序设计基础知识 问题: 章节:

Slide: 3-82

二分法 任意取两点x1和x2,使
F(x1)和F(x2)符号相反。
X1和X2的中值为x。

如F(x)与F(x2)同符号,则 用x代替x2,否则代替x1。 不断逼近,当│x1-x2│ ≤ε时,x为f(x)的一个 根。

x1
x x2

C语言程序设计基础知识 问题: 章节:

Slide: 3-83

#include <stdio.h> #include <math.h> main( ) {float x1, x2, x, f1, f2, f; do{scanf("%f%f",&x1,&x2); f1=((2*x1-4)*x1+3)*x1-6; f2=((2*x2-4)*x2+3)*x2-6; }while(f1*f2>0); do{x=(x1+x2)/2; f=((2*x-4)*x+3)*x-6; if (f*f1>0) {x1=x; f1=f;} else {x2=x; f2=f;}; }while (fabs(x1-x2)>=1e-6); printf("x=%f\n",x); }

C语言程序设计基础知识 问题: 章节:

Slide: 3-84

嵌套循环及其应用举例
定义 在一个循环的循环体中又包含了另一个
循环,该结构称为嵌套循环。

注明

3.嵌套的循环最好采用右缩进 4.循

环嵌套不能交叉,即在一个循 1.在嵌套的各层循环体中,使用复 2.内层和外层循环控制变量不应同 环体内必须完整的包含着另一个 合语句保证逻辑上的正确性 。 名,以免造成混乱 。 格式书写,以保证层次的清晰性 。 ?水仙花数 循环 。 ?*九· 九表1、2 ?*杨辉三角形1、2、3 ?百钱买百鸡1、2、*3、*4、*5

举例

C语言程序设计基础知识 问题: 章节:

Slide: 3-85

开始
for l1=1 to 9

for l2=0 to 9
for l3=0 to 9 l4=l1*100+l2*10+l3 l5=l1*l1*l1+l2*l2*l2+l3*l3*l3 no l4=?l5 yes 输出l4 结束

水 2仙 花 框数 图解 法

----

C语言程序设计基础知识 问题: 章节:

Slide: 3-86

水仙花数解法2----程序
#include <stdio.h> main() {int l1, l2, l3, l4; for (l1=1; l1<=9; l1++) /*百位*/ for (l2=0; l2<=9; l2++) /*十位*/ for (l3=0; l3<=9; l3++) { /*个位*/ l4=l1*100+l2*10+l3; if (l4==l1*l1*l1+l2*l2*l2+l3*l3*l3) printf("Daffodil?s number is %d\n",l4); } }

缩进格式

C语言程序设计基础知识 问题: 章节:

Slide: 3-87

九· 九表----1
1 ? 1 2 3 4 5 6 7 8 9 2 ? 2 4 6 8 10 12 14 16 18 3 ? 3 6 9 12 15 18 21 24 27 4 ? 4 8 12 16 20 24 28 32 36 5 ? 5 10 15 20 25 30 35 40 45 6 ? 6 12 18 24 30 36 42 48 54 7 ? 7 14 21 28 35 42 49 56 63 8 ? 8 16 24 32 40 48 56 64 72 9 ? 9 18 27 36 45 54 63 72 81

C语言程序设计基础知识 问题: 章节:

Slide: 3-88

九· 九表框图和程序----1
#include <stdio.h> 开始 main( ) {int i, j; 输出表头 for(i=1;i<=9;i++)printf("%4d",i); printf("\n"); for I=1 to 9 for(i=1;i<=9;i++)printf("----"); printf("\n"); for J=1 to 9 for(i=1;i<=9;i++) {for(j=1;j<=9;j++) 输出I*J printf("%4d", i*j); printf("\n"); } 结束 }

开始 输出表头

for I=1 to 9
for J=1 to 9

输出I*J 结束

C语言程序设计基础知识 问题: 章节:

Slide: 3-89

九· 九表----2
1 ? 1 2 3 4 5 6 7 8 9 4 6 8 10 12 14 16 18 9 12 15 18 21 24 27 16 20 24 28 32 36 25 30 35 40 45 36 42 48 54 49 56 63 64 72 81 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 ?

C语言程序设计基础知识 问题: 章节:

Slide: 3-90

九· 九表框图和程序----2
#include <stdio.h> 开始 main( ) {int i, j; 输出表头 for(i=1;i<=9;i++)printf("%4d",i); printf("\n"); for I=1 to 9 for(i=1;i<=9;i++)printf("----"); printf("\n"); for J=1 to I for(i=1;i<=9;i++) {for(j=1;j<=i;j++) 输出I*J printf("%4d", i*j); printf("\n"); } 结束 }

开始 输出表头

for I=1 to 9
for J=1 to I

输出I*J 结束

C语言程序设计基础知识 问题: 章节:

Slide: 3-91

杨辉三角形----框图
开始 开始 1 1 1 1 2 1 3 1 4 1 5 1 6 ……

输入输出的行数n 输入输出的行数n
1 3 6 10 15 for i=0 to n for i=0 to n 1 for j=0 to i for j=0 to i 4 1 输出Ci j 输出Ci j 10 5 1 20 15 6 1 输出回车换行输出回车换行 开始 开始

C语言程序设计基础知识 问题: 章节:

Slide: 3-92

#include <stdio.h> main( ) {int n, i, j, k, i1, j1, k1

; printf(〞输入输出的行数:〞 ); scanf(〞%d 〞, &n); for(i=0; i<n; i++) {for(j=0; j<=i; j++) {i1=j1=k1=1; for(k=1; k<=i; k++) i1*= k; for(k=1; k<=j; k++) j1*= k; for(k=1; k<=i-j; k++) k1*= k; printf(〞%7d 〞, i1/(j1*k1)); } printf(〞\n 〞); } }

杨 辉 程三 序角 1形 ----

C语言程序设计基础知识 问题: 章节:

Slide: 3-93

#include <stdio.h> main( ) {int n, i, j, k, i1, j1, k1; printf(〞输入输出的行数:〞 ); scanf(〞%d 〞, &n); i1=1; for(i=0; i<n; i++) {if(i>0) i1*=i; j1=1; for(j=0; j<=i; j++) {if(j>0) j1*= j; k1=1; for(k=1; k<=i-j; k++) k1*= k; printf(〞%7d 〞, i1/(j1*k1)); } printf(〞\n 〞); } }

杨 辉 程三 序角 2形 ----

C语言程序设计基础知识 问题: 章节:

Slide: 3-94

#include <stdio.h> main( ) {int n, i, j, k, i1, j1, k1; printf(〞输入输出的行数:〞 ); scanf(〞%d 〞, &n); for(i=0; i<n; i++) {for(j=0; j<=i; j++) {i1=j1=1; for(k=j+1; k<=i; k++) i1*= k; for(k=1; k<=i-j; k++) j1*= k; printf(〞%7d 〞, i1/j1); } printf(〞\n 〞); } }

杨 辉 程三 序角 3形 ----

C语言程序设计基础知识 问题: 章节:

Slide: 3-95

百钱买百鸡
鸡翁一,值钱五;鸡母一,值钱三;鸡雏 三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡 雏各几何?

C语言程序设计基础知识 问题: 章节:

Slide: 3-96

百钱买百鸡----1
0 25 75 #include <stdio.h> main( ) 3 20 77 {int x, y, z, m, n; 4 18 78 for(x=0; x<=100; x++) 7 13 80 for(y=0; y<=100; y++) for(z=0; z<=100; z++) 8 11 81 {m=x+y+z; 11 6 83 n=5*x+3*y+z/3; 84 if(m= =100 && n= =100) 12 4 printf(〞%5d, %5d, %5d\n 〞, x, y, z); }

该解法是否正确?

C语言程序设计基础知识 问题: 章节:

Slide: 3-97

百钱买百鸡----2
#include <stdio.h> main( ) 0 25 75 { float x, y, z, m, n; int 4 18 78 for(x=0; x<=100; x++) for(y=0; y<=100; y++) 8 11 81 for(z=0; z<=100; z++) 12 4 84 {m=x+y+z; n=5*x+3*y+z/3; if(m= =100 && n= =100) printf(〞%5.0f, %5 .0f, %5 .0f \n 〞, x, y, z); }

C语言程序设计基础知识 问题: 章节:

Slide: 3-98

百钱买百鸡----3
#include <stdio.h> main( ) 0 25 75 {float x, y, z, m, n; 4 18 78 for(x=0; x<=20; x++) for(y=0; y<=33; y++) 8 11 81 for(z=0; z<=99; z++) 12 4 84 {m=x+y+z; n=5*x+3*y+z/3; if(m= =100 && n= =100) printf(〞%5.0f, %5 .0f, %5 .0f \n 〞, x, y, z); }

C语言程序设计基础知识 问题: 章节:

Slide: 3-99

百钱买百鸡----4
#include <stdio.h> main( ) {float x, y, z, m, n; for(x=0; x<=20; x++) for(y=0; y<=33; y++) {z=100-x-y; n=5*x+3*y+ z/3; if(n= =100) printf(〞%5.0f, %5 .0f, %5 .0f \n 〞, x, y, z); } }

C语言程序设计基础知识 问题: 章节:

百钱买百鸡----5 #include <stdio.h>

Slide:3-100

main( ) 5x+3y+z/3=100 z=300-15x-9y {int x, y, n; x+y+z=100 z=100-x-y long m=100; y=(100-7x)/4 float z; for(x=0; x<=20; x++) {y=(100-7*x)/4; z=100-x-y; m=x+y+z; n=5*x+3*y+(int)(z/3); if(y>=0 && z>=0 && n= =100) printf(〞%5d, %5 d, %5 .0f \n 〞, x, y, z); } }

C

语言程序设计基础知识 问题: 章节:

Slide:3-101

转移控制语句
定义
能够改变程序流向的语句。

语句

goto语句

break语句
continue语句

return语句

C语言程序设计基础知识 问题: 章节:

Slide:3-102

goto语句
功能 将控制执行权转移到指定的语句标号处。 格式 goto 语句标号;

语句标号 用标识符表示转移语句的入口目的
地址。不能用整数作语句标号。 loop: if (x>=0) { 举例 goto asd; …… n++; sum+=x; 用goto语句构成循环 asd: x=…… scanf(“%f”, &x);
goto loop; }

C语言程序设计基础知识 问题: 章节:

Slide:3-103

用if和goto语句构成循环
#include <stdio.h> sum=0, n=0 main() 输入成绩x { float sum, x; int n; 当x为非负数 求一个班级的数学学习总成绩和平 sum=0; n=0; 均成绩。(采用伪数据法) scanf(“%f”, &x); sum=sum+x n=n+1 loop: ; if (x>=0) { n++; sum+=x; 输入成绩x scanf(“%f”, &x); 输出总成绩sum goto loop;} 平均成绩sum/n printf(“sum=%f, ave=%6.2f”, sum, sum/n); }

C语言程序设计基础知识 问题: 章节:

Slide:3-104

break语句和continue语句
功能 在循环语句中,遇break语句跳出循环;
在开关语句中,遇break语句跳出开关语 句;遇continue语句结束本次循环,进 行下一次循环。 break; 格式 continue;

说明 在嵌套循环的情况下,break语句和 循环结构是指用while语句、do-while语 一般情况下,break语句和continue语句与
continue语句只对包含它们的最内层的循 句或for语句构成的循环,对于if和goto 条件语句(if)在循环体中使用。 环语句起作用 。 语句构成的循环,则不起作用。

C语言程序设计基础知识 问题: 章节:

Slide:3-105

break和continue语句举例
求3 ~ 100素数
求100 ~200间能被3整除的数

求合数的全部因子
*公式计算

C语言程序设计基础知识 问题: 章节:

Slide:3-106

Break

开始 #includep=1, i=1 S=0, <stdio.h> main( ) F i<=20 {float s=0, t=1; int i; 求s=1/1!+1/2!+1/3!+……,其精度 T for(i=1; i<=20; i++;) 为10-4,当第二十项没有达到精度, p/i→p、S+p→S {t/=i; /* t=t/i*/ i+1→i 则计算到第二十项。 s+=t; /*s=s+t*/ T if(t<=1e-4)_________; break P>1e-4 } F printf("s=%10.7f\n", s); 输出S值 } 结束

语 句 程 序 举 例 1

C语言程序设计基础知识 问题: 章节:

Slide:3-107

Break

#include <stdio.h> main() {int i, j;

语 for(i=3; i<=100; i++) 求3~100的所有质数(素数)。 句 {for(j=2; j<i-1; j++) if(i%j= =0)________; break 程 if (i==j)printf(〞%8d 〞, i); 序 } 举 } 双重循环嵌套,break结束内重循环! 例 2

C语言程序设计基础知识 问题: 章节:

Slide:3-108

开始

#include <stdio.h> 输入合数m main( ) {int flag=1, j=0, i, m; /*变量定义并赋初值*/ 1→flag, 2→i, 0→j scanf(“%d”, &m); /* &变量地址,格式控制字符串不应

* F for(i=2; i<=m-1; i++) /*包括提示信息及“\n”等转移字符* i<=m-1 i+1→i ________________; T {if(m%i!=0) F continue i整除m? 求一个合数的全部因子。 flag=0; T printf("%5d%c", i, (++j%8)? ′′: ′\n′); 0→flag, 输出i值 } F if(flag) /*if(flag!=0) 即表达式成立*/ flag=1? T printf("No divisor %d is a prime number.\n", m); 输出素数信息 } 结束

语 句 举 例

Continue

C语言程序设计基础知识 问题: 章节:

Slide:3-109

Continue语句举例--2
#include <stdio.h> main( ) {int n; 求100~200之间能被3整除的数。 for(n=100; n<=200; n++;) continue {if(n%3!=0)__________; printf("%5d", n); } continue语句结束本次 }
循环,进行下一次循环

C语言程序设计基础知识 问题: 章节:

Slide:3-110

结构化程序设计方法简介
背景 追求程序占用内存小、运行速度快、炫耀

编程技巧,而导致质量低下、可靠性差、 定义 开发周期长、维护费用高昂,而且又价格 结构化程序设计是一种进行程序设 昂贵。 计的原则和方法,按照这种原则和方 结构化程序设计的基本思想 为降低软件成本、提高软件的生产和 法设计出的程序的特点是:结构清晰, 维护效率,形成程序设计方法学和软件工 容易阅读,容易修改,容易验证。 2.三种基本结构应具有如下良好特性: 3.程序设计采用“自顶向下、逐步求精”和模块 1.采用顺序、选择和循环三种基本结构作为程 程学,从而形成结构化程序设计方法。 ① 只有一个入口。② 只有一个出口。 印度软件大国与软件工程学。 化的方法。 序设计的基本单元,避免无限制地使用goto语
③ 无死语句,即不存在永远都执行不到的语句。

句而使流程任意转向。 ④ 无死循环,即不存在永远都执行不完的循环。

C语言程序设计基础知识 问题: 章节:

Slide:3-111

自顶向下、逐步求精 的程序设计方法
什么是逐步求精方法? 什么是自顶向下的程序设计方法? 逐步求精实现技术 应用举例

C语言程序设计基础知识 问题: 章节:

Slide:3-112

什么是逐步求精方法?
将一个完整的、较复杂的问题分解成若干相对独立 的、较简单的子问题,若这些子问题还较复杂。可再 分解它们,直到能容易地用某种高级语言表达为止。

换句话说,逐步求精技术就是:按照先全局后局部、
先整体后细节、先抽象后具体的过程,组织人们的思

维活动,从最能反映问题体系结构的概念出发,逐步
精细化、具体化、逐步补充细节,直到设计出可以在 机器上执行的程序。——系统分析员必备的素质!

C语言程序设计基础知识 问题: 章节:

Slide:3-113

什么是自顶向下的程序设计方法?
编程方法:
1. 线性方法
——程序员必备的素质! 先写出结构简

单清晰的 是先画出一个粗糙的程 是写出基础程序段, 不考虑程序结构,直 主程序表达整个问题, 序框图,写出程序第一 然后再扩大、补充和升 接顺序地写出一行行语 在此问题中包含复杂的 稿,然后向上、向下两 级。它是自顶向下方法 句,程序执行的顺序就 子问题则用子程序来实 个方向上复杂化考虑, 的逆方法。 是编出的语句顺序。 现,若子问题还包含复 不断修正,直至得到一 杂的子问题,再用另外 个完整的、机器上可执 一个子程序来解决,直 行、完成预定功能的程 到每一细节都可以用高 序。 级语言清楚表达为止。

2. 自底向上方法
3. 自里向外的方法

4. 自顶向下方法

C语言程序设计基础知识 问题: 章节:

Slide:3-114

自顶向下方法图示
问题

问题1 问题2

问题4 问题3

问题1

问题2

问题3

问题4

C语言程序设计基础知识 问题: 章节:

Slide:3-115

逐步求精实现技术
“划分与解决”的分割技术(序列技术); “做出有限进展”的递推技术(循环技术); “分析情况”的分析技术(分支技术);

C语言程序设计基础知识 问题: 章节:

Slide:3-116

逐步求精实现技术
第一步:把问题划分成一些不相交的部分,直到
可以用复合语句表示为止;

“划分与解决”的分割技术(序列技术);

第二步:依次解决划分后的每一步问题。

“做出有限进展”的递推技术(循环技术); “分析情况”的分析技术(分支技术);

C语言程序设计基础知识 问题: 章节:

Slide:3-117

逐步求精实现技术
“划分与解决”的分割技术(序列技术); “做出有限进展”的递推技术(循环技术);
如果找到了一个朝向问题最终解的方向,那么就做 出有限进展,重复使用递推,直到使它达到最终解。 例如,求6!=5!×6,5!=4!×5,…,依次类推重 复6次,可得到最终解。

“分析情况”的分析技术(分支技术);

C语言程序设计基础知识 问题: 章节:

Slide:3-118

逐步求精实现技术
“划分与解决”的分割技术(序列技术); “做出有限进展”的递推技术(循环技术); “分析情况”的分析技术(分支技术);
这种技术就是指对问题用情况分析来精细化,直到 可用条件语句实现为止。 1.对实际问题进行全局性分析、决策,确定数学模型; 2.确定程序的总体结构,将整个问题分解成若干相对独 立的子问题; 3.确定子问题的具体功能及其相互关系 ——确定模块之间的接口; 4.在抽象的基础上,将各子问题逐一精细化,直到能用

C语言程序设计基础知识 问题: 章节:

Slide:3-119

应用举例

见书上3.6.4节

C语言程序设计基础知识 问题: 章节:

Slide:3-120

简单的程序调试方法
程序中常见的出错原因

Turbo C集成环境下的跟踪调试方法
其它排错方法

C语言程序设计基础知识 问题: 章节:

Slide:3-121

程序中常见的出错原因
错误分类
程序做的事情并不是程序设计者想做的事情。 程序设计者想让程序做的事情,程序并没有做。

错误情况

编译错误 运行错误 逻辑错误

C语言程序设计基础知识 问题: 章节:

Slide:3-122

编译错误
举例
修改
Undefined symbol ?xxx? xxx statement missing ; Expression syntax error Redeclaration of ?xxx? 标识符xxx未定义 xxx语句缺少分号 表达式语法错误 标识符xxx被重复定义

含义 指在编译过程中发现的错误,通常属于语法错误。

编译将终止。调试者可借助于Message 窗 Too few parameter in call 函数调用时的实参少 口给出的出错行号及错误内容,进行错误定 于函数的形参 位、查找和改错。 No declaration for function ?xxx? 函数缺少原型

C语言程序设计基础知识 问题: 章节:

Slide:3-123

运行错误
含义 指在程序运行时发生的错误,往往是由于语义上
举例 的错误造成的,即语句虽然合乎语法,但要求计 算机去做不该做或做不到的事情。 当用0做除数时,运行后将显示“Division by zero” 错误提示信息,并立即返回编辑屏幕。

修改

查看运行结果时,可在User screen(用户屏幕) 上看到给出的错误提示信息。

C语言程序设计基础知识 问题: 章节:

Slide:3-124

逻辑错误
含义 程序中有逻辑错时,不影响程序运行并得到运行
结果,只是运行结果不正确(即不是按用户预期 的逻辑关系得出的)。 性质 错误比较隐蔽,出错后不易查找

原因 1.累加求和运算时,累加和变量忘记赋初值。 2.累乘运算时,累乘变量初值赋值为0。 3.比较运算时,关系运算符“= =”误写成了赋 值运算符“=”。

C语言程序设计基础知识 问题: 章节:

Slide:3-125

出错原因
4.用函数scanf输入数据时,实际的数据输入格式与 程序中函数scanf要求的数据格式不符。 5.用函数scanf输入数据时,变量名前忘记写&。 6.格式化输入输出数据时的数据类型与所用格式说 明符不一致。 7.在用scanf读入double型数据时,没用%lf或%Lf, 而用了%f。 8.数组下标越界(即超出了定义的范围)。 9.程序中存在死循环。

C语言程序设计基础知识 问题: 章节:

Slide:3-126

Turbo C集成环境下的 跟踪调试方法
单步跟踪执行程序
执行到断点 使用监视窗口

C语言程序设计基础知识 问题: 章节:

Slide:3-127

单步跟踪执行程序
1. 利用File菜单下的Load选项将待调试程序装入内存。 2. 选Run菜单下的Trace Into选项或直接按F7 键,跟踪 运行该程序。该程序

若未经编译,系统将会自动进

行编译,在没有语法错的情况下,就会有一条亮带
停留在主函数main()上,表明程序从这里开始执行。 3. 每按一次F7 键就执行一行源程序,亮带将随程序的 执行而移动。

注:每次执行的单位是行,而不是语句。若一行有多条
语句,则将连续执行这多条语句。

C语言程序设计基础知识 问题: 章节:

Slide:3-128

执行到断点
断点 当程序A执行到某处,而转去执行程序B,
当程序B执行完后,从程序A中断处继续执 行,程序A中断处称为断点。

命令 在Break/Watch菜单下,选择:
命令 Toggle Breakpoint/Ctrl+F8 Clear all Breakpoint View next Breakpoint 功能 在光标处设立断点 清除所有已设断点 光标移到下一断点处

在run菜单下,选择go to cursor/F4,执行到当前行。

C语言程序设计基础知识 问题: 章节:

Slide:3-129

使用监视窗口
作用 监视此时的变量或表达式的值。与单步
跟踪和执行到断点结合来调试程序。

命令 在Break/Watch菜单下,选择:
命令 Add Watch或Ctrl+F7 Delete Watch Remove All Watches 功能 增加一个被监视变量 删除一个被监视变量 清除所有被监视变量

C语言程序设计基础知识 问题: 章节:

Slide:3-130

其它排错方法
在必要的地方,加入输出语句,输出 采用增量测试法测试程序是否正确, 某些特定的变量,用以监测某些变量的值 ①调试一个程序正确的可运作单元。 是否正确,即程序执行是否正确。 ②加入新代码,进行调试。 ③调试有错,则为新代码有错,或新代码

与原来代码接口有错。
④调试无错,则再加入新代码。

C语言程序设计基础知识 问题: 章节:

Slide:3-131

第三章结束


网站首页网站地图 站长统计
All rights reserved Powered by 海文库
copyright ©right 2010-2011。
文档资料库内容来自网络,如有侵犯请联系客服。zhit326@126.com