《VisualC程序设计》第3章.ppt

上传人:小飞机 文档编号:5896223 上传时间:2023-08-31 格式:PPT 页数:35 大小:240.50KB
返回 下载 相关 举报
《VisualC程序设计》第3章.ppt_第1页
第1页 / 共35页
《VisualC程序设计》第3章.ppt_第2页
第2页 / 共35页
《VisualC程序设计》第3章.ppt_第3页
第3页 / 共35页
《VisualC程序设计》第3章.ppt_第4页
第4页 / 共35页
《VisualC程序设计》第3章.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《《VisualC程序设计》第3章.ppt》由会员分享,可在线阅读,更多相关《《VisualC程序设计》第3章.ppt(35页珍藏版)》请在三一办公上搜索。

1、第3章 结构化程序设计,3.1 程序设计概述 3.2 C+语句3.3 顺序结构3.4 选择结构 3.5 循环结构 3.6 其它控制语句 3.7 应用举例,3.1 程序设计概述,程序是计算机指令的序列,是用计算机语言来编写的,计算机语言通常被称为“程序语言”。程序=数据结构+算法 对于程序设计的初学者来说,首先要学会设计一个正确的程序。一个正确的程序通常包括:书写正确与结果正确两个含义。除此之外,还应追求高质量:结构化程度高、可读性好、可靠性高、便于调试等。通常一个简单的程序设计一般包含以下几个步骤:1分析问题,明确要求,建立数学模型。2确定数据结构和算法(有穷性、确定性、可执行性、有零个或多个

2、输入、有一个或多个输出)。3选择语言,编制程序。4调试程序。5整理文档,编制说明。,程序设计的基本目标是用算法对问题的原始数据进行处理,从而获得所期望的效果。要做到这一点,就必须要掌握正确的程序设计方法和技术。结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。该方法包括:1只采用顺序结构、选择结构和循环结构这三种基本的程序控制结构来编制程序,从而使程序具有“单入口和单出口”良好的结构;2程序设计自顶向下;3用结构化流程图表示算法。,3.2 C+语句,1.声明语句,声明语句又称说明语句,它可以用来对程序中出现的各种名称进行声明。这些名称通常是表示变量、常量、函数、结构、类、对象等实际

3、的标识符。如:char ch;/声明和定义char型变量 int count=1;/声明、定义和初始化int型变量const double PI=3.14159;/声明、定义和初始化double型变量 C+语言规定:一个实体的定义只能出现一次,而其声明却可以出现多次。但同一实体的多个声明必须在类型上保持一致。,形式:表达式;例如:i+;sum=a+b;coutabendl;,3.控制语句 控制语句用于完成一定的控制功能,以实现程序的各种结构方式。C+语言有9种控制语句,可分为三类:(1)条件判断语句:if语句、switch语句(2)转向语句:break语句、continue语句、goto语句、

4、return语句(3)循环语句:for语句、while语句、do-while语句,2.表达式语句,4.空语句,如:for(m=0;m1000;m+);,形式:;作用:当程序中某个位置在语法上需要一条语句,而在语义上又不 要求执行任何动作时,可放上一条空语句。一般适用于在循环语句中做空循环体;,5.复合语句,例如:if(x=0)couta;coutb;,形式:变量定义 语句组作用:当程序中某个位置在语法上只允许一条语句,而在语义上要执行多条语句才能完成某个操作时,需要使用复合语句。,常出现在选择、循环语句中,3.3 顺序结构,顺序结构:按照语句出现的先后顺序依次执行。,语句1,语句2,其中的语句

5、可以是输入/出、表达式、空或复合等,【例3.1】输入两个整数给变量x和y,然后交换x和y的值。,3.4 选择结构,选择结构是根据条件的值来判断程序的流向。C+中,提供两类选择控制语句:if语句,实现n分支,要求n个表达式;switch语句,实现多分支;只用1个表达式。,3.4.1 if 语句,if语句的三种形式:形式1:if(表达式)语句 作用:当表达式为真(非0)时,执行表达式后面的语句,否则绕过该语句,而执行其后面的语句。,#include iostream.hvoid main()int x,y,t;coutxy;if(xyendl;,程序:,【例3.2】已知两个数x和y,比较它们的大小

6、,使得x大于y。if(xy)t=x;x=y;y=t;coutxy;,形式2:if(表达式)语句1 else 语句2,作用:当表达式为真(非0)时,执行语句1,否则执行语句2。,【例3.3】计算分段函数:,if(x)y=sin(x)+sqrt(x*x+1);else y=cos(x)x*x+3*x;,要使max存放x、y中大者,min存放小者,分析下面程序段正确否?,if(xy)max=x;min=y;else max=y;min=x;,形式3:if(表达式1)语句1 else if(表达式2)语句2 else if(表达式n)语句n else 语句n+1作用:当表达式1的值为true时,执行语

