选择结构与程序设计-分支结构_第1页
选择结构与程序设计-分支结构_第2页
选择结构与程序设计-分支结构_第3页
选择结构与程序设计-分支结构_第4页
选择结构与程序设计-分支结构_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2020/10/4,1,C语言程序设计,主讲教师: 滕永晨 Tyc_T 兰州理工大学计通学院 2014年10月,Chap03 选择结构程序设计,C 语言程序设计,分支结构,2020/10/4,3,本节主要内容,1. if语句 3.1.1 if语句的一般形式 3.1.2 if语句的嵌套 2. switch语句 3.1.3 switch语句的一般形式 3.1.4 break语句 3. 选择结构程序设计举例,2020/10/4,4,一、简单分支语句一般格式 if (表达式) 语句,功能: 计算表达式的值,如果是一个非0值(即逻辑真),就执行内嵌语句,否则(即逻辑假)跳过内嵌语句,顺序执行后续语句。,

2、3.1.1 语句一般格式,2020/10/4,5,简单分支语句的算法:,例如: if (x0) m+; if ( ab ) c=a; a=b; b=c; ,2020/10/4,6,int main (void ) float a, b, t; scanf (%f, %f, ,【例3.1】输入两个实数,按代数值由小到大次序输出这两个数。,2020/10/4,7,【例3.2】输入三个数,按大小顺序输出。,main ( ) float a, b, c,t; scanf(%f,%f,%f, ,2020/10/4,8,if语句的简单应用,【例3.3】输入一个字符,如果是大写字母,则将其转换为小写字母输出

3、,否则直接输出。,输入:用 getchar 或 scnaf 函数 ch是否为大写字母: ch=A ch=getchar( ); if (ch=A ,程序运行情况如下: G g,可使用条件表达式代替,putchar(ch=A putchar ( n),getchar( )是字符输入函数,2020/10/4,10,二、双重分支语句一般格式 if (表达式) 语句1 else 语句2 功能: 计算表达式的值,如果它的值是一个非0值(逻辑真),就执行内嵌语句1,之后跳过内嵌语句2,执行后续语句;否则跳过内嵌语句1,执行内嵌语句2,之后执行后续语句。,2020/10/4,11,双重分支语句的算法:,例如

4、: if (x0) m+; else m-; if ( ch= a ,2020/10/4,12,判断数字的奇偶性,【例3.4】 输入1个整数,判断该数是奇数还是偶数。,number % 2 = 0,读入一个整数 if (该数能被2整除) 则该数为偶数 else 该数为奇数,2020/10/4,13,源程序-判断数字的奇偶性,#include int main(void) int number; printf(Enter a number: ); scanf(%d, ,此处条件内由于只有一条语句,故 可省略,2020/10/4,14,三、多重分支语句一般格式 if (表达式1) 语句1 else

5、 if (表达式2) 语句2 else if (表达式m) 语句m else 语句 n 功能: 依次计算并判断表达式i,为非0时执行后面的语句,都为0时,执行语句n 无论执行完那个语句分支,都转到后续语句,2020/10/4,15,多重分支语句的算法,流程图,表达式m ?,2020/10/4,16,多重分支语句的算法,N-S结构图,例如: if (a0) x= -1 ; else if (a=0 ) x= 0 ; else x=1 ;,2020/10/4,17,【例3.5】分段计算水费的问题。 居民应交水费y(元)与月用水量x(吨)的函数 关系式如下,并编程实现。,2020/10/4,18,源

6、程序-分段计算水费,# include int main(void) double x, y; printf(Enter x:); scanf(%lf, ,2020/10/4,19,3.1.2 if语句的嵌套,如果if的内嵌语句中又使用了一个if语句,则构成if语句的嵌套。,【例3-6】比较两个整数的关系。 #include main( ) int x, y; printf (Enter integer X and Y:); scanf (%d%d, ,提倡缩格书写 有利于阅读程序,2020/10/4,20,if语句嵌套的形式,简单if语句的嵌套形式 if (表达式) if 语句 双重(或多重

7、)分支if语句的嵌套形式 if (表达式) if 语句 else if 语句,可以是各种形式的if语句,可以是各种形式的if语句,如果是简单if语句, 必须用“ ”括起,2020/10/4,21,例如:, if (c=50) printf(50=50) printf(50150n); if (c=50) printf(50=c=100n); else printf(c50n),与哪个if 配对?,2020/10/4,22,再例如:,if(ab) if(ac) if(ad) m=1; else m=2; else m=3;,问题:哪一个 else 和哪一个 if 相匹配?,规则:在嵌套的ifel

8、se语句中,else总是与上面的离它最近的尚未配对的if 配对。,2020/10/4,23,举例,【例3-7】输入一个数,判断它是奇数还是偶数,如果是奇数则进一步判断它是否为5的倍数。,2020/10/4,24,程序:,main( ) int x; scanf (%d, ,2020/10/4,25,学习if语句的难点,if else 语句的配对 正确用表达式描述条件 例如:当x大于5小于10时令x自增 if ( 5x10 ) x+;,正确判断内嵌语句 例如:if(xy) x=x+3; y=y-2; else x=x-3; y=y+2;,if (x5 , , ,2020/10/4,26,【例3-

9、8】 #includestdio.h int main(void) int x,y; scanf(%d%d, ,2020/10/4,27,熟悉常用的if 表达式形式(参见表达式专题),例如有定义:int a,b=0; a等于什么值时,执行b=2 ;语句? if (a=0) b=2; if (a=1) b=2; if (a!=0) b=2; if (a=1) b=2; if (a=0) b=2; if (a) b=2; if (!a) b=2;,等价于,等价于,2020/10/4,28,3.1.3 default: printf($); case 5: printf( ,switch与break

10、语句结合才能实现 程序的分支,break; break; break;,2020/10/4,32,switch语句的简单应用,【例3-9】已知x=100,y=15,要求输入一个算术运算符(+、-、* 或 / ),并对x和y进行指定的算术运算。,思路: 设x和y为float型变量并赋初值; 输入的运算符op为char型变量; 根据op的值(为+、-、*、/)进行x和y的相加、相减、相乘、相除运算(选择分支); 还要考虑到输入字符不是+、-、* 或 / 时的情况,2020/10/4,33,程序:,#include stdio.h main( ) float x=100,y=15,z; char o

11、p; op=getchar( ); switch (op) case +: z=x+y; break; case -: z=x-y; break; case *: z=x*y; break; case /: z=x/y; break; default: z=0; if (fabs(z)=1e-6) printf (%c is not an operatorn,op); else printf(%f%c%f=%fn,x,op,y,z); ,实型数通常不使用z=0或z!=0的比较 z=0时一般用 fabs(z)=1e-6来代替,2020/10/4,34,【例3-9】 输入一个形式如“操作数 运算符

12、 操作数”的四则运算表达式,输出运算结果。 (要求用switch语句实现) 例如: 输入:3.1+4.8 输出:7.9,2020/10/4,35,# include int main(void) char op; double value1, value2; printf(Type in an expression: ); scanf(%lf%c%lf, ,2020/10/4,36,case /: printf(=%.2fn, value1/value2); break; default: printf(Unknown operatorn); break; return 0; ,2020/10

13、/4,37,注意:,switch语句的书写格式:语句体本身必须用花括号括起;case和default后面如果有多条语句,则可以不必使用花括号;case和常量表达式之间必须有空格;default可以写在语句体的任何位置,也可以省略不写 break语句可以改变case的语句标号作用,终止后续case语句序列的执行。 switch语句和break语句结合,可以实现程序的选择控制(break语句还可以在循环语句中使用) 允许switch嵌套使用,但同一个switch语句中,任意两个case的常量表达式值不能相同。,2020/10/4,38,3 .选择结构程序设计举例,【例1】求一元二次方程ax2+bx

14、+c=0的根。,思路:一元二次方程的根取决于系数a,b,c 求根公式:,判别式d = b2- 4ac 当 d = 0时,方程有两个相等的实根: x1=x2=-b/(2*a) 当d 0时,方程有两个不相等的实根: x1=(-b+sqrt(d)/(2*a) x2=(-b-sqrt(d)/(2*a) 当d 0时,方程有两个虚根: x1=jp+ipi x2=jp-ipi,实部 jp=-b/(2*a) 虚部 ip=sqrt(-d)/(2*a),2020/10/4,39,算法:,2020/10/4,40,程序:,#include math.h main( ) float a,b,c,d,x1,x2,lp,

15、ip; scanf(%f%f%f, ,2020/10/4,41,程序(续):,else if (d1e-6) /* 不相等的实根 */ x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(has two real roots:n) ; printf(x1=%8.4f, x2=%8.4fn,x1,x2); else /* 虚根 */ lp=-b/(2*a);ip=sqrt(-d)/(2*a); printf(has two complex roots: n); printf(x1=%8.4f+%8.4fin,lp,ip); printf(x2=%8.4f-%8.4fin,lp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论