《《初步程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《初步程序设计》PPT课件.ppt(96页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、简单程序设计 C+程序的一些基本要素,如描述数据的变量,常量,描述运算的运算符,表达式等等,同学们也初步了解了C+程序的一个基本概貌,其实一个大型的,完整的,实用的C+程序结构,它应该是由若干个源程序文件若干个源程序文件组成的,而每个源程序可以由若干个函数若干个函数和预处理命令预处理命令,全局变量定义全局变量定义说明组成,而一个函数则是由数据定义数据定义和执行语句执行语句组成,在面向对象的程序设计中,则通过类的定义类的定义、封装封装、调用调用来实现程序功能。虽然有多个C+程序文件,但它们中只允许一个main()函数。一个面向过程的程序应包括以下两方面内容:(1)对数据的描述。在程序中要指定数据
2、的类型和数据的组织形式,即数据结构(data structure)。(2)对操作的描述。即操作步骤,也就是算法(algorithm)程序结构图#include using namespace std;int a=3;int main()float b;b=4.5;coutab;return 0;财务软件的结构 首先进行需求分析和总体设计,我们知道财务软件的目的是用计算机来代替手工进行会计,财务核算,所以程序流程和业务模式一定要遵循财政部的会计准则。总控程序 main.cpp 帐务处理报表管理工资核算成本核算固定资产设置科目凭证录入数据查询km.cpppz.cpplook.cpp团队,财务制度,
3、业务,数据库,大型项目的管理与组织经验语句 程序应该包括数据描述(由声明语句声明语句来实现)和数据操作(由执行语句执行语句来实现)。数据操作的任务是对已提供的数据进行加工。C+中最小的独立单位是语句(statement)。语句一般是用分号结束的(复合语句是以右花括号结束的)。C+语句可以分为以下4种:1.声明语句 如int a,b;在C+中,声明语句可以出现在函数中的任何行,即可以放在其他程序语句可以出现的地方.语句 2.执行语句 通知计算机完成一定的操作。执行语句包括:(1)控制语句,完成一定的控制功能。9种 if()else (条件语句)for()(循环语句)while()(循环语句)do
4、while()(循环语句)continue (结束本次循环语句)break (结束switch或循环语句)switch (多分支选择语句)goto (转向语句)return (从函数返回语句)语句 (2)函数和流对象调用语句。函数调用语句由一次函数调用加一个分号构成一个语句,例如 sort(x,y,z);/调用sort函数 coutxendl;/流对象调用语句 (3)表达式语句。由一个表达式加一个分号构成一个语句。最典型的是:由赋值表达式构成一个赋值语句。i=i+1 /是一个赋值表达式 i=i+1;/是一个赋值语句 3.空语句;4.复合语句 可以用 把一些语句括起来成为复合语句。z=x+y;c
5、outzendl;简单输入输出 C+的输出和输入是用“流”(stream)的方式实现的。下图表示C+通过流进行输入输出的过程。简单输入输出 cout语句的一般格式为 cout表达式1表达式2表达式n;在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。int a=5;char c=M;float x=16.62 cout a c x endl;cout “Output is complete!”变量1变量2变量n;在
6、用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节。如有 char c1,c2;int a;float b;cinc1c2ab;如果输入 1234 56.78 注意:34后面应该有空格以便和56.78分隔开。也可以按下面格式输入:1 2 34 56.78 由于空格作为数据间隔符,所以不能用cin输入.在组织输入流数据时,要仔细分析cin语句中变量的类型,按照相应的格式输入,否则容易出错。cin 与 cin.get()的区别(1)cin 例如:char c1,c2,c3;cinc1;/Acinc2c3;程序执行到A行时,等待用户输入数据。若输入:A b c 则 cin分别将字符A
7、、b、c赋给变量c1、c2、c3。cin 自动跳过输入的空白字符(包括空格,制表,backspace和回车等)。简单输入输出(2)cin.get()例如:char c1,c2,c3;cin.get(c1);/Bcin.get(c2);cin.get(c3);程序执行到B行时,若输入:A b 则执行结果是:字符A、空格、字符b分别赋给变量c1、c2、c3;输入行中仍保留回车符。cin.get()把从键盘上输入的所有字符,包括空白字符,都作为输入字符赋给字符变量 简单输入输出例子:char c1,c2,c3;cout”Input c1,c2,c3:”c1c2c3;/C cout”c1 is”c1t
8、 ”c2 is”c2t ”c3 is”c3endl;程序执行后首先输出:Input c1,c2,c3:然后暂停在C行等待数据输入,若此时输入:a b c 程序继续执行并输出结果:c1 is ac2 is bc3 is c可以看出,双引号中的的字符串常量照原样输出。简单输入输出请看下例:int i,j;float x,y;cout”Input i,j,x,y:”ij;cinxy;cout”i=”it”j=”jendl;cout”x+y=”x+yendl;若输入:10 20 4.5 8.6 则程序输出:i=10j=20 x+y=13.1输出时各数据间是无间隔的,因此应当有意输出一些间隔符 简单输入
9、输出 上面介绍的是使用cout和cin时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。需要注意的是:如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。举例:输出数值性数据。输入和输出格式控制double a=123.456789012345;/对a赋初值(1)couta;输出:123.456 (2)coutsetprecision(9)a;输出:123.456789 (3)coutsetprecision(6);恢复默认格式(精度为6)(4)coutsetiosflags(io
10、sscientific)a;输出:1.234568e+02int b=123456;/对b赋初值(1)coutb;输出:123456(2)couthexb;输出:1e240 (3)coutsetw(10)b,b;输出:123456,123456(4)coutsetfill(*)setw(10)b;输出:*123456输入和输出格式控制各行小数点对齐。double a=123.456,b=3.14159,c=-3214.67;coutsetiosflags(iosfixed);/浮点数以固定的小数位数coutsetiosflags(iosright)setprecision(2);coutset
11、w(10)aendl;coutsetw(10)bendl;coutsetw(10)cendl;输出如下:123.46 (字段宽度为10,右对齐,取两位小数)3.14 -3214.67 先统一设置取两位小数、右对齐。这些设置对其后的输出均有效(除非重新设置),而setw只对其后一个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。输入和输出格式控制程序结构 C+语言中的语句形式虽然不多,但是这些语句足以构成结构化程序设计的三种最基本结构,这三种的基本结构为:A.顺序结构顺序结构:是指语句是按先后顺序来执行,一 条接着一条由上到下执行.B.选择结构选择结构:是根据给定的条件进行判断,
12、若条 件成立执行某些语句,不成立则执行其他一 些语句,也可以通过多条不同的条件来执行 多个不同的语句块 C.循环结构循环结构:是根据循环条件反复执行某些语 句,直到条件不成立顺序执行例子:输入三角形的边长,求三角形面积。我们首先假设三边长为a,b,c,那么根据数学知识,我们得知三角形的面积为 area=sqrt(s(s-a)(s-b)(s-c)其中 s=(a+b+c)/2#include#include void main()float a,b,c,s,area;cin a b c;s=(a+b+c)/2;area=sqrt(s(s-a)(s-b)(s-c);cout“其面积为:”areaen
13、dl;选择结构 “关系运算”在逻辑运算中是比较简单的一种类型,“关系运算”实际上就是“比较运算”,比较两个值的结果,数值比较其值大小,而字符比较按ASCII码值大小,比较的结果为“真”,在C+语言中以1表示,“假”就用0表示,如:a 1000;该关系不成立,其值为0 a!=A;该关系成立,其值为1 其中,!=都是关系运算符,关系运算符两边可以是常量,也可以是变量,如:a 3;如果整形变量a=5,那么该关系成立,其值为 1,如果整形变量a=1,那么该关系不成立,其值为 01.关系运算符 C+提供了6种关系运算符(双目运算符):、=、=、=、!=优先级:高于赋值运算符,低于算术运算符内部:、=、=
14、四种比=、!=两种要高如:ca+b c(a+b)ab!=c (ab)!=c a=bc a=(bc a=(bc)关系运算符和关系表达式2.关系表达式 用关系运算符将两个表达式连接起来的式子。表达式可以是算术表达式,关系表达式,逻辑表达式,赋值表达式或字符表达式.其结果值为1(代表逻辑真)或0(代表逻辑假)。如:a+b100 (a=3)(b=5)a b (ab)(bc)a=b=c6-2 -3-2-1 (如果 a=1,b=2,c=3,d=4,上面结果?)关系运算符和关系表达式逻辑变量和常量 C+增加了逻辑型数据。逻辑型常量只有两个,即false(假)和true(真)。逻辑型变量要用类型标识符bool
15、来定义,它的值只能是true和false之一。如 bool found,flag=false;found=true;/将逻辑常量true赋给found 由于逻辑变量是用关键字bool来定义的,因此又称为布尔变量。设立逻辑类型的目的是为了看程序时直观易懂。在编译系统处理逻辑型数据时,将false处理为0,将true处理为1。因此,逻辑型数据可以与数值型数据进行算术运算。如果将一个非零的整数赋给逻辑型变量,则按“真”处理,如 flag=123;/赋值后flag的值为true coutflag;/输出为数值1数学上 0 x=100在C+表示为 0 x&x b)&(!b)的值 在一个表达式如果包含多种
16、运算符 !a&b|xy&c 优先级:逻辑运算符之间:从高到低排列是!&|跟其他运算符的优先级为 !(非)(高)算术运算符 关系运算符&和|赋值运算符 (低)逻辑运算符和表达式2.逻辑表达式 用逻辑运算符将两个关系表达式连接起来式子.逻辑表达式中的操作数是作为逻辑量,但C+并不专门提供逻辑类型,只用1与0来代表逻辑结果真与假。对于参与逻辑运算的操作数,其值为0代表逻辑假,为非0时代表逻辑真。5 3&2|8 3 结果为1 关系运算符高于逻辑运算符&B.1&2 结果为1 2作为逻辑运算对象,做“真”C.1|84-!0 根据优先次序,先运算!0,其结果为1 D.1|841 根据优先次序,先运算41,结
17、果为3 E.1|83 根据优先次序,先运算8=a&c=A&c=a&c=A&c=Z2.m%2=02.m%2=0(1)按位取反运算符 (2)左移运算符 (4)按位与运算符&(5)按位或运算符|(6)按位异或运算符 C+语言提供字位运算,它对操作数的各个位进行操作。逻辑运算符和表达式(1)按位取反运算符 将操作数的每个二进制位取反,即1变为0,0变 为1。例如,整数a=6的二进制数为00000110,则 a的值为11111001。(2)左移运算符 运算一般格式为:an 其中a为整数,n为一个正整数常数。语义为将a 的二进制数依次向左移动n个二进制位,并在低 位补0。左移n位相当于乘以2的n次方,但移
18、位运 算的速度比乘法快。a 运算一般格式为:an 与左移运算符类同,将左操作数向右移动右操作 数指定的二进制位数,忽略移出去的位,并在高 位补0。一个整数右移n位相当于除以2的n次方 (取整),但比除法快。在VC+6.0中有符号数右移时高位补符号位,严 格对应除法。以上三种单目运算不影响数据本身的值,而是只产生一个中间量,这个中间量被引用后即不再存在。位运算(4)按位与运算符&运算一般格式为:a&b 将两个操作数的对应位逐一进行按位逻辑与运 算。运算规则为:对应位均为1时,该位运算结 果为1;否则为0。例如:a 01001101 b 00001111 a&b 00001101 该运算可用来将整
19、数的某些位置0,而保留所需 要的位,上例保留了低四位。位运算(5)按位或运算符|运算一般格式为:a|b 将两个操作数的对应位逐一进行按位逻辑或运 算。运算规则为:只要有一个数对应位为1,该位 运算结果即为1;两个数对应位均为0,该位结果 为0。例如:a 01001101 b 00001111 a|b 01001111 该运算符可用来将整数的某些位置1。上例高四位 不变,低四位全1。位运算(6)按位异或运算符 运算一般格式为:ab 将两个操作数的对应位逐一进行按位异或运算。运算规则为:当对应位的值不同时,该位运算结 果为1,否则为0。例如:a 01001101 b 00001111 a b 01
20、000010 该运算符可用来将一个整数的某些位取反,或将 整型变量的值置0(将整型变量与自身按位异 或)。上例低四位取反,高四位不变。需要说明的一点是,以上例子中的整数都只取了低8位一个字节。位运算if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一。if 语句的 3 种形式1.if(表达式)语句;2.3.例如:if(score=85)cout“优良”=60)cout“及格”endl;else cout“不及格”=85)cout“优良”=70)cout“中等”=60)cout“及格”endl;else cout“不及格”endl;if 语句if 语句 市场
21、西瓜价格规定如下:重量低于公斤(含公斤)的,每公斤元 大于公斤,不足公斤(含公斤)的,每公斤元,公斤以上的,每公斤元,编程计算任意公斤的西瓜价格if 语句main()float weight,price;cout weight;if(weight=5)price=1.8*weight;else if(weight=10)price=1.5*weight;else price=1.2*weight;coutweight“斤西瓜的价格为:”priceendl;/可以采用最简单的if格式,怎么写?main()float weight,price;cout weight;if(weight 5&wei
22、ght 10)price=1.2*weight;coutweight“斤西瓜的价格为:”price y)x=10;y=20;if 语句 在if语句中又包含一个或多个if语句,我们称为if语句嵌套,它的一般形式为:if(表达式)if(表达式)语句;else 语句;else if(表达式)语句;else 语句;C语言规定,else 总是和它上面最近的if配对,所以我们处理嵌套if语句时,一定要处理好if和else之间的关系。if 语句嵌套main()int a,b;a=b=5;if(a!=1)if(b=1)cout a+=b endl;else cout a-=b endl;cout a+b b)
23、max=a;else max=b;采用条件运算符后就很简单:max=(a b)?a:b;条件运算符优先赋值运算符,但比关系运算符和算术运算符都低 如:max=(a b)?a:b+1 等同于 max=(a b)?a:(b+1)条件运算符 例子:输入一个字符(不管大写或小写),最后以小写输出。main()char ch;cin ch;ch=(ch=A&ch=Z)?(ch+32):ch;cout ch a;cout (a0)?-a:a endl;switch 多分支语句switch语句是多分支选择语句,用来实现多分支选择结构。它的一般形式如下:switch(表达式)case 常量表达式1:语句1 c
24、ase 常量表达式2:语句2 .case 常量表达式n:语句n default:语句n+1 其中 switch,case,default为关键字说明:1.表达式可以为整型、字符型、枚举型2.各case中的常量必须互不相等3.表达式的值依次跟case语句中的某常量相比较,如 果相等,则执行其后面的语句;如果都不匹配,则 执行default后的语句。4.执行过程中如果碰到 break 语句,就退出整个 switch语句,继续执行switch后的语句;5.default语句是可选择的,根据需要,可有可无。switch 多分支语句switch 多分支语句例如:要求按照考试的等级打印出百分制分数段.sw
25、itch(grade)case A:printf(“85100n”);break case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(“60n”);break;default:printf(“Error Graden”);例子:运输公司对所运货物实行分段计费。设运输里程为s,则运费打折情况如下:s250 不打折扣250=s500 2%折扣500=s10005%折扣1000=s20008%折扣2000=s300010%折扣3000=s15%折扣设每公里每吨的基本运费为p,货物重量为w,折扣为d,则总运费f
26、为:f=p*w*s*(1-d)设计程序,当输入p、w和s后,计算运费f。switch 多分支语句算法1、输入每吨运费p、货物重量w、运输里程s;2、根据运输里程s计算折扣d;3、计算总运费f=p*w*s*(1-d);4、输出计算结果;算法细化:2、根据运输里程s计算折扣d分析:如果用switch语句,必须使表达式符合语法要 求,分析发现,里程s的分段点均是250的倍 数,因此,将里程s除以250,取整数商,便得 到若干整数值。switch 多分支语句switch(c=s/250)case 0:d=0;break;case 1:d=0.02;break;case 2:case 3:d=0.05;
27、break;case 4:case 5:case 6:case 7:d=0.08;break;case 8:case 9:case 10:case 11:d=0.1;break;default:d=0.15;s250 不打折扣250=s500 2%折扣500=s1000 5%折扣1000=s2000 8%折扣2000=s3000 10%折扣3000=s 15%折扣switch 多分支语句#include#include void main()int c,s;float p,w,d,f;cout输入运输单价p,重量w和里程s:pws;c=s/250;switch(c)case 0:d=0;bre
28、ak;case 1:d=0.02;break;case 2:case 3:d=0.05;break;case 4:case 5:case 6:case 7:d=0.08;break;case 8:case9:case10:case11:d=0.1;break;default:d=0.15;switch 多分支语句 f=p*w*s*(1-d);cout运输单价为pt重量为wt里程为sendl;cout折扣为dendl;cout运费为fendl;switch 多分支语句上机题:设计一个计算器程序,实现加、减、乘、除 运算,譬如在键盘上输入 3+5,那么计算机应 该输出 3+5=8。循环结构 在人们
29、所要处理的问题中常常遇到需要反复执行某一操作的情况。这就需要用到循环控制,许多应用程序都包含循环。顺序结构、选择结构和循环结构是结构化程序设计的 3 种基本结构,是各种复杂程序的基本构造单元。因此程序设计者必须熟练掌握选择结构和循环结构的概念及使用方法。1.while 结构 2.do while 结构 3.for 结构while语句也称为当循环。语句格式为:while(表达式)循环体语句;while 结构例子:求1+2+3+4+100的值。N个连续整数相加算法1、设置变量i用来放被加数,变量sum用来放和值,并初始化;2、从第一个数开始,依次将被加数赋给i,并进行操作sumsum+i;3、输出
30、sum;细化算法2:while(还有被加数)i=当前被加数;sum+=i;i准备接受下一个被加数;while 结构源程序如下:#include void main()int i=1,sum=0;/循环初始条件 while(i=100)sum+=i;i+;/修改循环条件 coutsum=sumendl;while 结构注意:在有循环语句的程序中,通常循环开始前对循环条件进行初始化;而在循环体语句中要包含修改循环条件的语句,否则循环将不能终止而陷入死循环。C+表达方式灵活,上例中的循环语句还可以写成:while(i=100)sum+=i+;while 结构do-while语句称为直到循环,格式为:
31、do 循环体语句;while(表达式);do while 结构do/while语句和while语句的区别:区别是:do/while语句至少执行一次循环体后 再判断循环条件是否满足;while语句先判断条件是否满足,然后才执行循环体。do while 结构void main()int i=1,sum=0;do sum+=i;i+;while(i=100);coutsum=sumendl;例子:用迭代法求a的平方根近似值。求平方根的迭代公式为:要求前后两个迭代根之差小于10-5。迭代法求解:a是已知正数,x0是迭代初值,给x0一个值,假定 x0=a/2;则用迭代公式依次计算:x1=(x0+a/x0
32、)/2;x2=(x1+a/x1)/2;xk+1=(xk+a/xk)/2;当|xk+1 xk|0)及较小正数delta(也可用常变量);2、x0=a/2;用迭代公式算 x1=(x0+a/x0)/2;3、while(|x1x0|=delta)x0=x1 ;/把最近的值给x 0;x1=(x0+a/x0)/2;/求xk+1时只需要知道xk的值,所以只需2个变量;4、取x1的值为a的平方根近似值,输出。3步骤很适合用do/while语句实现:x1=a/2;do x0=x1;x1=(x0+a/x0)/2;while(|x1x0|=delta);do while 结构#include#includevoid
33、 main()float x0,x1,a;couta;if(a0)couta不能开平方!=1e-5);couta的平方根为:x1endl;do while 结构例子:输入一段文本,统计文本的行数、单词数及字符数。假定单词之间以空格或跳格或换行符间隔,且文本开始没有空行。算法分析:1、逐个读入文本中的字符,直到读到一个输入结束符EOF为止。2、如何算行数?行结束标志为读到字符n;3、如何算单词数?设一个变量isword,读到字符时 isword=1,读到间隔符时isword=0;如果读到一个 字符而此时isword值为0,则说明刚开始读一个单 词;(如果读到一个间隔符而此时isword值为1,则
34、说明刚读完一个单词;)4、如何算字符数?do while 结构算法:1、设置变量line、word、ch分别代表行数、单词数、非分隔字符数,并初始化;设置变量isword来辅助统计单词数;2、do 从键盘读入一个字符c;if(c=n)line+;if(是单词开头)word+;if(c不是分隔符)ch+;while(c!=EOF);3、输出统计结果。do while 结构#includevoid main()char c;int line=0,word=0,ch=0,isword=0;do c=cin.get();if(c=n)line+;/遇换行符行数+1 if(c!=&c!=t&c!=n)/
35、读到非间隔符 if(isword=0)word+;/在单词数+1 ch+;/字符数加+1 isword=1;else isword=0;/读到间隔符 while(c!=EOF);cout”行数:”lineendl;cout”单词数:”wordendl;cout”字符数:”charendl;do while 结构格式:for(;)循环体语句;for 结构for语句、while语句、do/while语句实现相同的功能:1+2+3+4+100int i=1,sum=0;/循环初始条件while(i=100)sum+=i;i+;/修改循环条件int i=1,sum=0;/循环初始条件dosum+=i;
36、i+;/修改循环条件while(i=100);for(int i=1,sum=0;i=100;i+)sum+=i;/*习惯上:表达式1:循环初始条件;表达式2:循环终止条件;表达式3:修改循环条件*/for 结构 一般来说,已知循环次数的用for比较方便,未知次数可以用while等其他循环结构。例子:求出100到900之间的“水仙花数”,“水仙花数“是指一个三位数,其各位数字的立方之和等于该数本身。如 153=1*1*1+5*5*5+3*3*3main()int i,a,b,c;for(i=100;i=999;i+)a=i/100;/*a 为百位数 b=i/10a*10;/*b 为十位数 c=
37、i%100;/*c 为个位数 if(i=a*a*a+b*b*b+c*c*c)couti“=”a“*”a“*”a“+”b“*”b“*”b“+”c“*”c“*”c 0)do cout setw(5)2);i+;结果:4 3 2 1 0 break 语句只能用在switch语句和循环语句中,用来跳出switch语句或提前终止循环,转去执行switch语句或循环语句之后的语句。一般格式为:break;在for循环中可以用break结束循环:for(;)if()break;break 语句如:求面积大于100的最小圆的半径(整数)for(r=1;r 100)break;cout “Radius is:”
38、r 100,则执行break语句,就提前终止循环。r=6时,循环就结束啦。break 语句 continue 语句只能用在循环语句中,用来终止本次循环。当程序执行到continue语句时,将跳过其后尚未执行的循环体语句,开始下一次循环。下一次循环是否执行仍然取决于循环条件的判断。continue 语句与 break 语句的区别在于,continue 语句结束的只是本次循环,而 break 结束的是整个循环。例:输出1100内3的倍数。for(i=1;i=100;i+)if(i%3!=0)continue;cout setw(6)i;continue 语句例子:设计程序输出Fibonacii数列
39、的前20项,要求 每行输出5个数据。Fibonacii数列定义如下:算法分析:除了第0项和第1项外,每一项都是由类似方法产生,即前两项之和;所以求当前项时,只需要记住前两项;程序不需要为每一项设置专用变量;属 递推算法。循环结构的应用算法:1、设置变量n表示第几项,变量f0和f1用来记住当前项f2之前的两项;变量初始化n=0;2、while(当前项不到第20项)if(当前项是第0项)f0=0;if(当前项是第1项)f1=1;if(当前项是第2项或更高项)f2=f0+f1;按要求输出 f2;f0=f1;f1=f2;/记住最近两项当前项后移一位;循环结构的应用#include#includevoi
40、d main()int f0=1,f1=1,f2;coutsetw(5)f0setw(5)f1;for(int n=2;n20;n+)f2=f0+f1;if(n%5=0)coutendl;/控制每行2个数据 coutsetw(5)f2;f0=f1;f1=f2;循环结构的应用运行结果:0 1 1 2 35 8 13 21 3455 89 144 233 377610 987 1597 2584 4181循环结构的应用例子:输入n值,计算1+1/1!+1/2!+1/n!我们知道 n!=1x2x3x.n算法分析:1.设置结果变量sum=1,然后让循环变量i从1循环到n2.2.对于每个i,求出i!,然
41、后1.0/i!加入到sum中.3.i!阶乘的求法:4.jc=1;5.for(k=1;k=i;k+)6.jc=jc*k;循环结构的应用#include void main()int i,n,jc;float sum=1;cout n;jc=1;for(i=1;i=n;i+)jc=jc*i;sum=sum+1.0/jc;cout sum 2,m是素数的条件是不能被2,3,,(取整)整除。因此可以用2,3,,(取整)逐个去除m,如果被其中某个数整除了,则m不是素数,否则是素数。算法属于穷举法。1、输入被测数m(m2);令整型变量 k=sqrt(m)2、判断m是否素数:设置辅助整型变量i,使i从2开始
42、 直到k依次测试m能否整除i,若能,则不是素数;for(i=2;i=k;i+)if(m%i=0)break;/条件满足,m不是素数,停止测试,结束for语句3、根据i是否已达到k,输出结果是否为素数。循环结构的应用#include#include void main()int m,i,k;coutm;if(m=2)coutm是素数endl;else k=sqrt(m);for(i=2;ik)coutm是素数endl;else coutm不是素数endl;循环结构的应用 例子:大奖赛评分程序,在唱歌比赛中,一般有若干个评委,记分规则:去掉一个最高分和最低分,再计算平均分。试编写一个在百分制记分的
43、情况下的程序实现(穷举法)。算法分析:本问题的关键在于找出所有分中的最大值和最小值,我们假设设置一个变量max,它的初始值为0,来记录最大值,然后对所有分进行穷举,如果还有比max更大的,则把它赋给max,待所有分都穷举完毕后,则max就是最大值,求最小值的方法也类似。循环结构的应用#include const int mNumber=7;void main()int iScore,i,max=0,min=100;float fSum=0;for(i=1;i=mNumber;i+)cout “输入第”i iScore;fSum+=iScore;if(iScore max)max=iScore;
44、if(iScore min)min=iScore;cout “最后得分:”(fSum-max-min)/(mNumber-2);循环结构的应用 例子:世界数学史上著名的“百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?分析:设鸡翁、母、雏分别为i,j,k,根据题 意可得:i*5+j*3+k/3*1=100;i+j+k=100;两个方程无法解出三个变量,只能将各种可能的取值代入,其中能满足两个方程的就是所需的解,因此这是枚举算法(也叫穷举法)的应用。i、j、k可能的取值有哪些?分析可知,百钱最多可买鸡翁20,鸡母33,鸡雏300。循环结构的应用算法:
45、for(i=0;i=20;i+)for(j=0;j=33;j+)for(k=0;k=300;k+)if(i+j+k=100)&(5*i+3*j+k/3=100)coutijk;这个算法使用三重循环,执行时间函数是方阶,循环体将执行20*33*300=198000次。我们希望在算法上改进一下,如能减少一重循环,将大大缩短运行时间。实际上,当i、j确定时,k就可由题目要求确定为100-i-j,因此实际上只要用i、j去测试,用钱数检测就可以了。循环体将执行:20*33=660次。循环结构的应用#include#include void main()int i,j,k;cout 公鸡 母鸡 小鸡end
46、l;for(i=0;i=20;i+)for(j=0;j=33;j+)k=100-i-j;if(5*i+3*j+k/3=100)&(k%3=0)/注意(k%3=0)非常重要,想一想为什么 coutsetw(6)isetw(10)jsetw(10)kendl;循环结构的应用例子:输入一个非负的整数,将其反向后输出。例如 输入24789,变成98742输出。算法分析:1、将整数的各个数位逐个位分开,一个一个分别输 出。2、将整数各位数字分开的方法是,通过对10进行求 余得到个位数,然后将整数缩小十倍,再求余,并重复上述过程,分别得到十位、百位,直到 整数的值变成0为止。循环结构的应用算法:1、输入非
47、负整数 n;2、while(n!=0)n 对 10 取余,得 n的当前个位数并输出;n 整除 10 并赋给 n,即去掉个位数,十位变个位,百位变十位,;循环结构的应用程序如下:#include void main()long n;cout n;while(n 0)cout n%10;n=n/10;循环结构的应用例子:猜猜数数游游戏戏 由计算机随机产生一个100以内的正整数,请一个人来猜,如果猜对了,则游戏结束,计算机输出猜的次数;否则计算机给出提示,告诉所猜的数是大了还是小了,继续猜数,直到猜对为止.void main()int num,x,count=0;num=rand(0);do cou
48、t x;count+;if(xnum)cout “太大,再试!”endl;if(xnum)cout “太小,再试!”endl;while(x!=num);cout “你猜对了,次数是:”count endl;循环结构的应用例子:打印下三角形乘法九九表1 2 3 4 5 6 7 8 9-1 2 43 6 94 8 12 165 10 15 20 256 12 18 24 30 367 14 21 28 35 42 498 16 24 32 40 48 56 649 18 27 36 45 54 63 72 81循环结构的应用分析:1、计算机的输出是按行进行的,因此可以先用一个循 环语句输出第一行
49、表头和第二行的横线。2、表中各行数据的输出可以用下面的算法描述:for(i=1;i10;i+)输出第i行数据;/A coutendl;/准备输出下一行 循环结构的应用3、第A行需要进一步细化。由于第i行数据是一组有 规律的数列,每个数的值是其所在行与列的乘 积,因此输出第i行可以:for(j=1;j10;j+)coutsetw(5)i*j;4、按上述算法输出的每一行都将有九列,即打印出 的是矩形表而不是下三角形表。进一步分析发现 每一行的列数与所在行数相关,因此要输出三角 形表,上面的循环语句需稍作修改:for(j=1;j=i;j+)coutsetw(5)i*j;将此语句放到顶层算法的A行即可
50、。循环结构的应用#include#include void main()for(int i=1;i10;i+)coutsetw(5)i;coutendl;for(int i=1;i10;i+)cout“-”;coutendl;for(i=1;i10;i+)for(int j=1;j=i;j+)coutsetw(5)i*j;/输出表中数据coutendl;/准备输出下一行 循环结构的应用1.分析输出下列程序的结果 main()char i=A,j=G;for(;i=j;i+,j-)coutij;2.编写程序,计算圆柱体的侧面积、底面积、体积。半径和高从键盘输入,输出计算结果(要有文字说 明)。编