种基本结构的程序设计.ppt

上传人:小飞机 文档编号:5807833 上传时间:2023-08-22 格式:PPT 页数:47 大小:1.04MB
返回 下载 相关 举报
种基本结构的程序设计.ppt_第1页
第1页 / 共47页
种基本结构的程序设计.ppt_第2页
第2页 / 共47页
种基本结构的程序设计.ppt_第3页
第3页 / 共47页
种基本结构的程序设计.ppt_第4页
第4页 / 共47页
种基本结构的程序设计.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《种基本结构的程序设计.ppt》由会员分享,可在线阅读,更多相关《种基本结构的程序设计.ppt(47页珍藏版)》请在三一办公上搜索。

1、,C语句,和其它高级语言一样,C语言的语句用来向计算机系统发出操作指令,一个语句经编译后产生若干条机器指令。一个实际的程序应当包含若干个语句。C语句都是用来完成一定操作任务的,声明部分的内容不应称为语句。考虑:int a;和 int a=1;前者不是一个C语句,它不产生机器操作,而只是对变量定义。后者是一个C语句,为表达式语句(a=1为赋值表达式),2,C语句分类,表达式语句:由一个表达式加上一个分号构成一个语句,最典型的是赋值语句。如:i+;k=k+2;m=n=j=3;a=1;x+y;也是,但无实际意义。函数调用语句:由一次函数调用加一个分号构成一个语句,例如:printf(“s=%dn”,

2、s);空语句:只有一个分号的语句,什么也不做,有时用来做被转向点,或循环语句中的循环体。复合语句:可以用 把一些语句括起来成为复合语句,又称分程序。在语法上相当于一条语句。注:后面没有分号(;),3,C语句分类,控制语句,完成一定的控制功能(9种)if()else(条件语句)for()(循环语句)while()(循环语句)dowhile()(循环语句)continue(结束本次循环语句)break(中止执行switch语句或循环语句)switch(多分支选择语句)goto(无条件转向语句)return(从函数返回语句),4,C语句,5,程序的三种基本结构,结构化程序:由三种基本结构(顺序、条件

3、、循环)反复嵌套构成的程序。结构化程序设计基本思想:(函数)“自顶向下、逐步求精、模块化”,6,顺序结构程序设计,赋值语句:变量表达式;if(a=b)0)不能写成 if(a=b;)0)x=a;x=a;int a=b=c=10;正确?是错误的,应该写成:int a,b,b;a=b=c=10;或者:int a=10,b=10,c=10;顺序结构就是一个操作执行完成后就接着执行紧随其后的下一操作。,8,与赋值表达式有何区别,顺序结构例:输入三角形的三条边长,求其面积,#include#includevoid main()float a,b,c,p,s;printf(Input a,b,c=);sca

