第4章 控制结构程序设计=12级_第1页
第4章 控制结构程序设计=12级_第2页
第4章 控制结构程序设计=12级_第3页
第4章 控制结构程序设计=12级_第4页
第4章 控制结构程序设计=12级_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章控制结构程序设计学习目的:掌握3种控制结构的书写规范和使用特点,学会综合利用这些语句实现算法及掌握实现技巧。重点:掌握使用选择结构和循环结构设计累加、累乘、统计等算法的基本方法。难点:理解嵌套的条件结构、嵌套的循环结构的流程过程,以及break语句和continue语句的作用及区别。顺序结构程序结构选择结构循环结构4.1顺序结构程序设计

语句1、语句2:声明语句、表达式语句、复合语句、输出语句、输入语句和空语句等。语句1语句2例4-1写出程序的运行结果。#include<iostream.h> #include<math.h> voidmain() { floatx1,x2,y1,y2;

cin>>x1>>y1>>x2>>y2;

floatd;

d=sqrt(pow(x1-x2,2)+pow(y1-y2,2));

cout<<"d="<<d<<endl; } 运行结果:3456

d=2.82843求开方根求平方根函数体4.2选择结构程序设计若程序按照给定的条件选择执行某些语句,这种程序的结构称为选择结构。例如,挑选两个兔子中最大的一个;

高速公路上按公里数和车型收取费用。1.关系运算符和关系表达式

关系运算符:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)。关系表达式格式:操作数1关系运算符操作数2如,表达式5>3的结果是1。表达式1<=0<6的结果是注意:字符型数据按ASCII值的大小进行比较。如,

表达式a<B的值是97660011例,某学校4位同学中的一位做了好事不留名。表扬信来了之后,校长问这4位是谁做的好事,这4位同学所说的话为:A说:不是我。B说:是C。C说:是D。D说:他胡说。请用关系表达式表示这4位同学说的话。设用变量man表示要寻找的做了好事的人,则可以利用关系表达式表达这4个人所说的话:man!=‘A’man==‘C’man==‘D’man!=‘D’2.逻辑运算符和逻辑表达式逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)。(1)逻辑与逻辑与表达式的格式:操作数1&&操作数2功能:若操作数1和操作数2都为1,则运算结果为1,否则运算结果为0。如,表达式3>=3&&2<4的结果为11111&&1例,写出命题x[0,4]的C++表达式。数学表达式:0x4C++表达式:0<=x&&x<=4但C++表达式不能写为:0<=x<=4表达式1&&表达式2“&&”的“短路特性”:先求解表达式1若表达式1的值为false(0),则最终结果为false(0),不再求解表达式2。若表达式1的结果为true(1),则要求解表达式2。如,设a=0,b=6,c=7,a++&&b++&&c++的值为表达式运算后,a=1,b=6,c=7。0a&&b++a=a+100&&c++0(2)逻辑或逻辑或运算表达式的格式:操作数1||操作数2功能:若操作数1和操作数2有一个为1,则运算结果为1,否则运算结果为0。如,表达式2>=3||3<4的结果为01110||1例,写出命题x[0,4]的C++表达式。数学表达式:x<0或x>4C++表达式:x<0||x>4表达式1||表达式2“||”的“短路特性”:先求解表达式1若表达式1的值为true(1),则最终结果为true(1),不再求解表达式2若表达式1的结果为false(0),则求解表达式2,以表达式2的结果作为最终结果如,设a=0,b=6,c=7,a++||b++||c++的值为运算后,a=1,b=7,c=7。1a||ba=a+1b=b+11||c++06非零值的逻辑值为10||11(3)逻辑非逻辑非运算表达式的格式:!操作数功能:若操作数为0,则运算结果为1,否则运算结果为0。如:

