- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2008级统招 2000级普招
第三章 结构化程序的开发
主 讲: 樊广军
第三章 结构化程序的开发
第三章 结构化程序的开发
本章目标: 本章目标:
1. 理解解决问题的基本方法 2. 学会制定简单程序的算法 掌握一种选择结构(if/else) 3. 掌握一种选择结构(if/else) 掌握一种循环结构(while) 4. 掌握一种循环结构(while) 掌握自增, 5. 掌握自增,自减的运算
第三章 结构化程序的开发
流程:
表达1 ≠0 =0 表达2 ≠0 =0 表达3 ≠0
… 表达n
≠0 语句n+1
语句体1
语句体2
语句体3 …
语句体n
第三章 结构化程序的开发
二,注意的问题: 注意的问题 1. 表达式可以是逻辑,关系,甚至是算术表达式. 如: if (3) prinf ("o.k"); if ('a')… 2. 语句必须以分号结束 3. 若语句不止一条,则必须用{ }括起来.在{ } 外可以不用分号.
第三章 结构化程序的开发
§3.2
算 法
1. 按指定的语句和顺序来解决问题的过程称 为算法. 2. 算法的两个重要方面: 顺序 语句 3. 算法的图形表示:流程图
第三章 结构化程序的开发
4. 流程图符号: 流程图符号: 椭圆 矩形 判断框 小圆圈 代表程序的开始或结束 代表程序所执行的动作 代表程序的分支 代表程序的连接
3. 流程图 流程图:
表达式
≠0
=0
语句 例如: 例如:int n=0; while (n<=10) n=n+1;
下一语句
第三章 结构化程序的开发
注: 若while后面的语句为复合语句, 必须加{ } 语句中应有使表达式=0的语句. 否则会出现无限循环–––"死"循环. 语句有可能一次也不执行
第三章 结构化程序的开发
第三章 结构化程序的开发
所有的流程图用一带箭头的线(流线)相连, 就构成了程序的流程(顺序) 如:
第三章 结构化程序的开发
选择结构–––条件判断 §3.3 if 选择结构 条件判断
一,if的三种形式
形式1 if (表达式) 语句体 A 功能: 当表达式值非0时, 执行语句体A, 否则 不执行 语句体A.
第三章 结构化程序的开发
3. 循环结构 有两种结构:当型和直到型 (1) 当型结构 当P条件成立时(T),反复执行A,直到P为" 假" 时才停止循环. P T A F
表示为
P为T A
第三章 结构化程序的开发
(2) 直到型 先执行A, 再判断P,若为T,再执行A,如此反复, 直到P为F. A T A 直到P为F P F 已证明: 上述三种结构组成的程序可以解决全部 的问题,所以任何一种高级语言都具备上述三种结构.
有以下几种写法,请判断哪些是正确的?
第三章 结构化程序的开发
程序1: 程序 : /*exp51.c*/ #include <stdio.h> main ( ) { int x, y; scanf("%d", &x); % if (x<0) y= –1; else if (x= =0) y=0; else y=1; printf ("x=%d, y=%d\n", x, y); }
4.无条件转移语句 goto 5. 终止程序运行语句 exit
第三章 结构化程序的开发
6. 复合语句(语句体) 用{ } 括起来的一系列语句. 如: { z=x+y; t=z/100; printf ("%f"念
从结构化程序设计角度出发,程序只有三种结构: 顺序结构 顺序结构 选择结构 选择结构 循环结构 循环结构
≠0
表达式
=0
语句体A
语句体B
例: if(x>y) printf("%d", x); else printf(" %d", y);
第三章 结构化程序的开发
形式3 if(表达式1) 语句体1 else if (表达式2) 语句体2 else if (表达式3) 语句体3 … … else if(表达式n) 语句体n else 语句体n +1
第三章 结构化程序的开发
其流程图: 其流程图
表达式 ≠0
=0
语句体A 例如: if (x>y); { x=x%2; printf(" %d", x); }
第三章 结构化程序的开发
形式2 if(表达式) 语句体A else 语句体B 功能: 表达式为非0,执行语句体A 表达式为0,执行语句体B
第三章 结构化程序的开发
第三章 结构化程序的开发
程序3:将程序1的if语句改为: 程序 : /*exp53.c*/ #include <stdio.h> main() { int x,y; scanf("%d",&x); y=-1; if(x!=0) if(x>0) y=1; else y=0; printf("x=%d,y=%d\n",x,y); }
第三章 结构化程序的开发
四,条件运算符
C语言提供了一个简单的条件赋值语句或 条件表达式. 问题: 当判断条件不论是" 真"是" 假", 问题: 均给同一变量赋值时. 简化条件语句运算符书写方式: ? : 属三目运算符.
第三章 结构化程序的开发
一般形式: 一般形式: 表达式1?表达式2: 表达式3 功能: 功能 先判表达式1, 若非0,则值为表达式2的值, 否则为表达式3的值. max=a>b? a:b; 当a>b. max ← a. 否则max←b 注意: 注意: 1. 条件运算符优先于赋值运算符. 例: max=(a>b? a:b)可去掉( )
源程序文件1 … 源程序文件i 预编译命令
函数1 … 函数n
说明部分
执行部分 (语句)
第三章 结构化程序的开发
程序语句 二,C 程序
C程序语句可分为五大类: 1. 表达式语句 赋值语句: 赋值语句 如: i=i+1; i++; x+y;
函数调用语句: 函数调用语句 如: printf ("…"); 空语句: 空语句 任何事情都不做. 如: ;
第三章 结构化程序的开发
4. 条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if. 如: if (a>b) printf("%d", a); else printf ("%d", b); 可写成: 可写成: printf("%d", a>b? a:b);
第三章 结构化程序的开发
5. 表达式1,表达式2,表达式3的类型可以不同. 例4 输入一个字符,判别它是否大写字母,如果是,
将它转换成小写字母;如果不是,不转换.然后 输出最后得到的字符. #include <stdio.h> main ( ) { char ch; scanf ("%c", &ch); ch=(ch>='A' && ch<='Z') ? (ch+32):ch; printf("%c", ch); 运行结果如下: }
第三章 结构化程序的开发
1. 顺序结构 先执行A, 再执行B.
A B
表示
A B
第三章 结构化程序的开发
2. 选择结构 存在某条件P, 若P为真,则执行A, 否则执行B.
T
P
F
表示为
T A
P B
F
A
B
第三章 结构化程序的开发
另一种选择结构––多分支结构.
K=K1
K
K=Kn K=K2
A1
A2 … Ai … An
第三章 结构化程序的开发
2. 条件运算符低于关系运算符和算术运算符. 例: max=a>b? a:b+1 max= a>b? a:(b+1)并不是 max=(a>b? a:b)+1 3. 条件运算符结合性为从右至左. 如: a>b? a:c>d ? c:d 相当于 a>b? a:(c>d? c:d)
程序2: 程序 :将程序1的if语句改为: /*exp52.c*/ #include <stdio.h> main ( ) { int x, y; scanf("%d", &x); % if (x>=0) if (x>0) y=1; else y=0; else y=-1; printf ("x=%d, y=%d\n", x, y); }
运行情况如下: 3,7,1 运行情况如下 1.00, 3.00, 7.00
第三章 结构化程序的开发
三, if语句的嵌套
在上述形式的if语句中, 又可以是if语句–– –称为嵌套. 一般形式 if (表达式1) if (表达式2) 语句1 else 语句2 else if (表达式3) 语句3 else 语句4 注意: 注意 else与最近的if 配对. 内嵌 内嵌if
第三章 结构化程序的开发
结论: –1 1. 程序 和程序 是正确的. 程序1 和程序2 是正确的. 它们代表的函数为: 它们代表的函数为 y= 0 1 0 y= –1 1 思考练习:分别画出一个程序的流程图 思考练习 (x<0) (x=0) (x>0) (x<0) (x=0) (x>0)