4、nf(%f,%f,%f,9,面积公式:其中,注意:sqrt()是求平方根的函数。必须把头文件“math.h”包含到程序中来。凡是在程序中用到数学函数库中的函数,都应当包含math.h头文件。,运行结果:Input a,b,c=3,4,5s=6.00,顺序结构例:输入两个整数,交换其值。,#includevoid main()int a,b,t;printf(Input a,b=);scanf(%d,%d,10,运行结果:Input a,b=5,10old data:a=5,b=10new data:a=10,b=5,如果是你,如何交换,选择结构程序设计if语句,12,if语句是用来判定所给定的

5、条件是否满足,根据判定的结果决定执行给出的两种操作之一。,if(表达式)语句,if(表达式)语句1 else 语句2,if语句-例1:输入两个整数,由大到小输出,#includevoid main()int a,b;printf(Input a,b=);scanf(%d,%d,13,if(ab)printf(%d,%dn,b,a);if(a=b)printf(%d,%dn,b,a);,int t=0;if(ab)t=a;a=b;b=t;printf(%d,%dn,a,b);,运行结果:Input a,b=5,1010,5,这部分还可以怎么写,if语句-例2:判断由键盘输入的字符类型,#incl

6、udevoid main()char c;printf(Input a character:);c=getchar();if(c=0,14,注意考虑的完备,if 语句的嵌套,15,#includemain()int x,y;scanf(“%d”,配对关系:else总是与它上面的最近的if配对,例:表示一个函数:,如何改,条件运算符:exp1?exp2:exp3,若if语句中,在表达式为“真”和“假”时,且都只执行一个赋值语句给同一个变量赋值时,可以用简单的条件运算符来处理。条件运算符要求有3个操作对象,称三目运算符,它是C语言中唯一的一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:

7、表达式3它的执行过程如右图:,16,ch若为大写转为小写,否则不变:ch=(ch=A,switch 语句,if语句本质上是两路分支的选择结构;要用于多路分支时,if语句就得采用嵌套形式,这使程序的可读性降低。对于多路分支问题,C语言提供了更加简练的语句:多分支选择语句(switch语句)来实现多种情况的选择。一般形式:switch(表达式)case 常量表达式1:语句1 case 常量表达式2:语句2.case 常量表达式n:语句n default:语句n+1,17,switch语句的执行过程是:先计算表达式的值,并逐个与case后面的常量表达式的值相比相等,执行相应常量表达式后的语句,之后不

8、再判断,顺序往下执行直到遇到break语句(跳出switch)或执行到switch语句结束;都不等,执行default后面的语句(如果没有default部分,则此时switch相当于一个空语句)。,switch 语句的注意事项,switch后面括号内的表达式,可以为任何类型。一般多为易于判断相等的类型:整型、字符型或枚举型,单、双精度型的值由于计算误差而难以进行相等比较case后面常量表达式的值必须互不相同,否则会出现出现互相矛盾的现象多个case可以共享一组执行语句各个case和default的出现次序不影响执行结果switch结构可以嵌套,即在一个switch语句中可以嵌套另一个switc

9、h语句,但要注意break语句只能跳出当前层的switch语句,18,实践是检验真知的唯一途径不需要死记,要动手去实验,为什么这样规定?,switch 语句举例,用数字17代表周一周日,从键盘上输入一个数字,输出对应的是工作日还是假日。,19,int a;printf(Input data:);scanf(%d,此程序要能执行还需要加什么,循环结构,循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。语言提供了多种循环语句,可以组成各种不同形式的循环结构。C语言可实现循环的语句:while 语句

10、do while 语句for 语句用goto 和 if 构成循环,21,while语句,while语句的一般形式为:while(表达式)语句 表达式:循环条件;语句:循环体。语义:计算表达式的值,为真时,执行循环体语执行过程:,22,例:语句求1+2+3+.+100的值#include main()int i1,sum=0;while(i=100)sum=sum+i;i+;printf(%d,sum);,这里语句要理解为一条语句(包括复合语句)和空语句,while语句分析下面程序的运行结果,23,#includevoid main()/程序1 int x=2;while(x-)printf(%

11、dn,x);,#includevoid main()/程序4 int x=0;while(x-)x-;printf(%dn,x);,#includevoid main()/程序3 int x=2;while(x)printf(%dn,x);,#includevoid main()/程序2 int x=2;while(x-);printf(%dn,x);,10,-1,(死循环)22.,-1,dowhile语句,一般形式:do 语句 while(表达式);执行过程:先执行循环体中的语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。(do-while循环至少要执行一次循环语句

12、),24,这里语句要理解为一条语句(包括复合语句和空语句),例:求自然对数e的近似值。其中:int n=1,i=1;float e=1do n*=i;e+=1./n;i+;while(1./n=1e-7);,while语句和dowhile语句的对比,例:输入一个自然数,求从该自然数到10的和。,25,main()int sum=0,i;scanf(“%d”,main()int sum=0,i;scanf(“%d”,运行结果:输入1时sum=55输入11时:sum=0,运行结果:输入1时sum=55输入11时:sum=11,for语句,在C语言中,for语句使用最为灵活,一般形式:for(表达式

13、1;表达式2;表达式3)语句执行过程(如右图):1)求解表达式1。2)求解表达式2,其值为真:执行循环体语句,转到3);为假:结束循环,转到5)3)求解表达式3。4)转到2)5)循环结束,执行for后面的语句。,26,for语句的说明,for循环中的“表达式1(循环变量赋初值)”、“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,即可以缺省,但“;”不能缺省。值得注意的是:表达式2省略相当于while(1)表达式1和表达式3可以是一个简单表达式也可以是逗号表达式:如:for(i=0,j=100;i=100;i+,j-)k=i+j;表达式2一般是关系表达式或逻辑表达式,但也可以是