表达式!a>b的结果为0098a的ASCII的值是非零值97,其逻辑值为1。例,某地刑侦大队对涉及6个嫌疑人的一桩疑案进行以下分析,试将以下分析用逻辑表达式表示。(1)A,B至少有1人作案;(2)A,E,F3人中至少有2人参与作案;(3)A,D不可能是同案犯;(4)B,C或同时作案,或与本案无关;(5)C,D中有且仅有1人作案;(6)如果D没有参与作案,则E也不可能参与作案。A||BA&&E,A&&F,E&&F!(A&&D)B&&C!B&&!C(C&&!D)||(!C&&D)D||(!D&&!E)(A&&E)||(A&&F)||(E&&F)(B&&C)||(!B&&!C)4.2.1if语句1.单分支if语句格式:

if(表达式)语句S;布尔值任何语句0语句s1表达式例4-3写出程序的运行结果。#include<iostream.h>voidmain() { floatx,y,m;x=8;y=5; if(x>y)

{ m=x;

x=y;

y=m;

} cout<<"x="<<x<<",y="<<y<<endl;} 运行结果:x=5,y=8xym85858x>y为真if语句结构复合语句F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点;F5调试状态运行程序,程序执行到有断点的地方会停下来。F10单步执行程序。CTRL+F10运行到光标所在行。Shift+F5:停止调试。

调试程序的方法:(1)在工程文件夹中建立程序文件;(2)在程序的结尾处按F9,设计断点;(3)按F10,在调试窗口中输入要观测值的变量;(4)连续按F10,观察程序运行过程和变量的值;(5)当程序运行到断点处时,按Shift+F5结束调试。例4-4求两个数中的最大数。分析:设输入的两个数分别存储在变量x、y中,用max存放最大数。数学模型:两个数可以分别是两个人的高度。01max<y输入x,ymax=ymax=x输出max程序:#include<iostream.h>voidmain(){floatx,y,max;cin>>x>>y;max=x;

if(max<y)max=y;cout<<"最大值是"<<max<<endl;}01max<y输入x,ymax=ymax=x输出max2.双分支if语句格式:if(表达式)语句1;else语句2;语句20语句11表达式布尔值任何语句例4-5当x=3,-4时,分别写出程序的运行结果。#include<iostream.h>voidmain() { floatx,y; cin>>x; if(x<0)

y=-x; else y=x;

cout<<"x="<<x<<"y="<<y<<endl;} 3x=3y=3-4x=-4y=4xyx<0为假33

-44x<0为真例4-6输入三角形的三条边,求三角形的面积。求三角形面积的公式:abc算法:(1)输入a,b,c的值。(2)若a+b>c且a+c>b且b+c>a

则t=(a+b+c)/2,s=[t(t-a)(t-b)(t-c)]1/2,输出s的值,否则输出信息:a,b,c的值不能构成三角形。if(a+b>c&&a+c>b&&b+c>a)

{t=(a+b+c)/2;

s=sqrt(t*(t-a)*(t-b)*(t-c)); cout<<"三角形的面积"

<<s<<endl;} else

cout<<a<<','<<b<<','<<c<<"的值不能构成三角形"<<endl;

作为一个复合语句完成#include<iostream.h>#include"math.h"voidmain(){ doubles,a,b,c,t;

cout<<"输入三角形的三条边:"<<endl;

cin>>a>>b>>c;

if(a+b>c&&a+c>b&&b+c>a)

{t=(a+b+c)/2;

s=sqrt(t*(t-a)*(t-b)*(t-c));

cout<<"三角形的面积"

<<s<<endl;

} else

cout<<a<<','<<b<<','<<c<<"的值不能构成三角形"<<endl;

}3.多分支if语句如果if或else后面的语句本身又是一个if语句,则称这种形式为多分支if结构。例如以下格式:if(表达式1)if(表达式2)语句1;else语句2;elseif(表达式3)语句3;else语句4;注意:语句1、2、3、4可以是复合语句,每层的if与else配对,或用{}来确定层次关系。例4-7写出程序的运行结果。#include<iostream.h>voidmain() {floata=3,b=5; if(a!=b)

if(a==b)

{a+=3; cout<<a<<endl; }

else{b-=2; cout<<b<<endl; }

