谭浩强版C++程序设计-第3章--程序设计初步ppt课件.ppt
第第3章章 程序设计初步程序设计初步本章要点本章要点n基本概念基本概念n赋值语句赋值语句nC+输入与输出输入与输出n关系运算和逻辑运关系运算和逻辑运算算n选择结构选择结构n循环结构循环结构3.1 面向过程的程序设计和算法面向过程的程序设计和算法n在面向过程的程序设计中,设计者必须制定计在面向过程的程序设计中,设计者必须制定计算机执行的具体步骤。算机执行的具体步骤。n处理问题的一系列步骤即算法。计算机算法分处理问题的一系列步骤即算法。计算机算法分为:数值算法和非数值算法。为:数值算法和非数值算法。n算法的表示方法有:算法的表示方法有:自然语言自然语言 用人们使用的语言描述算法用人们使用的语言描述算法流程图流程图 用一些图框、线条以及文字说明来形象用一些图框、线条以及文字说明来形象 地、直观地描述算法。地、直观地描述算法。伪代码伪代码 计算机语言(程序)计算机语言(程序)流程图示例流程图示例假假选择选择过程过程真真循环体语句组循环体语句组过程过程开始开始结束结束3.2 C+程序和语句程序和语句1.C+程序结构程序结构程序包括:程序包括:数据描述(声明语句)数据描述(声明语句)数据操作(执行语句)数据操作(执行语句)2.C+语句概述语句概述(1)声明语句)声明语句 变量说明,如变量说明,如 inta;(2)执行语句)执行语句 控制语句控制语句主要完成分支结构程序和循环结构程序的控制。主要完成分支结构程序和循环结构程序的控制。C+主要包括以下主要包括以下9个控制语句:个控制语句:ifelse语句语句 分支语句分支语句 switch语句语句 多分支语句多分支语句 for语句语句 循环语句循环语句 while语句语句 循环语句循环语句 dowhile语句语句 循环语句循环语句 continue语句语句 结束本次循环语句结束本次循环语句 break语句语句 结束循环或结束结束循环或结束switch语句语句 goto语句语句 转向语句转向语句 return语句语句 从函数返回语句从函数返回语句2.C+语句概述语句概述函数调用语句函数调用语句 C+有大量的系统函数,程序员也可以自己定义函数,有大量的系统函数,程序员也可以自己定义函数,对这些函数的调用可以作为一条语句。对这些函数的调用可以作为一条语句。表达式语句表达式语句 由一个表达式构成一个语句,即在表达式后添加一由一个表达式构成一个语句,即在表达式后添加一个分号,如赋值表达式语句等。个分号,如赋值表达式语句等。(3)空语句)空语句 空语句只有一个分号。即:空语句只有一个分号。即:;因此空语句什么也不做。因此空语句什么也不做。(4)复合语句)复合语句 除了上面的简单语句外,可以将一组简单语句用大除了上面的简单语句外,可以将一组简单语句用大括号括号 括起来,称之为复合语句。括起来,称之为复合语句。3.3 赋值语句赋值语句n赋值语句由赋值语句由赋值表达式赋值表达式加上一个加上一个分号分号构成。构成。a=b+25;c=(29.5*d)/(a+b);n赋值运算符具有赋值运算符具有“右结合性”,如:,如:a=2;x=b;与;与 2=a;b=x;nC+程序中可以出现连续赋值的情况。程序中可以出现连续赋值的情况。a=b=c=d;3.4 C+的输入与输出的输入与输出n C+通过调用输入输出流库的流对象通过调用输入输出流库的流对象cin和和cout 实现输入、输出功能。实现输入、输出功能。1.输入输出流的基本操作输入输出流的基本操作cin语句的一般格式:语句的一般格式:cin变量变量1变量变量2变量变量n;cout语句的一般格式:语句的一般格式:cout表达式表达式1表达式表达式2表达式表达式n;n在程序中使用在程序中使用cin、cout时,必须用预处理命时,必须用预处理命令包含头文件令包含头文件stream,即即#include。流提取运算符流提取运算符流插入运算符流插入运算符说明说明n一个一个cin、cout语句可以分写成若干行。语句可以分写成若干行。如:如:cinab;可以写成:可以写成:cout“this is a C+program”endl;可写成:可写成:n 不能用一个插入运算符插入多个输出项。不能用一个插入运算符插入多个输出项。如:如:couta,b,c;coutaba b;cout“this is”“a C+program”endl;2.在输入输出流中使用控制符在输入输出流中使用控制符-格式控制格式控制说明说明n使用控制字符时,头文件应包含使用控制字符时,头文件应包含#includ 和和#include n一个一个cout语句中可以用多个控制符,但每个流插语句中可以用多个控制符,但每个流插入运算符入运算符“后只能跟一个控制符,多个控后只能跟一个控制符,多个控制符需要用多个流插入运算符制符需要用多个流插入运算符“。如:如:double a=123.456789012345;couta;输出输出123.456(默认精度(默认精度6)coutsetprecision(9)a;输出输出123.456789 coutsetioflags(ios:fixed)setprecision(4)a输出输出123.4567(小数点后精度(小数点后精度4)例例3.1:输出使各行小数点对齐:输出使各行小数点对齐#include#include using namespace std;int main()double a=123.456,b=3.14159,c=-3214.67;coutsetiosflags(ios fixed)setiosflags(ios right)setprecision(2);coutsetw(10)aendl;coutsetw(10)bendl;coutsetw(10)cendl;return 0;输出:输出:123.46 3.14 -3214.672.putchar和和 getchar函数函数nputchar函数函数(字符输出函数)字符输出函数)其作用是向终端输出一个字符,其作用是向终端输出一个字符,n格式:格式:putchar(c););输出字符变量输出字符变量c的值的值 其中其中:c 可以是可以是字符型变量字符型变量或或整型变量整型变量n也可以输出转义字符也可以输出转义字符 putchar(101)等效等效 putchar(A),和和putchar(65);putchar()输出单引号输出单引号例例3.2:输出单个字符:输出单个字符#include using namespace std;int main()char a,b,c;a=B;b=O;c=Y;putchar(a);putchar(b);putchar(c);putchar(n);putchar(66);putchar(79);putchar(89);putchar(10);return 0;运行结果运行结果:BOY BOYn getchar()函数函数(字符输入函数)字符输入函数)getchar()函数的返回值为字符的值。函数的返回值为字符的值。例例 3.3 输入单个字符输入单个字符#include using namespace std;int main()char c;c=getchar();putchar(c+32);return 0;getchar函数得到的字符可以赋给一个字符或整函数得到的字符可以赋给一个字符或整型变量,也可以不赋给任何变量。型变量,也可以不赋给任何变量。在调试程序时,可以用在调试程序时,可以用getchar()暂停程序执行;暂停程序执行;n printf的作用是向终端的作用是向终端输出输出若干个若干个任意类型任意类型的数据。的数据。n一般格式一般格式:printf(格式控制,输出列表)格式控制,输出列表)例如:例如:printf(“%d%d”,a,b););格式控制格式控制 输出列表输出列表printf(“a=%d b=%d”,a,b)格式说明格式说明 普通字符普通字符 输出列表输出列表 结果结果 a=3 b=43.scanf 和和printf函数函数n d 格式符格式符d格式符。用来输出十进制整数。格式符。用来输出十进制整数。%d printf(“%d,%d”,a,b););%md printf(“%4d,%4d”,a,b)a=123;b=12345;printf(“%4d,%4d”,a,b);123,12345%ld 输出长整型数输出长整型数 printf(“%ld,%ld”,a,b););如:如:a=1234;printf(“%10ld”),a);则:则:1234 C 格式符格式符 c格式符。用来输出一个字符。格式符。用来输出一个字符。例:例:main()char a=a;int b=97;print(“%c,%dn”,a,a););print(“%c,%d”,b,b););结果:结果:a,97 a,97n整数的范围在整数的范围在0255之间,可以用字符形式输出;之间,可以用字符形式输出;n一个字符数据可以用整数形式输出。也可指定字符宽度。如:一个字符数据可以用整数形式输出。也可指定字符宽度。如:printf(“%3d”,c););S 格式符格式符 s格式符。用来输出一个字符串。格式符。用来输出一个字符串。%s 原长输出原长输出%ms 字符串占字符串占m列,小于列,小于m左补空格左补空格%-ms 大于大于m原样输出,小于原样输出,小于m右补空格右补空格%m.ns 输出占输出占m列,只取字符串左端列,只取字符串左端n个字符个字符%-m.ns n个字符输出在个字符输出在m列的左侧,右补空格列的左侧,右补空格例:例:main()printf(“%3S,%7.2s,%5.4s,%-5.3n”,“CHINA”,“CHINA”,“CHINA”,“CHINA”););结果:结果:CHINA,CH,CHIN,CHIf 格式符格式符 f格式符。用来输出实数,以小数形式输出。格式符。用来输出实数,以小数形式输出。%f,不指定字段宽度,由系统自动指定。整数部分如不指定字段宽度,由系统自动指定。整数部分如数输出,并输出数输出,并输出6位小数。单精度实数有效位数为位小数。单精度实数有效位数为7位;位;双精度实数有效位数为双精度实数有效位数为16位,小数位,小数6位。位。如:如:main()float x,y;x=111111.111;y=222222.222;printf(“%f”,x+y););结果:结果:333333.326125%m.nf 指定输出的数据占指定输出的数据占m列,其中列,其中n位小数;右对齐。位小数;右对齐。%-m.nf 同上,左对齐。同上,左对齐。e 格式符格式符e格式符。以指数形式输出实数。格式符。以指数形式输出实数。%e 整数一位整数一位,小数小数6位位,指数指数5位包括位包括e和符号位和符号位.例例:printf(“%e,%e”,123.456,0.006543);输出输出:1.234560e+002,6.543000e-003%m.ne和和%-m.ne 其中其中m为输出宽度,为输出宽度,-为左齐为左齐,n为尾数的小数位数为尾数的小数位数.说明说明n 格式字符一般用小写格式字符一般用小写n格式控制字符串中可以包括转义字符格式控制字符串中可以包括转义字符nd、c、s、f、e、等字符,紧接在、等字符,紧接在“%”后面即为格后面即为格式字符,在其它位置则为普通字符式字符,在其它位置则为普通字符 printf(“c=%cf=%fs=%s”,c,f,s):n若想若想输出输出“%”,则用连续两个,则用连续两个“%”表示表示 如:如:printf(“%f%”,1.0/3););输出:输出:0.333333%n不同系统的格式输出,可能会有些小差别不同系统的格式输出,可能会有些小差别nscanf 格式输入函数格式输入函数,用来输入任何类型的多个用来输入任何类型的多个数据数据n一般格式一般格式:scanf(格式控制格式控制,地址列表地址列表)例例:main()int a,b,c;scanf(“%d%d%d”,&a,&b,&c);printf(“%d,%d,%dn”,a,b,c);运行时的合法输入可以是运行时的合法输入可以是:3 4 5 3453 3(按按Tab键键)4 4 5 5非法输入为非法输入为:3,4,5scanf 函数函数说明说明 1.格式控制后面是变量地址格式控制后面是变量地址,而不是变量名而不是变量名如:如:scanf(“%d,%d”,a,b);是不对的是不对的2.格式控制字符串中除了格式说明符以外的其它字格式控制字符串中除了格式说明符以外的其它字符符,在输入时要原样输入在输入时要原样输入,如如:scanf(“%d:%d:%d”,&a,&b,&c);scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);3.在用在用“%c”格式输入字符时格式输入字符时,空格字符和空格字符和“转义字转义字符符”都作为有效字符都作为有效字符,如如:scanf(“%c%c%c”,&a,&b,&c);输入输入:a b c3.5 编写顺序结构的程序编写顺序结构的程序 例例3.5 求一元二次方程式求一元二次方程式ax2+bx+c=0的根。的根。a,b,c的值在运行时由键盘输入,它们的值的值在运行时由键盘输入,它们的值满足满足b2-4ac0。源程序源程序#include#include /由于程序要用到数学函数由于程序要用到数学函数 sqrt,故应包含头文件,故应包含头文件cmathusing namespace std;int main()float a,b,c,x1,x2;cinabc;x1=(-b+sqrt(b*b-4*a*c)/(2*a);x2=(-b-sqrt(b*b-4*a*c)/(2*a);coutx1=x1endl;coutx2=x2endl;return 0;#3.6 关系运算与逻辑运算关系运算与逻辑运算n 关系运算符与关系表达式关系运算符与关系表达式 6个关系运算符:个关系运算符:、=、=、!=优先级高优先级高 优先级低优先级低 关系运算符优先级低于算术运算符、高于赋值运算符关系运算符优先级低于算术运算符、高于赋值运算符 注意区分注意区分“等于等于”运算符运算符“=”与与“赋值赋值”运算符运算符“=”关系表达式的结果类型为关系表达式的结果类型为bool,值只能为,值只能为 true 或或 false 如:如:int a=4,b=10;a b,ab,a=b,a=b,a!=b的结果分别为:的结果分别为:true,true,false,false,false,true在在C/C+中用数值中用数值1代表代表true,用,用0代表代表false。例:例:布尔量值的表示布尔量值的表示#includeusing namespace std;int main()int a,b;bool c;a=2;b=5;c=ab;coutc=cendl;if(c=true)coutabendl;else coutb=60)&(a90)|(b85)/a大于大于90,或者,或者b大于大于85,结果为,结果为true,条件成立,条件成立!(a=100)/a不等于不等于100时,条件成立时,条件成立 若若a=4 则则 !a 为为false逻辑与逻辑与&:当且仅当两个运算量的值都为:当且仅当两个运算量的值都为“真真”时,运算结果为时,运算结果为“真真”,否则为,否则为“假假”。逻辑或逻辑或|:当且仅当两个运算量的值都为:当且仅当两个运算量的值都为“假假”时,运算结果为时,运算结果为“假假”,否则为,否则为“真真”。逻辑非逻辑非!:当运算量的值为:当运算量的值为“真真”时,运算结果时,运算结果为为“假假”;当运算量的值为;当运算量的值为“假假”时,运算结果时,运算结果为为“真真”。n 逻辑运算符的运算规则逻辑运算符的运算规则判断某一年是否为闰年的逻辑表达式判断某一年是否为闰年的逻辑表达式分析:闰年是符合下列条件之一的年份:分析:闰年是符合下列条件之一的年份:(1)能被)能被4整除,但不能被整除,但不能被100整除;整除;(2)能被)能被100整除,又能被整除,又能被400整除。整除。n用逻辑表达式表示:用逻辑表达式表示:(year%4=0&year%100!=0)|year%400=0 3.7 选择结构和选择结构和if语句语句n选择结构也称分支结构,就是在程序运行过选择结构也称分支结构,就是在程序运行过程中,根据具体条件执行不同的程序段。程中,根据具体条件执行不同的程序段。nC+选择结构可以由选择结构可以由if语句或语句或switch语句实现。语句实现。nC+提供了提供了3种形式的种形式的if语句。语句。1.if语句形式一语句形式一n一般形式:一般形式:if(表达式表达式)语句组语句组;注意:表达式必须用注意:表达式必须用“()”括起来括起来 若语句组中只有一条简单的若语句组中只有一条简单的语句,则大括号语句,则大括号“”可以省略。可以省略。表达式语句假(0)真(非0)表达式语句假(0)真(非0)表达式语句假(0)真(非0)例例 输入一个成绩输入一个成绩,判断是否需要补考,如判断是否需要补考,如果需要打印出来果需要打印出来#include int main()int score;cout score;if(score 60)cout 不及格,需要补考!不及格,需要补考!endl;程序运行时,若输入的成绩大于或等于程序运行时,若输入的成绩大于或等于6060,则没有任何输,则没有任何输出。出。2.if语句形式二语句形式二n一般形式:一般形式:if(表达式表达式)语句组语句组1;else 语句组语句组2;表达式表达式语句组语句组1语句组语句组2真真假假if-else语句流程图注意:表达式必须用注意:表达式必须用“()”括起来括起来 若语句组中只有一条简单的语句,若语句组中只有一条简单的语句,则大括号则大括号“”可以省略。可以省略。外不用加分号。外不用加分号。例:求两个数中较大的值和较小的值例:求两个数中较大的值和较小的值#include using namespace std;int main()int a,b,max,min;a=10;b=20;if(ab)max=a;min=b;elsemax=b;min=a;cout max=max endl;cout min=min endl;return 0;程序运行结果为:程序运行结果为:max=20max=20min=10min=103.if语句形式三语句形式三n一般形式:一般形式:if(表达式表达式1)语句组语句组1;else if(表达式表达式2)语句组语句组2;else if(表达式表达式m)语句组语句组m;else 语句组语句组n;表达式表达式 1语句组语句组1语句组语句组2真真假假表达式表达式2真真假假语句组语句组3表达式表达式3真真假假语句组语句组4if-else 实现多分支流程实现多分支流程图图举例:举例:从键盘上输入一个成绩,从键盘上输入一个成绩,如果大于等于如果大于等于90,输出,输出“优优”,如果大于等于如果大于等于80,小于,小于90,输出,输出“良良”,如果大于等于如果大于等于70,小于,小于80,输出,输出“中中”,如果大于等于如果大于等于60,小于,小于70,输出,输出“及格及格”,如果小于如果小于60,输出,输出“不及格不及格”。#include void main()int s;cout s;if(s=90)cout 优 =80)&(s 90)cout 良 =70)&(s 80)cout 中 =60)&(s 70)cout 及格 endl;else if(s 60)cout 不及格 endl;4.if语句的嵌套语句的嵌套n在在 if 语句的语句的“语句组语句组1”或或“语句组语句组2”中又包含有中又包含有 if 语语句的情况。句的情况。if ()if ()语句语句 1 else 语句语句 2else if ()语句语句 3 else 语句语句 4 n if语句嵌套时,语句嵌套时,else子句总是与在它前面、距它最近、子句总是与在它前面、距它最近、且尚未匹配的且尚未匹配的if配对。为明确匹配关系,避免匹配错误,配对。为明确匹配关系,避免匹配错误,建议将内嵌的建议将内嵌的if语句一律用语句一律用“”括起来。括起来。例:例:输入三个数输入三个数a、b、c,输出其中最大的数,输出其中最大的数#include void main()int a,b,c,max;cout a b c;if(a b)if(a c)max=a;elsemax=c;elseif(bc)max=b;elsemax=c;cout max=max b)max=a;else max=b;可以用条件运算符可以用条件运算符(?:)来处理:来处理:max=(ab)?a:b;条件运算符和条件表达式条件运算符和条件表达式n条件运算符:条件运算符:?:(三目运算符三目运算符)n条件表达式:表达式条件表达式:表达式1?表达式表达式2:表达式表达式3 n运算规则:如果运算规则:如果“表达式表达式1”的值为真(非的值为真(非0),),则整个表达式的值等于表达式则整个表达式的值等于表达式2的值,否则,整的值,否则,整个表达式的值等于表达式个表达式的值等于表达式3的值。的值。如:如:max=(ab)?a:b /如如ab,结果为,结果为a,否,否则为则为b,可求两数中较大者。,可求两数中较大者。min=(ab)?a:b /如如ab,结果为,结果为a,否则,否则为为b,可求两数中较小者,可求两数中较小者。例例3.7 输入一个字符,判别它是否为大写字母,输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。换。然后输出最后得到的字符。#include using namespace std;int main()char ch;cinch;ch=(ch=A&ch=Z)?(ch+32):ch;/判别判别ch是否大是否大 写字母,是则转换写字母,是则转换 coutchendl;return 0;3.9 多分支选择结构和多分支选择结构和switch语句语句 n switch语句的一般形式:语句的一般形式:switch(表达式表达式)case 常量常量1:语句组:语句组1;break;case 常量常量2:语句组:语句组2;break;case 常量常量n:语句组:语句组n;break;default:语句组:语句组n+1;break;注意:表达式只能是整型、字符注意:表达式只能是整型、字符型或枚举型型或枚举型注意:注意:常量常量1n的值必须各不相的值必须各不相同同若没有若没有break语句语句,将会从满足,将会从满足条件的语句组开始一直执行下条件的语句组开始一直执行下去。去。各各case语句的出现次序不影响语句的出现次序不影响执行结果。执行结果。多个多个case语句可以共用一组执语句可以共用一组执行语句。行语句。n switch语句流程图语句流程图其它常量n常 量1常量2表达式语句组1语句组2语句组n语句组n+1例:例:用用switch语句实现成绩分等级的功能语句实现成绩分等级的功能#include void main()int s,i;cout s;i=s/10;switch(i)case 9:case 10:cout “优优”endl;break;case 8:cout “良良”endl;break;case 7:cout “中中”endl;break;case 6:cout “及格及格”endl;break;default:cout “不及格不及格”endl;break;3.10 3.10 编写选择结构的程序编写选择结构的程序例例3.8 编写程序,判断某一年是否为闰年。编写程序,判断某一年是否为闰年。分析:闰年是符合下列条件之一的年份:分析:闰年是符合下列条件之一的年份:(1)能被)能被4整除,但不能被整除,但不能被100整除;整除;(2)能被)能被100整除,又能被整除,又能被400整除。整除。用一个逻辑表达式表示:用一个逻辑表达式表示:(year%4=0&year%100!=0)|year%400=0用条件语句实现如下:用条件语句实现如下:#include using namespace std;int main()int year;bool leap;coutyear;/输入年份输入年份 if(year%4=0)/年份能被年份能被4整除整除 if(year%100=0)/年份能被年份能被4整除又能被整除又能被100整除整除 if(year%400=0)/年份能被年份能被4整除又能被整除又能被400整除整除 leap=true;/闰年,令闰年,令leap=true(真真)else leap=false;/非闰年,令非闰年,令leap=false(假假)else /年份能被年份能被4整除但不能被整除但不能被100整除肯定是闰年整除肯定是闰年 leap=true;/是闰年,令是闰年,令leap=true else /年份不能被年份不能被4整除肯定不是闰年整除肯定不是闰年 leap=false;/若为非闰年,令若为非闰年,令leap=false 源程序源程序if(leap)coutyear is;/若若leap为真,就输出年份和为真,就输出年份和“是是”else coutyear is not;/若若leap为真,就输出年份和为真,就输出年份和“不不 是是”cout a leap year.0,有两个不相等的实根。,有两个不相等的实根。(4)b 2-4ac a b c;if(fabs(a)1e-6)cout 不是一元二次方程不是一元二次方程 endl;elsedisc=b*b-4*a*c;if(fabs(disc)=1e-6)/有两个相等的实根有两个相等的实根cout x1=x2=-b/(2*a)1e-6)/有两个不相等的实根有两个不相等的实根x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);cout x1=x1 endl;cout x2=x2 endl;else /有两个共轭复根有两个共轭复根 p=-b/(2*a);q=sqrt(fabs(disc)/(2*a);cout x1=p +q i endl;cout x2=p -q i endl;源程序(续)源程序(续)#例:编一个程序计算指定年月有几天,例:编一个程序计算指定年月有几天,年月由键盘输入。年月由键盘输入。n分析:每年的分析:每年的1,3,5,7,8,10,12月份有月份有31天,天,4,6,9,11月份有月份有30天,如果不是闰年,天,如果不是闰年,2月份有月份有28天,闰年的天,闰年的2月有月有29天。判断闰年的天。判断闰年的条件是:能被条件是:能被4整除但不能被整除但不能被100整除,或者能整除,或者能被被400整除。整除。源程序源程序#include void main()int year,month,days;cout year month;switch(month)case 1:case 3:case 5:case 7:case 8:case 10:case 12:days=31;break;case 4:case 6:case 9:case 11:days=30;break;源程序(续)源程序(续)case 2:if(year%4=0)&(year%100!=0)|(year%400=0)days=29;elsedays=28;break;default:days=0;break;if(days=0)cout 月份输入有误!月份输入有误!endl;elsecout 该月份有该月份有 days 天。天。endl;3.11 循环结构和循环语句循环结构和循环语句n当同一段程序要反复执行多次时,就要用到当同一段程序要反复执行多次时,就要用到循环结构。循环结构。n结构化程序设计的三种基本结构:结构化程序设计的三种基本结构:顺序结构顺序结构选择结构选择结构循环结构循环结构1.while语句语句nwhile语句的一般形式:语句的一般形式:while(表达式表达式)循环体语句组循环体语句组;循环条件循环条件循环体语句组循环体语句组真真假假while语句流程图例例3.10 求求1100的累计和的累计和#include using namespace std;int main()int i=1,sum=0;while(i=100)sum+=i;i+;cout sum=sum endl;return 0;注意注意:(1)循环体包)循环体包含一个以上语句时要含一个以上语句时要用用;(;(2)在循环体)在循环体中应有使循环趋于结中应有使循环趋于结束的语句。束的语句。2.do-while语句语句ndo-while语句的一般格式语句的一般格式:do 循环体语句组循环体语句组;while(循环条件循环条件);循环条件循环条件循环体语句组循环体语句组真真假假do-while语句流程图例例3.11 用用do-while语句求语句求1100的累计和的累计和#include void main()int i=1;int sum=0;dosum+=i;i+;while(i=100);cout sum=sum endl;3.for语句语句nfor语句的一般格式语句的一般格式:for(表达式(表达式1;表达式表达式2;表达式表达式3)循环体语句组循环体语句组;n执行过程:执行过程:求解表达式求解表达式1;求解表达式求解表达式2,若其值为真,则,若其值为真,则执行循环体,然后求解表达式执行循环体,然后求解表达式3,再转表达式再转表达式2;否则,结束循环。;否则,结束循环。假假for语句流程图表达式表达式2表达式表达式1真真循环体语句组循环体语句组表达式表达式3说明:说明:n表达式表达式1通常用于为循环变量赋初通常用于为循环变量赋初值值;表达式表达式2通常为循环条件通常为循环条件;表达式表达式3通常为循环变量增值或减通常为循环变量增值或减值,以使循环趋于结束。值,以使循环趋于结束。n三个表达式都可以省略,但分号三个表达式都可以省略,但分号不能省。如果表达式不能省。如果表达式2省略,则循省略,则循环条件总为真。如果表达式环条件总为真。如果表达式3省略,省略,循环体中应有改变循环变量的语循环体中应有改变循环变量的语句。句。假假for语句流程图表达式表达式2表达式表达式1真真循环体语句组循环体语句组表达式表达式3例:例:用用for语句求语句求1100的累计和的累计和#include void main()int i;int sum=0;for(i=1;i=100;i+)sum+=i;cout sum=sum endl;3.13 break、continue语句语句1.break语句语句 一般格式一般格式 break;作用:提前结束循环。当程序运行到作用:提前结束循环。当程序运行到break语句时,语句时,立即结束循环,转向循环语句下面的语句继续执行。立即结束循环,转向循环语句下面的语句继续执行。它只能用在循环语句和它只能用在循环语句和switch语句内。语句内。2.continue语句语句 一般格式一般格式 continue;作用:当程序运行到作用:当程序运行到continue语句时,循环体余下的语句时,循环体余下的语句不再执行,立即试图进入下次循环。语句不再执行,立即试图进入下次循环。对对于于for循循环环,遇遇到到continue语语句句时时,跳跳过过循循环环体体其其余余语语句句,转转向向循循环环语语句句中中的的表表达达式式3的的计计算算;对对于于while和和do-while循循环环,跳过循环体其余语句,转向循环条件表达式的计算。跳过循环体其余语句,转向循环条件表达式的计算。例例 求求1100不能被不能被3整除的整数之和整除的整数之和#include void main()int i;int sum=0;for(i=1;i=100;i+)if(i%3=0)continue;sum+=i;cout sum=sum endl;如果如果i i能被能被3 3整除,则执行整除,则执行continuecontinue语句,语句,立即结束本次循环,执行立即结束本次循环,执行i+i+语句,接下语句,接下来判断来判断i=100i=100是否满足;是否满足;如果如果i i不能被不能被3 3整除,则不执行整除,则不执行continuecontinue语语句,将句,将i i加到变量加到变量sumsum中。中。3.14 编写循环结构的程序编写循环结构的程序n例例3.12 用下面公式求用下面公式求的近似值。的近似值。/41-1/3+1/5-1/7+直到最后一项的绝对值小于直到最后一项的绝对值小于10-7为止。为止。源程序源程序#include#include#include using namespace std;int main()int s=1;double n=1,t=1,pi=0;while(fabs(t)1e-7)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;coutpi=setiosflags(iosfixed)setprecision(6)piendl;return 0;n不能定义为整型变量不能定义为整型变量例例3.13 求求Fibonacci数列前数列前40个数。个数。这个数列有如下特点:第这个数列有如下特点:第1、2个数为个数为1、1。从。从第第3个数开始,每个数是其前面两个数之和。即个数开始,每个数是其前面两个数之和。即F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n3)#include#include using namespace std;int main()long f1,f2;int i;f1=f2=1;for(i=1;i=20;i+)coutsetw(12)f1setw(12)f2;/设备输出字段宽度为设备输出字段宽度为12,每次输出两个数,每次输出两个数 if(i%2=0)coutendl;/每输出完每输出完4个数后换行,使每行输出个数后换行,使每行输出4个数个数 f1=f1+f2;/左边的左边的f1代表第代表第3个数,是第个数,是第1、2个数之和个数之和 f2=f2+f1;/左边的左边的f2代表第代表第4个数,是第个数,是第2、3个数之和个数之和 return 0;例例3.14 找出找出100200间的全部素数。间的全部素数。#include#include#include using namespace std;int main()int m,k,i,n=0;bool prime;/定义布尔变量定义布尔变量prime for(m=101;m=200;m=m+2)/判别判别m是否为素数,是否为素数,m由由101变化变化 到到200,增量为,增量为2 prime=true;/循环开始时设循环开始时设prime为真,即先认为为真,即先认为m为素数为素数 k=int(sqrt(m);/用用k代表根号代表根号m的整数部分的整数部分 for(i=2;i=k;i+)/此循环的作用是将此循环的作用是将m被被2根号根号m除,检查除,检查 是否能整除是否能整除 if(m%i=0)/如果能整除,表示如果能整除,表示m不是素数不是素数 prime=false;/使使prime变为假变为假 break;/终止执行本循环终止执行本循环 if(prime)/如果如果m为素数为素数 coutsetw(5)m;/输出素数输出素数m,字段宽度为,字段宽度为5 n=n+1;/n用来累计输出素数的个数用来累计输出素数的个数 if(n%10=0)coutendl;/输出输出10个数后换行个数后换行 coutendl;/最后执行一次换行最后执行一次换行 return 0;例:例:打印所有水仙花数打印所有水仙花数#include void main()int i