《物理C语言流程控制.pptx》由会员分享,可在线阅读,更多相关《物理C语言流程控制.pptx(80页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、例3-1 输入一个华氏温度f,将其转换为摄氏温度c并输出。转换公式为 c=5/9*(f-32)#include void main()第1页/共80页例3-2 输入一个三位数,将该数逆序输出输出。例如,输入123,则输出321。#include void main()第2页/共80页例2-23 输入几个小写字母,输出它们的ASCII码和对应的大写字母。void main()char a,b,c;printf(input character a,b,cn);scanf(%c%c%c,&a,&b,&c);printf(“%d,%d,%dn,a,b,c);printf(%c,%c,%cn,a-32,
2、b-32,c-32);第3页/共80页 a b c例1-5 从键盘输入两个整数 a 和 b,输出a、b的值以及他们交换后的值。main()int a,b,c;printf(“Input a and b:”);scanf(“%d%d”,&a,&b);printf(“old a=%d b=%dn”,a,b);c=a;a=b;b=c;printf(“new a=%d b=%dn”,a,b);运行结果:Input a and b:5 7 old a=5 b=7new a=7 b=5第4页/共80页例:对于随机输入的半径r,计算圆的直径D、圆周长L、圆面积S、圆球表面积M和球体积V。#define PI
3、 3.14159main()float r,d,l,s;double m,v;printf(“Input r:”);scanf(“%f”,&r);d=2*r;l=2*PI*r;s=PI*r*r;m=4*PI*r*r;v=m*r/3;printf(“D=%6.2f L=%6.2f S=%6.2fn”,d,l,s);printf(“M=%6.2f V=%6.2fn”,m,v);运行结果:Input r:1.5D=3.00 L=9.42 S=7.07M=28.27 V=14.14第5页/共80页顺序结构程序设计举例#include#include void main()float a,b,c,s,a
4、rea;scanf(%f,%f,%f,&a,&b,&c);s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn,a,b,c,s);printf(area=%7.2fn,area);例:输入三角形边长,求面积.文件包含预处理命令变量定义输入数据输出数据输入:3,4,6 输出:a=3.00,b=4.00,c=6.00 s=6.50 area=5.33第6页/共80页例 从键盘输入一个大写字母,用小写字母输出#include void main()char c1;c1=getchar
5、();c1=c1+32;printf(%cn,c1);这个程序有什么问题吗?第7页/共80页#include#include main()float a,b,c,x1,x2,delta,p,q;scanf(a=%f,b=%f,c=%f,&a,&b,&c);delta=b*b-4*a*c;p=-b/(2*a);q=sqrt(delta)/(2*a);x1=p+q;x2=p-q;printf(nx1=%5.2fnx2=%5.2fn,x1,x2);输入:a=1,b=3,c=2 输出:x1=-1.00 x2=-2.00 分析:一元二次方程的根为:令 delta=b2 4ac,p=-b/(2*a);q=
6、sqrt(delta)/(2*a);则方程的两个根为:x1=p+q;x2=p q。第8页/共80页条件语句A语句B真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki.l二分支选择结构l多分支选择结构3.2 选择结构程序设计第9页/共80页3.2 选择结构程序设计if if 语句(条件选择语句)if if语句的三种形式形式一:(单边形式)格式:if(expression)statementexprstatement非0=0next statement例例:if (x 0)printf(“%d”,x);下一条语句下一条语句第10页/共80页exprstatement1statemen
7、t2非0=0形式二:(双边形式)if(expression)statement1 else statement2例:if(xy)max=x;else max=y;x ymax=xmax=y非0=0第11页/共80页形式三:多层嵌套if(expr1)statement1else if(expr2)statement2else if(expr3)statement3.else statementn expr1statemnt1非0=0expr2expr3statemntnstatemnt3statemnt2非0非0=0=0例:if (salary10000)printf(“very rich”);
8、else if(salary5000)printf(“rich”);else if(salary2000)printf(“medium”);else if(salary1000)printf(“good”);else if(salary700)printf(“ok”);else printf(“poor”);第12页/共80页void main()int x,y,z,max;printf(“Input x,y,z:”);scanf(“%d,%d,%d”,&x,&y,&z);max=x;if (max y)max=y;if (max z)max=z;printf(“max=%dn”,max);例
9、:输入三个整数,输出其中的最大数。运行:Input x,y,z:5,8,2 max=8第13页/共80页#include void main()int x,y;printf(Enter an integer:);scanf(%d,&x);printf(nx=%d|x|=%dn,x,y);例:从键盘输入一个整数,输出它的绝对值。运行:Enter an integer:-12 x=-12|x|=12第14页/共80页例:输入3 3个数a a、b b、c,c,要求按由小到大的顺序输出#include void main()float a,b,c,t;scanf(“%f,%f,%f”,&a,&b,&c
10、);printf(“%5.2f,%5.2f,%5.2fn”,a,b,c);第15页/共80页 if 语句的嵌套 if (表达式)语句1;else 语句2;if (表达式)if(表达式)else else 语句2;第16页/共80页例:输入两数,根据大小关系输出 xy、x=y 或 xy。#include void main()int x,y;printf(Enter integer x,y:);scanf(%d,%d,&x,&y);if(x!=y)if(xy)printf(XYn);else printf(X =0 x=0(2)x%2=0 x%2!=0(3)x=y x!=y(4)fabs(x-y
11、)1.0E-06 第20页/共80页关系表达式 一个表达式中可同时出现算术运算符、关系运算符、赋值运算符。(1)fabs(x-y)x+y(3)x!=y=z-2(4)x=y=z-1 x=(y=(z-1)z (x+y)(x!=y)=(z-2)设设 x=1,y=2,z=3;以下表达式的值以下表达式的值?第21页/共80页2.6.3 逻辑运算符和逻辑表达式 逻辑运算符:!&|!&|逻辑非 逻辑与 逻辑或!单目单目运算符运算符 !a !a :表示对:表示对a a求反求反&双目双目运算符运算符 a&b a&b:a a、b b都为非0 0时,结果为1 1|双目双目运算符运算符 a|b a|b:a a、b b
12、都为0 0时,结果才为0 0 if(ch=a&ch 1)|(b+14)(ab)&(c0)|a !a|(b=0)&(c=a)(!ab)&(b=c)&!a/0/1/0/0第23页/共80页如:if(a=b&x=y)printf(“a=b,x=y”);if(!3)printf(“OK”);if(a&5)printf(“%d”,a);l对 if 语句的说明:uif 后面的表达式类型任意u if(x)if(x!=0)if(!x)if(x=0)u其中的语句可以是复合语句 u 0 x0)&(x5),而不能写成 0 x5 例:#include void main()int x,y;scanf(“%d,%d”,
13、&x,&y);if(xy)x-;y-;else x+;y+;printf(“%d,%dn”,x,y);如果丢失大括号Compile Error!第24页/共80页例:考虑下面程序的输出结果:void 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;else x=-1;printf(“%d”,x);结果:-1如果分支较多,嵌套 if 语句的层数较多,程序冗长且可读性降低。第25页/共80页3.2.3 switch语句一般形式:switch(表达式)case 常量表达式E1:语
14、句组 1;case 常量表达式E2:语句组 2;.case 常量表达式En:语句组 n;default:语句组;switch表达式语句组1语句组2语句组n语句组.E 1E 2Endefaultcase 执行过程:switch (grade)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“3059n”);case E:printf(“=90)grade=A;else if(score=80)grade=B;else if(score=70)grade=C;else if(sc
15、ore=60)grade=D;else grade=E;printf(“grade=%c n”,grade);第30页/共80页 void main()int score,s;char grade;scanf(“%d”,&score);s=score/10;switch(s)case 10:case 9:grade=A;break;case 8:grade=B;break;case 7:grade=C;break;case 6:grade=D;break;case 5:case 4:case 3:case 2:case 1:case 0:grade=E;break;default:printf
16、(“Errorn”);break;第31页/共80页条件运算 条件运算符:?:三目运算符三目运算符 条件表达式 表达式表达式1 1?表达式?表达式2 2:表达式:表达式3 3语义:先计算表达式语义:先计算表达式1 1的值,若结果为非的值,若结果为非0 0,则以表达,则以表达式式2 2的值作为整个条件表达式的值;若为的值作为整个条件表达式的值;若为0 0,则以表达,则以表达式式3 3的值作为整个条件表达式的值。的值作为整个条件表达式的值。例如:例如:(x0)?1:-1第32页/共80页例:对键盘输入的字符判断其是否为大写字母,若是,例:对键盘输入的字符判断其是否为大写字母,若是,就转换成小写字母
17、,其余字符不变。就转换成小写字母,其余字符不变。#include void main()char ch;scanf(“%c”,&ch);ch=(ch=A&ch 0,有两个不等实根。(4)b2 4ac 0)else 第34页/共80页 例3-53-5输入一个年份,判断其是否为闰年。void main()闰年的条件是:(1)能被4整除,但不能被100整除的年份都是闰年。(2)能被100整除,又能被400整除的年份是闰年。不符合这两个条件的年份不是闰年。第35页/共80页 例3-83-8某市电费收费标准如下:P56:P56 void main()float s,f;scanf(“%f”,&s);sw
18、itch(int)(s/30)case 0:f=6;break;case 1:f=6+(s-30)*1.8;break;case 2:csae 3:f=6+30*1.8+(s-60)*1.6;brak;default:f=6+30*1.8+60*1.6+(s-120)*1.4;brak;printf(“f=%.2fn”,f);第36页/共80页 顺序结构顺序结构ABAB流程图N-S图CC第37页/共80页条件语句A语句B真假PBA真假kA1A2AiAnk=k2k=k1k=knk=ki.l二分支选择结构l多分支选择结构选择结构第38页/共80页 循环的含义是:当满足某个特定的条件时,重复 执行某
19、段操作,直至条件不满足 为止。在许多问题中需要用到循环3.3 循环结构程序设计第39页/共80页C语言可实现循环的语句有:while 语句 do while 语句 for 语句第40页/共80页3.3.1 用while 语句v一般形式:while(表达式)循环体语句;v执行流程:expr循环体假(0)真(非0)whilev特点:先判断表达式,后执行循环体v说明:l循环体有可能一次也不执行l循环体可为任意类型语句l下列情况,退出while循环u条件表达式不成立(为零)u循环体内遇 break,return,gotol无限循环:while(1)循环体;第41页/共80页例:求5!#include
20、void main()int i=1,p=1;printf(%d,p);p=1;i=1;p=p*ii=i+1i=5结束Y开始N第42页/共80页例3-9 用while语句计算100!#include void main()int i=1;double p=1.0;while(i=100)p=p*i;i+;printf(%lfn,p);循环变量增值第43页/共80页例:编程序,输出100200之间能被3整除的数.#include void main()int i=100;while (i=200)if(i%3=0)printf(%d ,i);i+;第44页/共80页#include void m
21、ain()int i=1;float sum=0;while(i100)p=p+1.0/i;i+=2;printf(%fn,sum);例3-10 利用while语句计算1+1/3+1/5+1/99的值第45页/共80页3.3.2 dowhile语句v一般形式:do 循环体语句;while(表达式);v执行流程:do循环体表达式假(0)真(非0)whilev特点:先执行循环体,后判断表达式v说明:l至少执行一次循环体ldowhile可转化成while结构第46页/共80页#include void main()int i=1;double p=1.0;do p=p*i;i+;while(i=10
22、0);printf(%lfn,p);例3-11 用dowhile循环计算100!第47页/共80页 void main()int n,digit;scanf(“%d”,&n);do digit=n%10;printf(“%d”,digit);n=n/10;while(n!=0);printf(n);例3-12 输入一个整数,将各位数字逆序后输出。例如,输入123,则输出321。第48页/共80页while语句 与 dowhile 语句的区别do循环体表达式假(0)真(非0)while while语句:dowhile 语句:表达式循环体假(0)真(非0)while第49页/共80页 while
23、和 dowhile循环的比较void main()int sum=0,i;scanf(%d,&i);do sum=sum+i;i+;while(i=10);printf(%d,sum);void main()int sum=0,i;scanf(%d,&i);while(i=10)sum=sum+i;i+;printf(“%d,sum);输入输入1:输出:输出:55 55 输入输入11:输出:输出:0 11第50页/共80页for(expr1;expr2;expr3)循环体语句;v执行流程:expr2循环体假(0)真(非0)forexpr1expr33.3.3 for 语句v一般形式:第51页/
24、共80页例3-13 利用for语句计算100!void main()int i;double p=1.0;for(i=1;i=100;i+)p=p*i;printf(%lf,p);第52页/共80页vfor语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;v说明:lfor语句中expr1,expr2,expr3 类型任意,都可省略,但分号;不可省l无限循环:for (;)lfor语句可以转换成while结构 expr1;while(expr2)循环体语句;循环体语句;expr3;第53页/共80页例:#include void main()int i;for(i=0
25、;i10;i+)putchar(a+i);运行结果:abcdefghij例:#include void main()int i=0;for(;i10;i+)putchar(a+i);例:例:#include main()int i=0;for(;i10;)putchar(a+(i+);例:例:#include void main()int i=0;for(;i10;putchar(a+i),i+);第54页/共80页void main()int i,j,k;for(i=0,j=100;i=j;i+,j-)k=i+j;printf(%d+%d=%dn“,i,j,k);第55页/共80页3.3.5
26、 循环的嵌套 当一个循环语句的循环体中又出现另一个循环语句时,就构成了循环的嵌套。v三种循环可互相嵌套,层数不限v外层循环可包含两个以上内循环,但不能相互交叉第56页/共80页v嵌套循环的执行流程(1)while()while().(2)do do while();.while();(3)while()do while();.(4)for(;)do while();while().内循环外循环内循环v嵌套循环的跳转l禁止从外层循环跳入内层循环l禁止跳入同层的另一循环第57页/共80页 void main()int line,n;for(line=1;line=9;line+)n=1;while
27、(n=line)printf(“%d*%d=%d ”,n,line,n*line);n+;printf(“n”);例3-16 请输出九九乘法口诀表。P67第58页/共80页 3.4 break语句和continue语句3.4.1 break语句一般形式:break;功能:终止并跳出当前循环说明:break只能终止并跳出最近一层的结构break不能用于循环语句和switch语句之外的任何其它语句之中第59页/共80页exprbreak;假(0)真(非0)whiledobreak;.expr假(0)真(非0)whileexprbreak;假(0)真(非0)whileexprbreak;假(0)真(
28、非0)while第60页/共80页expr2break;.假(0)真(非0)forexpr1expr3第61页/共80页 例3-19满足条件提前终止循环,分析下列程序的功能。void main()int i,s=0;int sum=0;for(i=1;i8)break;printf(%d,sum);第62页/共80页 例3-18从键盘上连续输入字符,并统计其中大写字母的个数,直至输入换行字符时结束。void main()char ch;int sum=0;while(1)ch=getchar();if(ch=n)break;if(c=A&c=Z )sum+;printf(“%d”,sum);第
29、63页/共80页3.4.2 continue语句v一般形式:continue;v功能:结束本次循环。即跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断v仅用于循环语句中第64页/共80页expr2continue;.假(0)真(非0)forexpr1expr3第65页/共80页exprcontinue;假(0)真(非0)while真(非0)docontinue;.expr假(0)whileexprcontinue;假(0)真(非0)while第66页/共80页例:把100200 之间不能被3整除的数输出。#include void main()int i,count=0;for(i=
30、100;i=200;i+)if (i%3=0)continue;printf(“%d ”,i);count+;printf(“ncount=%dn”,count);第67页/共80页例3-21 从键盘输入不多于10个的实数,以0作为结束标记,求这些数的和及其中正数的和。void main()float sum1=0,sum2=0,num;int i;for(i=0;i10;i+)scanf(“%f”,&num);if(num=0)break;sum1+=num;if(num=1e-6)pi+=item;i=i+2;s=-s;item=s/i;printf(“pi=%f n”,pi*4);第69
31、页/共80页例3-26 求Fibonacci数列:1,1,2,3,5,8,的前40个数。1534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155 F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n=3)第70页/共80页例3-26 求Fibonacci数列:1,1,2,3,5,8
32、,的前40个数。题目分析:(1)该数列的特点是前两项数为 1,1,从第三项开始,每一项都是前两项之和。(2)假设前两项为f1、f2,则当前项 f3=f1+f2。(3)求出 f3后,f1f2,f2f3,重复操作即可。void main()int i,n;long int f1,f2,f3;f1=1;f2=1;printf(“%ldt%ldt”,f1,f2);n=2;for(i=1;i=38;i+)f3=f1+f2;printf(“%ldt”,f3);n+;if(n%4=0)printf(“n”);f1=f2;f2=f3;第71页/共80页例3-26 求Fibonacci数列:1,1,2,3,5,
33、8,的前40个数。f 1=1,f 2=1for i=1 to 20输出 f 1,f 2f 1=f 1+f 2f 2=f 2+f 1 f 1 f 2 f 1 f 2 f 1 f2 第72页/共80页例3-27 判断一个数m是否是素数。(素数是大于1且只能被1和它本身整除的数)。读入mk=mi=2当 i k 时m能被i整除真假用break结束循环i=i+1i=k+1真假输出:m是素数 输出:m不是素数 void main()int m,i,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;i=a&c=A&cZ&cz)c=c-26;printf(%c,c);第75页/共80页实验
34、五第6题输入两个正整数n和m,求其最大公约数和最小公倍数。void main()int n,m,r;scanf(%d%d,&n,&m);if(n m)r=m;m=n;n=r;第76页/共80页实验五第6题 打印 1!+2!+3!+20!之和。void main()int sum=0,t=1;int i;for(i=1;i20;i+)t=t*i;sum+=t;第77页/共80页实验5 第8题:输出以下图案:*void main()int i;#*#*#*第78页/共80页准备下一项pi=1,i=1,item=1.0/(1*3)当 item 1e-6i+;item=1.0/(2*i-1)*(2*i+1)pi=pi*2输出 pipi*=(1+item);item#include stdio.hvoid main()double pi;/*begin*/*end*/printf(%fn,pi);第79页/共80页感谢您的观看!第80页/共80页