cout<<a+b<<endl; } 运行结果:36条件a!=b为真条件a==b为假b=3例4-8程序结束输入score90>score8080>score7070>score60score90输出“优”是输出“良”是输出“中”是输出“及格”是输出“不及格”否否否否cin>>score;if(score>=90)cout<<"优";else……if(score>=80)cout<<"良";else……if(score>=70) cout<<"中"; else……if(score>=60)cout<<"及格"; elsecout<<"不及格";#include<iostream.h>voidmain(){floatscore;cin>>score;if(score>=90)cout<<"优"; elseif(score>=80)cout<<"良";

else

if(score>=70)

cout<<"中";

else

if(score>=60)

cout<<"及格";

elsecout<<"不及格";}77.5中#include<iostream.h>voidmain(){floatscore;cin>>score;if(score>=90)cout<<"优"; elseif(score>=80)cout<<"良";

else

if(score>=70) cout<<"中";

else

if(score>=60)cout<<"及格";

elsecout<<"不及格";cout<<endl;}4.2.2switch语句整数表达式为非实数的值switch语句格式:switch(表达式){case常量表达式1:语句序列1;[break;]case常量表达式2:语句序列2;[break;]┆case常量表达式n:语句序列n;[break;]default:语句序列n+1;}每个常量的值不能相同,次序不影响执行结果。执行过程:找到与表达式值相同的常量表达式的值为入口(若找不到以default为入口

)标号,由此开始顺序执行,直到遇到break语句或“}”。break语句格式:break;功能:跳出包含该break语句的最内层的switch语句,而执行该switch语句的后继语句,即终止该switch语句的执行。语句序列可以是多个语句,但不必用{}。break语句不一定存在。可以是整型、字符型、枚举型例4-9写出程序的运行结果。#include<iostream.h>voidmain() { chara='3'; switch(a)

{

case'3':cout<<'3'; case'2':cout<<'2';break; default:cout<<'1';

}

} 运行结果:32说明:(4)常量表达式的值必须是常量,该常量的类型必须与表达式的值类型相同。如,例4-9中case3不能改写为case3。(5)case中常量表达式的值类型与swith后面括号内的“表达式”的值类型要相同。如,例4-9中的swith语句不能改为以下程序段switch(a) { case"3":cout<<"3";case"2":cout<<"2";break;default:cout<<"1";}

原因:a是字符变量,"

2","

3"都是字符串。程序结束例4-10输入score输出“优”9,10输出“良”8输出“中”7cin>>score;case10:case9:cout<<"优";

break;case8:cout<<"良";

break;default:cout<<"不及格";score/10输出“及格”6输出“不及格”<6switch((int)score/10)例4-10#include<iostream.h>voidmain(){ floatscore; cin>>score; switch((int)score/10){ case10:case9:cout<<"优"; break; case8:cout<<"良";break; case7:cout<<"中";break; case6:cout<<"及格";break;

default:cout<<"不及格";

}

cout<<endl;}输入:80.8输出:良输入:100输出:优输入:49输出:不及格4.3循环结构程序设计若程序按照给定的条件重复执行多条语句的,这种程序的结构称为循环结构。

例如:购物付款时,付款的总额是各种物品单价的和;(统计数据)

虫虫什么时候才吃完苹果。例4-11计算。其中x=1,2,…,10。#include<iostream.h>#include<math.h> voidmain()

{ doublex,y,z; x=1;y=exp(x);z=log(x);cout<<x=<<x<<,y=<<y<<,z=<<z<<endl

;x=x+1;y=exp(x);z=log(x);cout<<x=<<x<<,y=<<y<<,z=<<z<<endl

;

...…x=x+1;y=exp(x);z=log(x);cout<<x=<<x<<,y=<<y<<,z=<<z<<endl

; }如何有效地完成重复工作4.3.1while语句格式:while(表达式)循环体;

循环体1假0表达式布尔值必须含有改变条件表达式值的语句。执行顺序:先判断表达式的值,若为true(1)时,执行循环体。例4-12写出程序运行的结果。#include<iostream.h> voidmain() {ints=0,i=1; while(i<6) { s=s+i; i=i+1; } cout<<"s="<<s<<endl; } 运行的结果:s=15i i<6的值循环次数s01121345601111510631第1次第2次第3次第4次第5次循环结构例4-13求1~99的奇数和。即:s=1+3+5+7+…+99数学模型:其中:即i=1,3,…,99。初始时,令s=0,i=1,循环体:s=s+i,i=i+2。循环条件:i99sss1s2s3令s0=0例4-13求1~99的奇数和。初始时,令s=0,i=1,循环体:s=s+i,i=i+2。循环条件:i991假0i≤99s=s+ii=i+2输出si=1,s=0#include<iostream.h>voidmain(){inti(1),s(0);

