1、 程序是计算机指令的序列,是用计算机语言来编写程序是计算机指令的序列,是用计算机语言来编写的,计算机语言通常被称为的,计算机语言通常被称为“程序语言程序语言”。程序程序=数据结构数据结构+算法算法 对于程序设计的初学者来说,首先要学会设计一个正对于程序设计的初学者来说,首先要学会设计一个正确的程序。一个正确的程序通常包括:书写正确与结果确的程序。一个正确的程序通常包括:书写正确与结果正确两个含义。除此之外,还应追求高质量:结构化程正确两个含义。除此之外,还应追求高质量:结构化程度高、可读性好、可靠性高、便于调试等。度高、可读性好、可靠性高、便于调试等。通常一个简单的程序设计一般包含以下几个步骤
2、:通常一个简单的程序设计一般包含以下几个步骤:1分析问题,明确要求,建立数学模型。分析问题,明确要求,建立数学模型。2确定数据结构和算法确定数据结构和算法(有穷性、确定性、可执行性、有穷性、确定性、可执行性、有零个或多个输入、有一个或多个输出有零个或多个输入、有一个或多个输出)。3选择语言,编制程序。选择语言,编制程序。4调试程序。调试程序。5整理文档,编制说明。整理文档,编制说明。程序设计的基本目标是用算法对问题的原始数据进行程序设计的基本目标是用算法对问题的原始数据进行处理,从而获得所期望的效果。要做到这一点,就必须处理,从而获得所期望的效果。要做到这一点,就必须要掌握正确的程序设计方法和
3、技术。要掌握正确的程序设计方法和技术。结构化程序设计方法是公认的面向过程编程应遵循的结构化程序设计方法是公认的面向过程编程应遵循的基本方法和原则。该方法包括:基本方法和原则。该方法包括:1 1只采用顺序结构、选择结构和循环结构这三种基只采用顺序结构、选择结构和循环结构这三种基本的程序控制结构来编制程序,从而使程序具有本的程序控制结构来编制程序,从而使程序具有“单入单入口和单出口口和单出口”良好的结构;良好的结构;2 2程序设计自顶向下;程序设计自顶向下;3 3用结构化流程图表示算法。用结构化流程图表示算法。1.声明语句声明语句 声明语句又称说明语句,它可以用来对程序中出现的各种名称进行声明。这
4、些名称通常是表示变量、常量、函数、结构、类、对象等实际的标识符。如:char ch;/声明和定义char型变量 int count=1;/声明、定义和初始化int型变量const double PI=3.14159;/声明、定义和初始化double型变量 C+语言规定:一个实体的定义只能出现一次,而其声明却可以出现多次。但同一实体的多个声明必须在类型上保持一致。形式:形式:表达式;表达式;例如:例如:i+;sum=a+b;coutabendl;3.控制语句控制语句 控制语句用于完成一定的控制功能,以实现程序的各控制语句用于完成一定的控制功能,以实现程序的各种结构方式。种结构方式。C+语言有语言
5、有9种控制语句,可分为三类:种控制语句,可分为三类:(1)条件判断语句:条件判断语句:if语句、语句、switch语句语句 (2)转向语句:转向语句:break语句、语句、continue语句、语句、goto语句、语句、return语句语句 (3)循环语句:循环语句:for语句、语句、while语句、语句、do-while语句语句2.表达式语句表达式语句4.空语句空语句 如:如:for(m=0;m1000;m+);形式形式:;作用作用:当程序中某个位置在语法上需要一条语句,而在语当程序中某个位置在语法上需要一条语句,而在语义上又不义上又不 要求执行任何动作时,可放上一条空语句。要求执行任何动作
6、时,可放上一条空语句。一般适用于在循环语句中做空循环体;一般适用于在循环语句中做空循环体;5.复合语句复合语句 例如:例如:if(x=0)couta;coutb;形式:形式:变量定义变量定义 语句组语句组 作用:作用:当程序中某个位置在语法上只允许一条语句,而当程序中某个位置在语法上只允许一条语句,而在语义上要执行多条语句才能完成某个操作时,需要使在语义上要执行多条语句才能完成某个操作时,需要使用复合语句。用复合语句。常出现在选择、常出现在选择、循环语句中循环语句中顺序结构:按照语句出现的先后顺序依次执行。语句1语句2其中的语句可以是其中的语句可以是输入输入/出、表达式、出、表达式、空或复合等
7、空或复合等【例3.1】输入两个整数给变量x和y,然后交换x和y的值。选择结构是根据条件的值来判断程序的流向。选择结构是根据条件的值来判断程序的流向。C+中,中,提供两类选择控制语句提供两类选择控制语句:if语句,实现语句,实现n分支,要求分支,要求n个表达式个表达式;switch语句,实现多分支;只用语句,实现多分支;只用1个表达式。个表达式。3.4.1 if 语句语句 表达式 语句 false true if语句的三种形式语句的三种形式:形式形式1 1:if(表达式表达式)语句语句 作用:作用:当表达式为真当表达式为真(非非0)时,执时,执行表达式后面的语句行表达式后面的语句,否则绕过该语否
8、则绕过该语句,而执行其后面的语句。句,而执行其后面的语句。#include iostream.hvoid main()int x,y,t;cout输入输入 x yxy;if(xy)t=x;x=y;y=t;/x与与y交换交换 coutxyendl;程序:程序:【例例3.2】已知两个数已知两个数x和和y,比较它们的大小比较它们的大小,使得使得x大于大于y。if(xy)t=x;x=y;y=t;coutxy)max=x;min=y;else max=y;min=x;形式形式3:if(表达式表达式1)语句语句1 else if(表达式表达式2)语句语句2 else if(表达式表达式n)语句语句n el
9、se 语句语句n+1作用:作用:当表达式当表达式1的值为的值为true时,执行语句时,执行语句1;否则判断当;否则判断当表达式表达式2的值为的值为true时执行语句时执行语句2;依此类推,若表达式的;依此类推,若表达式的值都为值都为false,则执行语句,则执行语句n+1。【例例3.4】已知成绩已知成绩mark,要求显示对应五级制的评定,要求显示对应五级制的评定,评定条件:评定条件:if(mark=90)cout 优优;else if(80=mark&mark90)cout 良良;else if(70=mark&mark80)cout 中中;else if(60=mark&mark70)cou
10、t 及格及格;else cout=60)cout=70)cout=80)cout=90)cout 优优;else coutyz。可用一个可用一个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语句语句执行顺序:执行顺序:当表达式的值与某个常量表达式的值相等时,当表达式的值与某个常量表达式的值相等时,则执行该常量表达式后面相应的语句,若使用了则执行该常量表达式后面相应的语句,若使用了break,则则执行完该语句后便退出执行完该语句后便退出switch语句
11、;否则,还要依次执行语句;否则,还要依次执行其后面的各条语句。若找不到相匹配的常量表达式,则执其后面的各条语句。若找不到相匹配的常量表达式,则执行行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=a=1&a=2&a4:.defa
12、ult:b=a;思考:思考:若省去若省去break语句语句,情况会怎样?,情况会怎样?C+语言提供了三种循环语句,语言提供了三种循环语句,流程图如下:流程图如下:whilewhile(表达式表达式)语句语句do 语句语句while(表达式表达式);for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句do-whilefor【例例3.7】用上述三种循环语句求用上述三种循环语句求 while语句:1001nsnn=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语句:for语句:for(n
13、=1,s=0;nx;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.3 循环的嵌套循环的嵌套循环的嵌套:循环的嵌套:循环体内包含另一个完整的循环结构。循环体内包含另一个完整的循环结构。三种循环语句皆可以相互嵌套三种循环语句皆可以相互嵌套 。【例例3.9】打印九九乘法表打印九九乘法表#include iostream.hvoid main()coutt 九九乘法表九九
14、乘法表endl;coutt-endl;for(int i=1;i=9;i+)for(int j=1;j=9;j+)coutij=i*jt;cout0;m-)if(m%6=0)break;coutm0;m-)if(m%6=0)continue;coutmm;max=m;/第一个数假设为最大数 while(cinm,m!=0)if(mmax)max=m;max=0;/设一个较小的数为最大值的初值 for(int i=0;im;if(mmax)max=m;以输入0作为结束,输入数的个数未知 输入数的个数已知 2.最大公约数最大公约数 辗转相除法while(r=m%n)!=0)m=n;n=r;cout
15、n 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)#include iostream.hvoid main()int m,n,t,r;cout请输入请输入m n:mn;
16、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和它本身外,不能被其他任何一个整数整除的自然数。和它本身外,不能被其他任何一个整数整除的自然数。分析:分析:(1)判别某数判别某数m是否为素数最简单的方法是:用是否为素数最简单的方法是:用i=2,3,m-1逐逐个判别个判别m能否被能否被j整除,只要有一个能整除,整除,只要有一个能整除,m不是素数,退出循环;不是素数,退出循环;若都不能整除
17、,则若都不能整除,则m是素数。可进一步证明:若是素数。可进一步证明:若m不能被不能被3.质数质数 m2 .for(i=2;m%i!=0;i+);if(i=m).k=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+
18、)if(m%i=0)tag=true;if(tag=false)/等价于等价于 if(!tag)coutmt;countm+;if(countm%8=0)cout=1e-5)sinx+=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,75.穷举法穷举法【例例3.15】百元买百鸡问题。假定小鸡每只百元买百鸡问题。
19、假定小鸡每只5角,公鸡每角,公鸡每只只2元,母鸡每只元,母鸡每只3元。现有元。现有100元钱要买元钱要买100只鸡,列出只鸡,列出所有可能的购鸡方案。所有可能的购鸡方案。分析:分析:(1)设母鸡、公鸡、小鸡各为设母鸡、公鸡、小鸡各为x、y、z只,列出方程为:只,列出方程为:x+y+y=1003x+2y+0.5z=100三个未知数,两个方程,此题有若干个整数解。三个未知数,两个方程,此题有若干个整数解。(2)采用试凑法采用试凑法(也称为穷举法或枚举法也称为穷举法或枚举法)来实现,即将来实现,即将可能出现的各种情况一一罗列测试,判断是否满足条件,可能出现的各种情况一一罗列测试,判断是否满足条件,采
20、用循环结构来实现。采用循环结构来实现。用三重循环来实现用三重循环来实现:for(x=0;x33;x+)for(y=0;y51;y+)for(z=0;z201;z+)if(3*x+2*y+0.5*z)=100)&(x+y+z)=100)coutsetw(9)xsetw(9)ysetw(9)zendl;用二重循环来实现用二重循环来实现: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)z1e-5);思考思考:若迭代最高次数若迭代最高次数M后,即使达不到精度也要输出结果
21、后,即使达不到精度也要输出结果,程序该如何修改?程序该如何修改?6.分类统计分类统计int alpha(0),num(0),ch(0),word(0);while(c=getchar()!=EOF)/EOF代表文本结束符代表文本结束符,对应输入对应输入Ctrl+Z if(c=|c=t|c=n)word+;if(c=a&c=A&c=0&c=9)num+;else ch+;【例例3.17】对输入一串字符,统计其中单词的个数、字母个数、对输入一串字符,统计其中单词的个数、字母个数、数字个数。规定单词之间用一个空白符分开(空白符包括空格数字个数。规定单词之间用一个空白符分开(空白符包括空格符、水平制表
22、符、换行符)。以符、水平制表符、换行符)。以z表示输入结束。表示输入结束。分析:分析:(1)统计单词的个数,可通过统计空白符的个数得到。)统计单词的个数,可通过统计空白符的个数得到。(2)由于标准输入流)由于标准输入流cin输入时会把空白符作为输入结束符,输入时会把空白符作为输入结束符,所以应使用所以应使用getchar()函数逐一读取字符,该函数必须函数逐一读取字符,该函数必须用用”stdio.h”。习题三习题三 1.选择题在书本完成选择题在书本完成 2.三三1、2、3、6 四四 2、5、8、9实验实验3:顺序结构顺序结构 1.掌握基本数据类型及常量、变量、运算符和表达式的使用。掌握基本数据
23、类型及常量、变量、运算符和表达式的使用。2.掌握掌握Visual C+程序中输入程序中输入/输出数据的基本方法。输出数据的基本方法。3.掌握编译预处理命令的使用。掌握编译预处理命令的使用。4.能阅读、分析、调试简单的程序。能阅读、分析、调试简单的程序。5.理解简单的理解简单的C+程序结构,能设计简单的顺序结构程序。程序结构,能设计简单的顺序结构程序。实验实验4:选择控制结构选择控制结构 1.熟练掌握关系及逻辑表达式在程序设计中的灵活运用。熟练掌握关系及逻辑表达式在程序设计中的灵活运用。2.熟悉利用熟悉利用if语句的各种形式实现不同分支选择的方法。语句的各种形式实现不同分支选择的方法。3.掌握使用掌握使用switch语句,实现多分支选择的方法。语句,实现多分支选择的方法。