14、数值表达式或字符表达式,只要其值非零,就执行循环体,如 for(;(c=getchar()!=n;)printf(“%c”,c);,27,有疑问吗?大家去试试!,用for语句实现输出0到10的数字,28,int i;for(i=0;i=10;i+)printf(%d,i);,int i=0;for(;i=10;i+)printf(%d,i);,int i=0;for(;i=10;printf(%d,i),i+);,int i=0;for(;i=10;)printf(%d,i);i+;,int i=0;for(;printf(%d,i),i+)if(i10)break;,int i=0;for(

15、;)if(i10)break;printf(%d,i);i+;,这样写正确吗还有更多吗,请大家思考,goto语句,是一种无条件转移语句,使用格式为:goto 标号;/在程序的某处有:标号:语句其中标号是一个有效的标识符,这个标识符加上一个“:”一起出现在函数内某处,执行goto语句后,程序将跳转到该标号处并执行其后的语句。标号必须与goto语句处于同一个函数中,但可以不在一个循环层中。通常goto语句与if条件语句连用,当满足某一条件时,程序跳到标号处运行。goto语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时,用goto语句则比较合理,29,用goto构成循环:求1+

16、2+.+100的值,30,#include main()int i,sum=0;i=1;loop:if(i=100)sum+=i;i+;goto loop;;printf(%d,sum);,#include main()int i,sum=0;i=1;loop:sum+=i;i+;if(i100)goto loop;;printf(%d,sum);,break语句和continue语句,break语句功能:在循环语句和switch语句中,终止并跳出循环体说明:只能终止并跳出最近一层的结构只能用于循环语句和switch语句continue语句功能:结束本次循环,跳过循环体中尚未执行的语句,进行下

17、一次是否执行循环体的判断说明:仅用于循环语句中,31,程序分析:,32,#include/1void main()int i,x=0;for(i=0;i=10;i+)x+;break;x+=10;printf(x=%dn,x);,#include/3void main()int i,x=0;for(i=0;i=10;i+)x+;if(i=5)goto L1;x=x+10;L1:printf(x=%dn,x);,#include/2void main()int i,x=0;for(i=0;i=10;i+)x+;continue;x+=10;printf(x=%dn,x);,x=1,x=11,x=

18、56,程序举例:一张厚0.5mm的纸对折多少次可以达到珠峰高度(8848m)?,33,#includevoid main()int n=0;float h=0.5;while(1)n+;h=2*h;if(h8848000)continue;printf(n=%dn,n);break;,for(;h8848000;h=h*2,n+);printf(n=%dn,n);,while(1)n+;h=h*2;if(h=8848000)break;printf(n=%dn,n);,for(;h=h*2,n+)if(h8848000)continue;goto L1;L1:printf(n=%dn,n);,

19、循环部分还能怎样改动,循环的嵌套,一个循环体内又包含另一个完整的循环结构时,就称为循环的嵌套内循环语句就是一条语句!比如,以下三种嵌套:,34,(1)while()while().,(2)while()do while();.,举例:输出下面的九九乘法表,1*1=11*2=2 2*2=41*3=3 2*3=6 3*3=9 1*9=9 2*9=18 9*9=81,35,#includevoid main()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%3d*%d=%2d,j,i,i*j);printf(n);,#includevoid main()i

20、nt i=1,j;while(i=9)j=1;while(j=i)printf(%3d*%d=%2d,j,i,i*j);j+;printf(n);i+;,例:循环变量的变化,36,main()int i,j,k;printf(“i j kn”);printf(“-n”);for(i=0;i2;i+)for(j=0;j2;j+)for(k=0;k2;k+)printf(“%d%d%dn,i,j,k);,i j k0 0 00 0 10 1 00 1 10 01 0 11 01 1 1,次数01234567,printf语句会执行多少次?各次的i,j,k值是什么?,穷举法与迭代法,在循环算法中,穷

21、举与迭代是两类具有代表性的基本应用:穷举法基本思想:对问题的所有可能状态一一测试,直到找到解或将全部可能状态都测试到为止。如:百钱买百鸡问题:一百元买一百只鸡,五元钱买一只公鸡,三元钱买一只母鸡,一元钱买三只小鸡,一百元钱能买几只公鸡,几只母鸡,几只小鸡?搬砖问题:36块砖,36人搬,男搬4,女搬3,两个小孩抬一砖。要求一次全搬完。问男、女、小孩各多少人?爱因斯坦阶梯问题:设有一阶梯,每步跨2阶,最后余1阶;每步跨3阶,最后余2阶;每步跨5阶,最后余4阶;每步跨6阶,最后余5阶;每步跨7阶,正好到阶梯顶。问共有多少台阶?.,37,穷举法与迭代法,迭代法基本思想:迭代是一个不断用新值取代变量的旧

22、值,或由旧值推出变量的新值的过程。如:求Fibonacci数列(兔子繁殖问题)1,1,2,3,5,8.求n!问题。迭代法求方程的根问题如牛顿迭代法和二分法.,38,例1、下面的if语句正确吗,给出你的说明,(1)if(xy);(2)if(xy)m=x(3)if(xy);else m=y;else m=y;else m=y;(4)if(x=1)m=x;(5)if(xy)else m=y;else m=y;,40,例2:修改程序,计算 1+1/1*2+1/2*3+1/n*(n+1)的值,最后一项值小于0.001,41,#includevoid main()int m=n=1;float s=1;w

23、hile(1/m0.001)n+;m=m*n;s=s+1/m;printf(s=%dn,s);,定义错误:m=1,n=1;,条件错误:1./m=.001,是n!?:m=n*(n-1),整除?:1./m,格式错误:f,例3:求解一元二次议程:ax2+bx+c=0(教材P96),另外一种分法:a=0b=0c=0:方程无穷解;c0:方程无解;b0:有一个解-c/b;a0b2-4ac=0,方程有两个相等的实数根;b2-4ac0,方程有两个不等的实数根;b2-4ac0,方程有两个复数根;,42,按这个方案或者自己的方案修改课本上的程序,对书上所分的各种情况有没有异议,例4:求Fibonacci数列前20

24、个数,#includevoid main()int i,f1,f2;f1=1;f2=1;for(i=1;i=10;i+)printf(%10d%10d,f1,f2);if(i%2=0)printf(n);f1=f1+f2;f2=f2+f1;,43,运行结果:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765,例5:百钱买百鸡问题,main()int cock,hen,chicken;cock=1;printf(“cock hen chickenn”);while(cock=19)hen=1;while(hen=3

25、3)chicken=100-cock-hen;if(5*cock+3*hen+chicken/3.0=100)printf(“%5d%5d%5dn”,cock,hen,chicken);hen+;cock+;,44,百钱买百鸡问题分析:cock公鸡取值范围为:119hen母鸡取值范围为:133chicken小鸡取值范围为:100-cock-hen,例6:判断m是否素数,#include#include main()int m,i,k;scanf(%d,45,素数(质数):大于1,并且除1和自身之外不能被其他自然数整除的整数:2,3,5,7.,为什么只要验证到平方根处,练习:,求100以内的素数因式分解求1000以内的完美数(等于除自身外的因子之和的数),如61+2+3用二分法求方程2x3-4x2+3x-6=0的一个近似根(迭代前后两个数的差距小于1e-6)输出右边的图形:,46,本章到此结束,大家有什么问题和建议?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号