while(i<=99){s=s+i;i=i+2;}cout<<s<<endl;}循环结构改变循环变量i的值对i进行累加,和存放在s中.1假0i≤99s=s+ii=i+2输出si=1,s=0例4-14输入一串字符,以‘?’结束,输出其中字母个数与数字个数。设读入的字符保存在字符变量ch中,字母字符ch=数字字符其他字符初始值:令num1=0,num2=0,读入一个字符赋给ch,循环体:统计字母与数字个数读入下一个字符赋给ch。循环条件:ch‘?’统计字母字符个数num1统计数字字符个数num2如,输入a5$B?如果ch是字母,则num1=num1+1,如果ch是数字,则num2=num2+1,初始值:令num1=0,num2=0,读入一个字符赋给ch,循环体:统计字母与数字个数;读入下一个字符赋给ch。循环条件ch‘?’成立。1假0ch’?’①统计num1,num2②读入ch输出num1,num2num1=num2=0,读入ch1若ch是字母num1=num1+1若ch是数字num2=num2+1100如果ch是字母,则num1=num1+1,如果ch是数字,则num2=num2+1,①②1假0ch’?’①统计num1,num2②读入ch输出num1,num2num1=num2=0,读入chwhile(ch!='?'){统计num1,num2ch=getchar();}循环结构从键盘中读入一个字符赋给字符变量ch1若ch是字母num1=num1+1若ch是数字num2=num2+1100①②if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')num1++;if(ch>='0'&&ch<='9')num2++;#include<iostream.h>#include<stdio.h>voidmain(){ charch;intnum1=0,num2=0;

ch=getchar();while(ch!='?'){

if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')num1++;if(ch>='0'&&ch<='9')num2++;

ch=getchar();

}cout<<"字母个数:"<<num1<<endl;cout<<"数字个数:"<<num2<<endl;}输入输出库存函数的头文件ch为循环变量例,猴子第一天摘下若干个桃子,当即吃了一半,还不过隐,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个。设xn表示第n天的桃子数。x10=1x9=(x10+1)*2x8=(x9+1)*2x7=(x8+1)*2x6=(x7+1)*2x5=(x6+1)*2x4=(x5+1)*2x3=(x4+1)*2x2=(x3+1)*2x1=(x2+1)*2Xn-1=(xn+1)*2n=10,9,8,…,2初值x10=1设n代表天数,桃子个数为x。初始时,n=10,x=1循环条件:n>1循环体:x=(x+1)*2,n=n-1n为循环变量设n代表天数,桃子个数为x。初始时,n=10,x=1循环条件:n>1循环体:x=(x+1)*2,n=n-1程序段:

intn=10,x=1;while(n>1){x=(x+1)*2;n=n-1;}cout<<x<<endl;4.3.2do-while语句格式:do循环体while(表达式);执行顺序先执行循环体语句,后判断条件。

表达式为true(1)时,继续执行循环体

表达式01循环体必须含有改变条件表达式值的语句。例4-15写出程序运行的结果。#include<iostream.h>voidmain(){ints=0,i=1;do{s=s+i;i=i+1;}while(i<6);cout<<"s="<<s<<endl;}运行的结果:s=15i i<6的值循环次数s0121345601111510631第1次第2次第3次第4次第5次循环结构i为循环变量例4-16用辗转相除法求两自然数的最大公约数。数学模型:

rbabarb若r0,重复做r=amodb,a=b,b=r。初值:读入a,b的值.循环体:r=amodb,a=b,b=r循环条件:

