《C语言C程序流程设计.pptx》由会员分享,可在线阅读,更多相关《C语言C程序流程设计.pptx(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2023/3/231复合语句在什么情况下使用复合语句?条件语句和循环语句在语法上只允许带一条语句当分支和循环中需要进行多项操作时 t=x;t=x;x=y;x=y;y=t;y=t;被当作一条语句来处理复合语句在语法上是一个整体,相当于一个语句。凡 是能 使用简单语句的地方,都可以使用复合语句。复合语句内还可以包含复合语句,即复合语句的嵌套 使用 第1页/共43页2023/3/232C程序的三种基本结构 结构化程序设计 基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)结构化程序:三种基本结构反复嵌套构成 优点:结构清晰,易读,提程序质量和效率 三种基本结构 顺序结构
2、选择结构 二分支选择 多分支选择 循环结构 当型循环 直到型循环ABAB流程图N-S图PAB真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki.PA假真当P为真AAP真假A直到P为真第2页/共43页2023/3/2335.1关系运算符和表达式 功能:比较两个常量、变量或表达式的值的大小 符号:=!=结合方向:从左向右 优先级:=(6)=!=(7)关系表达式的值:逻辑“真”和“假”,用1和0表示 用途:循环语句和选择语句中例 ca+b /c(a+b)ab!=c /(ab)!=c a=bc /a=(bc /a=(bc)例int a=3,b=2,c=1,d,f;ab(ab)=cb+cb
3、f=abc例int a=3,b=2,c=1,d,f;ab/表达式值1(ab)=cb+cbf=abc例int a=3,b=2,c=1,d,f;ab/表达式值1(ab)=c/表达式值1b+cbf=abc例int a=3,b=2,c=1,d,f;ab/表达式值1(ab)=c/表达式值1b+cbf=abc例int a=3,b=2,c=1,d,f;ab/表达式值1(ab)=c/表达式值1b+cb/d=1f=abc例int a=3,b=2,c=1,d,f;ab/表达式值1(ab)=c/表达式值1b+cb/d=1f=abc/f=0例:若a=0;b=0.5;x=0.3;则 a=x=b的值为 例:若a=0;b=
4、0.5;x=0.3;则 a=x278在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可改写为:
5、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)注意
6、区分“=”与“=”如 int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);第3页/共43页2023/3/2345.2逻辑运算符和表达式 功能:判断逻辑值和对逻辑值进行操作 符号:!&|逻辑运算真值表 结合方向:!从右向左,&|从左向右 优先级:!(2)&(11)|(12)逻辑运算中:运算参量:0表示假,非0表示真 运算结果:0表示假,1表示真 短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符ab!a!ba&ba|b真真真真真
7、真假假假假真真假假假假ab!a!ba&ba|b真真真真假假真真假假假假假假真真真真假假假假真真ab!a!ba&ba|b真真真真假假假假真真假假假假真真假假真真真真假假假假假假真真真真ab!a!ba&ba|b真真真真假假假假真真真真假假假假真真假假假假真真真真假假假假假假假假真真真真假假ab!a!ba&ba|b真真真真假假假假真真真真真真假假假假真真假假真真假假真真真真假假假假真真假假假假真真真真假假假假例a=x&xb&xya=b|x=y!a|ab例a=x&x=b/(a=x)&(xb&xya=b|x=y!a|ab例a=x&x=b/(a=x)&(xb&xy/(ab)&(xy)a=b|x=y!a|a
8、b例a=x&x=b/(a=x)&(xb&xy/(ab)&(xy)a=b|x=y/(a=b)|(x=y)!a|ab例a=x&x=b/(a=x)&(xb&xy/(ab)&(xy)a=b|x=y/(a=b)|(x=y)!a|ab/(!a)|(ab)例a=4;b=5;!aa&ba|b!a|b4&0|253&2|83&2|83&2|83&2|83&2|83&2|83&2|83)&2|(83&2|83)&2|(8b)&(n=cd)例a&b&c/只在a为真时,才判别b的值/只在a、b都为真时,才判别 c的值a|b|c/只在a为假时,才判别b的值/只在a、b都为假时,才判别 c的值a=1;b=2;c=3;d=
9、4;m=1;n=1;(m=ab)&(n=cd)/结果m=0,n=1第4页/共43页2023/3/2355.3 选择程序设计 if 语句(条件选择语句)if 语句的三种形式 形式一:格式:if(expression)statement 执行过程:形式二:格式:if(expression)statement1 else statement2 执行过程:exprstatement非0=0exprstatement1statement2非0=0例:if(xy)printf(“%d”,x);例:if(xy)max=x;else max=y;第5页/共43页2023/3/2365.3 选择程序设计 if
10、语句(条件选择语句)if 语句的三种形式 形式一:格式:if(expression)statement 执行过程:形式二:格式:if(expression)statement1 else statement2 执行过程:形式三:格式:执行过程:if(expr1)statement1else if(expr2)statement2else if(expr3)statement3.else statementn expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0例:if(salary1000)index=0.4;else
11、if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;第6页/共43页2023/3/237如:if(a=b&x=y)printf(“a=b,x=y”);if(3)printf(“OK”);if(a)printf(“%d”,a);例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else x+;y+;printf(“%d,%dn”,x,y);例 考虑下面程序的输出结果:#in
12、clude main()int x,y;scanf(“%d,%d”,&x,&y);if(xy)x=y;y=x;else x+;y+;printf(“%d,%dn”,x,y);关于if语句的说明:if后面的表达式类型任意 语句可以是复合语句 if(x)if(x!=0)if(!x)if(x=0)Compile Error!第7页/共43页2023/3/238/*ch4_1.c*/#include main()int x,y;printf(Enter an integer:);scanf(%d,&x);y=x;if(yabsolute value:%dn,x,y);例1 求一个数的绝对值运行:Ent
13、er an integer:-12 integer:-12-absolute value:12第8页/共43页2023/3/239/*ch4_2.c*/#include main()int a,b;printf(Enter integer a:);scanf(%d,&a);printf(Enter integer b:);scanf(%d,&b);if(a=b)printf(a=bn);else printf(a!=bn);例2 输入两个数并判断两数相等否运行:Enter integer a:12 Enter integer b:12 a=b 运行:Enter integer a:12 Ent
14、er integer b:9 a!=b 第9页/共43页2023/3/2310/*ch4_3.c*/#include main()char c;printf(Enter a character:);c=getchar();if(c=0&c=A&c=a&c=z)printf(The character is a lower lettern);else printf(The character is other charactern);例3 判断输入字符种类运行:Enter a character:The character is a control character运行:Enter a cha
15、racter: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第10页/共43页2023/3/2311if(expr1)if(expr2)statement1 else statement2内嵌if if语句嵌套:if(expr1)if(expr2)statement
16、1else statement3 内嵌ifif(expr1)statement1else if(expr3)statement3 else statement4内嵌ifif(expr1)if(expr2)statement1 else statement2else if(expr3)statement3 else statement4内嵌if内嵌if第11页/共43页2023/3/2312例 输入两数并判断其大小关系/*ch4_4.c*/#include main()int x,y;printf(Enter integer x,y:);scanf(%d,%d,&x,&y);if(x!=y)if
17、(xy)printf(XYn);else printf(XYn);else printf(X=Yn);运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Yif else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对if()if()if()else.else.else.第12页/共43页2023/3/2313例: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”)
18、;实现if else 正确配对方法:加 例 考虑下面程序输出结果:main()int x=100,a=10,b=20;int v1=5,v2=0;if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b);例 求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);例 x0?1:(x=0)?x:-x (c=a&cy?1:1.5 /xy ,值为1.0;x60n”);break;.例 switch(score)case 5:printf(“Very good!”);case 4:printf(“Good!”);cas
19、e 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第16页/共43页2023/3
20、/2317/*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;例 根据输入字母输出字符串第17页/共43页2023/3/23184.4 循环程序设计 C语言中可以实现循环的语句 if 和 goto 构成循环 while
21、 语句 do while()语句 for 语句 goto语句及用goto构成循环 一般形式:功能:无条件转移 goto 语句标号;.标号:语句;警告:不能用整数作标号 只能出现在goto所在函数内,且唯一 只能加在可执行语句前面 限制使用goto语句第18页/共43页2023/3/2319例 用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+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=
22、5050循环初值循环终值循环变量增值循环条件循环体第19页/共43页2023/3/2320例 从键盘输入一组数据,以0结束输入,求数据和/*ch5_11.c*/#include main()int number,sum=0;read_loop:scanf(%d,&number);if(!number)goto print_sum;sum+=number;goto read_loop;print_sum:printf(The total sum is%dn,sum);第20页/共43页2023/3/23214.4 循环程序设计 while语句 一般形式:执行流程:判断表达式,后执行循环体whil
23、e(表达式)循环体语句;expr循环体假(0)真(非0)while 循环体有可能一次也不执行 循环体可为任意类型语句 下列情况,退出while循环 条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;第21页/共43页2023/3/2322例 while语句构成循环,求/*ch5_2.c*/#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环终值循环变量增值循环条件循环体第22页/共43页2023/3/2323例 显示110的平方/*ch5_2
24、1.c*/#include main()int i=1;while(i=10)printf(%d*%d=%dn,i,i,i*i);i+;运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100第23页/共43页2023/3/23244.4 循环程序设计 do while()语句 一般形式:执行流程:特点:先执行循环体,再判断 至少执行一次循环体 可转化为while循环do 循环体语句;while(表达式);do循环体expr假(0)真(非0)whileexpr循环体假(0)真(非0)循环体While循环第24页/共43页
25、2023/3/2325例 dowhile语句构成循环,求/*ch5_3.c*/#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);第25页/共43页2023/3/2326例 while和dowhile比较/*ch5_4.c*/#include main()int i=1,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);#include main()int i=1,sum=0;scanf(%d,&i);while(i=10)sum+=i
26、;i+;printf(%d,sum);第26页/共43页2023/3/23274.4 循环程序设计 for 语句 一般形式:执行流程:一般应用方式:for(exp1;exp2;exp3)循环体语句;expr2循环体假(0)真(非0)forexpr1expr3for(循环变量赋初值;循环条件;循环变量增值)循环体语句;expr1,expr2,expr3 类型任意 exp1,exp2,exp3都可省略,但分号不可省 无限循环:for(;)for语句可以转换成while结构第27页/共43页2023/3/2328例1#include main()int i=0;for(i=0;i10;i+)putc
27、har(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+);例:多种方式连续输出多个字符第28页/共43页2023/3/2329例:打印加法表#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);例:打印输
28、入的多个字符#includemain()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);第29页/共43页2023/3/2330例 梯形法求数值积分0yxaa+h a+ih a+(i+1)hbf(x)#includemain()float a,b;double s,h;double f(double x);int n,i;printf(Input integral area a,b:);scanf(%f
29、,%f,&a,&b);printf(Input n:);scanf(%d,&n);h=(b-a)/n;s=0.5*h*(f(a)+f(b);for(i=1;i=n-1;i+)s=s+h*f(a+i*h);printf(nThe value is:%lf,s);double f(double x)return(sqrt(4.0-x*x);第30页/共43页2023/3/2331(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do while();while().循环的嵌套 三种循环可互相嵌套,层
30、数不限 外层循环可包含两个以上内循环,但不能相互交叉 嵌套循环的执行流程 嵌套循环的跳转禁止事项:从外层跳入内层 跳入同层的另一循环 向上跳转第31页/共43页2023/3/2332例 循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281./*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);第
31、32页/共43页2023/3/2333for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);i10printf假(0)真(非0)i=1j+j=1j10真(非0)假(0)i+外循环内循环第33页/共43页2023/3/23344.5 辅助控制语句 break 语句 功能:在循环语句和switch语句中,终止并跳出循环体或开关体 说明:break只能终止并跳出最近一层的结构 break不能用于循环语句和switch语句之外的任何其它语句之中exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)while
32、expr2break;.假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;.const 1const 2const ndefaultcase 第34页/共43页2023/3/2335例1 输出圆面积,面积大于100时停止#define PI 3.14159main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);第35页/共43页2023/3/2336例2 小写字母转换成大写字母,直至输入非字母字符#include
33、main()int i,j;char c;while(1)c=getchar();if(c=a&c=z)putchar(c-a+A);else break;第36页/共43页2023/3/23374.5 辅助控制语句 continue 语句 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断 说明:只能用于循环语句中exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexpr2continue;.假(0)真(非0)forexpr1expr3第37页/共43页2023/3/2338例 求输入的十个整数中正数
34、的个数及其平均值/*ch5_12.c*/#include main()int i,num=0,a;float sum=0;for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;printf(%d plus integers sum:%6.0fn,num,sum);printf(Mean value:%6.2fn,sum/num);第38页/共43页2023/3/2339 程序举例t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi分子:1,-1,1,-1分母:1,3,5,7
35、,.*ch5_6.c*/#include#include main()int s;float n,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)=1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);第39页/共43页2023/3/2340例2 求Fibonacci数列 1,1,2,3,5,8,的前40个数f1=1,f2=1for i=1 to 20输出f1,f2f1=f1+f2f2=f2+f1153423315971094675025514229352457824157817185537725841
36、7711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155/*ch5_7.c*/#include main()long int f1,f2;int i;f1=1;f2=1;for(i=1;i=20;i+)printf(%12ld%12ld ,f1,f2);if(i%2=0)printf(n);f1=f1+f2;f2=f2+f1;第40页/共43页2023/3/2341例3 判断m是否素数读入mk=mi=2当
37、ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数”输出:m”不是素数”/*ch5_8.c*/#include#include main()int m,i,k;scanf(%d,&m);k=sqrt(m);for(i=2;i=k+1)printf(%d is a prime numbern,m);else printf(%d is not a prime numbern,m);第41页/共43页2023/3/2342例4 译密码例如输入:Hello,world!译成密码:Lipps,asvph!/*ch5_10.c*/#include main()char c;while(c=getchar()!=n)if(c=a&c=A&cZ&cz)c=c-26;printf(%c,c);第42页/共43页2023/3/2343感谢您的欣赏!第43页/共43页