版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章结构化程序设计
3.1程序设计概述3.2C++语句3.3顺序结构3.4选择结构3.5循环结构3.6其它控制语句3.7应用举例3.1程序设计概述程序是计算机指令的序列,是用计算机语言来编写的,计算机语言通常被称为“程序语言”。
程序=数据结构+算法对于程序设计的初学者来说,首先要学会设计一个正确的程序。一个正确的程序通常包括:书写正确与结果正确两个含义。除此之外结构化程度高、可读性好、可靠性高、便于调试等。通常一个简单的程序设计一般包含以下几个步骤:1.分析问题,明确要求,建立数学模型。2.确定数据结构和算法(有穷性、确定性、可执行性、有零个或多个输入、有一个或多个输出)。,还应追求高质量:3.选择语言,编制程序。4.调试程序。5.整理文档,编制说明。程序设计的基本目标是用算法对问题的原始数据进行处理,从而获得所期望的效果。要做到这一点,就必须要掌握正确的程序设计方法和技术。结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。该方法包括:1.只采用顺序结构、选择结构和循环结构这三种基本的程序控制结构来编制程序,从而使程序具有“单入口和单出口”良好的结构;2.程序设计自顶向下;3.用结构化流程图表示算法。3.2C++语句
1.声明语句
声明语句又称说明语句,它可以用来对程序中出现的各种名称进行声明。这些名称通常是表示变量、常量、函数、结构、类、对象等实际的标识符。如:charch;//声明和定义char型变量
intcount=1;//声明、定义和初始化int型变量constdoublePI=3.14159;//声明、定义和初始化double型变量
形式:表达式;例如:i++;sum=a+b; cout<<a<<b<<endl;3.控制语句
控制语句用于完成一定的控制功能,以实现程序的各种结构方式。C++语言有9种控制语句,可分为三类:
(1)条件判断语句:if语句、switch语句
(2)转向语句:break语句、continue语句、goto语句、return语句
(3)循环语句:for语句、while语句、do-while语句2.表达式语句4.空语句如:for(m=0;m<1000;m++);形式:
;
作用:当程序中某个位置在语法上需要一条语句,而在语义上又不要求执行任何动作时,可放上一条空语句。一般适用于在循环语句中做空循环体;5.复合语句
例如:if(x==0){cout<<a;cout<<b;}形式:{ [变量定义]语句组 }作用:当程序中某个位置在语法上只允许一条语句,而在语义上要执行多条语句才能完成某个操作时,需要使用复合语句。常出现在选择、循环语句中3.3顺序结构
顺序结构:按照语句出现的先后顺序依次执行。语句1语句2其中的语句可以是输入/出、表达式、空或复合等【例3.1】输入两个整数给变量x和y,然后交换x和y的值。例题任意2个整数交换#include"iostream.h"voidmain(){intx,y,t;cout<<"输入xy"<<endl;cin>>x>>y;t=x;x=y;y=t;cout<<x<<y<<endl;}3.4选择结构
选择结构是根据条件的值来判断程序的流向。C++中,提供两类选择控制语句:if语句,实现n分支,要求n个表达式;switch语句,实现多分支;只用1个表达式。3.4.1if语句if语句的三种形式:
形式1:if(表达式)语句
作用:当表达式为真(非0)时,执行表达式后面的语句,否则绕过该语句,而执行其后面的语句。#include"iostream.h"voidmain(){intx,y,t;cout<<"输入xy"<<endl;cin>>x>>y;if(x<y){t=x;x=y;y=t;}//x与y交换cout<<x<<">"<<y<<endl;}程序:【例3.2】已知两个数x和y,比较它们的大小,使得x大于y。if(x<y){t=x;x=y;y=t;} cout<<x<<y;形式2:if(表达式)
语句1else
语句2
作用:当表达式为真(非0)时,执行语句1,否则执行语句2。【例3.3】计算分段函数:if(x)y=sin(x)+sqrt(x*x+1);elsey=cos(x)-x*x+3*x;形式3:if(表达式1)
语句1elseif(表达式2)
语句2┆elseif(表达式n)
语句nelse
语句n+1作用:当表达式1的值为true时,执行语句1;否则判断当表达式2的值为true时执行语句2;依此类推,若表达式的值都为false,则执行语句n+1。【例3.4】已知成绩mark,要求显示对应五级制的评定,评定条件:if(mark>=90)cout<<"优"; elseif(80<=mark&&mark<90)cout<<"良"; elseif(70<=mark&&mark<80)cout<<"中";elseif(60<=mark&&mark<70)cout<<"及格"; else cout<<"不及格"; #分析下面程序段是否正确:注意:①
不管有几个分支,程序执行一个分支后,其余分支不再执行。②elseif不能写成elseif。③当多分支中有多个表达式同时满足,则只执行第一个与之匹配的语句。if(mark>=60)cout<<"及格";elseif(mark>=70)cout<<"中";elseif(mark>=80)cout<<"良";elseif(mark>=90)cout<<"优";elsecout<<"不及格";if语句的嵌套形式:
if语句的嵌套是指if或else后面的语句本身又是一个if语句。
if(表达式1)
if(表达式2)语句1else语句2注意:为了增强程序的可读性,建议采用锯齿型的书写形式。
else始终与它上面的最近的if语句配对,而这个if语句又没有其它的else与之匹配。如何使之与第一个if配对?如:if(表达式1)
if(表达式11)语句11else语句12else语句2已知x,y,z三个数,使得x>y>z。可用一个IF语句和一个嵌套的IF语句实现。if(a>b){if(a>c)max=a;elsemax=c;}else{if(b>c)max=b;elsemax=c;}3.4.2switch语句执行顺序:当表达式的值与某个常量表达式的值相等时,则执行该常量表达式后面相应的语句,若使用了break,则执行完该语句后便退出switch语句;否则,还要依次执行其后面的各条语句。若找不到相匹配的常量表达式,则执行default后面的语句。必须为整型或字符型或枚举型形式:switch(表达式){case常量表达式1:语句组1;[break;]case常量表达式2:语句组2;[break;]
┆case常量表达式n:语句组n;[break;][default:语句组n+1]}#include<iostream.h>voidmain(){chargrade;cout<<"Inputgradeofscore(a_d):"<<endl;cin>>grade;switch(grade){case'a':cout<<"85__100\n";case'b':cout<<"70__84\n";case'c':cout<<"60__69\n";case'd':cout<<"<60\n";default:cout<<"error\n";}}。根据考试的等级打印百分制分数程序执行结果,必须加break几点说明
(1)default语句是可缺省的。(2)switch后面括号中的表达式只能是整型、字符型或枚举型表达式。(3)在各个分支中的break语句起着退出switch语句的作用。(4)case语句起标号的作用。标号不能重名。(5)可以使多个case语句共用一组语句序列。(6)各个case(包括default)语句的出现次序可以任意。(7)每个case语句中不必用{},而整体的switch结构一定要写一对花括号{}。(8)switch结构也可以嵌套。根据考试成绩的等级打印出百分制分数,允许输入大写或小写字母。
#include<iostream.h>voidmain(){chargrade;cout<<"Inputgradeofscore(a_dorA__D):"<<endl;cin>>grade;switch(grade){case'a':case'A':cout<<"85__100\n";break;case'b':case'B':cout<<"70__84\n";break;case'c':case'C':cout<<"60__69\n";break;case'd':case'D':cout<<"<60\n";break;default:cout<<"error\n";}}switch结构嵌套嵌套结构的case标号与外层无关switch(i){case1:......case2:switch(j){case1:......case2:............}case3:......}for语句for(循环变量赋初值;循环结束条件;循环变量增值)for(表达式1;表达式2;表达式3)语句具体来说,for语句的执行过程如下: (1)先求解表达式1; (2)求解表达式2,若为0(假),则结束循环,并转到(5); (3)若表达式2为非0(真),则执行循环体,然后求解表达式3; (4)转回(2); (5)执行for语句下面的一个语句。例题求1+2+3+…+100的和#include<iostream>voidmain(){inti,sum=0;for(i=1,i<=100;i++)sum=sum+i;cout<<“sum=”<<sum<<endl;}注意:for语句中的三个表达式可以部分省略或全部省略,但;不能省略,若省略表达式2,则表示循环条件为真。练习编写1+3+5+…99编写1*2*3*…100(注意定义变量类型double)While语句while(表达式){语句组1}
a=3;while(a<100)a=a+5;cout<<“a=“<<a;当循环语句超过一条时,要用{}将语句组组合在一起。求1+2+3+……+100voidmain(){inti=1,sum=0;//定义变量,初始化while(i<=100)//构造循环{sum=sum+i;//循环体,多次执行要用{}】i=i+1;}cout<<“sum=”<<sum<<endl;//输出结果}注意:
1、循环体如果为一个以上的语句,用{}括起。2、循环体内或表达式中必须有使循环结束的条件,即一定有一个循环变量。for与while的区别for在语法上更为简洁,适合用于循环次数已定的情况。while比较适合用于循环次数不定的时候。一般循环次数已定的情况下它们之间可以互相转换用。do-while语句do语句while(表达式);求1+2+3+….+100voidmain(){inti=1,sum=0;//定义变量,初始化do//构造循环{sum=sum+i;//循环体,多次执行i=i+1;}while(i<=100);cout<<“sum=”<<sum<<endl;//输出结果}注意:do—while首先执行循环体,然后再判断表达式,至少执行一次循环体。当第一次循环表达式的值为真时,while与do—while的结果完全一样,否则结果不相同。do-while和whiles=7;dos-=2;while(s==0);cout<<“s=”<<s<<endl;5s=7;while(s==0)s-=2;cout<<“s=”<<s<<endl;7其它控制语句
【例3.10】break和continue语句的区别
for(m=20;m>0;m--){if(m%6==0)break;cout<<m<<““;}18
for(m=20;m>0;m--){if(m%6==0)continue;cout<<m<<“”;}
1.break语句break语句有两个作用:用于switch语句中,保证多分支情况的正确执行;用于循环语句中,强制终止本层循环(跳出本层循环)。2.continue语句continue语句的作用:绕过本次循环,强行进入下一次循环。即它只能跳过循环体中continue后面的语句。注意:
continue只能用于循环语句goto语句goto语句的语法格式为: goto标号; 其中,标号是一个用户自定义的标识符,它的命名规则与变量名的命名规则相同。定义标号时,由一个标识符后面跟一个冒号组成。标号的位置自由,可位于goto语句的前面,也可位于goto语句的后面,但必须与goto语句共处于同一函数中。 goto语句的作用是:结束当前正在执行的循环(for、while、do…while)或多路分支(switch)程序结构,转而执行标号所标识的语句。 例如:求1加到10的总和。 i=1;sum=0; loop: sum+=i++; if(i<=10) gotoloop; cout<<“thesumis”<<sum<<endl; 滥用goto语句将使程序流程无规则、可读性差,现代程序设计方法主张限制使用goto语句。用goto语句实现的循环完全可用while或for循环来表示。一般地,goto语句只在一个地方有使用价值:当要从多重循环深处直接跳转到循环之外时,如果用break语句,将要用多次,而且可读性并不好,这时goto可以发挥作用。
1.最大公约数
辗转相除法while((r=m%n)!=0){m=n;n=r;}cout<<n;
mnr1252521210用辗转相除法求两自然数的最大公约数。算法思想:(1)对于已知两数m,n,使得m>n(2)m除以n得余数r(3)若r=0,则n为最大公约数,结束;否则执行(4)(4)n→
m,r
→
n,再重复执行(2)应用程序举例#include"iostream.h"voidmain() {intm,n,t,r;cout<<"请输入mn:"<<endl;cin>>m>>n;if(m<n){t=m;m=n;n=t;} while((r=m%n)!=0){m=n;n=r;}cout<<“最大公约数为:"<<n<<endl;}程序:
2.判断一个数是素数#include<iostream.h>intmain(){longm;cout<<"pleaseinputanumber:\n“cin>>minti;for(i=2;i<m;i++)//找m的因数if(m%i==0){cout<<m<<"isn’tprime.\n”;return1;}cout<<m<<"isprime.\n";}把if语句放在大括弧中会有什么其情况发生#include<iostream.h>voidmain(){longm;cout<<"pleaseinputanumber:\n";cin>>m;inti;for(i=2;i<m;i++)//找m的因数if(m%i==0)break;if(m==i)//判断m是否被小于m的数整除cout<<m<<"isprime.\n";elsecout<<m<<"isn'tprime.\n";}如果一个数很大用这种方法速度会变慢,改进使用平方根用break语句实现3计算并输出2~100之间的素数之和。#include<iostream>usingnamespacestd;
intmain(){ ints=0; inti,j; for(i=2;i<=100;i++)//产生2~100之间的数i { for(j=2;j<=i-1;j++)//产生除了1和i以外的数 if(i%j==0)break;//发现i的因子 if(j==i)//2~i-1之间没有发现因子,则i是素数 s=s+i;//累加素数 }
cout<<"2到100之间的素数之和为:"<<s<<endl;
return0;}如果要显示所有的素数4输出如下图形【程序分析】这是一类图形输出的例子。设计这样的程序需要抓住内外循环的关联。其中需要找到以下规律:l
星号前的空格个数与行数之间的关系l
星号个数与行数之间的关系对于本题,行号i从1开始循环到5,规律如下:l
星号前的空格个数为5-i个l
星号个数为2*i-1个#include<iostream>usingnamespacestd;voidmain(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=5-i;j++) cout<<"";for(j=1;j<=2*i-1;j++) cout<<"*"; cout<<endl;}}5计算s=1×2×3×4×5×6×7×8程序如下:#include<iostream>usingnamespacestd;
intmain(){ doublet=1; for(inti=1;i<=8;i++) t=t*i;
cout<<"8!="<<t<<endl;return0;}6编程求1!+2!+3!+…+15!
#include<iostream.h>voidmain(){doublesum=0,t=1;for(inti=1;i<=15;i++){t*=i;sum+=t;}cout<<"sum="<<sum<<endl;}7.编程求水仙花数,水仙花数是一个三位数,其各位数字立方和等于该数本身,如153=13+53+33#include<iostream.h>voidmain(){for(inti=1;i<=9;i++)for(intj=0;j<=9;j++)for(intk=0;k<=9;k++)if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)cout<<(100*i+10*j+k)<<"是水仙花数.\n";}8编程求1000之内的所有“完数”,所谓一个完数是指一个数恰好等于它的因子之和。6=1+2+3#include<iostream.h>voidmain(){for(inti=1;i<1000;i+
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年江西师范高等专科学校高职单招语文2018-2024历年参考题库频考点含答案解析
- 2025年武汉电力职业技术学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 航空运输合同集锦
- 人工智能算法开发与应用合同
- 幼儿园植树节策划方案2021【五篇】
- 桉树造林工程承包合同书
- 新企业之间借款合同范本
- 采购法务与合同管理1
- 咨询培训服务合同模板
- 校车租赁合同书
- 2025-2030年中国清真食品行业运行状况及投资发展前景预测报告
- 广东省茂名市电白区2024-2025学年七年级上学期期末质量监测生物学试卷(含答案)
- 《教育强国建设规划纲要(2024-2035年)》全文
- 2025年河南洛阳市孟津区引进研究生学历人才50人历年高频重点提升(共500题)附带答案详解
- 临床提高脓毒性休克患者1h集束化措施落实率PDCA品管圈
- 汽车车身密封条设计指南
- 2024建安杯信息通信建设行业安全竞赛题库(试题含答案)
- JBT 14727-2023 滚动轴承 零件黑色氧化处理 技术规范 (正式版)
- 术后谵妄及护理
- 医药行业的市场营销与渠道拓展
- 压力管道安全技术监察规程-工业管道
评论
0/150
提交评论