r0初值:读入a,b的值.循环体:r=amodb,a=b,b=r循环条件:r0算法:(1)输入a,b的值。(2)若a<b,则交换a与b的值。(3)r=amodb(4)a=b(5)b=r(6)若r0转(3),否则转(7)。(7)输出a的值。1假a<b0交换a,b的值r=amodb,a=b,b=r输出a读入a,br001循环结构#include<iostream.h>voidmain() {inta,b,r;cout<<"请输入a,b的值"<<endl;cin>>a>>b;if(a<b){intt;t=a;a=b;b=t;}

do{ r=a%b;a=b;b=r;}while(r!=0);cout<<"最大公约数为:";cout<<a<<endl;

}1假a<b0交换a,b的值r=amodb,a=b,b=r输出a读入a,br001r为循环变量例4-17计算直到最后一项的绝对值小于10-7时停止计算。建立数学模型:

sts初值:s=x,t=x,n=2循环体:s=s+tn=n+1循环条件:|t|10-7直到|tn|<10-7。算法:(1)输入x(2)设s=x,t=x,n=2(3)(4)(5)n=n+1(6)如果成立,转(3),否则转(7)。(7)输出结果。初值:s=x,t=x,n=2循环体:s=s+tn=n+1循环条件:|t|10-7算法:(1)输入x(2)设s=x,t=x,n=2(3)(4)(5)n=n+1(6)如果成立,转(3),否则转(7)。(7)输出结果。do{t=-t*x*x/(2*n-1)/(2*n-2);s=s+t; n=n+1;}while(fabs(t)>=1e-7);t为循环变量#include<iostream.h>#include<math.h>voidmain(){floats,t,x;intn;cin>>x;s=x,t=x,n=2;do{t=-t*x*x/(2*n-1)/(2*n-2);s=s+t; n=n+1;}while(fabs(t)>=1e-7);cout<<s<<endl;}4.3.3for语句格式:for(表达式1;表达式2;表达式3)循环体

1假0表达式2表达式1循环体表达式3先计算必须能改变表达式2的值。执行过程:当表达式2为true时,执行循环体。可以是复合语句。循环条件例4-18写出程序运行的结果。#include<iostream.h>voidmain(){inti,s(0);for(i=1;i<6;i++) s=s+i;cout<<"s="<<s<<endl;}运行的结果:s=15i i<6的值循环次数s01121345601111510631第1次第2次第3次第4次第5次循环结构i为循环变量例4-19计算。其中x=1,2,…,10。算法:(1)x=1(2)如果x10,则转(3),否则程序结束。(3)输出ex的值。(4)输出lnx的值。(5)x=x+1(6)转(2){ cout<<x<<'\t'<<exp(x)<<'\t';cout<<log(x)<<endl;}循环体for(x=1;x<=10;x++)x为循环变量#include<iostream.h>#include<math.h>voidmain(){intx;cout<<"x\t"<<"exp(x)\t"<<"ln(x)"<<endl;for(x=1;x<=10;x++){ cout<<x<<'\t'<<exp(x)<<'\t'; cout<<log(x)<<endl;}}1假0x<=10x=1输出x++例4-20求斐波那契数列(Fibonacci)前10个数(不包括第10个数)。112358131,1,2,3,5,8,13,21,34,56从第3个数起,第i个数是前两个数的和。数学模型:

如果用整型变量i表示斐波那契数的个数,则i=1,2,…,9。初始时:f1=1,f2=1,并输出f1和f2,i=3。循环体:f=f1+f2,输出f,f1=f2,f2=f。循环条件:i<10。ff2f1i为循环变量for(i=3;i<10;i++)

{

f=f1+f2; cout<<f<<''; f1=f2;f2=f;

}#include<iostream.h>voidmain(){inti,f1,f2,f;

f1=1;f2=1;cout<<f1<<''<<f2<<''

;for(i=3;i<10;i++)

{

f=f1+f2; cout<<f<<''; f1=f2;f2=f;

}}

说明:(1)for中的3个表达式都可以省略,但分号不能省。如,计算1+3+…+99的值。①i=1;s=0;for(;i<100;i=i+2)s=s+i;对循环变量i赋初值的表达式放在for语句之前。②s=0;for(i=1;i<100;){s=s+i;i=i+2;}对改变循环变量i值的表达式放在for语句的循环体中。③s=0;for(i=1;;i=i+2){if(i>=100)break;s=s+i;}

