c语言程序设计与项目实践第5章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

x2= RealPart - sqrt_delta/(2*a)
x1 = RealPart + sqrt_delta/(2*a) x2= RealPart - sqrt_delta/(2*a)
第18页/共27页
Output result 终止
5.5 switch语句
switch语句的一般表达形式为:
范例5.7 CompareTwoVariableValue.c 键盘输入两个int型变 量的值a和b,判断两个变量的大小, 若a>b,则输出 a>b, 若a<b,则输出 a<b, 若a==b,则输出 a==b。
第15页/共27页
实训5.2——求一元二次方程的复数根解
键盘输入一元二次方程ax2+bx+c=0的三个参数a,b和c, 计算: b2-4ac>=0时,输出实数根, b2-4ac<0时,输出复数根,并检查输入参数的正确性。 使用嵌套if语句实现。首先使用scanf函数输入三个参数 a,b和c,定义判别式变量delta=b2-4ac,定义变量 sqrt_delta=sqrt(b2-4ac)。 当delta大于0时一元二次方程的两个根分别为:
实训5.1——求一元二次方程的实根解
2.技术应用
对于需求1,使用scanf函数输入参数a, b, c的值。
对于需求2,使用if语句判断方程是否有实根,判断方 法为:if(b2-4ac>=0)。
对于需求3,由于要求精确到小数点后3位,采用数据 类型float型。
开始
根据上述分析画出程序流程图: scanf函数输入a,b,c
开始
可否乘坐飞机 可以
有无上午航班
不可以 无
有无下午航班 有

乘坐
乘坐