7、句1;否则判断当表达式2的值为true时执行语句2;依此类推,若表达式的值都为false,则执行语句n+1。,【例3.4】已知成绩mark,要求显示对应五级制的评定,评定条件:,if(mark=90)cout 优;else if(80=mark,分析下面程序段是否正确:,注意:不管有几个分支,程序执行一个分支后,其余分支不再执行。else if不能写成elseif。当多分支中有多个表达式同时满足,则只执行第一个与之匹配的语句。,if(mark=60)cout=70)cout=80)cout=90)cout 优;else cout 不及格;,if语句的嵌套形式:,if语句的嵌套是指if或else

8、后面的语句本身又是一个if语句。,if(表达式1)if(表达式2)语句1 else 语句2,注意:为了增强程序的可读性,建议采用锯齿型的书写形式。else始终与它上面的最近的if语句配对,而这个if语句又没有其它的else与之匹配。,如何使之与第一个if配对?,如:if(表达式1)if(表达式11)语句11 else 语句12 else 语句2,【例3.5】已知x,y,z三个数,使得xyz。可用一个IF语句和一个嵌套的IF语句实现。,if(xy)t=x;x=y;y=t;if(yz)t=y;y=z;z=t;if(xy)t=x;x=y;y=t;,3.4.2 switch语句,执行顺序:当表达式的值

9、与某个常量表达式的值相等时,则执行该常量表达式后面相应的语句,若使用了break,则执行完该语句后便退出switch语句;否则,还要依次执行其后面的各条语句。若找不到相匹配的常量表达式,则执行default后面的语句。,必须为整型或字符型,形式:switch(表达式)case 常量表达式1:语句组1;break;case 常量表达式2:语句组2;break;case 常量表达式n:语句组n;break;default:语句组n+1,2a+1(1=a2)【例3.6】用switch结构求分段函数b=a2-3(2=a4)a 其它,共用同一个语句组:switch(int)a)case 1:b=2*a+

10、1;break;case 2:case 3:b=a*a-3;break;default:b=a;,错误:switch(int)a)case a=1,思考:若省去break语句,情况会怎样?,3.5 循环结构,C+语言提供了三种循环语句,流程图如下:while,while(表达式)语句,do 语句while(表达式);,for(表达式1;表达式2;表达式3)语句,do-while,for,【例3.7】用上述三种循环语句求,while语句:,n=1;s=0;while(n=100)s=s+n;n=n+1;,n=1;s=0;do s=s+n;n=n+1;while(n=100);,do-while语

11、句:,for语句:,for(n=1,s=0;n=100;n+)s=s+n;,【例3.8】求下列级数的前m项和,要求其误差小于0.00001。,分析:级数的通项为 xm/m!,第i项ti与第i-1项 ti-1之间存在如下关系:ti=ti-1*x/i,int i(1);float t(1),e(0),x;cinx;while(t1e-5)e+=t;t=t*x/i;i+;,int i(1);float t(1),e(0),x;cinx;for(;t1e-5;)e+=t;t=t*x/i;i+;,for(i=1,t=1,e=0;t1e-5;e+=t,t=t*x/i,i+);,分号不能省略,空语句,3.5

12、.3 循环的嵌套,循环的嵌套:循环体内包含另一个完整的循环结构。三种循环语句皆可以相互嵌套。【例3.9】打印九九乘法表,#include iostream.hvoid main()coutt 九九乘法表endl;coutt-endl;for(int i=1;i=9;i+)for(int j=1;j=9;j+)coutij=i*jt;coutendl;,程序:,思考:打印上三角或下三角程序如何改动?,3.6 其它控制语句,【例3.10】break 和 continue 语句的区别,for(m=20;m0;m-)if(m%6=0)break;coutm;,for(m=20;m0;m-)if(m%6

13、=0)continue;coutm;,1.break语句break语句有两个作用:用于switch语句中,保证多分支情况的正确执行;用于循环语句中,强制终止本层循环(跳出本层循环)。2.continue语句continue语句的作用:绕过本次循环,强行进入下一次循环。即它只能跳过循环体中continue后面的语句。注意:continue只能用于循环语句,3.7 应用举例,1.求最大值(或最小值)【例3.11】从键盘输入一组数,求这组数中的最大值。,cinm;max=m;/第一个数假设为最大数 while(cinm,m!=0)if(mmax)max=m;,max=0;/设一个较小的数为最大值的初