for语句中的表达式2省略时,循环体一定要通过if语句和break语句实现退出循环的情况。④i=1;s=0;for(;i<100;){s=s+i;i=i+2;}

(2)表达式1和表达式3可以是逗号表达式。如,for(i=1,s=0;i<100;s=s+i,i=i+2);(3)对循环体中的语句可以放在for语句的表达式3中。例,某学校4位同学中的一位做了好事不留名。表扬信来了之后,校长问这4位是谁做的好事。A说:不是我。B说:是C。C说:是D。D说:他胡说。已知3个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。设用变量man表示要寻找的做了好事的人,利用关系表达式将4个人所说的话表示成表达式,则有man!=‘A’,man==‘C’,man==‘D’,man!=‘D’由题目可知,这三个条件的和sum为3。man的值:’A’,’B’,’C’,’D’初值:man=‘A’循环体:求sum的值,若sum=3,则输出man的值。循环条件:man<‘E’改变man值的表达式:man=man+1for(man='A';man<'E';man++){sum=(man!='A')+(man=='C')+(man=='D')+(man!='D'); if(sum==3)cout<<man<<endl;}man为循环变量#include"iostream.h"voidmain(){charman;intsum;for(man='A';man<'E';man++){sum=(man!='A')+(man=='C')+(man=='D')+(man!='D'); if(sum==3)cout<<man<<endl;}}课堂练习第70页3.#include<iostream.h>voidmain(){ intk,x=10; for(k=9;k>=0;k--) { switch(k){case1:case4:case7:x++;break;

case2:case5:case8:break;case3:case6:case9:x+=2;}}cout<<x<<endl;}4.3.4循环语句小结①while语句和for语句都是先判断后循环,do-while语句是先循环后判断;②do-while语句中的循环体至少执行一次,while语句和for语句中的循环体可能一次也没有执行;③for语句有三个表达式,可以分别用于循环变量初始化、循环结束条件和循环变量的更新,格式清晰、使用灵活,因此用得比较多,其次是while语句,而do-while语句比较少用。①#include<iostream.h>voidmain(){ints=0,i=6;do{s=s+i;i=i+1;}while(i<6);cout<<"i="<<i<<endl;}运行的结果:i=7②#include<iostream.h>voidmain(){ints=0,i=6;while(i<6){s=s+i;i=i+1;}cout<<"s="<<s<<endl;}运行的结果:s=0③#include<iostream.h>voidmain(){ints=0;for(inti=6;i<6;i++)s=s+i;cout<<"s="<<s<<endl;}运行的结果:s=04.4多重循环程序设计在循环语句中的循环体又嵌套另一个循环语句时,这种循环语句称为多重循环。多重循环的嵌套次数是任意的。按照嵌套层次数,分别叫二重循环、三重循环等。处于内部的循环语句叫做内循环.处于外部的循环语句叫做外循环。例4-21写出下列程序的运行结果。#include<iostream.h>voidmain(){intk,p; for(k=1;k<3;k++){ cout<<"k="<<k<<endl;

for(p=7;p<=9;p++) cout<<p;

cout<<endl; } }运行结果:外循环内循环k=1789k=2789k为外循环的循环变量p为内循环的循环变量例4-22用二重循环输出下列图形。***************#include<iostream.h>voidmain(){cout<<"*"<<endl;cout<<"**"<<endl;cout<<"***"<<endl;cout<<"****"<<endl;cout<<"******"<<endl;}用i表示行数,1i5,每行有i个“*”。初值:i=1循环条件:i5循环体:(1)输出第i行的i个“*”;(2)换行。for(i=1;i<=5;i++){输出第i行的i个“*”;

cout<<endl;}***************i是循环变量输出第i行的i个“*”:用j表示第j个“*”,则1ji。初值:j=1循环条件:ji循环体:输出第j个”*”for(i=1;i<=5;i++){

输出第i行的i个“*”;cout<<endl;}***************for(j=1;j<=i;j++)cout<<’*’;j是内循环的循环变量#include<iostream.h>voidmain(){inti,j;

