《计算机软件及应用cn第3章课件》由会员分享,可在线阅读,更多相关《计算机软件及应用cn第3章课件(45页珍藏版)》请在金锄头文库上搜索。
1、格式化输入/输出(scanf和printf) 字符输入/输出(getchar/putchar) 字符串输入/输出(gets/puts),简单语句 复合语句 空语句 流程控制语句,C语言程序设计-Programming in C,本讲内容,3.1 流程控制 3.2 构造程序中的控制条件 3.3 选择结构程序设计,一、流程控制,利用各种条件判断转向语句和循环控制语句,使程序执行流程因不同转向而选取程序中的不同语句执行,即流程控制。,正常情况下,程序中的语句按书写顺序执行,叫顺序结构。 但大部分程序的流程控制方法包含: 条件分支 循环控制 转移,二、流程控制的条件:,要设计选择结构程序,要考虑两个方
2、面的问题: 一是在C语言中如何来表示条件。 二是在C语言中实现选择结构用什么语句。 在C语言中表示条件,一般用关系表达式或逻辑表达式,实现选择结构用if语句或switch语句。,1.关系运算符和表达式,关系运算符 (左结合) = 关系运算符赋值逗号 关系表达式,即用关系运算符将运算对象连接成的式子。 例如: a=b=c (等价于 a = ( b=c ) ) 12 C+1 (字符型数据用ASCII值进行比较),说明:,关系运算的结果应该是逻辑值。 C语言用数值用 1 表示逻辑真, 0 表示逻辑假。 关系表达式的值:0 或1,例 int a=3,b=2,c=1,d,f; ab (ab)=c b+c
3、b f=abc,说明:,实型数可进行大于或小于比较,但通常不进行 = 或 != 的关系运算,例:#include void main() float d=123.45; if(123.45=d) printf(1n); else printf(0n); ,#include #include void main() float d=123.45; if(fabs(123.45-d)1e-5) printf(1n); else printf(0n); ,思考:,数学式x如何用C语言表达式表示? 数学式 x 10如何用C语言表达式表示?,2.逻辑运算符和表达式,逻辑运算符 : a printf(请输
4、入三角形的三条边长(整数):n); scanf(%d%d%d, ,三、选择结构程序设计,C语言利用关系表达式和逻辑表达式来构筑一些复杂的控制条件。这种根据控制条件选择程序中某一部分语句执行的结构叫选择结构。 选择结构体现了程序的判断能力。,选择结构分为单分支、双分支和多分支。有if和switch两种分支选择结构语句。,例:计算分段函数,分析:问题的算法如下(自然语言描述) (1)输入x; (2)如果 x=0 y=3-x; 否则 y=2/x; (3)输出y的值。,定义变量y,x,用户输入x,X=0,y=3-x,y=2/x,输出y,引例:,if语句有“if单分支”和“if-else双分支”两种基本
5、语句形式。 单分支语句格式: if(表达式) 语句 双分支语句格式: if(表达式) 语句1 else 语句2 说明: condition是控制条件表达式,圆括号“( )”必不可少; 例,if b=a area=a*a; /*错,缺少条件括号*/ if内嵌的statement在语法上是一条语句。 内嵌statement又是if分支语句时,构成分支嵌套结构。 C标准规定,编译程序必须能支持至少15层分支嵌套。,1、选择结构语句,if(表达式) 语句,if条件结构,语句2,if-else条件结构,if(表达式) 语句1 else 语句2,条件,语句,条件,语句1,内嵌语句语法上为一条语句: 赋值语
6、句 函数调用语句 控制语句 复合语句 空语句,例,某学生在“成绩管理系统”中查询成绩,软件系统显示学生成绩,且只对成绩高于(包括)90分的学生表示庆贺。该程序段用单分支语句实现如下: if(grade=90) /*检测条件为成绩高于(包括)90分*/ printf(“congratulations!n”); /*条件满足表示庆贺,不满足就跳过该语句*/ printf(“Your grade is %d.n”,grade);,【例3-1】把大写字母转换为对应小写字母 。,分析: (1)问题背景:使用QQ等软件时经常要输入用户名和密码。如输入的用户名不区分大小写,这时需要把所有输入的字母转换为相应
7、的小写字母和系统存储的内容进行判断比较。 (2)需求分析:从键盘输入一个字符,若是大写字母,输出其对应的小写字母。否则直接输出。 (3)数学建模:小写字母的ASCII码值=大写字母的ASCII码值+32。,算法NS流程图描述,char ch;,ch=A,输出ch;,#include void main() char ch; printf(请输入一个字符:n); ch=getchar(); printf(输入的原始字符为%c:n,ch); if(ch=A ,输入字符ch;,单分支,练习:编程实现,求任意两数中较大的数。,#include void main(void) int x,y,max;
8、printf(请输入两个整数:); scanf(%d%d, ,双分支,【例3-2】用“假设思想”法求任意两数中的较大数。(必记算法),“假设思想”算法是指在程序中先假设某事物成立,然后判断事实是否如此,如果事实和假设的条件不符,则进行修正。,#include void main(void) int x,y,max; printf(请输入两个整数:); scanf(%d%d, ,“假设思想”,如何来求 两个数中较小的数呢?,比较单分支和双分支,#include void main(void) float x,y,z,max; /* 定义实型数据 */ printf(请输入三个实数:); scan
9、f(%f%f%f, /*输出结果*/ ,求三个数或更多数中的最大数或最小数都可以使用该算法。,【例3-3】数据排序。将x、y中的数据按降序排列。,算法分析: “假设思想” 1、定义变量x,y,t 2、假设x、y已按降序排列,输出x、y。 3、若x,y是升序?是,交换两个变量中的值(两两交换) 4、输出x,y。,/*sort.c*/ #include void main(void) int x,y,t; printf(Enter x,y:); scanf(%d,%d, ,定义变量x,y,t;,xy,t=x,x=y,y=t;,输出x,y,阅读程序,分析程序中各语句的作用及程序的执行结果 。,#in
10、clude void main() int a,b,t; printf(请输入a,b的值:); scanf(%d%d, ,问题1:将t=a;a=b;b=t;改为t=a,a=b,b=t;(逗号表达式语句),程序的功能改变了吗?将程序进行修改后运行,根据输入数据验证。 问题2:将if(ab) t=a;a=b;b=t; 中的花括号去掉后,程序的功能改变了吗?为什么?,单分支,【例3-3】数据排序。将a、b中的数据按降序排列。,算法分析: 1、定义变量a,b,t 2、假设a、b已按降序排列,输出a、b。 3、若a,b是升序?是,交换两个变量中的值(两两交换)。 4、输出a,b。,#include vo
11、id main() int n; printf(请输入一个年份:); scanf(%d, ,【例3-4】编写程序,从键盘输入一个年号year(4位十进制数),判断其是否闰年。,2. 条件运算符和条件表达式,条件运算符是C语言中唯一的三目运算符,由“?”和“:”组成。 条件表达式的一般形式为: 表达式1 ? 表达式2 : 表达式3 表达式1一般是控制条件,表达式2和表达式3可以是C语言中任意合法的表达式,一般这两个表达式的值类型相同。,条件运算符可看作以下if语句的缩略形式: if(表达式1) 条件表达式的值=表达式2的值 else 条件表达式的值=表达式3的值 例,求两数中的较大数: max=
12、(xy?x:y) 条件运算符的优先级低于逻辑运算符,高于赋值操作符,自右向左结合。,求解 表达式1,假(0),求解 表达式2,真(非0),求解 表达式3,表达式 的值,【例】从键盘输入一个数,判断其是奇数还是偶数。,#include void main(void) int x; printf(请输入x的值 :); scanf(%d, ,练习:编程实现数字字符转变为对应的数值。,分析: (1)问题描述和需求分析:输入一个字符,判断它是否为数字字符。如是,将其转换为对应的数值输出;否则,不用转换直接输出。 (2)0的ASCII码值为48。数字字符转变为对应的数值n,可使用表达式:n=ch-48或n=ch-0。,/*program ch3-2.c */ #include void main() char ch; int n; printf(请输入一个数字字符:n); ch=getchar(); getchar(); /*输入字母并消耗回车*/ if(ch=0 /*复合语句作分支语句的嵌套语句,用括起*/ ,小结,3.1 流程控制 3.2 构造程序中的控制条件 3.3 选择结构程序设计,课后作业:,实验书后的习题三,Thank You !,