可否乘坐火车 可以
有无上午火车
不可以 无
有 乘坐
有无下午火车 有 乘坐
无 乘坐汽车
出发
第13页/共27页
5.4.1 嵌套if-else语句的定义
嵌套if-else语句一般表达形式为:
if(表达式1) {
if(表达式2) {
} else {
范例5.6 JudgeCharacterFromKeyboard.c 使用getchar函 数接收键盘输入的一个字符,并判断该字符类型,若输入 为字母,则打印字母信息,若为数字,则打印数字信息, 若为控制字符,则打印控制字符信息。
第12页/共27页
5.4 嵌套if-else语句
嵌套if语句指在if分支或else分支中再次执行 if或else语句。嵌套if分支语句的流程图如下:
范例5.4 JudgeLeapYearorNotWithIfElse.c 键盘输入 unsigned int型年份,判断其是否为闰年,若为闰年,则 打印为闰年信息,若为平年,则打印为平年信息。闰年的 判断方法是:若年数能被400整除,那么该年是闰年,若 能被4整除但不能被100整除,该年是闰年,其他年份都是 平年。
开始
表达式1 真(非0)
假(0) 表达式2
真(非0)
假(0) 表达式3
真(非0)
假(0) 真(非0)
语句段1
语句段2
语句段3
语句段4
If-else-if 语句流程图:第11页/共27页
5.3.3 if-else-if语句的结构及应用
范例5.5 StudentScoreSet.c 学生成绩分为5个等级,分 别为:A: 90<=score<=100,B: 80<=score<90,C: 70<=score<80,D: 60<=score<70,E:score<60键盘输 入某学生成绩,判断其属于哪个等级,并打印到屏幕上。 使用多分支if-else-if语句实现。
范例5.1 GetMaxVariableInTwo.c 利用if语句的分支功能, 可以区分两个或多个数值的大小。本范例由键盘输入两个 变量的值,使用if语句判断两者中的较大值,并将较大值 输出在屏幕上。
第3页/共27页
5.2.2 合理设计if语句
1.逻辑运算符的编写风格
逻辑运算表达式编写应尽量避免产生歧义,避免出现逻辑 错误,例如,为避免逻辑表达式书写错误,通常将常量放 在逻辑运算符左边:
if-else语句的一般形式为:
if(表达式) 语句段1
else 语句段2
if-else语句的执行规则为:若表达式的值为真(非0),则 执行语句段1,否则进入else分支,执行语句段2。
第7页/共27页
5.3.1 if-else语句的结构
if-else语句的表达形式为:
if(表达式)
{
语句段1
if(表达式) 语句段
if语句的执行流程:如果表达式的值为真(非0),则执 行其后的语句段,否则不执行该语句。
If语句流程图:
开始
表达式
假(0)
真(非0) 语句段
第2页/共27页
5.2.1 if语句的定义
if语句中的表达式可以是任何能转化为数值 的表达式,例如:
if(100) if(a==b) if(a&&b||c) if(sizeof(int)) if((a>b)?(a+b):(a-b))
5.2 简单的if语句
if语句有三种基本形式:
if语句 if和else语句 嵌套if和else语句
设计分支结构应注意如下问题:
1.正确选择条件或逻辑表达式作为分支的判断条件。 2.根据需求绘制分支流程图。 3.按流程图编写程序。
第1页/共27页
5.2.1 if语句的定义
if 语句的一般形式:
第21页/共27页
5.5.2 break语句
为避免程序在switch语句中持续执行case语 句,可以使用break语句 ,switch语句中添 加break语句的流程图:
开始
switch
表达式计算
case1
case2 …… case n
default
语句段1 break
语句段2 …… 语句段n break …… break
真(非0)
a==0
假(0)
delta = b*b-4*a*c
RealPart = -b/(2*a)
sqrt_delta = sqrt(abs(delta))
真(非0)
delta>=0
假(0)
真(非0)
0==delta
假(0)
x = RealPart
x1 = RealPart + sqrt_delta/(2*a)
应写成:
百度文库
if(a==0) a=-a;
if(0==a) a=-a;
2.语句段封装
不论语句段由一条语句还是多条语句构成,都使用大括 号封装。
第4页/共27页
实训5.1——求一元二次方程的实根解
键盘输入一元二次方程ax2+bx+c=0的三个参数a,b和c, 计算当判别式b2-4ac>=0时的根,程序使用if语句判断是 否满足判别式条件,结果精确到小数点后3位。判别式可 计算为:
第23页/共27页
} } else {
if(表达式3) {
} else {
} }
语句段1 语句段2
语句段4 语句段5
开始
表达式1 真(非0)
表达式2 真(非0)
语句段1
如图所示为单层嵌套if-else语句流程图:
假(0)
假(0)
表达式3 真(非0)
语句段2 语句段3
结束
假(0) 语句段4
第14页/共27页
5.4.2 嵌套if-else语句的应用
源文件:CalculateFormulaRealRoot.c
delta = b*b-4*a*c
delta>=0
No
Yes 计算sqrt_delta, 计算根x1和x2
输出x1和x2
第6页/共27页
终止
5.3 多分支if语句
多分支if语句又称为“if-else语句”,是由 关键字if和else构成的多分支结构语句。
第10页/共27页
5.3.3 if-else-if语句的结构及应用
当有多个分支选择时,可采用if-else-if语句,
if-else-if类型结构语句的一般形式为:
if(表达式1) 语句段1;
else if(表达式2) 语句段2;
else if(表达式3) 语句段3;
…… else if(表达式m) 语句段m; else 语句段n;
了变化。
5.3.2 if-else语句的应用
范例5.3 JudgeOddorEven.c 键盘输入int型参数a的值, 判断其是否为偶数,若为偶数,则打印a为偶数信息,若 为奇数,则打印为奇数信息。利用模除(%)对a值是否 为偶数进行判断,使用if-else分支语句实现不同信息的输 出。
第9页/共27页
sqrt_delta=sqrt(b2-4ac)
当sqrt_delta大于或等于0时方程有实根。因此,一元二次 方程的两个根分别为:
x1=(-b+sqrt_delta)/2a
x2=(-b-sqrt_delta)/2a
1.需求分析:
需求1:键盘输入参数a, b, c的值 需求2:判断判别式,确定方程是否有实根 需求3:调用开根号数学函数sqrt,计算方程的根 需求4:输出结果,精度第为5页小/共数27点页后3位
断方法为:if(b2-4ac>=0)。 对于需求3,输出结果时根据实根和复数根的不同,输
出不同数据格式,如复数根应输出:m+ni和m=ni的形 式。
第17页/共27页
实训5.2——求一元二次方程的复数根解
一元二次方程求根流程图
源代码:CalculateFormulaRoot.c
开始
scanf函数输入a,b,c
x1=(-b+sqrt_delta)/2a,x2=(-b-sqrt_delta)/2a
当delta等于0时,方程有一个实根:
x = -b/2a
当delta小于0时,方程有两个共轭复数根,分别为:
x1 = -b/2a + sqrt_delta/2a i, x2 = -b/2a - sqrt_delta/2a i
}
else
开始
{
语句段2
真(非0) 表达式
假(0)
}
if-else语句的流程图:
语句段1
语句段2
第8页/共27页
5.3.1 if-else语句的结构
范例5.2 CalculateAbstract.c 数学计算中,绝对值使用| |表示,本范例从键盘输入参数a的值,然后利用if-else语 句实现绝对值的计算,并打印信息显示数据符号是否发生
5.3.2 if-else语句的应用
5.3.2 if-else语句的应用
范例5.3 JudgeOddorEven.c 键盘输入int型参数a的值, 判断其是否为偶数,若为偶数,则打印a为偶数信息,若 为奇数,则打印为奇数信息。利用模除(%)对a值是否 为偶数进行判断,使用if-else分支语句实现不同信息的输 出。
switch语句流程图:
开始
switch
表达式计算
case1
case2 …… case n
default
语句段1 语句段2 …… 语句段n 语句段n+1
第20页/共27页
5.5.1 switch语句的定义
范例5.8 SwitchSentenceCase.c 键盘输入整型的星期数, 打印出英文的星期名字字符串,根据键盘输入的星期数, 打印出该星期数的英文名使用switch语句实现,输入函数 使用scanf函数,星期一记为1,星期天记为7。例如,输入 2,应打印Tuesday。
语句段n+1 break
第22页/共27页
5.5.3 switch语句的执行与应用
范例5.9 SwitchSentenceWithBreak.c 键盘输入学生成绩, 分段显示不同成绩段的优劣: 90<=score<=100为excellence 80<=score<90为all right 70<=score<80为midding 60<=score<70为pass score<60为bad
第16页/共27页
实训5.2——求一元二次方程的复数根解
1.需求分析:
需求1:键盘输入参数a, b, c的值并判断输入参数 需求2:判断判别式,确定方程有实根还是复数根 需求3:调用开根号数学函数sqrt,计算方程的根 需求4:输出结果
2.技术应用
对于需求1,使用scanf函数输入参数a, b, c的值。 对于需求2,使用if语句判断方程有实根还是复数根,判
switch(表达式)
{
case 常量表达式1:
语句段1;
case 常量表达式2:
语句段2;
……
case 常量表达式n:
语句段n;
default:
语句段n+1;
}
第19页/共27页
5.5.1 switch语句的定义
switch语句的运行规则为:
计算表达式的值,顺次与其后的常量表达式值相比较,
当表达式的值与某个常量表达式的值相等时,即执行其后 的语句段,语句段执行完毕后,不再进行判断,继续执行 后面所有case后的语句。
相关文档
最新文档