for(i=1;i<=5;i++){for(j=1;j<=i;j++)cout<<’*’;cout<<endl;}}***************例4-23,计算1!+2!+…+n!计算sn=1!+2!+…+n!的数学模型:

ss初值:s=0,k=1循环体:计算k!的值t,s=s+t,对t进行累加k=k+1循环条件:k≤n1假0k<=ns=0,k=1计算k!的值t,s=s+tk=k+1计算k!的值:k!=1*2*3*…*(k-1)*kt=t*i,其中,i=1,2,…,k初值:t=1,i=1循环体:t=t*i,对i进行累乘i=i+1循环条件:i≤ki是循环变量1假0i<=kt=1,i=1t=t*ii=i+11假0k<=ns=0,k=1②s=s+tk=k+1①计算k!的值t1假0i<=kt=1,i=1t=t*ii=i+1①②k是循环变量for(k=1;k<=n;k++){

计算k!的值s=s+t;}t=1;i=1;while(i<=k){t=t*i;i++;}#include<iostream.h>voidmain(){ints,n,i,k,t;cin>>n;s=0;

for(k=1;k<=n;k++){

计算k!的值s=s+t;}cout<<s;}t=1;i=1;while(i<=k){t=t*i;i++;}#include<iostream.h>voidmain(){ints,n,i,k,t;cin>>n;s=0;for(k=1;k<=n;k++){t=1;i=1;

while(i<=k){t=t*i;i++;}s=s+t;}cout<<s;}外循环内循环k是外循环循环变量i是内循环循环变量例,某地刑侦大队对涉及6个嫌疑人的一桩疑案进行以下分析,试将作案人找出来。(1)A,B至少有1人作案;(2)A,E,F3人中至少有2人参与作案;(3)A,D不可能是同案犯;(4)B,C或同时作案,或与本案无关;(5)C,D中有且仅有1人作案;(6)如果D没有参与作案,则E也不可能参与作案。A||B(A&&E)||(A&&F)||(E&&F)!(A&&D)(B&&C)||(!B&&!C)(C&&!D)||(!C&&D)D||(!D&&!E)由题目可知,这6个表达式的和sum为6时,此时A、B、C、D、E、F的值为1时就是作案人。A,B,C,D,E,F的值:0,1循环体:求这6个表达式的和sum,若sum=6,则输出A,B,C,D,E,F是否是罪犯。#include"iostream.h"voidmain(){intA,B,C,D,E,F,c1,c2,c3,c4,c5,c6;for(A=0;A<=1;A++)for(B=0;B<=1;B++)for(C=0;C<=1;C++)for(D=0;D<=1;D++)for(E=0;E<=1;E++)for(F=0;F<=1;F++)

{c1=A||B; c2=!(A&&D);c3=(A&&E)||(A&&F)||(E&&F);c4=(B&&C)||(!B&&!C);c5=(C&&!D)||(D&&!C);c6=D||(!D&&!E);

if(c1+c2+c3+c4+c5+c6==6){ cout<<"A:"<<(A==0?"不是":"是")<<"罪犯"<<endl; cout<<"B:"<<(B==0?"不是":"是")<<"罪犯"<<endl; cout<<"C:"<<(C==0?"不是":"是")<<"罪犯"<<endl; cout<<"D:"<<(D==0?"不是":"是")<<"罪犯"<<endl; cout<<"E:"<<(E==0?"不是":"是")<<"罪犯"<<endl; cout<<"F:"<<(F==0?"不是":"是")<<"罪犯"<<endl;}}}穷举法4.5常用转移语句4.5.1break语句格式:break;语句序列1表达式1真假break语句序列2表达式2假真后继语句循环体语句序列1if(表达式2)break;语句序列2功能:终止循环。该语句出现在循环体时的形式如下例:该例的功能图例4-24写出程序的运行结果。#include<iostream.h> voidmain() { for(intm=20;m>16;m--) { if(m%6==0)break; cout<<m<<""; } } 运行结果:m2019201918循环3次,但只输出2个结果。4.5.2continue语句格式:continue;循环体while(表达式1){语句序列1if(表达式2)cont

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论