2023年面向对象程序设计课程辅导二.pdf
面向对象程序设计课程辅导(二)-流程控制语句徐孝凯流程控制语句用来控制程序的执行流程,它涉及选择、循环和跳转三类语句。选择类语句涉及i f 语 句 和 sw i t c h 语句两利I 用它们来解决实际应用中按不同情况进行不同解决的问题。如当调整职工工资时,应按不同的级别增长不同的工资;大学生交纳学费时,应按不同的专业交纳不同的学费。循环类语句涉及fo r循环语句、w h ile 循环语句和do循环语句三种,用它们来解决实际应用中需要反复解决的问题。如当记录全体职工工资总和时,就需要反复地做加法,依次把每个人的工资累加起来;当从一批数据中查找具有最大值的一个数据时,需要反复地做两个数的比较运算,每次把上一次比较得到的大者同一个新(即未比较)的数据比较,当同最后一个新的数据比较后得到的大者就是所有数据中的最大值。跳转类语句涉及g o t o 语句、con t inue语句、br e a k 语句和retu r n 语句四种,用它们来改变顺序向下执行的正常顺序,而转向隐含或显式给出的语句位置,接着从此位置起向下执行。如当从一批数据中查找一个与给定值相等的数据时,最简朴的方法是从前向后使每一个数据依次同给定值进行比较,若不等则继续向下比较,若相等则表白查找成功,应终止比较过程,此时就需要使用跳转语句转移到其他地方执行。这一章将依次介绍每一种流程控制语句的语法格式、执行过程和应用举例等内容。一、i f 语句1.语句格式i f 语句又称条件语句,其语句格式为:i f(表达式)语 句 1 e ls e(语句2i f 语句是一种结构性语句,由于它又包具有语句,即语 句 1和可选择的语 句 2,这两条语句称为i f 语句的子句。在 i f 语句格式中,其后的保存字el s e 和 语句2 是任选项,带与不带都是允许的。i f 语句中的每个子句可以是任何可执行语句或空语句,可执行语句涉及表达式语句、复合语句、以及任一种流程控制语句等。2.语句执行过程i f 语句的执行过程为:(1)求 表达式)的值,若它的值非0,则表白 表达式(又称为条件)为真或成立,否则认为条件为假或不成立;(2)当条件为真则执行语 句 1 ,为假则执行语 句 2 ,但 若 else部分被省略,则不会执行任何操作。执 行 i f 语句的过程可用图1 1描述,其中菱形框表达判断,矩形框表达解决,带箭头的连线表达执行走向。图 1-1(a)和(b)分别表达省略和带有e ls e 部分的具体执行流程。图 1-1 i f 语句执行流程示意图3.语句格式举例(1)i f (x!=T)c+;(2)i f (x =a )s 1+=x;e l s e s 2+=x ;(3)i f (f a b s (x )=6 0&gra d e =1 00)c o u t J,p a s s,e n d 1 ;(5)i f (gr a d e 100)c o u t,S c o r e e rro r!5,b)cout,a b,e n d 1 ;else c o u t va 所相应的复合语句,否则执行 语句2 所相应的复合语句。4.语句嵌套i f 语句中的任何一个子句可认为任何可执行语句,当然仍可以是一条i f 语句,此种情况称为i f 语句的嵌套。当出现i f 语句嵌套时,不管书写格式如何,e l s e 都将与它前面最靠近的i f 相配对,构成一条完整的i f 语句。如:(1)i f (表达式1)i f (表达式2)e I s e 语句2(2)1仪 )i f (表达式2)e l s e(语句3(3)i f (表 达 式 1)语 句 1e l s e i f (表达式2)语句2e l s e (4)i f 表达式1)语 句 1 e 1 s e 1()语句2e l s e i f (表达式3)(语 句 3 e I s e 语句 4 注意:在第二条语句中,e 1 s e 不是同它前面复合语句中的i f 相配对,而是与处在同一层次的最前面的i f 相配对。5.程序举例(1)#i n c l u d e v o i d m a i n ()(i n t x,y ;c o u t x;i f (x 0)y=l+2*x*x ;e l s e y=7*x -4 ;c o u t z,x=/z x ,y=y e n d l;)该程序的功能是:根据从键盘上输入的x的值计算并输出y的值,y的计算公式为:-l+2x2(x 0)Yy=I7 x-4 (x 20)(2)#i n c l u d e#i n c l u d e v o i d m a i n()d o u b l e x,y;c i n x ;i f (x 0)y =f a b s (x);e l s e i f (x 1 0)y=e x p (x)*s i n (x );e 1 s e i f (x 20)y=p o w(x,3);e l s e y=(3+2*x)*l o g(x);c o u t s e t w(1 0)x s e t w(1 0)y e n d 1 ;分别使x和 y的输出宽度为1 0,即占有10个字符位置)该程序的功能是:根据x的值计算出分段函数y的值,y的计算公式为:|x|(X 0)y=|e1 s i nx(0 x 10)x3(10W x(20)(3+2 x )I n x (x 220)#i n c l u d e v o i d m a i n()(i n t a ,b ,c,t e m p;c o u t 输入三个整数:;c i n a b c;i f (a b)t e m p=a;a=b;b=t e m p;i f (a c)t e m p=a;a=c ;c=t e m p;i f (b c)t e m p=b;b =c;c =t e m p ;c o u t a b c e n d l;该程序的功能是把从键盘上输入的按任意顺序排列的三个整数转变为按从大到小的顺序 排 列(即 a 2 b c)并输出出来。注意:对于每条i f 语句中的复合语句,其作用是互换两个变量的值,它一方面把第一个变量的值暂存到t e m p 变量中,接着把第二个变量的值赋给第一个变量,最后把t e m p 变量的值,即第一个变量的原值赋给第二个变量中。若不通过中间变量t e m p,而是直接把第一个变量的值赋给第二个变量,再把第二个变量的值赋给第一个变量,则不可以达成互换两个变量值的目的,请读者思考!二、s w i t c h 语句1.语句格式s w i t c h 语句又称情况语句或开关语句,它也是一种结构性语句,其语句格式为:s w i t c h (表达式)通常是一条复合语句,并在内部的一些语句前加有特殊的语句标号“c a se 常量表达式或“d e f a u 1 t:”,因此,s w i t c h 语句的实际使用格式为:sw i t c h (表达式)c a s e 常量表达式1 :语 句 1-1 语 句 1-2 cas e 常量表达式2 :语句2-2 d e f a u 1 t:语句 n-1 语句n-2)该语句中可以使用一次或多次c a se 标号,但只能使用一次d e f a u l t 标号,或者省略掉整个d e f a u l t 部分。止 匕 外,多个c a se 标号也允许使用在同一条语句的前面。注意:语句标号只起到标记语句位置的作用,对语句的执行不会产生任何影响。2.语句执行过程sw i t c h 语句的执行过程为:(1)计算出 表达式 的值,假定为此若它不是整型,系统将自动舍去其小数部分,只取其整数部分作为结果值;(2)依次计算出每个常量表达式的值,假定它们的值依次为M l,M 2,,同样若它们的值不是整型,则自动转换为整型;(3 )让 M依次同M l,M 2,进行比较,一旦碰到M与某个值相等,则就从相应标号的语句开始向下执行,若碰不到跳转语句的话,将一直执行到右花括号为止才结束整个sw i t c h 语句的执行,若M与所有值都不同,则当带有d e f a u l t 部分时,就从该标号位置起向下执行,否则不执行任何操作。在实际使用sw i t c h 语句时,通常规定当执行完某个语句标号后的一组语句后,就结束整个语句的执行,而不让它继续执行下一个语句标号后面的语句序列,为此,可通过使用b r eak语句来实现。该语句只有保存字b r e a k,而没有其他任何成分。它是一条跳转语句,在sw i t c h语句中执行到它时,将跳转到所属的sw i t c h 语句的后面位置,系统将接着向下执行其他语句。3.语句格式举例(1)sw i t c h (a)c a se 1:c 1 +;b r e a k;c a se 2:c 2 +;b r e a k ;c a se 3 :c 3 +;b r e a k;c a s e 4:c 4 +;b r e a k;d e f a u l t 2 :c +;b r e a k ;)(2)sw i t c h (c r)c a se r e d :c o u t ur e dv e n d 1;b r e a k;c a s e y e l l o w:c o u t 4y e l l o w,e n d l;b r e a k ;c a se b l u e:c o u t ub l u e,e n d l;b r e a k;)(3)s w i t c h(c h)c a se a:c a s e A:d l=(x+y)/2;d 2=x*y 2;b r e a k;c a s e b:c a se B:d l=(a+b)/2 ;d 2=a *b-2;b r e a k ;d e f a u I t:c o u t 4 I n pu t e r r o r!”V V e n d l;e x i t (1);第一条语句执行时,将按照a的取值使相应的变量增1 ,具体地说,当a取 1 时 c l 增 1,a取 2时 c 2增 1,a取 3时 c 3 增 1,取 4时 c 4 增 1,a取其他任何值时则使变量c 增 1,每执行增1 操作后,都接着执行一条b r e a k语句,使执行流程转出整个s w i t c h 语句,否则将会顺序执行后面的增1 语句。执行第二条语句时,将按照具有枚举类型c o l o r 的变量c r 的值决定输出哪一个常量标记符,当 c h 取值为r e d (即 0)时输出r e d 标记符,取值为y e l l o w (即 1 )时输出y e l l o w标记符,取值为b lu e(即2)时输出b l u e 标记符。输出最后一个常量标记符虽然没有使用 b rea k 语句转出去,但由于它后面就是语句结束标志,右花括号,所以也会自然地结束该语句。当执行第三条语句时,若 c h 值为小写字母a 或大写字母A,则执行3 5 行的语句,若ch值为小写字母b 或大写字母B,则执行7 9 行的语句,若ch 不是上述取值,则执行1 0行后结束整个程序的运营。在 s w it c h 语句所含的复合语句中,可以包含任何语句,当然仍可以是s w itc h 语句,所 以 swi t ch 语句也允许出现嵌套的情况。4.程序举例(1)ttinclu devo i d mai n()!。in t w ee kda y;c o u t H今天星期几(06)?;。c inweekday;switch(weekday)。c ase 0:cou t su nday endl;br e a k;c a se 1:co o nd a y Xen d 1;b reak;。c ase 2:co u t z,Tuesda y z,end 1 ;br e ak;。c ase 3:c o u t z/W e d nes d ay*e n d l;bre a k;case 4:c o ut V T h ursd a y vendl;bre a k;。c a se 5:co u t/z F r id a y en d 1;b r e a k;case 6:c out S a tu r day,V V endl;brea k;d ef a ul t:c o u t Input er r o r!endl;)该程序的功能是:根据从键盘上输入的表达星期儿的数字,相应输出它的英文名称。(2)#i n c 1 u d e#in c 1 u d e void ma i n()(e f lo a t sc o r e ;c out s c ore;。i f (sc ore l 0 0)。c ou t V”输入数据有误!X e n d 1;。e x i t(1);0)s witc h(i n t(sc ore)/1 0)。c a s e 9:。c a se 1 0:c o u t sc o r e :优 e nd 1 ;b r e a k;c a s e 8:c out s c o re :良“e n d l;b re a k;c a se 7:c ou t s c ore :中“V e nd 1 ;b re a k;。c a se 6 :c o u t sc ore n:及格“V e nd l;b r e a k;。d e f a ult:c out sc o r e V :不及格 V e n d 1 ;b re a k;该程序的功能是:根据从键盘上输入的一个人的成绩判断并输出它所属的等级。等级分为优、良、中、及格和不及格等五个级别,相应的分数段依次为 9 0,1 0 0 ,8 0,8 9 ,7 0,7 9 ,6 0,6 9 和 0 ,5 9 o(3)#i n c 1 u d e#i nc 1 u d e#i nc l u d e void ma i n()(c h a r ma r k;i nt x,y,z;b oo1 b=f a l s e;sra n d (t ime(0 );初始化系统中的随机数序列x=r a n d ()%5 0 +1 ;y=ra n d ()%1 0 +1 ;c out ma rk;c ou t x m a r k y,;c i n z;sw i t c h (ma rk)c a se +:if (z=x+y)b =tr u e;b re a k;c a s e -:i f (z=x y)b =t r ue;b re a k;c a se :i f (z 二 二 x*y)b=tru e ;b re a k;c a se /:if (z=x/y)b=tru e ;b r e a k;cas e%:i f (z二 二 x%y)b =t r u e;b r e a k;d e f a u It:c o u t VV 运算符输入错!e nd l;e x i t(1);)if (b)c o u t z,rig h t!,z e n d 1;。e lse c o u t e rror!”:表达式)语句其中 是f or语句的循环体,它将按条件被反复执行多次;表达式1 ,(表达式2 和 表达式 都可以被省略,但它们之间的分隔符(即分号)必须保存;此外,表达式1 除了可以是一个表达式外,还可以兼有对变量进行定义的功能,此变量在离开此循环后仍然可以使用。如 i =1 和 i n t i=l 都可以作为 使用,当使用i=l 时,i 必须被定义过,当使用i n t i=l 时,i 在此之前必须没有定义,此表达式同时具有定义变量i 和给它赋初值这两种功能。2.语句执行过程f o r语句的执行过程为:(1)计算(表达式1 ,当然若此项被省略则无须计算;(2)计算 表达式2 得到一个值,假定为M,若该表达式被省略则当作数值1 看待;(3)若 M 为非0,则执行一遍循环体,否则结束整个f o r语句的执行;(4 )计算(表达式3,当然若此项被省略则无须计算;(5)自动转向第(2)执行。3.语句格式举例(1)f o r(i=l;i 10;i+)c o u t i ;。for (in t i =1;i +=1 0 0 0;);o (3)f o r(in t i=0,j=0 ;i+j 10 0 )b re a k;(5)f o r(i=0,y=0;i x;。y+=x ;。(6 )f o r(in t k=2;k s q r t (m);k+)o i f (m%k=0)b re a k;(7)f o r(;b;a=b,b =r)r=a%b;。(8)f o r(k=20;k!=0 ;k)。a-r a n d()%10 0 ;。c o u t a ,并且循环体是一条空语句,该循环体被反复执行10 0 0次,同时进行10 0 0 次 i +=10 0 0 表达式的计算。第(3)条语句中的 表达式1 分别给i和 j 赋初值为0,并对它们进行变量说明,和 表达式3分别为关系表达式和逗号表达式,循环体是一条赋值语句。第(4)条语句中省略了所有三个表达式,循环体是一条复合语句。第(5)条语句中的 表达式1 为逗号表达式,循环体是一条复合语句,该循环语句完毕从键盘上输入n个常数,并把它们依次累加到y 上的任务。第(6)条语句中的循环体是一条条件语句,它将被反复执行,直到k 是一个逗号表达式,循环体是一条赋值语句。第(8)条语句的循环体将被循环执行2 0 次,每次一方面得到0 9 9 之间的一个随机数a并输出它,接着若a为奇数就使c l 增 1,否则使c 2 增 1。该循环的功能是得到并输出0 9 9之间的2 0个随机数,并分别记录出奇数和偶数的个数。在f o r循环的循环体中允许使用b re a k语句,其作用是:当执行到该语句时,就使执行流程转出所属的f o r循环语句,然后再向下顺序执行。4.语句嵌套f o r循环体可认为任何可执行语句,当然也可以直接为一条f o r语句,或者在作为循环体的复合语句内使用for语句,并且嵌套的层数不受限制。如:(1)f o r(i=l;i =5;i+)f o r(j =1;j =6;j+)s+=i*_ j;(2)f o r(i =1;i =5;i+)o f o r(j=l;j =i;j+)c o u t *;。c o u t e n dl;0(3)f o r(i=0 ;i m;i+)f o r(j=0;j m a x)0 m a x=a a i j;。r o w=i;c o 1 =j;d 6 以上每一条语句都是f。r双重循环语句,处在外面的称为外循环,内部的称为内循环。如对于第(1)条语句,外循环控制循环体(即内循环)执行5次,每次执行内循环时又控制内循环体执行6次,所以内循环共被执行5*6=3 0次。同理,第(2)条语句的内循环体(即co 语句)共被执行1+2+3+4+5=1 5次,第(3)条语句的内循环体(即if语句)共被执行m*n次。5.程序举例(1)#i n c l u d e voi d m a in ()do u b l e x,y;。c o u t 从键盘上同一行输入6个常数:;。f o r(i n t i=0;i x;。y =4*x *x-2*x+5 ;c o u t x =s e t w(5 )x ;。c o u t s e t w(1 0)z/y=z,s e t w(5 )y e n d l;。)在这个程序的主函数中,第一行定义了两个双精度变量x和y,第二行给出提醒信息,规定用户从键盘上输入6个常数后回车,第三行至第八行为一条fo r循环语句,其循环体是一条复合语句,将被反复执行6次,相应控制循环的变量i的取值依次为0,1,2,3,4和5 ,每次循环一方面从键盘缓冲区读入一个常数并赋给x,接着计算出y的值,然后按一定格式输出x和y的值。若程序运营后,从键盘上输入的6个常数为2,5,1 0,3.6,8.2 5,2 4.6 6 ,则得到的输出结果为:从键盘上同一行输入6个常数:2 5 10 3.6 8.25 24.66x=2 y=17x=5 y=95x=1 0 y=385x=3.6 y=4 9.64x=8.25 y=2 60.75x=24.66 y=2 388.14(2)#i n c l u d e v o i d m a i n ()i n t i ,n ;d o u b 1 e p=l;。c o u t n;f o r (i=l;i =n;i+)p*=i;。c o u t n /z!=z r p e n d l;在这个程序中定义了三个变量,用i作为控制循环的变量,简称循环变量,用D保存从键盘输入的一个正整数,用P计算和保存n的阶乘值,p的初值为1,每次进行循环计算时都使P累乘循环变量i的值,循环结束后P的值就是n的阶乘值。假定程序运营时输入的n值为1 0 ,则运营结果为:输入一个正整数,求其阶乘:1 01 0!=3.6 2 8 8 e+0 0 6(3)n c l u d e#i n c l u d e void m a i n()(。i n t n,x,m a x ,m i n;C o u t V V输入待解决数据的个数:;c i n n;。i f(n =0)c o u t n =0 !,z e n d l;e x i t (1 );o 。1 1仅输入”水 x;m a x =m i n=x;fo r (;-n;)c i n x;i f(x m a x)m a x=x;。i f(x m i n )m i n=x ;)c o u t m a a x e n d l;c o u t /m i n:m i n e n d 1 ;在程序的主函数中,第一行同时定义了四个整型变量n,x,m a x和m i n,用它们分别保存待解决数据的个数、当前被解决的一个数据、已解决数据中的最大值和已解决数据中的最小值。第二行和第三行用来从键盘上给n输入一个整数.第四行用来解决数据个数n小于等于0的不正常情况。第五行给出请用户输入n的数据的提醒信息。第六行用来从键盘缓冲区读入第一个被解决数据并用它作为m a x和m i n这两个变量的初值。第7至1 1行为一个fo r循环,循环体共需执行n-1次,每次一方面从键盘缓冲区读入一个数据到x中,接着分别同当前最大值max和当前最小值m i n相比较,若x较大则用它修改m a x的值,若x较小则用它修改m i n的值,使m a x和m i n始终保持已解决数据中的最大值和最小值,当此循环结束后,m a x和m i n中就分别存有n个数据中的最大值和最小值。最后两行语句输出所求得的最大值和最小值。假定需解决6个数据,这6个数据为:4 8,6 2,3 0 ,24,5 5,3 6 ,则程序运营结果为:输入待解决数据的个数:6输入6个待解决的数据:4 8 6 2 3 0 2 4 5 5 3 6m a x :6 2m i n:2 4(4)#i n c l u d e v o i d m a i n ()fo r (i n t a=0 ,b=1 ;b 1 0 0;)。c outa b b-a+b ;0)c o u t e n d 1 ;。c o u t a *b z 是一个关系表达式b 1 0 0,表达式3 被省略,循环体中一方面输出a和b的值,接着根据a和b的当前值求出a的新值,再运用a和b的当前值求出b的新值,然后判断b 1 0。是否成立,若是则执行下一次循环,否则结束循环,转去执行后面的输出语句。该程序的运营结果为:0 1 1 2 3 5 8 13 21 34 55 89144 233该程序的功能是输出一个数列的前若干项,其中第一项为0,第二项为1,以后每一项等于其前两项之和。如 第1 0项为3 4 ,它等于第8项1 3和第9项3 4之和。(5)#i n c l u d e c o n s t i n t M=4,N=5;v o i d m a i n()(。i n t i,j,s=0 ;。f o r (i=1 ;i =M;i+)f o r (j=1 ;j =N;j+)s+=i *j;。c o u t s e n d 1 ;主函数中使用了一个双重f o r 循环,外循环变量i 初值为1,终值为整数常量M,每执行一次外循环体(即内循环)后其值增长1,内循环变量初值为1,终值为整数常量N,每执行一次内循环体(即s+=i*j;语句)后其值也增长1,内循环体共需执行MxN次。该程序的功M N能是计算*j)的值。程序运营结果为1 5 0。i=j=6.应用举例例 1.编一程序计算1+2、4、6 2+5()2 的值。分析:此题所给的计算公式是一个和式,它除第一项外,其余项为从2至 5 0 的每一个偶数的平方,因此可采用循环累加的方法来计算,即依次把每个数据项(在此为偶数的平方)累加到一个变量中。设循环变量为i,它的初值、终值和步长(即每次循环后循环变量的增长值)应分别为2、5 0 和 2,设用于累加的变量为s,它的初值应为和式中的第一项1,由于它不可以通过有规律的循环累加到s 上。在循环体中通过赋值语句每次把i 的平方值累加到s 上,当循环结束后,s的值就是所求的结果。根据分析编写出程序如下:#i n c l u d e v o i d m a i n()(。i n t i ,s=l;。f o r(i=2;i =5 0;i+=2)s+=i*i ;c o u t,s=n s e n d 1 ;)10.x2例 2.编一程序计算z(_ i y+i j的值,其中x 值由键盘输入。分析:此题是一个累加求和问题,适合使用f o r 循环来实现 设循环变量为和式中的i,它 从 1 取值到10,每次增长1,每次计算出一个数据项并把它累加起来。为了计算一个数据项中的X,和 i !,还需要设定两个累乘变量,假定分别用P 1 和 p 2 表达,它们的初值应均 为 1 ,在循环体中需要分别向P 1 和 p 2 累乘x和 i 的值。为了把每个数据项的值累加起来,需要设定一个累加变量,假定用s 表达,它的初值为0,每次向它累加(-1 )b l/P 2的值。当和式中的所有1 0 个数据项都累加到s之后,s的值就是所求的结果。根据分析编写出程序如下:#i n c l u d e v o i d m a i n ()(d o u b 1 e x,p l=l,p 2 =1,s=0;i n t i,j=1 ;c o u t x;。f o r (i =1;i =1 0;i +)。p l *=x;/1的 值 为*1p 2*=i;/p 2 的值为 i!s+=j *p l/p 2;/j 的 值 为(-1 )i +1。j =-j;/j 取反,为下一数据项计算做准备0c o u t s e n d l;)例 3.已知y k l=+e x,y kl产+e一x,其中x从。开始取值,每次增长的步长为0.2 5,V2tz+1 V2a-1直 到 3,a的值由键盘输入,并规定大于0,编一程序依次求出x每一取值所相应的山和y z的值。分析:设 i 为循环变量,让它的初值、终值和步长分别为0,1 2 和 1,则 x的每次取值可表达为0.2 5 i。在循环体中计算力和y 2 的公式应分别表达为:y l=(l+e x p(x)/(s q r t (2*a)+1 )y 2=(l+e x p(x)/(s q r t (2 *a)-1 )每次根据x的 值(即 0.2 5)求出相应的y l 和 y 2 后都要输出出来。根据分析编写出程序程序如下:#i n c l u d e#i n c l u d e v o i d m a i n()(d o u b 1 e x,a,y l,y 2;c o u t M I n p u t a(a 0):;c i n a;也可把a设定为数值常量。f o r (i n t i=0;i =1 2;i+)x =0 .2 5*i;o o y l=(l+e x p(x )/(s q r t (2*a)+l);。y 2=(1 +e x p(x)/(s q r t(2*a)-1 );c o u t s e t w (1 0)x s e t w (1 0)y 1 s e t w (1 0)y2 e n d 1;)例 4,已知一组实验数据:3.6 2,2.9 3,3 .1 6,3.7 3,2.8 6,3.4 0,2.8 6,3.0 7,3.2 9,3.2 4,编一程序分别求出它们的平均值、方差和均方差,规定每一结果只保存两位小数。分析:设它们的平均值、方差和均方差分别用变量v,f和 t 表达,由数学知识可知,相应的计算公式为:1 v1ni=t=其中n表达数据个数,x,表达第i个数据。此题需要一方面求出 L i和 石2 ,然后才可以求出V,f和t。而求所有数之和以及z=l Z=1求所有数平方之和需要采用循环累加的方法。为此设循环变量为i,它的初值、终值和步长应分别为1,n和1,设输入变量为x,每次从键盘缓冲区得到一个实验数据,设累加数据之和的变量为s 1 ,累加数据平方之和的变量为s 2o每次分别向s 1和s 2累加X i和婷的值。根据以上分析编写出程序如下:#i n c l u d e t t i n c l u d e c o n s t i n t n=1 0;/n等于待解决数据的个数v o i d m a i n()(。d o u b l e x,s 1 ,s 2;。s l =s 2=0 ;。c o u 从键盘上输入。水 个实验数据:”;。f o r(i n t i=1 ;i x;。s l+=x ;。s 2 +=x*x ;。)d o u b l e v ,f,t ;v =s l/n;。f =s 2/n-v*v;。t=s q r t (f);。v=f l o o r(v*1 0 0)/1 0 0;f=f 1 o o r (f *1 0 0)/1 0 0;t =f 1 o o r(t*1 0 0)/1 0 0;。c o u t,zv=v e n d l;c o u t z zf=,z f e n d l;。c o u t t e n d l;该程序上机运营后,按所给数据输入,则运营结果为:从键盘上输入10个实验数据:3.62 2.93 3.16 3.7 3 2.86 3.40 2.86 3.07 3.2 9 3.24v=3.2 1f=0.0 8t=0.2 8例5 .由勾股定理可知,在一个直角三角形中,两条直角边a和b与斜边C的关系为a Z+b J c;编一程序求出每条直角边均不大于3 0的所有整数组解。如(3,4,5),(5,1 2 1 3)等都是该题的解。分析:根据题意,需要使用二重循环来解决,设外循环变量用a表达,它的初值、终值和步长应分别取1,3 0和1,内循环变量用b表达,它的初值、终值和步长应分别取a+1,3 0和1。内循环变量的初值若取1,而不是取a+1,则会出现象(3,4,5)和(4,3,5)这样的反复组,为了避免反复组的出现,所以让b从a+1开始,即使第二条直角边大于第一条直角边。根据分析编写出程序如下:#i n c l u d e#i n c l u d e c o n s t n =3 0 ;v o i d m a i n ()i n t a,b;d o u b l e c;f o r (a=l;a =n;a +)f o r(b=a+l;b 的值为0而结束循环的情况)后,表白n不能被2至品之间的任何自然数整除,得到n 是一个素数。规定出所给的2至 9 9 区间内的所有素数,需要依次对每个整数进行判断,这又是一个循环解决的过程。为此设循环变量为n,它的初值、终值和步长应分别为2,9 9 和 1,对于n的每一取值,都要执行判断它是否为素数的循环过程,所以解决此题的程序模块结构是一个双重循环。根据以上分析,编写出程序如下:#i n c l u d e#i n c 1 u d e v o i d m a i n()(i n t i ,n ;。f o r (n=2;n =99;n +)i n t t e m p=(i n t)f l o o r (s q r t (n);f o r (i=2 ;i t e m p)c o u t V n c o u t z n)若这个程序中的f o r 内循环执行结束后,若 i 的值大于t e m p,则表白内循环是正常结束的,n为一个素数,所有要把它打印出来,否则内循环是非正常结束的,n是一个非素数,此时的i 值必然小于等于t e m p ,它不会被打印出来。该程序运营后得到的输出结果为:2 3 5 7 11 1 3 1 7 1 9 23 29 31 37 41 43 47 53 59 61 6 7 7 1 7 3 7 9 8389 9 7四、w h i l e 语句1.语句格式while语句又称为w h i l e 循环,它也是一种结构性语句,它的循环体是一条语句。W h i 1 e 语句格式为:w h i l e(表达式)语句 语句 成分是w h i 1 e语句的循环体,它可以是任何一条可执行语句或空语句。2 .执行过程w h i l e 语句的执行过程为:(1)计算 表达式 的值,假定为M;(2)若M 为非0,则执行一遍循环体,否则结束整个语句的执行;(3)自动转向第(1)步执行。Whil e 语句的执行过程也可用图1-2表达出来。图 12 while 语句的执行过程3.格式举例(1)whi 1 e(xx;(3)while(n)c i n x;i f(x 0)nl+;e 1 se n 2+;)(4)wh i le(i n&x!=a i)i+;(5)while(i+N)x=ra n d()%1 0 0;i f(x%2=0)c 2+;if(x%3=0)c 3+;if(x%5=0)c 5+;)(6 )w h i 1 e (1)c o u t op;i f(op=二 )b r e a k;s witc h(op)c a se z=A dd(x,y);b re a k;c a se z=S u b t(x,y);b r e a k;c a se ,*:z=M u 1 t(x,y);b re a k;c a se /:z=D i v i de(x,y);b re a k;de fa u lt:c o u t Inpu t e r r o r !9,e n dl;对于每一条while 语句,若第一次计算 表达式 的值为0,则循环体不会被执行就离开了循环,否则循环体至少被执行一次。在while 语句的循环体内,也可以同在for语句的循环体内同样使用b re a k 语句,使之非正常地结束其执行过程,转向所属while 语句的后面继续向下执行。请读者分析以上每一条w h i l e 语句的执行过程的功能。w h ile 循环中的循环体语句可认为任何一条可执行语句或空语句,因此同样可认为一条w hile 语句或其他循环语句,若循环体是一条复合语句,则在复合语句内也同样可以使用while 语句或其他循环语句。总之,允许各种循环语句之间的嵌套使用,并且嵌套的层数不受限制。4.程序举例(1)#inc lu de v oid ma in()(i n t x,c 1=0,c 2=0;c in x;whi 1 e(x=0)当输入一个负数时结束循环。i f(xx;0)。c o u t c l c 2 e n d 1 ;)该程序的功能是:分别记录出从键盘上输入的所有整数中小于6 0和大于等于60 的数据个数,然后显示出来。在程序中用输入负数作为终止while 循环的结束标志,使用x 作为输入变量,使用cl 和 c 2作为记录变量。(2)#inc lu de voi d ma i n()int a ,b;。c ou t 请输入两个正整数:”;c in a b;while (a =0 b =0)c o u t a b;)。while(b)int r=a%b ;o a=b;b=r;0)。c o u t a e ndl;该程序的功能是:采用辗转相除法求出两个整数的最大公约数。如假定从键盘上输入的两个整数为1 3 6和4 0,用它们分别作为a和b的值,因b=4 0不为0,所以执行第一遍while循环体,使 得r为a除以b而得到的余数,接着把a和b