版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第2章章 程序控制结构程序控制结构2.1 顺序结构顺序结构 2.2 选择结构选择结构 2.3 循环结构循环结构 2.4 控制转向语句控制转向语句 2.5 程序实例程序实例 2o 按照语句出现的先后顺序依次执行。按照语句出现的先后顺序依次执行。2.1 顺序结构顺序结构 语句语句1语句语句2图图2.1 顺序结构流程图顺序结构流程图32.1.1 定义语句定义语句 在在C+C+程序中,一个标识符(变量名、常程序中,一个标识符(变量名、常量名、函数名、对象名等)在使用之前必须先定量名、函数名、对象名等)在使用之前必须先定义。义。定义语句定义语句是在给出其特征同时,并通知编译是在给出其特征同时,并通知
2、编译器为其分配存储空间,而器为其分配存储空间,而说明语句说明语句仅告诉编译器仅告诉编译器它的存在及其特征。它的存在及其特征。o例如:例如:int x=1,y=2;/定义语句const double PI=3.14159;/定义语句float score303; /定义语句42.1.2 表达式语句表达式语句o 形式:形式: ;o 可以进行的操作通常包括赋值操作,复合赋值操可以进行的操作通常包括赋值操作,复合赋值操作,增量、减量操作,函数调用操作和输入输出作,增量、减量操作,函数调用操作和输入输出操作。操作。o 例如:例如:n+;-m;abs(x);cinxy;coutx+y;s=x+y;m=n=
3、t;a=10,b=20;z*=w;52.1.3 复合语句复合语句o形式:形式: 1 2 n o作用:作用:当程序中某个位置在语法上只允许一条语当程序中某个位置在语法上只允许一条语句,而在语义上要执行多条语句才能完成某个操作句,而在语义上要执行多条语句才能完成某个操作时,需要使用复合语句时,需要使用复合语句。例如:例如:if(x=0)if(x=0) couta; couta; coutb; coutb; 62.1.4 空语句空语句o形式:形式: ; o作用:作用: 当程序中某个位置在语法上需要当程序中某个位置在语法上需要一条语句,而在语义上又不一条语句,而在语义上又不 要求执行任要求执行任何动作
4、时,可放上一条空语句。何动作时,可放上一条空语句。o一般适用于在循环语句中做空循环体一般适用于在循环语句中做空循环体o例如:例如: for (m = 0; m1000; m+) ; for (m = 0; m1000; m+) ;72.1.5 基本输入输出基本输入输出o 在在C+C+中,所有输入输出是通过中,所有输入输出是通过输入输出流输入输出流来实现的。来实现的。o 在在C+C+中,将数据从一个对象到另一个对象的流动抽中,将数据从一个对象到另一个对象的流动抽象为象为“流流”。在。在iostreamiostream库中包含一个标准输入流库中包含一个标准输入流对象对象cincin和一个标准输出流
5、对象和一个标准输出流对象coutcout,分别用来实现,分别用来实现从键盘读取数据,以及将数据在屏幕上输出。从键盘读取数据,以及将数据在屏幕上输出。o 要使用要使用cincin和和coutcout,需要在,需要在C+C+程序开头加上如下包程序开头加上如下包含命令:含命令:#include #include / / 新标准中的头文件名新标准中的头文件名using namespace std;using namespace std; / / 引入引入stdstd名字空间中的标识符名字空间中的标识符81. 1. 标准输入流标准输入流cincino cincin负责从键盘读取数据,使用负责从键盘读取数
6、据,使用提取运算符提取运算符“”就可以将键盘键入的数据读入到变量中。就可以将键盘键入的数据读入到变量中。o 语法格式:语法格式: cincin变量变量11变量变量22变量变量n;n; 变量可以是任意数据类型,输入时各个数据之间变量可以是任意数据类型,输入时各个数据之间用空格键、用空格键、TabTab键或键或EnterEnter键分隔。键分隔。o 例如:例如:int x,y;int x,y;cinxy;cinxy;键盘上输入:键盘上输入:5 588x x5键盘键盘y y8键盘键盘92. 2. 标准输出流标准输出流coutcouto 负责将数据输出到屏幕上,使用负责将数据输出到屏幕上,使用插入运算
7、符插入运算符“”就可以将数据显示在屏幕上当前光标所就可以将数据显示在屏幕上当前光标所在位置。在位置。o 语法格式:语法格式: coutcout表达式表达式11表达式表达式22表达式表达式n;n; 表达式可以是任意类型的,数据输出的格式由表达式可以是任意类型的,数据输出的格式由系统自动决定。系统自动决定。101112【例例2.12.1】 cout cout应应用示例用示例#include #include using namespace std;using namespace std;int main()int main() int x=12,y=83;int x=12,y=83; double
8、 pai_1=3.14159265;double pai_1=3.14159265; float pai_2=3.141f; float pai_2=3.141f; char ch1=a,ch2=b;char ch1=a,ch2=b; bool ok=true; bool ok=true; coutx=xendl;coutx=xendl; couty=yendl; couty=yendl; coutpai_1=pai_1,pai_2=pai_2endl;coutpai_1=pai_1,pai_2=pai_2endl; coutch1=ch1,ch2=ch2endl;coutch1=ch1,ch
9、2=ch2endl; coutok=okendl; coutok=okendl; cout!ok=!okendl; cout!ok=!okendl; return 0; return 0; x=12y=83pai_1=3.14159,pai_2=3.141ch1=a,ch2=bok=1!ok=013【例【例2.2】 使用格式控制符输出数据使用格式控制符输出数据#include #include #include #include using namespace std;using namespace std;int main()int main() int a=35;int a=35; dou
10、ble b=21.3456789; double b=21.3456789; cout1234567890123endl; cout1234567890123endl; coutdeca hexa octaendl; coutdeca hexa octaendl; coutbendl; coutbendl; coutsetprecision(4)bendl; coutsetprecision(4)bendl; coutsetw(10)bendl; coutsetw(10)bendl; coutsetw(10)setfill( coutsetw(10)setfill(* *)bendl;)ben
11、dl; coutsetiosflags(ios:scientific)bendl;coutsetiosflags(ios:scientific)bendl; coutsetprecision(3)bendl;coutsetprecision(3)bendl; coutsetprecision(2)bendl; coutsetprecision(2)bb,则将,则将a、b交换,否则不交换。两数交换,否则不交换。两数交换可采用借助于第三个变量间接交换的方法交换可采用借助于第三个变量间接交换的方法 if(ab)t=a;a=b;b=t;17#include #include using namespa
12、ce std;using namespace std;int main()int main() int a,b,t;int a,b,t;coutcout请输入两个整数请输入两个整数a,b:endl;a,b:ab; cinab; if(ab)if(ab)t=a;a=b;b=t; t=a;a=b;b=t; coutabendl;coutabendl; return 0; return 0; a=a+b;b=a-b;a=a-b; 请输入两个整数请输入两个整数a,b:85 404085a=ab;b=ab;a=ab; 182 2if- elseif- else语句(双分支)语句(双分支) if( if(
13、表达式表达式) ) 语句语句1 1 else else 语句语句2 2truetrue表达表达式式语句语句1 1falsefalse语句语句2 2双分支双分支ifif语句流程图语句流程图19【例【例2.4】输入一个年份,判断是否为闰年。】输入一个年份,判断是否为闰年。o 分析分析 闰年的年份可以被闰年的年份可以被4整除而不能被整除而不能被100整除,整除,或者能被或者能被400整除。整除。 #include using namespace std;int main() int year; coutyear; if(year%4=0 & year%100 !=0)|(year%400=0
14、) coutyear年是闰年年是闰年endl; else coutyear年不是闰年年不是闰年endl; return 0;203 3if- else if if- else if 语句(多分支)语句(多分支)if(if(表达式表达式1)1) 语句语句1 1 else if( else if(表达式表达式2) 2) 语句语句2 2 else if ( else if (表达式表达式n)n) 语句语句n n else else 语句语句n+1n+1falsfalse efalsfalse efalsfalse et r ut r ue et r ut r ue e表达式表达式1 1表达式表达式2
15、 2表达式表达式n n语句语句n n语句语句n+1n+1语句语句2 2语句语句1 1t r ut r ue e21【例例2.52.5】根据x的值,计算分段函数y的值。y的计算公式为:5cos(79 )lnxxexyxxx(x x0 0)(00 x x1515)(1515x x3030)(x x3030)22#include #include #include #include using namespace std;using namespace std;int main()int main() double x,y; double x,y; cout coutx; cinx; if(x0)
16、if(x0) y=fabs(x); y=fabs(x); else if(x15) else if(x15) y=exp(x) y=exp(x)* *cos(cos(x x); ); else if(x30)else if(x30) y=pow(x,5); y=pow(x,5); else else y=(7+9 y=(7+9* *x)x)* *log(x); log(x); couty=yendl; couty=y0) if(y0) coutx与与y均大于均大于0; else coutx大于大于0,y小于等于小于等于0;v注意:注意:如何使之与如何使之与第一个第一个ifif配配对?对?25【
17、例【例2.62.6】从键盘上输入两个字符,比较其大小,输出大】从键盘上输入两个字符,比较其大小,输出大于、等于和小于的判断结果。于、等于和小于的判断结果。#include #include using namespace std;using namespace std;int main()int main() char ch1,ch2;char ch1,ch2;coutcoutch1ch2;cinch1ch2;if(ch1!=ch2)if(ch1!=ch2) if(ch1ch2)if(ch1ch2) coutch1 coutch1大于大于ch2endl;ch2endl; else else c
18、outch1 coutch1小于小于ch2endl;ch2endl;elseelsecoutch1coutch1等于等于ch2endl;ch2endl; return 0; return 0; 请输入两个字符:请输入两个字符:h dh大于大于d请输入两个字符:请输入两个字符:X YX小于小于Y请输入两个字符:请输入两个字符:& &等于等于&262.2.2 switch2.2.2 switch语句语句switch (switch (表达式表达式) ) case case 常量表达式常量表达式1: 1: 语句语句组组1 1 case case 常量表达式常量表达式2: 2:
19、 语句语句组组2 2 case case 常量表达式常量表达式n: n: 语句语句组组n n default: default: 语句语句组组n+1n+1 注意:表达式只能是整型、注意:表达式只能是整型、字符型或枚举型字符型或枚举型注意:常量表达注意:常量表达式式1n1n的值必须各的值必须各不相同。不相同。27有有无无无无falsfalse e有有无无falsefalsetruetrue计算表达式的值计算表达式的值常量表达式常量表达式1 1语句语句1 1breakbreak常量表达式常量表达式2 2语句语句2 2breakbreak无无有有falsefalse常量表达式常量表达式n ntrue
20、true语句语句n nbreakbreakdefaultdefault语句语句n+1n+1truetrue有有switchswitch语句执行流程语句执行流程28【例【例2.72.7】将输入的百分制成绩按以下规定转】将输入的百分制成绩按以下规定转换成相应的等级:换成相应的等级: 成成 绩绩 等级等级10090 优秀优秀 8980 良好良好 7970 中等中等 6960 及格及格 590 不及格不及格 29#include #include using namespace std;using namespace std;int main()int main() float score;float
21、 score;coutcoutscore;cinscore;if(score=0 & score=0 & score=100)switch(int(score)/10)switch(int(score)/10) case 10: case 10: case 9: coutscore case 9: coutscore分:优秀分:优秀endl;break;endl;break; case 8: coutscore case 8: coutscore分:良好分:良好endl;break;endl;break; case 7: coutscore case 7: coutscore分
22、:中等分:中等endl;break;endl;break; case 6: coutscore case 6: coutscore分:及格分:及格endl;break;endl;break; default:coutscore“ default:coutscore“分:不及格分:不及格”endl; ”endl; else else cout cout输入数据有误输入数据有误!endl;!endl; return 0; return 0; 共用同一个语句组共用同一个语句组 思考:若省去思考:若省去break语句,情况语句,情况会怎样?会怎样? 302.3 循环结构循环结构o 按照给定规则重复地执
23、行程序中的语句按照给定规则重复地执行程序中的语句 2.3.1 while 语句语句while (表达式表达式) 语句语句falsefalsetrtru ue e表达表达式式语句语句图图2.14 while2.14 while语句流程图语句流程图循环体循环体当型循环当型循环31【例例2.82.8】求求 1+2+3+1001+2+3+100#include using namespace std;int main()int i(1),sum(0); /定义变量,初始化定义变量,初始化while(i=100) /构造循环构造循环 sum+=i; / 循环体,多次执行循环体,多次执行 i+; /循环变
24、量循环变量coutsum=sumendl; return 0;0112真真33真真64真真105真真真真100真真101真真50505050假假sumsum505050500sumsum1i i123364100 050505050101101循环结束循环结束!实际上是将实际上是将i i不停地累加到一起不停地累加到一起32【例例2.92.9】求出满足不等式的最小求出满足不等式的最小n n值:值:5131211n#include using namespace std;int main() int i=0; double s=0; while(s8) s+=double(1)/+i;/i-循环变
25、量循环变量 coutn=iendl; return 0;8332.3.2 do-whiledo-while语句语句dodo 语句语句while (while (表达式表达式) ); ;falsfalse etruetrue表达表达式式语句语句图图2.15 do-while2.15 do-while语句流程图语句流程图直到型循环直到型循环34【例【例2.102.10】 求自然数求自然数1 1100100之和,要求用之和,要求用do-do-whilewhile语句实现。语句实现。#include #include using namespace std;using namespace std;in
26、t main()int main() int i(1),sum(0);int i(1),sum(0); dodo sum+=i;sum+=i; i+;/i-i+;/i-循环变量循环变量 while(i=100); while(i=100); coutsum=sumendl;coutsum=sumendl; return 0; return 0; int i(1),sum(0); while(i2)while(12) cout”I like C+!”endl; cout”I like C+!”endl; / / 相当于一个空操作语句相当于一个空操作语句do do cout”I like C+!”
27、endl; cout”I like C+!”2); while(12); / / 输出一行文字信息输出一行文字信息注意:注意: dowhiledowhile首先执行循环体,然后再判断表达式,至首先执行循环体,然后再判断表达式,至少执行一次循环体。少执行一次循环体。当第一次循环表达式的值为真时,当第一次循环表达式的值为真时,whilewhile与与dowhiledowhile的结果完全一样,否则结果不相同。的结果完全一样,否则结果不相同。36【例【例2.11】输入一个自然数,将该数的每一位数字按反】输入一个自然数,将该数的每一位数字按反序输出。例如:输入序输出。例如:输入12345,输出,输出5
28、4321。#include #include using namespace std;using namespace std;void main()void main() unsigned long int num,dgt;unsigned long int num,dgt; cout coutnum; cinnum; cout” cout”倒置结果为:倒置结果为:”;”; do do dgt=num%10; dgt=num%10; coutdgt; cout0); while(num0); coutendl; coutendl; 37for(for(表达式表达式1;1;表达式表达式2;2;表
29、达式表达式3 3 ) ) 表达式表达式2执行执行 非非0 00 0退出退出循环循环表达式表达式1表达式表达式3表达式表达式1;while(while(表达式表达式2 2) ) ; 表达式表达式3 3; ; 2.3.3 for 语句语句计数型循环计数型循环38【例【例2.122.12】求自然数】求自然数1 1100100之和,要求用之和,要求用forfor语句实现。语句实现。#include #include using namespace std;using namespace std;int main()int main() int i,sum(0);int i,sum(0);for(i=1
30、;i=100;i+)for(i=1;i=100;i+)sum+=i;sum+=i;coutsum=sumendl;coutsum=sumendl; return 0; return 0; 39【例【例2.13自学自学】 一个小球从一个小球从100米高处米高处落下,每次落地后反弹回原高度的一半,落下,每次落地后反弹回原高度的一半,再落下。求它在第再落下。求它在第10次落地时共经过多少次落地时共经过多少米?第米?第10次反弹多高?次反弹多高?o分析:分析:第第1 1次落地后反弹高度为次落地后反弹高度为h=100/2h=100/2第第2 2次落地时经过的米数为次落地时经过的米数为s=100+hs=1
31、00+h* *2 2第第2 2次落地后反弹高度为次落地后反弹高度为h=h/2h=h/2第第3 3次落地时经过的米数为次落地时经过的米数为s=s+hs=s+h* *2 240#include #include #include #include using namespace std;using namespace std;int main()int main() float s=100.0,h=s/2;float s=100.0,h=s/2;for(int i=2;i=10;i+)for(int i=2;i=10;i+) s=s+hs=s+h* *2;2; h=h/2;h=h/2; couts
32、etiosflags(ios:fixed)setprecision(3); coutsetiosflags(ios:fixed)setprecision(3);coutcout第第1010次落地时,共经过次落地时,共经过ss米;米;反弹的高反弹的高度是度是hh米米endl;endl; return 0; return 0; 思考思考 该小球反弹多少该小球反弹多少次才能静止下来?次才能静止下来? 41注意:注意:forfor语句中的三个表达式可以部分省略或全部省略,但语句中的三个表达式可以部分省略或全部省略,但 ; 不能省略,若省略表达式不能省略,若省略表达式2 2,则表示循环条件为真。,则表示
33、循环条件为真。for( ;i=100) break ; / break语句用于跳出循环语句用于跳出循环 int sum=0;for(int i=1; i100)break; if(i100)break; 三个表达式都可以是任何类型的三个表达式都可以是任何类型的C+表达式。表达式。int i,sum;for(i=1,sum=0;i=100;sum+=i,i+); 表达式表达式1可以是变量定义语句,即循环控制变量可在其中定义。可以是变量定义语句,即循环控制变量可在其中定义。int sum=0;for(int i=1;i=100;i+) sum+=i;432.3.4 多重循环多重循环o 循环嵌套:循
34、环循环嵌套:循环体内体内包含另一个包含另一个完整的完整的循环结构循环结构。o 三种循环语句皆三种循环语句皆可以相互嵌套可以相互嵌套 。for() while() do while();44【例例2.14】 编程显示输出九九乘法表 图图2.19 九九乘法表运行界面九九乘法表运行界面45trutrue efalsfalse ei=1i=1i =i =9 ?9 ?truetruefalsefalsej=1j=1j =j =9 ?9 ?显示显示i i* *j j表达表达式式j+j+i+i+#include using namespace std;int main() coutttt九九 九九 乘乘 法
35、法 表表endl; coutttt-endl; for(int i=1;i=9;i+) for(int j=1;j=9;j+)coutij=i*jt; coutendl; return 0;外层:外循环外层:外循环 内层:内循环内层:内循环46图图2.21 下三角的九九乘法表下三角的九九乘法表图图2.22 上三角的九九乘法表上三角的九九乘法表思考:思考:打印上三角或下三角程序如何改动?打印上三角或下三角程序如何改动?47注意:注意:(1 1)内循环控制变量与外循环控制变量不能同名。)内循环控制变量与外循环控制变量不能同名。(2 2)外循环必须完全包含内循环,不能交叉外循环必须完全包含内循环,不
36、能交叉。(3 3)若循环体内有若循环体内有ifif语句,或语句,或ifif语句内有循环语句,语句内有循环语句,也不能交叉。也不能交叉。(4 4)利用)利用gotogoto语句可以从循环体内转向循环体外,语句可以从循环体内转向循环体外,但绝对不允许从循环体外转入循环体内。但绝对不允许从循环体外转入循环体内。(5 5)当嵌套使用各种循环语句时,特别需要严格按)当嵌套使用各种循环语句时,特别需要严格按照缩进规则来书写程序。有时还应适当配以注释,以照缩进规则来书写程序。有时还应适当配以注释,以保持清晰易辩的结构特征。保持清晰易辩的结构特征。482.4 控制转向语句控制转向语句2.4.1 break2.
37、4.1 break语句语句仅可用于以下两种情况:仅可用于以下两种情况:(1)用于)用于switch语句中,保证多分支情况的正确语句中,保证多分支情况的正确运行运行(2)用于循环语句中,以便在某一适当时刻及位)用于循环语句中,以便在某一适当时刻及位置终止执行循环体中的语句,并使流程控制退出该置终止执行循环体中的语句,并使流程控制退出该循环控制结构,转去执行该循环语句的下一条语句。循环控制结构,转去执行该循环语句的下一条语句。49【例【例 2.15 2.15】 break break语句应用示例。已知圆的半径为不大于语句应用示例。已知圆的半径为不大于1010的正的正整数,要求输出所有不大于整数,要
38、求输出所有不大于100100的圆面积值。的圆面积值。#include #include using namespace std;using namespace std;const float PI=3.14159;const float PI=3.14159;int main()int main() int r; int r; float area; float area; cout cout半径不大于半径不大于1010且面积不大于且面积不大于100100的圆,其面积如下:的圆,其面积如下:endl;endl; for(r=1;r=10;r+)for(r=1;r100) if(area100)
39、 break; / break; /如果面积大于如果面积大于100100,则跳出循环,则跳出循环 coutcout圆半径圆半径=r=r,面积,面积=areaendl;=areaendl; return 0; return 0; 502.4.2 continue 2.4.2 continue 语句语句o格式:格式: continue; continue;o功能:只用在循环体中,用来功能:只用在循环体中,用来提前结束该提前结束该次循环而进入下一轮循环次循环而进入下一轮循环。在循环体中遇到在循环体中遇到continuecontinue语句时,本次循环语句时,本次循环结束,回到循环条件判断是否执行下一
40、次循结束,回到循环条件判断是否执行下一次循环。环。51o 在在whilewhile和和do-whiledo-while循环结构中,循环结构中,continuecontinue语语句将使执行流程直接跳转到循环条件的判定部句将使执行流程直接跳转到循环条件的判定部分,然后决定循环是否继续进行。分,然后决定循环是否继续进行。o 在在forfor循环结构中,当遇到循环结构中,当遇到continuecontinue时,执行时,执行流程将跳过循环体中余下的语句,而转去执行流程将跳过循环体中余下的语句,而转去执行forfor语句中的表达式语句中的表达式3 3,然后根据表达式,然后根据表达式2 2进行进行循环条
41、件的判定以决定是否继续执行循环条件的判定以决定是否继续执行forfor循环循环体。体。52while(i=100)while(i=100) break;break; coutsumendl;coutsumendl;while(i=100)while(i=100) continue; continue; breakbreak和和continuecontinue语句的区别语句的区别53例例2.162.16】continuecontinue语句应用示例。请写出下列程序的运语句应用示例。请写出下列程序的运行结果。行结果。#include #include using namespace std;usi
42、ng namespace std;int main()int main() int i,s; int i,s; for(i=1,s=0;i=10;+i) for(i=1,s=0;i=10;+i) if(i%2=0) if(i%2=0) continue; continue; if(i%10=7) if(i%10=7) break; break; s+=i; s+=i; couts=s; couts=s; return 0; return 0; s=9该程序的功能:求出该程序的功能:求出110所有奇数的和且当遇到所有奇数的和且当遇到某数除以某数除以10的余数为的余数为7时提前结束求和。时提前结束
43、求和。542.4.3 goto2.4.3 goto语句语句goto goto 标号标号; ;标号标号: : 语句语句; ;标号语句标号语句将流程转到标号所将流程转到标号所指定的标号语句处。指定的标号语句处。55【例例2.17】利用利用goto语句实现求一个自然数的阶乘并输出结果。语句实现求一个自然数的阶乘并输出结果。#include using namespace std;int main() int i=1,m,s=1; coutm; loop: s*=i; +i; if(i=m) goto loop; couts=sendl; return 0;56说明:说明:(1)如果不加限制地使用)如
44、果不加限制地使用goto语句转来转去,则会破坏程序自语句转来转去,则会破坏程序自上而下的执行顺序而降低程序的可读性,不符合结构化程序设计上而下的执行顺序而降低程序的可读性,不符合结构化程序设计的思想。因此应尽量避免使用的思想。因此应尽量避免使用goto语句;语句;(2)特殊场合使用)特殊场合使用goto将简化程序表达。将简化程序表达。int i,j,k;for(i=1;i10;+i) for(j=1;j10;+j) for(k=1;k10;+k) if(i*j*k=125) goto End;End:couti*j*kn(2) m除以除以n得余数得余数r(3) 若若r=0,则,则n为最大公约数
45、,结束;否则执行为最大公约数,结束;否则执行(4)(4) mn,n r,再重复执行,再重复执行(2)m m n r n r 12 12 5 2 5 25 5 2 2 1 1 2 2 1 1 0 0 辗转相除法辗转相除法while (r=m % n)!=0)while (r=m % n)!=0) m=n;n=r; m=n;n=r; coutn; coutn; 58#include #include using namespace std;using namespace std;int main()int main() int m,n,r,t;int m,n,r,t; cout coutmn; c
46、inmn; t=m t=m* *n; if(mn)n; if(mn) r=m;m=n;n=r; r=m;m=n;n=r; while(r=m%n)!=0) while(r=m%n)!=0) m=n; m=n; n=r; n=r; cout cout最大公约数:最大公约数: nendl; nendl; cout cout最小公倍数:最小公倍数: t/nendl; t/nendl; return 0;return 0; 最小公倍数的计算方法为:最小公倍数的计算方法为:m 与与n 的最小公倍数的最小公倍数=( mn)(m与与n 的最大公约数)的最大公约数)59【例【例2.19】顺序输出】顺序输出31
47、00之间的所有素数,并计算输出素之间的所有素数,并计算输出素数之和。数之和。分析:分析:(1 1)素数:一个大于)素数:一个大于1 1的除了它自身和的除了它自身和1 1以外,不能被其它任何正整数所整除以外,不能被其它任何正整数所整除的整数。判别某数的整数。判别某数m m是否为素数,最简单的方法是:用是否为素数,最简单的方法是:用i=2i=2,3 3,m-1m-1逐个除,逐个除,只要有一个能整除,m就不是素数,可以用break提前结束循环;若都不能整除,则m是素数。(2 2)如果m不是素数,则必然能被分解为两个因子a和b,并且其中之一必然小于等于 sqrt(m) ,另一个必然大于等于sqrt(m
48、) 。所以要判断m是否为素数,可简化为判断它能否被能否被2 2至至sqrt(m)sqrt(m)之间的数整除之间的数整除即可。因为若m不能被2至sqrt(m)之间的数整除,则必然也不能被sqrt(m)至m-1之间的数整除。(3 3)在退出循环以后,如果是因为找到了一个能整除m的数而通过break退出循环的,则i=sqrt(m) ;反之,如果是正常退出循环的,则i=sqrt(m)+1。因此,在循环结束后,只要判断判断i i是否大于是否大于sqrt(m)sqrt(m),若是,则表明m是素数,输出该素数。(4 4)要判断多个素数是否为素数,需要使用双重循环。外循环每循环一次提供一个数,由内循环通过多次
49、除法判断其是否为素数。60#include #include #include #include using namespace std;using namespace std;int main()int main() cout3 cout3100100之间的素数是:之间的素数是:endl;endl; int m,i,s=0; int m,i,s=0; for(m=3;m100;m+=2) for(m=3;m100;m+=2) int k=int(sqrt(m); int k=int(sqrt(m); for(i=2;i=k;i+) for(i=2;ik) if(ik) coutmt; cou
50、tmt; s+=m; s+=m; cout”n3 cout”n3100100之间的素数之和之间的素数之和=”s;=”s; coutendl; coutendl; return 0; return 0; 61【例【例 2.20 2.20】 输入输入x x,计算,计算sin(x)sin(x)。计算公式为:。计算公式为:当第当第n n项的绝对值小于项的绝对值小于1010-6-6时结束。时结束。分析:关键是找部分级数和的分析:关键是找部分级数和的通项通项:),(,ntnnxtnn7531) 2)(1(2262int n=1;int n=1;double x,double x,t t, ,sinxsin
51、x(0); (0); / / 变量变量t t保存每一项的值;给保存每一项的值;给sinxsinx变量赋初值变量赋初值0 0coutcoutx;cinx;t=x;t=x; / / 将求和式的第一项值将求和式的第一项值x x赋给赋给t twhile(fabs(t)=0.000001)while(fabs(t)=0.000001) sinx+=t;sinx+=t; t=-tt=-t* *x x* *x/(n+1)x/(n+1)* *(n+2);(n+2); n+=2;n+=2; coutcout编程求得的编程求得的sin(x)=sinxendl;sin(x)=sinxendl;coutcout调用标准函数求得的调用标准函数求得的sin(x)=sin(x)endl;sin(x)=sin(x)endl; 63【例【例 2.21 2.21】 求求“水仙花数水仙花数”。所谓。所谓“水仙花数水仙花数”是指一个是指一个三位正整数,其各位数字的立方和等于该数本身。三位正整数,其各位数字的立方和等于该数本身。例如:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建省泉州市实验中学2026届九年级物理第一学期期中联考试题含解析
- 链家买房补充协议书
- 吉林省松原第五中学2026届八年级物理第一学期期末监测模拟试题含解析
- 钢材采购协议合同范本
- 谁出贴现协议书
- 2025年桥梁检测市场调查报告
- 2025家政公司保姆服务合同范本
- 银行从业考试讲义及答案解析
- 2025至2030全球及中国锌颜料行业产业运行态势及投资规划深度研究报告
- 2025瑞丰集合信托产品合同
- 增强营销策略方案
- 十五五规划12项重大部署专题解读
- 交通标识标牌安装工程施工方案方法
- 电信宽带服务协议6篇
- 比亚迪讲解课件
- 人工智能+智能路灯节能减排分析报告
- 湖南单招历史试题及答案
- 2025中国华腾工业有限公司招聘笔试历年参考题库附带答案详解(3卷合一)
- 2025宝鸡社区考试真题及答案
- 医院大型活动安全保卫方案
- 液晶显示器件模组制造工晋升考核试卷及答案
评论
0/150
提交评论