C语言05C程序流程设计.ppt_第1页
C语言05C程序流程设计.ppt_第2页
C语言05C程序流程设计.ppt_第3页
C语言05C程序流程设计.ppt_第4页
C语言05C程序流程设计.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

第五章 C程序流程设计,C语句概述 程序的三种基本结构(顺序、选择、循环) 选择型程序设计(if else , switch) 循环型程序设计(for, while) 辅助控制语句(break, continue,goto,return),2019/9/10,2,C语句概述,C语句:以“;”作分隔符, 编译后产生机器指令 C语句分类 表达式语句:表达式加分号构成 空语句: ; 程序控制语句(9种): 复合语句:用 括起来的一组语句 一般形式: 数据说明部分; 执行语句部分;,如 total=total+limit; a=3; func( ); printf(“Hello,world!n”);,复合语句的说明: “”后不加分号 语法上和单一语句相同 复合语句可嵌套, t=x; x=y; y=t; ,2019/9/10,3,复合语句,在什么情况下使用复合语句? 条件语句和循环语句在语法上只允许带一条语句 当分支和循环中需要进行多项操作时, t=x; x=y; y=t; ,被当作一条语句来处理,复合语句在语法上是一个整体,相当于一个语句。凡 是能 使用简单语句的地方,都可以使用复合语句。 复合语句内还可以包含复合语句,即复合语句的嵌套 使用,2019/9/10,4,C程序的三种基本结构 结构化程序设计 基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto) 结构化程序:三种基本结构反复嵌套构成 优点:结构清晰,易读,提程序质量和效率 三种基本结构 顺序结构 选择结构 二分支选择 多分支选择 循环结构 当型循环 直到型循环,2019/9/10,5,5.1关系运算符和表达式 功能:比较两个常量、变量或表达式的值的大小 符号: = != 结合方向:从左向右 优先级:= (6) = != (7) 关系表达式的值:逻辑“真”和“假”,用1和0表示 用途:循环语句和选择语句中,例 ca+b /c(a+b) ab!=c /(ab)!=c a=bc /a=(bc),例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb /d=1 f=abc,例 int a=3,b=2,c=1,d,f; ab /表达式值1 (ab)=c /表达式值1 b+cb /d=1 f=abc /f=0,例:若a=0; b=0.5; x=0.3; 则 a=x=b的值为,例:若a=0; b=0.5; x=0.3; 则 a=x=b的值为 0,例:5278在C中是允许的,值为,例:5278在C中是允许的,值为 0,例:int i=1, j=7,a; a=i+(j%4!=0); 则a=,例:int i=1, j=7,a; a=i+(j%4!=0); 则a= 2,例 a0 结果为 A100 结果为,例 a0 结果为 1 A100 结果为 0,关系运算请注意: (1) 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为,关系运算请注意: (1) 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 0,关系运算请注意: (1) 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 0 可改写为:fabs(1.0/3.0*3.0-1.0)1E-6,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,(2) 注意区分“=”与“=” 如 int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,2019/9/10,6,5.2逻辑运算符和表达式 功能:判断逻辑值和对逻辑值进行操作 符号: ! & | 逻辑运算真值表 结合方向:!从右向左, & |从左向右 优先级:! (2) & (11) | (12) 逻辑运算中: 运算参量:0表示假,非0表示真 运算结果:0表示假,1表示真 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 ab&xy a=b|x=y !a|ab,例 ab&xy a=b|x=y !a|ab,例 ab&xy /(ab)&(xy) a=b|x=y !a|ab,例 ab&xy /(ab)&(xy) a=b|x=y /(a=b)|(x=y) !a|ab,例 ab&xy /(ab)&(xy) a=b|x=y /(a=b)|(x=y) !a|ab /(!a)|(ab),例 a=4; b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 /1 53&2|84-!0 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 /1 53&2|83)&2|(8(4-(!0), 1 c&d,例 a=4; b=5; !a /0 a&b /1 a|b /1 !a|b /1 4&0|2 /1 53&2|83)&2|(8(4-(!0), 1 c&d /1,例 a&b&c /只在a为真时,才判别b的值 /只在a、b都为真时,才判别 c的值,例 a&b&c /只在a为真时,才判别b的值 /只在a、b都为真时,才判别 c的值 a|b|c /只在a为假时,才判别b的值 /只在a、b都为假时,才判别 c的值,例 a (m=ab)&(n=cd),例 a (m=ab)&(n=cd) /结果m=0,n=1,2019/9/10,7,5.3 选择程序设计 if 语句(条件选择语句) if 语句的三种形式 形式一: 格式: if (expression) statement 执行过程: 形式二: 格式: if (expression) statement1 else statement2 执行过程:,例:if (xy) printf(“%d”,x);,例:if (xy) max=x; else max=y;,2019/9/10,8,5.3 选择程序设计 if 语句(条件选择语句) if 语句的三种形式 形式一: 格式: if (expression) statement 执行过程: 形式二: 格式: if (expression) statement1 else statement2 执行过程: 形式三: 格式: 执行过程:,if ( expr1 ) statement1 else if (expr2 ) statement2 else if (expr3 ) statement3 . else statementn ,例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if (salary400) index=0.1; else index=0;,2019/9/10,9,如: if(a=b,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,例 考虑下面程序的输出结果: #include main() int x,y; scanf(“%d,%d”, ,关于if语句的说明: if后面的表达式类型任意 语句可以是复合语句 if(x) if(x!=0) if(!x) if(x= =0),Compile Error!,2019/9/10,10,/*ch4_1.c*/ #include main() int x,y; printf(“Enter an integer:“); scanf(“%d“, ,例1 求一个数的绝对值,运行:Enter an integer:-12 integer:-12-absolute value :12,2019/9/10,11,/*ch4_2.c*/ #include main() int a,b; printf(“Enter integer a:“); scanf(“%d“, ,例2 输入两个数并判断两数相等否,运行:Enter integer a:12 Enter integer b:12 a=b,运行:Enter integer a:12 Enter integer b:9 a!=b,2019/9/10,12,/*ch4_3.c*/ #include main() char c; printf(“Enter a character:“); c=getchar(); if(c=0 ,例3 判断输入字符种类,运行: Enter a character: The character is a control character,运行: Enter a character:8 The character is a digit,运行: Enter a character: D The character is a capital letter,运行: Enter a character: h The character is a lower letter,运行: Enter a character:* The character is other character,2019/9/10,13,if语句嵌套:,2019/9/10,14,例 输入两数并判断其大小关系,/*ch4_4.c*/ #include main() int x,y; printf(“Enter integer x,y:“); scanf(“%d,%d“, ,运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y,if else 配对原则: 缺省 时,else总是和它上面离它最近的未配对的if配对,2019/9/10,15,例: if (a= =b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,修改: if (a=b) if(b=c) printf(“a=b=c”); else printf(“a!=b”);,实现if else 正确配对方法:加 ,例 考虑下面程序输出结果: main() int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%d”,x); ,结果:-1,if else 配对原则: 缺省 时,else总是和它上面离它最近的未配对的if配对,2019/9/10,16,条件运算符和表达式 功能:相当于条件语句,但不能取代if语句 形式: exp1 ? exp2 : exp3 结合方向:从左向右 优先级:13 条件运算符可嵌套 结果类型:取exp1、exp2和exp3中最高者,例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);,例 x0?1:(x0?-1:0),例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c=z)?c-a+A:c,例 x?a:b /x=0,表达式值为b; x0,表达式值为a xy?1:1.5 /xy ,值为1.0; xy ,值为1.5,2019/9/10,17,switch( 表达式) case E1: 语句组 1; break; case E2: 语句组 2; break; . case En: 语句组 n; break; default: 语句组 ; break; ,switch语句(开关分支语句) 一般形式:,执行过程:,2019/9/10,18,关于switch语句的说明: E1,E2,En是常量表达式,且值必须互不相同 语句标号作用内,必须用break跳出 case后可包含多个可执行语句,且不必加 switch可嵌套 多个case可共用一组执行语句,如: case A: case B: case C: printf(“score60n”); break; ,例 switch(score) case 5: printf(“Very good!”); case 4: printf(“Good!”); case 3: printf(“Pass!”); case 2: printf(“Fail!”); default : printf(“data error!”); ,运行结果:score为5时,输出: Very good! Good! Pass! Fail! data error!,例 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); ,运行结果:a=2,b=1,2019/9/10,19,/*ch4_5.c*/ #include main() int c; printf(“Enter m or n or h or other:“); c=getchar(); switch(c) case m: printf(“nGood morning!n“);break; case n: printf(“nGood night!n“); break; case h: printf(“nHello!n“); break; default : printf(“n?n“); break; ,例 根据输入字母输出字符串,2019/9/10,20,4.4 循环程序设计 C语言中可以实现循环的语句 if 和 goto 构成循环 while 语句 do while () 语句 for 语句 goto语句及用goto构成循环 一般形式: 功能:无条件转移,goto 语句标号; . 标号:语句;,警告: 不能用整数作标号 只能出现在goto所在函数内,且唯一 只能加在可执行语句前面 限制使用goto语句,2019/9/10,21,例 用if 和goto语句构成循环,求,/*ch5_1.c*/ #include main() int i,sum=0; i=1; loop: if(i=100) sum+=i; i+; goto loop; printf(“%d“,sum); ,sum=0+1 sum=1+2=3 sum=3+3=6 sum=6+4 sum=4950+100=5050,2019/9/10,22,例 从键盘输入一组数据,以0结束输入,求数据和,/*ch5_11.c*/ #include main() int number,sum=0; read_loop: scanf(“%d“, ,2019/9/10,23,4.4 循环程序设计 while语句 一般形式: 执行流程: 判断表达式,后执行循环体,while(表达式) 循环体语句;,循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零) 循环体内遇break, return, goto 无限循环: while(1) 循环体;,2019/9/10,24,例 while语句构成循环,求,/*ch5_2.c*/ #include main() int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(“%d“,sum); ,2019/9/10,25,例 显示110的平方,/*ch5_21.c*/ #include main() int i=1; while(i=10) printf(“%d*%d=%dn“,i,i,i*i); i+; ,运行结果: 1*1=1 2*2=4 3*3=9 4*4=16 5*5=25 6*6=36 7*7=49 8*8=64 9*9=81 10*10=100,2019/9/10,26,4.4 循环程序设计 do while() 语句 一般形式: 执行流程: 特点: 先执行循环体,再判断 至少执行一次循环体 可转化为while循环,do 循环体语句; while(表达式);,2019/9/10,27,例 dowhile语句构成循环,求,/*ch5_3.c*/ #include main() int i,sum=0; i=1; do sum+=i; i+; while(i=100); printf(“%d“,sum); ,2019/9/10,28,例 while和dowhile比较,/*ch5_4.c*/ #include main() int i=1,sum=0; scanf(“%d“, ,#include main() int i=1,sum=0; scanf(“%d“, ,2019/9/10,29,4.4 循环程序设计 for 语句 一般形式: 执行流程: 一般应用方式:,for(exp1; exp2; exp3) 循环体语句;,for(循环变量赋初值; 循环条件; 循环变量增值) 循环体语句; ,expr1, expr2 , expr3 类型任意 exp1, exp2, exp3都可省略,但分号不可省 无限循环: for( ; ; ) for语句可以转换成while结构,2019/9/10,30,例1 #include main( ) int i=0; for(i=0;i10;i+) putchar(a+i); ,运行结果:abcdefghij,例2 #include main( ) int i=0; for(;i10;i+) putchar(a+i); ,例3 #include main( ) int i=0; for(;i10;) putchar(a+(i+); ,例4 #include main( ) int i=0; for(;i10;putchar(a+i),i+); ,例:多种方式连续输出多个字符,2019/9/10,31,例:打印加法表 #include main() int i,j,k; for(i=0,j=100;i=j;i+,j-) k=i+j; printf(“%d+%d=%dn“,i,j,k); ,例:打印输入的多个字符 #include main() char c; for(;(c=getchar()!=n;) printf(“%c “,c); ,例:根据输入打印多个字符 #include main() int i,c; for(i=0;(c=getchar()!=n;i+=3) printf(“%c “,i+c); ,2019/9/10,32,例 梯形法求数值积分,#include main() float a,b; double s,h; double f(double x); int n,i; printf(“Input integral area a,b:“); scanf(“%f,%f“, ,double f(double x) return(sqrt(4.0-x*x); ,2019/9/10,33,(1) while() while() . ,(2) do do while( ); . while( );,(3) while() do while( ); . ,(4) for( ; ;) do while(); while() . ,循环的嵌套 三种循环可互相嵌套,层数不限 外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程 嵌套循环的跳转禁止事项: 从外层跳入内层 跳入同层的另一循环 向上跳转,2019/9/10,34,例 循环嵌套,输出九九表,/*ch5_5.c*/ #include main() int i,j; for(i=1;i10;i+) printf(“%4d“,i); printf(“n-n“); for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?“%4dn“:“%4d“,i*j); ,2019/9/10,35,for(i=1;i10;i+) for(j=1;j10;j+) printf(j=9)?“%4dn“:“%4d“,i*j);,2019/9/10,36,4.5 辅助控制语句 break 语句 功能:在循环语句和switch语句中,终止并跳出循环体或开关体 说明: break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中,2019/9/10,37,例1 输出圆面积,面积大于10

温馨提示

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

评论

0/150

提交评论