14、值 for(int i=0;im;if(mmax)max=m;,以输入0作为结束,输入数的个数未知,输入数的个数已知,2.最大公约数,辗转相除法while(r=m%n)!=0)m=n;n=r;coutn;,辗转相减法 m=m-n mn n=n-m nm m、n为公约数 m=nwhile(m!=n)if(mn)m-=n;else n-=m;,m n r12 5 2 5 2 1 2 1 0,【例3.12】用辗转相除法求两自然数的最大公约数。算法思想:(1)对于已知两数m,n,使得mn(2)m除以n得余数r(3)若r=0,则n为最大公约数,结束;否则执行(4)(4)n m,r n,再重复执行(2),

15、#include iostream.hvoid main()int m,n,t,r;coutmn;if(mn)t=m;m=n;n=t;while(r=m%n)!=0)m=n;n=r;cout“最大公约数为:mendl;,程序:,【例3.13】求2100之间的素数,并以每行显示8个质数。质数:除1和它本身外,不能被其他任何一个整数整除的自然数。分析:(1)判别某数m是否为素数最简单的方法是:用i=2,3,m-1逐个判别m能否被j整除,只要有一个能整除,m不是素数,退出循环;若都不能整除,则m是素数。可进一步证明:若m不能被,3.质数,.for(i=2;m%i!=0;i+);if(i=m).,.k

16、=sqrt(m);for(i=2;ik).,中任一整数整除,则m为质数。(2)每行显示8个,只要对求得的质数计数,满8个换行。,程序:#include iostream.hvoid main()int m,i,countm(0);bool tag;for(m=2;m=100;m+)tag=false;/tag初值为false for(i=2;i=m-1;i+)if(m%i=0)tag=true;if(tag=false)/等价于 if(!tag)coutmt;countm+;if(countm%8=0)coutendl;,4.求部分级数和,t=x;while(fabs(t)=1e-5)sinx

17、+=t;t=-t*x*x/(i+1)*(i+2);i=i+2;,【例3.14】计算sin(x)的值,公式为:,当第n项的绝对值小于10-5时结束。分析:关键是找部分级数和的通项,如下表示:ti+2=-1*ti*x*x/(i+1)*(i+2)i=1,3,5,7,5.穷举法,【例3.15】百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现有100元钱要买100只鸡,列出所有可能的购鸡方案。分析:(1)设母鸡、公鸡、小鸡各为x、y、z只,列出方程为:x+y+y=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个整数解。(2)采用试凑法(也称为穷举法或枚举法)来实现,即

18、将可能出现的各种情况一一罗列测试,判断是否满足条件,采用循环结构来实现。,用三重循环来实现:for(x=0;x33;x+)for(y=0;y51;y+)for(z=0;z201;z+)if(3*x+2*y+0.5*z)=100),用二重循环来实现:for(x=0;x=33;x+)for(y=0;y=50;y+)z=100-x-y;if(3*x+2*y+0.5*z)=100)coutsetw(9)xsetw(9)ysetw(9)zendl;,5.递推法,“递推法”也称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复,每次重复都从旧值的基础上递推出新值,并由新值代替旧值。,【

19、例3.16】利用牛顿迭代法求方程,在x0附近的根的近似值。牛顿迭代公式为:,输入x0值,由公式求出x1,再由x1从公式求出x2,.,直到,时可视x n+1为方程f(x)=0在X0附近的,一个近似根,设为10-5。,x1=1;do x0=x1;x1=x0-(3*x0*x0*x0-4*x0*x0-5*x0+13)/(9*x0*x0-8*x0-5)while(fabs(x1-x0)1e-5);,思考:若迭代最高次数M后,即使达不到精度也要输出结果,程序该如何修改?,6.分类统计,int alpha(0),num(0),ch(0),word(0);while(c=getchar()!=EOF)/EOF

20、代表文本结束符,对应输入Ctrl+Z if(c=|c=t|c=n)word+;if(c=a,【例3.17】对输入一串字符,统计其中单词的个数、字母个数、数字个数。规定单词之间用一个空白符分开(空白符包括空格符、水平制表符、换行符)。以z表示输入结束。分析:(1)统计单词的个数,可通过统计空白符的个数得到。(2)由于标准输入流cin输入时会把空白符作为输入结束符,所以应使用getchar()函数逐一读取字符,该函数必须用”stdio.h”。,习题与实验,习题三 1.选择题在书本完成 2.三1、2、3、6 四 2、5、8、9实验3:顺序结构 1.掌握基本数据类型及常量、变量、运算符和表达式的使用。2.掌握Visual C+程序中输入/输出数据的基本方法。3.掌握编译预处理命令的使用。4.能阅读、分析、调试简单的程序。5.理解简单的C+程序结构,能设计简单的顺序结构程序。实验4:选择控制结构 1.熟练掌握关系及逻辑表达式在程序设计中的灵活运用。2.熟悉利用if语句的各种形式实现不同分支选择的方法。3.掌握使用switch语句,实现多分支选择的方法。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号