资源预览内容
第1页 / 共81页
第2页 / 共81页
第3页 / 共81页
第4页 / 共81页
第5页 / 共81页
第6页 / 共81页
第7页 / 共81页
第8页 / 共81页
第9页 / 共81页
第10页 / 共81页
亲,该文档总共81页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
程序的三种基本结构程序的三种基本结构 简单语句与复合语句简单语句与复合语句 ifif条件分支语句条件分支语句 switchswitch多路开关语句多路开关语句 循环语句循环语句 循环嵌套循环嵌套 breakbreak、continuecontinue和和gotogoto语句语句 程序举例程序举例第三章第三章 控制语句控制语句3.1 3.1 程序的三种基本结构程序的三种基本结构C 程序的结构程序的结构C 程序程序 (project 项目或工程项目或工程)源程序文件源程序文件1源程序文件源程序文件2源程序文件源程序文件n预处理命令预处理命令全局变量声明全局变量声明函数函数n函数函数1函数首部函数首部函数体函数体局部变量声明局部变量声明执行语句执行语句3.1.1 C 语句的类型语句的类型1. 1. 控制语句控制语句控制语句控制语句:9 9种,实现对程序流程的控制种,实现对程序流程的控制种,实现对程序流程的控制种,实现对程序流程的控制2. 2. 函数调用语句函数调用语句函数调用语句函数调用语句:任何合法的:任何合法的:任何合法的:任何合法的C C函数调用加上一个分号函数调用加上一个分号函数调用加上一个分号函数调用加上一个分号 如:如:如:如:printf(”num=%dn” , num);printf(”num=%dn” , num);3. 3. 表达式表达式表达式表达式语句语句语句语句:任何合法的:任何合法的:任何合法的:任何合法的C C表达式加上一个分号表达式加上一个分号表达式加上一个分号表达式加上一个分号 如:如:如:如:num=1; num+; num=1; num+; 4. 4. 空语句空语句空语句空语句:只有一个分号:只有一个分号:只有一个分号:只有一个分号5. 5. 复合语句复合语句复合语句复合语句:用一对大括弧:用一对大括弧:用一对大括弧:用一对大括弧 把若干语句括起来就成为把若干语句括起来就成为把若干语句括起来就成为把若干语句括起来就成为一个复合语句,又称为分程序。一个复合语句,又称为分程序。一个复合语句,又称为分程序。一个复合语句,又称为分程序。 如:如:如:如: int a=1; a+; printf(“a=%dn” , a); int a=1; a+; printf(“a=%dn” , a); 3.1.2 三种基本结构三种基本结构1.1.顺序结构顺序结构顺序结构顺序结构2.2.即程序按照语句的书写顺序执行。即程序按照语句的书写顺序执行。即程序按照语句的书写顺序执行。即程序按照语句的书写顺序执行。3.3.例例例例3-1 3-1 按向右及向左对齐的方式显示数据按向右及向左对齐的方式显示数据按向右及向左对齐的方式显示数据按向右及向左对齐的方式显示数据 #include #include #include #include void main()void main()void main()void main() intintintint i=4,j=32,k=128,l=1024; i=4,j=32,k=128,l=1024; i=4,j=32,k=128,l=1024; i=4,j=32,k=128,l=1024;printf(printf(printf(printf(”%6d %-6dn%6d %-6dn%6d %-6dn%6d %-6dn”,i,i);,i,i);,i,i);,i,i);printf(printf(printf(printf(”%6d %-6dn%6d %-6dn%6d %-6dn%6d %-6dn”,j,j);,j,j);,j,j);,j,j);printf(printf(printf(printf(”%6d %-6dn%6d %-6dn%6d %-6dn%6d %-6dn”,k,k);,k,k);,k,k);,k,k);printf(printf(printf(printf(”%6d %-6dn%6d %-6dn%6d %-6dn%6d %-6dn”,l,l);,l,l);,l,l);,l,l); 运行结果为:运行结果为:运行结果为:运行结果为: 4 44 4 32 32 3232 128 128 128128 1024 1024 102410243.1.2 三种基本结构三种基本结构2. 2. 选择结构选择结构选择结构选择结构: 指通过对特定条件的判断,来选指通过对特定条件的判断,来选指通过对特定条件的判断,来选指通过对特定条件的判断,来选择一个分支执行择一个分支执行择一个分支执行择一个分支执行 3.1.2 三种基本结构三种基本结构3. 3. 循环结构循环结构循环结构循环结构:在给定的条件下,重复:在给定的条件下,重复:在给定的条件下,重复:在给定的条件下,重复执行某段程序,直到条件不满足为执行某段程序,直到条件不满足为执行某段程序,直到条件不满足为执行某段程序,直到条件不满足为止止止止 (1)(1)(1)(1) WhileWhileWhileWhile型循环结构型循环结构型循环结构型循环结构 先判断条件,当条件为先判断条件,当条件为先判断条件,当条件为先判断条件,当条件为“ “真真真真” ”时,时,时,时,重复执行某段程序,直到条件为重复执行某段程序,直到条件为重复执行某段程序,直到条件为重复执行某段程序,直到条件为“ “假假假假” ”为止为止为止为止 (2) do-while(2) do-while(2) do-while(2) do-while型循环结构型循环结构型循环结构型循环结构 先执行某段程序,然后再判断条件,先执行某段程序,然后再判断条件,先执行某段程序,然后再判断条件,先执行某段程序,然后再判断条件,当条件为当条件为当条件为当条件为“ “真真真真” ”时,再重复执行这时,再重复执行这时,再重复执行这时,再重复执行这段程序,直到条件为段程序,直到条件为段程序,直到条件为段程序,直到条件为“ “假假假假” ”为止为止为止为止 3.2 3.2 简单语句与复合语句简单语句与复合语句3.2 3.2 简单语句与复合语句简单语句与复合语句1.简单语句简单语句:均是以:均是以“;”结尾的语句结尾的语句 。z=z=x+yx+y; ;c=c=getchargetchar();();2.复合语句复合语句:复合语句是用花招号:复合语句是用花招号“ ”把把“说明说明”和若干个有序的简单语句组合在一起和若干个有序的简单语句组合在一起而构成的语句集合。其一般形式是:而构成的语句集合。其一般形式是: 3.2 3.2 简单语句与复合语句简单语句与复合语句复合语句实例复合语句实例: intint i,j,ki,j,k; ;i=i+1;i=i+1;j=j*2;j=j*2;i=i*j;i=i*j; 3.空语句空语句:空语句的含义是什么动作都不执行,:空语句的含义是什么动作都不执行,语句本身仅有一个分号。语句本身仅有一个分号。 while (while (putchar(getcharputchar(getchar()!=0)()!=0); ; 3.3 if3.3 if条件分支语句条件分支语句 if if 语句的三种形式语句的三种形式 if if 语句的嵌套语句的嵌套 条件运算符及条件表达式条件运算符及条件表达式 if 语句中的条件判断都是用一个表达式来语句中的条件判断都是用一个表达式来表示的。在执行表示的。在执行if语句时,会求解这个表达式语句时,会求解这个表达式的的逻辑值,逻辑值,因为这个表达式的因为这个表达式的逻辑值逻辑值代表了判代表了判断的结果:值为断的结果:值为“T”,判断成立,值为判断成立,值为“F”,判断不成立。因此,判断不成立。因此,if 语句根据判断的结果语句根据判断的结果(成立或不成立(成立或不成立)选择执行预先设定的操作,选择执行预先设定的操作,实际上是根据条件判断表达式的逻辑值是实际上是根据条件判断表达式的逻辑值是“真真”是是“假假”来选择的。来选择的。if 语句语句 if 语句是一种选择控制语句,而且是条件语句是一种选择控制语句,而且是条件分支控制语句,即总是先进行一个条件的判断,分支控制语句,即总是先进行一个条件的判断,然后根据判断的结果(成立或不成立然后根据判断的结果(成立或不成立)选择执选择执行预先设定的操作。行预先设定的操作。if 语句语句一般格式一般格式1 if (表达式表达式) 语句语句1;/ 语句语句1,只一句。如果表达式为真,执行语,只一句。如果表达式为真,执行语句句1;否则什么都不做;否则什么都不做2 if (表达式表达式)语句块语句块1; 如果表达式为真,做语句块如果表达式为真,做语句块1的内容;否则什的内容;否则什么都不做;么都不做;if 语句语句一般格式一般格式3 if (表达式表达式) 语句语句1;else 语句语句2;如果表达式为真,执行语句如果表达式为真,执行语句1;否则执行语句;否则执行语句24 if (表达式表达式)语句块语句块1;else语句块语句块1;if 语句的三种形式语句的三种形式举例:实现如图函数举例:实现如图函数/ / / / 3_2.cpp3_2.cpp3_2.cpp3_2.cpp#include#include#include#include /预编译命令预编译命令预编译命令预编译命令, , , ,将标准输入输出将标准输入输出将标准输入输出将标准输入输出/函数作为头文件函数作为头文件函数作为头文件函数作为头文件void main( )void main( )void main( )void main( )/主函数主函数主函数主函数 /开始开始开始开始intintintint x,y; x,y; x,y; x,y; /变量变量变量变量x,yx,yx,yx,y为整数类型为整数类型为整数类型为整数类型 coutcoutcoutcoutx=;x=;x=;x; x; x; x; /键盘输入一个整数放入键盘输入一个整数放入键盘输入一个整数放入键盘输入一个整数放入x x x x中中中中if(xif(xif(xif(x0) y=1; 0) y=1; 0) y=1; 0) y=1; /如果如果如果如果x0,x0,x0,x0,则将则将则将则将1 1 1 1赋给赋给赋给赋给y y y yelse if(x=0) y=0;/else if(x=0) y=0;/else if(x=0) y=0;/else if(x=0) y=0;/否则否则否则否则, , , ,如果如果如果如果x=0,x=0,x=0,x=0,则将则将则将则将0 0 0 0赋给赋给赋给赋给y y y yelse y=-1;else y=-1;else y=-1;else y=-1;/否则否则否则否则, , , ,将将将将-1-1-1-1赋给赋给赋给赋给y y y ycoutcoutcoutcouty=y=y=y=“yyyy89) putchar(A);if (score89) putchar(A);else if (score79) putchar(B);else if (score79) putchar(B);else if (score69) putchar(C);else if (score69) putchar(C);else if (score59) putchar(D);else if (score59) putchar(D);else putchar(E);else putchar(E);实际上,这种形式是属于第实际上,这种形式是属于第实际上,这种形式是属于第实际上,这种形式是属于第2 2种形式的一种特殊情况,是种形式的一种特殊情况,是种形式的一种特殊情况,是种形式的一种特殊情况,是ifif嵌套语句的一种形式。嵌套语句的一种形式。嵌套语句的一种形式。嵌套语句的一种形式。2. if (2. if (表达式表达式表达式表达式) ) 语句语句语句语句1;1; else else 语句语句语句语句2 2;如:如:如:如:if (score89) putchar(A);if (score89) putchar(A);else if (score79) putchar(B);else if (score79) putchar(B); else if (score69) putchar(C); else if (score69) putchar(C); else if (score59) putchar(D); else if (score59) putchar(D); else putchar(E); else putchar(E);if 语句的三种形式语句的三种形式语句语句1表达式表达式1TF表达式表达式2语句语句2F语句语句n表达式表达式n语句语句n+1FFTTTifif语句第语句第语句第语句第3 3种形式的执行流程图种形式的执行流程图种形式的执行流程图种形式的执行流程图if 语句的说明语句的说明vv if if 语句中,语句中,语句中,语句中,if if 后面的表达式可以是任何类型的合法表达式,后面的表达式可以是任何类型的合法表达式,后面的表达式可以是任何类型的合法表达式,后面的表达式可以是任何类型的合法表达式,甚至可以是常量或变量。不管它是什么形式的数据,程序在执甚至可以是常量或变量。不管它是什么形式的数据,程序在执甚至可以是常量或变量。不管它是什么形式的数据,程序在执甚至可以是常量或变量。不管它是什么形式的数据,程序在执行行行行if if 语句时,首先求解该表达式,而且是求该表达式的语句时,首先求解该表达式,而且是求该表达式的语句时,首先求解该表达式,而且是求该表达式的语句时,首先求解该表达式,而且是求该表达式的“ “逻辑逻辑逻辑逻辑值值值值” ” ,得到整数,得到整数,得到整数,得到整数1 1或整数或整数或整数或整数0 0,然后再选择执行相应的操作。,然后再选择执行相应的操作。,然后再选择执行相应的操作。,然后再选择执行相应的操作。如:如:如:如:if (x0) sign=1;if (x0) sign=1;如:如:如:如:if (x) sign=1;if (x) sign=1;如:如:如:如:if (x+y) sign=1;if (x+y) sign=1;如:如:如:如:if (1) sign=1;if (1) sign=1;if (scoreif (score=100) printf(“Highest score!n”); 100) printf(“Highest score!n”); if (score if (score = = 100) printf(“Highest score!n”); 100) printf(“Highest score!n”); 结果:只有结果:只有结果:只有结果:只有score score 的值的值的值的值等于等于等于等于100 100 时,才会执行时,才会执行时,才会执行时,才会执行printfprintf语句。语句。语句。语句。结果:不管结果:不管结果:不管结果:不管score score 原先的原先的原先的原先的值值值值等于多少,都会执行等于多少,都会执行等于多少,都会执行等于多少,都会执行printfprintf语句。语句。语句。语句。if 语句的嵌套语句的嵌套vv 在在在在ifif或或或或elseelse的内嵌语句中又包含一个或多个的内嵌语句中又包含一个或多个的内嵌语句中又包含一个或多个的内嵌语句中又包含一个或多个ifif语句时,称为语句时,称为语句时,称为语句时,称为ifif语句的嵌套。常用于多重条件,多个分支的选择判断控制。语句的嵌套。常用于多重条件,多个分支的选择判断控制。语句的嵌套。常用于多重条件,多个分支的选择判断控制。语句的嵌套。常用于多重条件,多个分支的选择判断控制。if (if (表达式表达式表达式表达式) ) 语句语句语句语句1;1;elseelse 语句语句语句语句2;2;if (if (表达式表达式表达式表达式) )elseelse常规的常规的常规的常规的 if if 语句语句语句语句嵌套的嵌套的嵌套的嵌套的 if if 语句语句语句语句if(if(表达式表达式表达式表达式) ) 语句语句语句语句1;1;else else 语句语句语句语句2;2;if(if(表达式表达式表达式表达式) ) 语句语句语句语句3;3;else else 语句语句语句语句4;4;语句语句语句语句1;1;if(if(表达式表达式表达式表达式) ) 语句语句语句语句3;3;else else 语句语句语句语句4;4;if(if(表达式表达式表达式表达式) ) 语句语句语句语句1;1;else else 语句语句语句语句2;2;语句语句语句语句3;3;if(if(表达式表达式表达式表达式) ) 语句语句语句语句1;1;语句语句语句语句2;2;? ?ifif与与与与elseelse的配对的配对的配对的配对原则是什么?原则是什么?原则是什么?原则是什么?注意:注意:注意:注意:C C 编译系统总是从编译系统总是从编译系统总是从编译系统总是从ifif嵌套的最里层开始向外,依次将嵌套的最里层开始向外,依次将嵌套的最里层开始向外,依次将嵌套的最里层开始向外,依次将elseelse与在它与在它与在它与在它前面的最近的前面的最近的前面的最近的前面的最近的ifif配对。配对。配对。配对。if 语句的嵌套:例语句的嵌套:例例:例:例:例:下面下面下面下面4 4个语句段中,哪些能正确表示出以下的函数关系?个语句段中,哪些能正确表示出以下的函数关系?个语句段中,哪些能正确表示出以下的函数关系?个语句段中,哪些能正确表示出以下的函数关系?y = -1 y = -1 (x 0x 0x 0)(A) if (x != 0)(A) if (x != 0) if (x 0) y = 1; if (x 0) y = 1; else y = - 1; else y = - 1; else y = 0; else y = 0; (B) y = 0;(B) y = 0; if (x = 0) if (x = 0) if (x 0) y = 1; if (x 0) y = 1; else y = -1; else y = -1; (C) y = -1;(C) y = -1; if (x != 0) if (x != 0) if (x 0) y = 1; if (x 0) y = 1; else y = 0; else y = 0; (D) if (x 0) y = -1;(D) if (x 0) y = 1; if (x 0) y = 1; else y = 0; else y = 0; 答案:答案:答案:答案: (A) (D) (A) (D) 3.4 switch 3.4 switch 多路开关语句多路开关语句switch语句的一般形式语句的一般形式vvswitchswitch语句是多条件判断多分支选择语句,类似于语句是多条件判断多分支选择语句,类似于语句是多条件判断多分支选择语句,类似于语句是多条件判断多分支选择语句,类似于if if 语句语句语句语句的第三种形式。的第三种形式。的第三种形式。的第三种形式。switch switch ( (表达式表达式表达式表达式) ) casecase 常量表达式常量表达式常量表达式常量表达式1 1 : : 语句语句语句语句1;1; casecase 常量表达式常量表达式常量表达式常量表达式2 2 : : 语句语句语句语句2;2; casecase 常量表达式常量表达式常量表达式常量表达式n n : : 语句语句语句语句n;n; defaultdefault : : 语句语句语句语句n+1;n+1; vvswitchswitch语句使用了语句使用了语句使用了语句使用了3 3个关键字:个关键字:个关键字:个关键字:switch case defaultswitch case default执行过程:执行过程:执行过程:执行过程:首先求解首先求解首先求解首先求解switch switch 后表达式后表达式后表达式后表达式具具具具体的值体的值体的值体的值( (不是逻辑值不是逻辑值不是逻辑值不是逻辑值) ),将其值与各个将其值与各个将其值与各个将其值与各个 casecase后的常量表达式后的常量表达式后的常量表达式后的常量表达式的值对比;若有相等的值对比;若有相等的值对比;若有相等的值对比;若有相等的,则从那个的,则从那个的,则从那个的,则从那个 case case 后的语句开始往下执后的语句开始往下执后的语句开始往下执后的语句开始往下执行;若无相等的,则行;若无相等的,则行;若无相等的,则行;若无相等的,则执行执行执行执行default default 后的语后的语后的语后的语句。句。句。句。switch语句一般形式的执行流程图语句一般形式的执行流程图语句语句1表达式的具体值表达式的具体值F语句语句2语句语句n语句语句n+1=常量表达式常量表达式1的值?的值?=常量表达式常量表达式2的值?的值?=常量表达式常量表达式n的值?的值?TTTTFFF? ?流程好像流程好像流程好像流程好像有问题有问题有问题有问题 ?如果表达式的如果表达式的如果表达式的如果表达式的具体值等于常具体值等于常具体值等于常具体值等于常量表达式量表达式量表达式量表达式1 1 的的的的值,则执行语值,则执行语值,则执行语值,则执行语句句句句1 1。 执行完执行完执行完执行完语句语句语句语句1 1 后应该后应该后应该后应该结束结束结束结束 switchswitch语句的执行了,语句的执行了,语句的执行了,语句的执行了,可是按照流程可是按照流程可是按照流程可是按照流程图会继续执行图会继续执行图会继续执行图会继续执行语句语句语句语句2 2,直到语句,直到语句,直到语句,直到语句n+1n+1,显然显然显然显然和设计的流程和设计的流程和设计的流程和设计的流程不同。不同。不同。不同。switch语句的完整形式语句的完整形式vv switchswitch语句还可以使用关键字语句还可以使用关键字语句还可以使用关键字语句还可以使用关键字 breakbreak 。它的作用是它的作用是它的作用是它的作用是结束结束结束结束它所在的它所在的它所在的它所在的switchswitch语句的执行语句的执行语句的执行语句的执行。switch switch ( (表达式表达式表达式表达式) ) casecase 常量表达式常量表达式常量表达式常量表达式1 1 : : 语句语句语句语句1; 1; breakbreak; ; casecase 常量表达式常量表达式常量表达式常量表达式2 2 : : 语句语句语句语句2; 2; breakbreak; ; casecase 常量表达式常量表达式常量表达式常量表达式n n : : 语句语句语句语句n; n; breakbreak; ; defaultdefault : : 语句语句语句语句n+1;n+1; switchswitch语句的完整形式如下:语句的完整形式如下:语句的完整形式如下:语句的完整形式如下:switch语句完整形式的执行流程图语句完整形式的执行流程图语句语句1表达式的具体值表达式的具体值F语句语句2语句语句n语句语句n+1=常量表达式常量表达式1的值?的值?=常量表达式常量表达式2的值?的值?=常量表达式常量表达式n的值?的值?TTTTFFF有有breakYN有有breakN有有breakN有有breakNYYYswitch语句的有关注意事项语句的有关注意事项vv switchswitch语句中,语句中,语句中,语句中,switch switch 后的表达式可以是任何类型的表后的表达式可以是任何类型的表后的表达式可以是任何类型的表后的表达式可以是任何类型的表达式,达式,达式,达式,系统求解它的具体值而不是逻辑值系统求解它的具体值而不是逻辑值系统求解它的具体值而不是逻辑值系统求解它的具体值而不是逻辑值。绝大多数情况下都。绝大多数情况下都。绝大多数情况下都。绝大多数情况下都是整型或字符型的表达式,即表达式的值为整数或字符。是整型或字符型的表达式,即表达式的值为整数或字符。是整型或字符型的表达式,即表达式的值为整数或字符。是整型或字符型的表达式,即表达式的值为整数或字符。switch (grade)switch (grade) case E : printf(“Excellentn”); break; case E : printf(“Excellentn”); break; case G : printf(“Goodn”); break; case G : printf(“Goodn”); break; case B : printf(“Badn”); break; case B : printf(“Badn”); break; default : printf(“God knowsn”); default : printf(“God knowsn”); vv 每一个每一个每一个每一个casecase后表达式后表达式后表达式后表达式只能是常量表达式只能是常量表达式只能是常量表达式只能是常量表达式,即能求解出具体,即能求解出具体,即能求解出具体,即能求解出具体值的表达式,而绝不能是关系表达式或逻辑表达式。通常其类值的表达式,而绝不能是关系表达式或逻辑表达式。通常其类值的表达式,而绝不能是关系表达式或逻辑表达式。通常其类值的表达式,而绝不能是关系表达式或逻辑表达式。通常其类型是和型是和型是和型是和switchswitch后的表达式相对应的。同时,每一个常量表达后的表达式相对应的。同时,每一个常量表达后的表达式相对应的。同时,每一个常量表达后的表达式相对应的。同时,每一个常量表达式的值必须互不相同,否则会出现互相矛盾的现象。式的值必须互不相同,否则会出现互相矛盾的现象。式的值必须互不相同,否则会出现互相矛盾的现象。式的值必须互不相同,否则会出现互相矛盾的现象。gradegrade是是是是charchar型变量型变量型变量型变量每个每个每个每个casecase后对应着是后对应着是后对应着是后对应着是charchar型常量型常量型常量型常量switch (score)switch (score) case 89 : grade=E; break; case 89 : grade=E; break; case 79 : grade=G; break; case 79 : grade=G; break; case 60 : grade=B; break; case 60 : grade=B; break; default : printf(“God knowsn”); default : printf(“God knowsn”); scorescore是是是是intint型变量,型变量,型变量,型变量,casecase后就后就后就后就应该是应该是应该是应该是intint型的常量表达式。型的常量表达式。型的常量表达式。型的常量表达式。此处此处此处此处casecase后出现关系表达式是后出现关系表达式是后出现关系表达式是后出现关系表达式是完全错误的。完全错误的。完全错误的。完全错误的。Switch语句示例语句示例【例例例例3-33-3】从键盘输入一个月号从键盘输入一个月号从键盘输入一个月号从键盘输入一个月号(1(112)12),并显示该,并显示该,并显示该,并显示该月号的英文名称。月号的英文名称。月号的英文名称。月号的英文名称。3_3.cpp3_3.cpp#include #include #include #include void main()void main()void main()void main() intintintint month; month; month; month;printfprintfprintfprintf(请输入月份值:请输入月份值:请输入月份值:请输入月份值:););););scanf(%d,&monthscanf(%d,&monthscanf(%d,&monthscanf(%d,&month););););switch(monthswitch(monthswitch(monthswitch(month) ) ) ) case 1: case 1: case 1: case 1: printfprintfprintfprintf( ( ( (“一月一月一月一月););););break;break;break;break;case 2: case 2: case 2: case 2: printfprintfprintfprintf( ( ( (“二月二月二月二月););););break;break;break;break;case 3: case 3: case 3: case 3: printfprintfprintfprintf( ( ( (“三月三月三月三月););););break; break; break; break; case 4: case 4: case 4: case 4: printfprintfprintfprintf( ( ( (“四月四月四月四月););););break;break;break;break;case 5: case 5: case 5: case 5: printfprintfprintfprintf( ( ( (“五月五月五月五月););););break;break;break;break;Switch语句示例语句示例case 6: case 6: case 6: case 6: printfprintfprintfprintf( ( ( (“六月六月六月六月);););); break;break;break;break;case 7: case 7: case 7: case 7: printfprintfprintfprintf( ( ( (“七月七月七月七月);););); break;break;break;break;case 8: case 8: case 8: case 8: printfprintfprintfprintf( ( ( (“八月八月八月八月);););); break;break;break;break;case 9: case 9: case 9: case 9: printfprintfprintfprintf( ( ( (“九月九月九月九月);););); break;break;break;break;case 10: case 10: case 10: case 10: printfprintfprintfprintf( ( ( (“十月十月十月十月);););); break;break;break;break;case 11: case 11: case 11: case 11: printfprintfprintfprintf( ( ( (“十一月十一月十一月十一月);break;);break;);break;);break;case 12: case 12: case 12: case 12: printfprintfprintfprintf( ( ( (“十二月十二月十二月十二月);break;);break;);break;);break;default: default: default: default: printfprintfprintfprintf( ( ( (“月份值错误月份值错误月份值错误月份值错误!);!);!);!); break;break;break;break; 3.5 3.5 循环结构循环结构 for for 循环控制语句循环控制语句 while while 循环控制语句循环控制语句 do while do while 循环控制语句循环控制语句 三种循环语句的比较三种循环语句的比较循环概述循环概述vv 重复执行某部分代码,就构成循环结构。重复执行某部分代码,就构成循环结构。重复执行某部分代码,就构成循环结构。重复执行某部分代码,就构成循环结构。 有限循环:在某个条件满足时重复执行,不满足时结束有限循环:在某个条件满足时重复执行,不满足时结束有限循环:在某个条件满足时重复执行,不满足时结束有限循环:在某个条件满足时重复执行,不满足时结束 无限循环:无条件的重复执行或循环结束条件永远不满足无限循环:无条件的重复执行或循环结束条件永远不满足无限循环:无条件的重复执行或循环结束条件永远不满足无限循环:无条件的重复执行或循环结束条件永远不满足vv 循环结构的组成要素:循环结构的组成要素:循环结构的组成要素:循环结构的组成要素: 循环初始化部分循环初始化部分循环初始化部分循环初始化部分 循环变量或循环计数器循环变量或循环计数器循环变量或循环计数器循环变量或循环计数器 循环继续条件循环继续条件循环继续条件循环继续条件( (循环终止条件循环终止条件循环终止条件循环终止条件) ) 循环体循环体循环体循环体( (重复执行的代码重复执行的代码重复执行的代码重复执行的代码) )vv 4 4种实现方式:种实现方式:种实现方式:种实现方式: for for 语句语句语句语句 while while 语句语句语句语句 do while do while 语句语句语句语句 if + if + gotogoto 语句语句语句语句 注意:前注意:前注意:前注意:前3 3种是专门种是专门种是专门种是专门的循环控制语句的循环控制语句的循环控制语句的循环控制语句重点:每种循环语句的执行过程。重点:每种循环语句的执行过程。重点:每种循环语句的执行过程。重点:每种循环语句的执行过程。 3.5.1 for 语句语句vv 语法:语法:语法:语法: for(for(表达式表达式表达式表达式1; 1; 表达式表达式表达式表达式2; 2; 表达式表达式表达式表达式3)3) 循环体语句循环体语句循环体语句循环体语句 vv 执行过程:执行过程:执行过程:执行过程: 首先求解首先求解首先求解首先求解表达式表达式表达式表达式1 1的具体值的具体值的具体值的具体值; 再求解再求解再求解再求解表达式表达式表达式表达式2 2的逻辑值。若值的逻辑值。若值的逻辑值。若值的逻辑值。若值为为为为“ “T”T”,则执行内嵌的则执行内嵌的则执行内嵌的则执行内嵌的循环体语句循环体语句循环体语句循环体语句;若值为若值为若值为若值为“ “F”F”,则循环结束,执行则循环结束,执行则循环结束,执行则循环结束,执行forfor语句下面的语句;语句下面的语句;语句下面的语句;语句下面的语句; 求解求解求解求解表达式表达式表达式表达式3 3的具体值的具体值的具体值的具体值; 返回第返回第返回第返回第步步步步循环体语句循环体语句循环体语句循环体语句T TF F表达式表达式表达式表达式2 2求解表达式求解表达式求解表达式求解表达式1 1求解表达式求解表达式求解表达式求解表达式3 3vv 通常:通常:通常:通常: 表达式表达式表达式表达式1 1 用于循环初始化用于循环初始化用于循环初始化用于循环初始化; 表达式表达式表达式表达式2 2 用于描述循环继续条件;用于描述循环继续条件;用于描述循环继续条件;用于描述循环继续条件; 表达式表达式表达式表达式3 3 的用于循环变量的增减,的用于循环变量的增减,的用于循环变量的增减,的用于循环变量的增减,从而使循环继续条件越来越不满足。从而使循环继续条件越来越不满足。从而使循环继续条件越来越不满足。从而使循环继续条件越来越不满足。for (i=1; i=100; i=i+2)for (i=1; i=100; i=i+2)循环体循环体循环体循环体for 循环控制语句:例循环控制语句:例例例例例3.43.4:编程计算:编程计算:编程计算:编程计算123n 123n ,n=10n=10#include #include #include #include void main()void main()void main()void main() intintintint prod = 1 ; prod = 1 ; prod = 1 ; prod = 1 ; intintintint n ; n ; n ; n ;for (n = 1 ; n = 10 ; n +)for (n = 1 ; n = 10 ; n +)for (n = 1 ; n = 10 ; n +)for (n = 1 ; n = 10 ; n +) prod = prod = prod = prod = prodprodprodprod * n ; * n ; * n ; * n ; printf(printf(printf(printf(“1*2*3*1*2*3*1*2*3*1*2*3*%d = %ldn*%d = %ldn*%d = %ldn*%d = %ldn”, n, n, n, n1, prod) ;1, prod) ;1, prod) ;1, prod) ; prod=prod*nprod=prod*nT TF Fn=10n=10n=1n=1n +n +for 语句的有关说明语句的有关说明for for 语句语法组成部分多,功能强大,使用非常灵活。语句语法组成部分多,功能强大,使用非常灵活。语句语法组成部分多,功能强大,使用非常灵活。语句语法组成部分多,功能强大,使用非常灵活。#include #include / 3_5.cpp / 3_5.cppvoid void main( )main( ) intint prod = 1 ; int n ; prod = 1 ; int n ; for (n = 1 ; n = 10 ; n +) for (n = 1 ; n = 10 ; n +) prod = prod * n ; prod = prod * n ; printf(“1*2*3*%d = %ldn”, n1, prod) ; printf(“1*2*3*%d = %ldn”, n1, prod) ; 表达式表达式表达式表达式1 1可以省略,可以省略,可以省略,可以省略,循环初始化可以放循环初始化可以放循环初始化可以放循环初始化可以放在在在在forfor语句之前。语句之前。语句之前。语句之前。 long int prod = 1 ; long int prod = 1 ; int int n = 1 n = 1 ; ; for ( ; n = 10 ; n +) for ( ; n = 10 ; n +) prod = prod * n ; prod = prod * n ; 如果如果如果如果表达式表达式表达式表达式2 2也省也省也省也省略,则成了无限循略,则成了无限循略,则成了无限循略,则成了无限循环。显然这是不允环。显然这是不允环。显然这是不允环。显然这是不允许的。许的。许的。许的。 long int prod = 1 ; long int prod = 1 ; int int n = 1 n = 1 ; ; for ( ; ; n +) for ( ; ; n +) prod = prod * n ; prod = prod * n ; long int prod = 1 ; long int prod = 1 ; int int n = 1 n = 1 ; ; for ( ; n = 10 ; ) for ( ; n = 10 ; ) prod = prod * n ; prod = prod * n ; n + ;n + ; 表达式表达式表达式表达式3 3也可以省也可以省也可以省也可以省略,把它放回到循略,把它放回到循略,把它放回到循略,把它放回到循环体语句中。环体语句中。环体语句中。环体语句中。 intint prod = 1 ; prod = 1 ; int int n = 1 n = 1 ; ; for ( ; n = 10 ; for ( ; n =a & c=(c=a & c=A&cA&c=Z)=Z)3_6.cpp3_6.cpp#include #include #include #include void main( )void main( )void main( )void main( ) char c;char c;char c;char c;intintintint i,letteri,letteri,letteri,letter=0,digit=0,other=0;=0,digit=0,other=0;=0,digit=0,other=0;=0,digit=0,other=0;for(ifor(ifor(ifor(i=0;i100;i+)=0;i100;i+)=0;i100;i+)=0;i=a&ca&ca&ca&c=A&cA&cA&cA&c=Z)=Z)=Z)=0&c=0&c=0&c=0&c=9)digit+;digit+;digit+;digit+;elseelseelseelseother+;other+;other+;other+; printf(Letterprintf(Letterprintf(Letterprintf(Letter=%=%=%=%d,Digitd,Digitd,Digitd,Digit=%=%=%=%d,Otherd,Otherd,Otherd,Other=%d,=%d,=%d,=%d,letter,digit,otherletter,digit,otherletter,digit,otherletter,digit,other);););); 3.5.2 while 语句(当型循环)语句(当型循环)vv 语法:语法:语法:语法: while (while (表达式表达式表达式表达式) ) 循环体语句循环体语句循环体语句循环体语句 ; ;vv 执行过程:首先求解执行过程:首先求解执行过程:首先求解执行过程:首先求解表达式表达式表达式表达式的逻辑值。若值为的逻辑值。若值为的逻辑值。若值为的逻辑值。若值为“ “T”T”,则则则则执行内嵌的语句,然后返回再次求解表达式;若值为执行内嵌的语句,然后返回再次求解表达式;若值为执行内嵌的语句,然后返回再次求解表达式;若值为执行内嵌的语句,然后返回再次求解表达式;若值为“ “F”F”,则,则,则,则whilewhile语句结束,接着执行其后的语句。语句结束,接着执行其后的语句。语句结束,接着执行其后的语句。语句结束,接着执行其后的语句。注意:注意:注意:注意: 当循环体包含多于一个语句时,当循环体包含多于一个语句时,当循环体包含多于一个语句时,当循环体包含多于一个语句时,必须用大括号把它们括起来构成复必须用大括号把它们括起来构成复必须用大括号把它们括起来构成复必须用大括号把它们括起来构成复合语句。合语句。合语句。合语句。 while(while(表达式表达式表达式表达式) ) 后后后后没有没有没有没有分号。分号。分号。分号。 如果第一次求解表达式,其值就如果第一次求解表达式,其值就如果第一次求解表达式,其值就如果第一次求解表达式,其值就为为为为“ “F”F”,则循环体不被执行。则循环体不被执行。则循环体不被执行。则循环体不被执行。语句语句语句语句T TF F表达式表达式表达式表达式while 循环控制语句:例循环控制语句:例例:编程计算例:编程计算例:编程计算例:编程计算123n 123n ,n=10 3_7.cppn=10 3_7.cpp#include #include void main( )void main( ) intint prod = 1 ; prod = 1 ; intint n = 1 ; n = 1 ; while ( n = 10 ) while ( n = 10 ) prod = prod = prodprod * n ; * n ; n + ; n + ; printf(1*2*3* printf(1*2*3*%d = %ldn, *%d = %ldn, n-1, prod);n-1, prod); 1. 1. 下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是( )( )。#include #include void void main( )main( ) int n = 1 ; int n = 1 ; while while ( n = 1 ) n ( n = 1 ) n ; ; printf(“n = %dn”, n) ; printf(“n = %dn”, n) ; (A) n = 0(A) n = 0(B) while(B) while构成无限循环构成无限循环构成无限循环构成无限循环(C) n = 1(C) n = 1(D) n = -1(D) n = -1课堂练习:课堂练习:while 语句语句答案:答案:答案:答案: (B) (B) 2. 2. 下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是( )( )。#include #include void void main( )main( ) int n = 1 ; int n = 1 ; while while ( n = 1 ) n ( n = 1 ) n ; ; printf(“n = %dn”, n) ; printf(“n = %dn”, n) ; (A) n = 0(A) n = 0(B) while(B) while构成无限循环构成无限循环构成无限循环构成无限循环(C) n = 1(C) n = 1(D) n = -1(D) n = -1课堂练习:课堂练习:while 语句语句答案:答案:答案:答案: (A) (A) 课堂练习:课堂练习:while 语句语句 3. 3. 下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是( )( )。#include #include void void main( )main( ) int n = 1 ; int n = 1 ; while while ( n = n ( n = n 1 ) n 1 ) n ; ; printf(“n = %dn”, n) ; printf(“n = %dn”, n) ; (A) n = 0(A) n = 0(B) while(B) while构成无限循环构成无限循环构成无限循环构成无限循环(C) n = 1(C) n = 1(D) n = -1(D) n = -1答案:答案:答案:答案: (A) (A) 课堂练习:课堂练习:while 语句语句 4. 4. 下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是下面程序执行的结果是( )( )。#include #include void void main( )main( ) int n = 1 ; int n = 1 ; while while ( n ( n ) ;) ; printf(“n = %dn”, n) ; printf(“n = %dn”, n) ; (A) n = 0(A) n = 0(B) while(B) while构成无限循环构成无限循环构成无限循环构成无限循环(C) n = 1(C) n = 1(D) n = (D) n = 1 1答案:答案:答案:答案: (D) (D) 3.5.3 dowhile 语句语句vv 语法:语法:语法:语法: do do 循环体语句循环体语句循环体语句循环体语句 while ( while (表达式表达式表达式表达式) ;) ;vv 执行过程:首先执行执行过程:首先执行执行过程:首先执行执行过程:首先执行dodo后的后的后的后的循环体语句循环体语句循环体语句循环体语句,然后求解表达式,然后求解表达式,然后求解表达式,然后求解表达式的逻辑值。若值为的逻辑值。若值为的逻辑值。若值为的逻辑值。若值为“ “T”T”,则返回继续执行内嵌的则返回继续执行内嵌的则返回继续执行内嵌的则返回继续执行内嵌的循环体语句循环体语句循环体语句循环体语句;若值为若值为若值为若值为“ “F”F”,则,则,则,则dowhiledowhile语句结束,接着执行其后的语语句结束,接着执行其后的语语句结束,接着执行其后的语语句结束,接着执行其后的语句。句。句。句。注意:注意:注意:注意: 语句语句语句语句T TF F表达式表达式表达式表达式 当循环体语句多于一个时,必须用大括当循环体语句多于一个时,必须用大括当循环体语句多于一个时,必须用大括当循环体语句多于一个时,必须用大括号把它们括起来构成复合语句。号把它们括起来构成复合语句。号把它们括起来构成复合语句。号把它们括起来构成复合语句。 while(while(表达式表达式表达式表达式) ) 后后后后有有有有分号。分号。分号。分号。 不论第一次求解表达式的值是什么,不论第一次求解表达式的值是什么,不论第一次求解表达式的值是什么,不论第一次求解表达式的值是什么,循环体语句至少被执行一次循环体语句至少被执行一次循环体语句至少被执行一次循环体语句至少被执行一次。dowhile 循环控制语句:例循环控制语句:例例:编程计算例:编程计算例:编程计算例:编程计算123n 123n ,n=10 3_8.cppn=10 3_8.cpp#include #include #include #include void main( )void main( )void main( )void main( ) intintintint prod = 1 ; prod = 1 ; prod = 1 ; prod = 1 ; intintintint n = 1 ; n = 1 ; n = 1 ; n = 1 ; dodododo prod = prod = prod = prod = prodprodprodprod * n ; * n ; * n ; * n ; n + ; n + ; n + ; n + ; whilewhilewhilewhile ( n = 10 ) ; ( n = 10 ) ; ( n = 10 ) ; ( n = 10 ) ; printf( printf( printf( printf(“1*2*3*1*2*3*1*2*3*1*2*3*%d = %ldn*%d = %ldn*%d = %ldn*%d = %ldn”, n, n, n, n1, prod) ;1, prod) ;1, prod) ;1, prod) ; 这后面有这后面有这后面有这后面有分号分号分号分号。while 语句和语句和dowhile 语句的对比语句的对比 do whiledo while 语句的流程图语句的流程图语句的流程图语句的流程图语句语句语句语句T TF F表达式表达式表达式表达式语句语句语句语句T TF F表达式表达式表达式表达式while while 语句的流程图语句的流程图语句的流程图语句的流程图不论第一次求解表不论第一次求解表不论第一次求解表不论第一次求解表达式的值是什么,达式的值是什么,达式的值是什么,达式的值是什么,循环体语句至少被循环体语句至少被循环体语句至少被循环体语句至少被执行一次执行一次执行一次执行一次。 如果第一次求解表达如果第一次求解表达如果第一次求解表达如果第一次求解表达式,其值就为式,其值就为式,其值就为式,其值就为“ “F”F”,则循环体不被执行。则循环体不被执行。则循环体不被执行。则循环体不被执行。一般情况下,同一个一般情况下,同一个一般情况下,同一个一般情况下,同一个问题用问题用问题用问题用 while while 语句语句语句语句和和和和 dowhile dowhile 语语语语句实现,其循环体都句实现,其循环体都句实现,其循环体都句实现,其循环体都是一样的。但是,有是一样的。但是,有是一样的。但是,有是一样的。但是,有可能循环体被执行的可能循环体被执行的可能循环体被执行的可能循环体被执行的次数是不同的。次数是不同的。次数是不同的。次数是不同的。vv whilewhile和和和和dowhiledowhile循环比较适用于循环次数不太明确,循环比较适用于循环次数不太明确,循环比较适用于循环次数不太明确,循环比较适用于循环次数不太明确,但是循环的终止条件(或循环继续条件)比较明确的问题中。但是循环的终止条件(或循环继续条件)比较明确的问题中。但是循环的终止条件(或循环继续条件)比较明确的问题中。但是循环的终止条件(或循环继续条件)比较明确的问题中。小强今年小强今年小强今年小强今年1212岁,父亲大他岁,父亲大他岁,父亲大他岁,父亲大他2020岁。问过多少年父亲年龄是小岁。问过多少年父亲年龄是小岁。问过多少年父亲年龄是小岁。问过多少年父亲年龄是小强年龄的强年龄的强年龄的强年龄的2 2倍,那时两人分别是多少岁?倍,那时两人分别是多少岁?倍,那时两人分别是多少岁?倍,那时两人分别是多少岁?#include #include / 3_9.cpp / 3_9.cppvoid main( )void main( ) int son = 12, dad = son + 20 , year = 0 ; int son = 12, dad = son + 20 , year = 0 ; while ( dad != son * 2 )while ( dad != son * 2 ) dad + ; son + ; year + ;dad + ; son + ; year + ; printf(“%d years pastn”, year); printf(“%d years pastn”, year); printf(“sons age = %dn”, son); printf(“sons age = %dn”, son); printf(“dads age = %dn”, dad); printf(“dads age = %dn”, dad); 课堂练习:课堂练习:循环次数不太循环次数不太循环次数不太循环次数不太明确而循环终明确而循环终明确而循环终明确而循环终止条件明确的止条件明确的止条件明确的止条件明确的情况。情况。情况。情况。 do do dad +; son +; year + ; dad +; son +; year + ; while (dad != son * 2) ; while (dad != son * 2) ; while (dad + year) != (son + year) * 2) while (dad + year) != (son + year) * 2) year + ;year + ; printf(“%d years pastn”, year); printf(“%d years pastn”, year); printf(“sons age = %dn”, son printf(“sons age = %dn”, son+year+year);); printf(“dads age = %dn”, dad printf(“dads age = %dn”, dad+year+year););自学与比较自学与比较请同学们比较如下请同学们比较如下3 3种循环的异同之处种循环的异同之处(1 1)forfor循环(计数型循环)循环(计数型循环)(2 2)whilewhile循环(当型循环)循环(当型循环)(3 3)do whiledo while循环(直到型循环)循环(直到型循环)练习练习求求 的近似值。的近似值。 求求 的近似值的公式为的近似值的公式为解题思路:解题思路:解题思路:解题思路:用用用用pipipipi表示表示表示表示的值,它是一个求级数和的计算,的值,它是一个求级数和的计算,的值,它是一个求级数和的计算,的值,它是一个求级数和的计算,计算当最后一项的绝对值小于等于计算当最后一项的绝对值小于等于计算当最后一项的绝对值小于等于计算当最后一项的绝对值小于等于10101010-6-6-6-6时结束。时结束。时结束。时结束。 因此,计算因此,计算因此,计算因此,计算pipipipi的过程是一个循环累加的过程是一个循环累加的过程是一个循环累加的过程是一个循环累加b/ab/ab/ab/a的过程,的过程,的过程,的过程,直到直到直到直到b/ab/ab/ab/a的绝对值小于等于的绝对值小于等于的绝对值小于等于的绝对值小于等于1010-6-6为止,即只要为止,即只要为止,即只要为止,即只要b/ab/ab/ab/a的绝的绝的绝的绝对值大于对值大于对值大于对值大于10101010-6-6-6-6就要继续循环。就要继续循环。就要继续循环。就要继续循环。3_10.cpp3_10.cpp3_10.cpp3_10.cpp提问提问这种循环当表达式的值永远为真时,会如何?这种循环当表达式的值永远为真时,会如何?答:会构成死循环,即无休止地执行循环体。答:会构成死循环,即无休止地执行循环体。请做下面的实验:请做下面的实验:(1 1)将)将b b定义为定义为intint型型 ,看看执行结果,并分,看看执行结果,并分析为什么析为什么(2 2)将)将1e-61e-6改为改为1e-71e-7或或1e-41e-4,看看结果看看结果3.6 3.6 循环嵌套循环嵌套whilewhile () () whilewhile () () whilewhile () () do do while while (); (); whilewhile () () for for ( ; ; ) ( ; ; ) 3.6 循环嵌套循环嵌套vv在一个循环体内包含另一个循环控制语句称为在一个循环体内包含另一个循环控制语句称为在一个循环体内包含另一个循环控制语句称为在一个循环体内包含另一个循环控制语句称为“ “循环嵌套循环嵌套循环嵌套循环嵌套” ”。vv嵌套的层数不同的系统规定不同。一般来说,实际中最多就嵌套的层数不同的系统规定不同。一般来说,实际中最多就嵌套的层数不同的系统规定不同。一般来说,实际中最多就嵌套的层数不同的系统规定不同。一般来说,实际中最多就用到用到用到用到4 4层嵌套。最常用的是双重循环。层嵌套。最常用的是双重循环。层嵌套。最常用的是双重循环。层嵌套。最常用的是双重循环。dodo do do while while (); (); whilewhile () ; () ;dodo while while (); (); whilewhile () ; () ;dodo forfor ( ; ; ) ( ; ; ) whilewhile () ; () ;for( ; ; )for( ; ; ) do do while while (); (); for( ; ; )for( ; ; ) while while (); (); for( ; ; )for( ; ; ) forfor ( ; ; ) ( ; ; ) 循环嵌套:循环嵌套:例例例例3_113_11:课本:课本:课本:课本p83p83输出输出输出输出11001100之间符合如下条件的数:该数的各位数之乘积之间符合如下条件的数:该数的各位数之乘积之间符合如下条件的数:该数的各位数之乘积之间符合如下条件的数:该数的各位数之乘积大于各位数之和大于各位数之和大于各位数之和大于各位数之和思路:思路:思路:思路: 求出该数的每一位,假设一个数为求出该数的每一位,假设一个数为求出该数的每一位,假设一个数为求出该数的每一位,假设一个数为mm,则,则,则,则m%10m%10即为其个位即为其个位即为其个位即为其个位数,数,数,数,(m/10)%10(m/10)%10即为其十位数即为其十位数即为其十位数即为其十位数,(m/100)%10,(m/100)%10即为百位数,即为百位数,即为百位数,即为百位数, 本题使用双重循环,外循环对本题使用双重循环,外循环对本题使用双重循环,外循环对本题使用双重循环,外循环对11001100中的数进行枚举中的数进行枚举中的数进行枚举中的数进行枚举 内循环中,计算该数的各位,并进行累加和累乘。内循环中,计算该数的各位,并进行累加和累乘。内循环中,计算该数的各位,并进行累加和累乘。内循环中,计算该数的各位,并进行累加和累乘。include include include include void main( )void main( )void main( )void main( ) intintintint n,kn,kn,kn,k=1,s=0,m;=1,s=0,m;=1,s=0,m;=1,s=0,m;for (n=1;n=100;n+)for (n=1;n=100;n+)for (n=1;n=100;n+)for (n=1;ns) s) s) s) printf(%dn,nprintf(%dn,nprintf(%dn,nprintf(%dn,n);););); 3.7 break3.7 break语句和语句和continuecontinue语句语句3.7.1 break 语句语句vv 语法:语法:语法:语法:break ;break ;vv 用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。vv 作用:作用:作用:作用:结束整个循环语句结束整个循环语句结束整个循环语句结束整个循环语句,接着执行该语句后面的语句。,接着执行该语句后面的语句。,接着执行该语句后面的语句。,接着执行该语句后面的语句。break break 语句语句语句语句只能只能只能只能用在用在用在用在switchswitch 语句和三种专门的语句和三种专门的语句和三种专门的语句和三种专门的循环控制即循环控制即循环控制即循环控制即whilewhile、dowhiledowhile和和和和forfor语句中。语句中。语句中。语句中。 用在用在用在用在switchswitch语句中作用是结束语句中作用是结束语句中作用是结束语句中作用是结束它所在的它所在的它所在的它所在的switchswitch语句的执行,接着执行语句的执行,接着执行语句的执行,接着执行语句的执行,接着执行switchswitch后面的语句。后面的语句。后面的语句。后面的语句。 用在用在用在用在循环体循环体循环体循环体中作用是结束中作用是结束中作用是结束中作用是结束它所在的它所在的它所在的它所在的循环语句的执循环语句的执循环语句的执循环语句的执行,接着执行该循环语句后面的语句。行,接着执行该循环语句后面的语句。行,接着执行该循环语句后面的语句。行,接着执行该循环语句后面的语句。注意:注意:注意:注意: 3.7.2 continue 语句语句vv 语法:语法:语法:语法:continue ;continue ;vv 用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。用法:用在一个循环控制语句的循环体内。vv 作用:作用:作用:作用:结束本次循环的执行,结束本次循环的执行,结束本次循环的执行,结束本次循环的执行,即当遇到即当遇到即当遇到即当遇到continuecontinue语句时,语句时,语句时,语句时,就跳过该循环体中位于就跳过该循环体中位于就跳过该循环体中位于就跳过该循环体中位于continuecontinue后面的语句,接着进行下一后面的语句,接着进行下一后面的语句,接着进行下一后面的语句,接着进行下一次是否继续循环的判断。次是否继续循环的判断。次是否继续循环的判断。次是否继续循环的判断。continue continue 语句语句语句语句只能只能只能只能用在三种专门的循环控制语句用在三种专门的循环控制语句用在三种专门的循环控制语句用在三种专门的循环控制语句即即即即whilewhile、dowhiledowhile和和和和forfor语句中。语句中。语句中。语句中。注意:注意:注意:注意: break 语句和语句和continue 语句的区别语句的区别breakbreak语句语句语句语句:结束整个循环语句结束整个循环语句结束整个循环语句结束整个循环语句continuecontinue语句语句语句语句:结束本次循环的执行结束本次循环的执行结束本次循环的执行结束本次循环的执行T TF F表达式表达式表达式表达式1 1表达式表达式表达式表达式2 2whilewhile后的语句后的语句后的语句后的语句T TF Fbreakbreakwhile(while(表达式表达式表达式表达式1) 1) if(if(表达式表达式表达式表达式2)2) break; break; T TF F表达式表达式表达式表达式1 1表达式表达式表达式表达式2 2whilewhile后的语句后的语句后的语句后的语句T TF Fcontinuecontinuewhile(while(表达式表达式表达式表达式1) 1) if(if(表达式表达式表达式表达式2)2) continue; continue; #include #include void void main( )main( ) intint i=1; i=1; intint n=1234; n=1234; whilewhile (+in ) (+in ) if(n%iif(n%i=0)=0) printf(notprintf(not primen); primen);break;break; if(iif(i=n)=n)printf(primenprintf(primen);); break 语句:例语句:例3.12例:编程判断一个数值例:编程判断一个数值例:编程判断一个数值例:编程判断一个数值n n是否为质数是否为质数是否为质数是否为质数 3_12.cpp3_12.cpp用用用用+in+in作循环的结束语句,作循环的结束语句,作循环的结束语句,作循环的结束语句,表面上需对所有小于表面上需对所有小于表面上需对所有小于表面上需对所有小于n n的数进的数进的数进的数进行判断。行判断。行判断。行判断。如果有小于如果有小于如果有小于如果有小于n n的数能整除的数能整除的数能整除的数能整除n n说说说说明明明明n n不是素数,用不是素数,用不是素数,用不是素数,用 break break 语语语语句结束循环。句结束循环。句结束循环。句结束循环。#include #include void void main( )main( ) int i = 0 ; int i = 0 ; for(ifor(i=1;i=9;i+)=1;i=9;i+) if(iif(i=5)=5)continue;continue;printf(printf(“%dn%dn”,i,i);); continue 语句:例语句:例3_13例:打印出例:打印出例:打印出例:打印出1 1至至至至9 9的每一个数字,但不包括的每一个数字,但不包括的每一个数字,但不包括的每一个数字,但不包括5 5在内在内在内在内 3_13.cpp3_13.cpp3.8 3.8 程序举例程序举例程序举例程序举例3_14 :题目及分析:题目及分析例:例:例:例:求求求求 Fibonacci Fibonacci 数列的前数列的前数列的前数列的前4040个数。该数列满足递推公式个数。该数列满足递推公式个数。该数列满足递推公式个数。该数列满足递推公式f f1 1= 1 , f= 1 , f2 2 = 1 ; f = 1 ; fn n = f = fn-1 n-1 + f+ fn-2n-2分析:分析:分析:分析: 题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。题目需要计算累加,应该用到循环语句。 用那种循环语句来控制呢?根据题目考虑用用那种循环语句来控制呢?根据题目考虑用用那种循环语句来控制呢?根据题目考虑用用那种循环语句来控制呢?根据题目考虑用forfor语句比较合适。语句比较合适。语句比较合适。语句比较合适。 怎么循环?我们把前怎么循环?我们把前怎么循环?我们把前怎么循环?我们把前4040个数的递推过程写一下:个数的递推过程写一下:个数的递推过程写一下:个数的递推过程写一下:f f1 1=1=1f f2 2=1=1f f3 3=f=f2 2+f+f1 1f f4 4=f=f3 3+f+f2 2f f5 5=f=f4 4+f+f3 3可见,在已知可见,在已知可见,在已知可见,在已知f1f1和和和和f2f2的时候,从第的时候,从第的时候,从第的时候,从第3 3个数据开始,个数据开始,个数据开始,个数据开始,每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。每个数据都只与前面相邻的两个数据有关。比如:当根据比如:当根据比如:当根据比如:当根据 f1+f2=f3 f1+f2=f3 求出求出求出求出 f3 f3 后,再求后,再求后,再求后,再求 f4 f4 时,原来时,原来时,原来时,原来 f1 f1 变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把变量中的数据不再有用,所以如果把 f2 f2 的值放到的值放到的值放到的值放到 f1 f1 中,把中,把中,把中,把 f3 f3 的值放到的值放到的值放到的值放到 f2 f2 中,那么中,那么中,那么中,那么计算计算计算计算 f4 f4 的表达式的表达式的表达式的表达式 f3+f2 f3+f2 就变成了就变成了就变成了就变成了 f2+f1 f2+f1 ,结结结结果又可以放到果又可以放到果又可以放到果又可以放到 f3 f3 中,依此类推就形成了循环。中,依此类推就形成了循环。中,依此类推就形成了循环。中,依此类推就形成了循环。程序举例程序举例3_14 :算法:算法1f f3 3 = f= f2 2 + f+ f1 1f f3 3 = f f2 2f f1 1(f(f3 3) )(f(f2 2) )+f f4 4 = f= f3 3 + f+ f2 2(f(f4 4) )f f3 3 = f f2 2f f1 1+f f5 5 = f= f4 4 + f+ f3 3(f(f4 4) )(f(f3 3) )(f(f5 5) )第第第第1 1次循环:次循环:次循环:次循环:第第第第2 2次循环:次循环:次循环:次循环:第第第第3 3次循环:次循环:次循环:次循环:算法算法算法算法1 1:每循环一次求出:每循环一次求出:每循环一次求出:每循环一次求出一个一个一个一个新的数据新的数据新的数据新的数据程序举例程序举例3_14 :实现方案一:实现方案一/* /* 算法算法算法算法1 1:循环一次输出一个数据:循环一次输出一个数据:循环一次输出一个数据:循环一次输出一个数据 * */ /#include #include #include #include / 3_15_1.cpp / 3_15_1.cpp / 3_15_1.cpp / 3_15_1.cppvoid main()void main()void main()void main() intintintint f1 = 1 , f2 = 1, f3; int n; f1 = 1 , f2 = 1, f3; int n; f1 = 1 , f2 = 1, f3; int n; f1 = 1 , f2 = 1, f3; int n; printf( printf( printf( printf(“%12d%12d%12d%12d%12d%12d%12d%12d”, f1 , f2 );, f1 , f2 );, f1 , f2 );, f1 , f2 ); for (n = 3; n = 40; n+) for (n = 3; n = 40; n+) for (n = 3; n = 40; n+) for (n = 3; n = 40; n+) f3 = f1 + f2 ; printf( f3 = f1 + f2 ; printf( f3 = f1 + f2 ; printf( f3 = f1 + f2 ; printf(“%12d%12d%12d%12d”, f3);, f3);, f3);, f3); if (n % 5 = 0) printf( if (n % 5 = 0) printf( if (n % 5 = 0) printf( if (n % 5 = 0) printf(“nnnn”) ;) ;) ;) ; f1 = f2 ; f2 = f3 ; f1 = f2 ; f2 = f3 ; f1 = f2 ; f2 = f3 ; f1 = f2 ; f2 = f3 ; 每次循环求出一个新每次循环求出一个新每次循环求出一个新每次循环求出一个新的数据并输出的数据并输出的数据并输出的数据并输出使每行只输使每行只输使每行只输使每行只输出出出出5 5个数据个数据个数据个数据实现循环递推实现循环递推实现循环递推实现循环递推算法的关键算法的关键算法的关键算法的关键程序举例程序举例3_14 :算法:算法2算法算法算法算法2 2:每循环一次求出:每循环一次求出:每循环一次求出:每循环一次求出两个两个两个两个新的数据新的数据新的数据新的数据f f3 3 = f= f2 2 + f+ f1 1f f4 4 = f= f3 3 + f+ f2 2第第第第1 1步:求步:求步:求步:求f3f3第第第第2 2步:求步:求步:求步:求f4f4f f1 1 = f= f2 2 + f+ f1 1(f(f3 3) )f f2 2 = f= f1 1 + f+ f2 2(f(f4 4) )(f(f3 3) )一次循环:一次循环:一次循环:一次循环:每循环一次求出每循环一次求出每循环一次求出每循环一次求出两个两个两个两个新的数据新的数据新的数据新的数据程序举例程序举例3_14 :实现方案二:实现方案二/* /* /* /* 算法算法算法算法2 2 2 2:循环一次输出两个数据:循环一次输出两个数据:循环一次输出两个数据:循环一次输出两个数据 * * * */ / / /#include #include #include #include / 3_15_2.cpp / 3_15_2.cpp / 3_15_2.cpp / 3_15_2.cppvoid main()void main()void main()void main() intintintint f1 = 1 , f2 = 1; int n; f1 = 1 , f2 = 1; int n; f1 = 1 , f2 = 1; int n; f1 = 1 , f2 = 1; int n;for (n = 1; n = 20; n + )for (n = 1; n = 20; n + )for (n = 1; n = 20; n + )for (n = 1; n yxy,设最小公倍数为设最小公倍数为设最小公倍数为设最小公倍数为z z,则则则则(1 1)z z一定会大于等于一定会大于等于一定会大于等于一定会大于等于x x(2 2)z=z=kxkx,k=1,2,3,k=1,2,3,(3 3)z z一定会被一定会被一定会被一定会被y y整除整除整除整除因此,只要循环令因此,只要循环令因此,只要循环令因此,只要循环令z=x,2x,3x,z=x,2x,3x,,试探其能否被试探其能否被试探其能否被试探其能否被y y整整整整除,如能则结束循环,所得的除,如能则结束循环,所得的除,如能则结束循环,所得的除,如能则结束循环,所得的z z即为所求即为所求即为所求即为所求设设设设x=5,y=3x=5,y=3,则执行如下操作则执行如下操作则执行如下操作则执行如下操作(1 1)令)令)令)令z=x=5z=x=5,5%3!=05%3!=0,不能整除不能整除不能整除不能整除(2 2)令)令)令)令z=z=z+xz+x=10=10,10%3!=010%3!=0,不能整除不能整除不能整除不能整除(3 3)令)令)令)令z=z=z+xz+x=15=15,15%3=015%3=0,能整除能整除能整除能整除(4 4)因此)因此)因此)因此z=15z=15即为即为即为即为5 5和和和和3 3的最小公倍数。的最小公倍数。的最小公倍数。的最小公倍数。 川大附小有四位同学中的一位做了好事,川大附小有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位不留名,表扬信来了之后,校长问这四位是谁做的好事。是谁做的好事。A A说:不是我。说:不是我。B B说:是说:是C C。C C说:是说:是D D。D D说:他胡说。说:他胡说。已知三个人说的是真话,一个人说的是假已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事话。现在要根据这些信息,找出做了好事的人。的人。程序举例程序举例3_16 :谁做的好事?:谁做的好事?这时在内存中系统找到一个字节。这时在内存中系统找到一个字节。让让“=”的含义为的含义为“是是”让让“!=!=”的含义为的含义为“不是不是”下面,我们把四个人说的四句话写成关下面,我们把四个人说的四句话写成关系表达式。在声明变量时,让系表达式。在声明变量时,让thismanthisman表示要找的人,定义他是字符变量表示要找的人,定义他是字符变量char thisman;ThismanThisman地址地址xxxxxxxx程序举例程序举例3_16 :谁做的好事?:谁做的好事?A A A A说:不是我。写成关系表达式为(说:不是我。写成关系表达式为(说:不是我。写成关系表达式为(说:不是我。写成关系表达式为(thismanthismanthismanthisman!=!=!=!=A A A A)B B B B说:是说:是说:是说:是C C C C。 写成关系表达式为(写成关系表达式为(写成关系表达式为(写成关系表达式为(thismanthismanthismanthisman=C C C C)C C C C说:是说:是说:是说:是D D D D。 写成关系表达式为(写成关系表达式为(写成关系表达式为(写成关系表达式为(thismanthismanthismanthisman=D D D D)D D D D说:他胡说。写成关系表达式为(说:他胡说。写成关系表达式为(说:他胡说。写成关系表达式为(说:他胡说。写成关系表达式为(thismanthismanthismanthisman!=!=!=!=D D D D)在在在在C C C C语言中字符也是有数值的,这个数值就是字符的语言中字符也是有数值的,这个数值就是字符的语言中字符也是有数值的,这个数值就是字符的语言中字符也是有数值的,这个数值就是字符的ASCIIASCIIASCIIASCII码值码值码值码值字符字符字符字符A A A AB B B BC C C CD D D DASCIIASCIIASCIIASCII码值码值码值码值 65656565666666666767676768686868程序举例程序举例3_16 :谁做的好事?:谁做的好事?1 1 1 1、如何找到该人,一定是、如何找到该人,一定是、如何找到该人,一定是、如何找到该人,一定是“先假设该人是做好事者,先假设该人是做好事者,先假设该人是做好事者,先假设该人是做好事者,然后到每句话中去测试看有几句是真话然后到每句话中去测试看有几句是真话然后到每句话中去测试看有几句是真话然后到每句话中去测试看有几句是真话”。“有三句有三句有三句有三句是真话就确定是该人,否则换下一人再试是真话就确定是该人,否则换下一人再试是真话就确定是该人,否则换下一人再试是真话就确定是该人,否则换下一人再试”。比如,先假定是比如,先假定是比如,先假定是比如,先假定是A A A A同学,让同学,让同学,让同学,让thismanthismanthismanthisman=A;=A;=A;=A;代入到四句话中代入到四句话中代入到四句话中代入到四句话中A A A A说:说:说:说:thismanthismanthismanthisman!=A;!=A;!=A;!=A;A!=AA!=AA!=AA!=A假,值为假,值为假,值为假,值为0 0 0 0。B B B B说:说:说:说:thismanthismanthismanthisman=C;=C;=C;=C;A=CA=CA=CA=C假,值为假,值为假,值为假,值为0 0 0 0。C C C C说:说:说:说:thismanthismanthismanthisman=D;=D;=D;=D;A=DA=DA=DA=D假,值为假,值为假,值为假,值为0 0 0 0。D D D D说:说:说:说:thismanthismanthismanthisman!=D;!=D;!=D;!=D;A!=DA!=DA!=DA!=D真,值为真,值为真,值为真,值为1 1 1 1。显然,不是显然,不是显然,不是显然,不是AAAA做的好事(四个关系表达式值的和为做的好事(四个关系表达式值的和为做的好事(四个关系表达式值的和为做的好事(四个关系表达式值的和为1 1 1 1)程序举例程序举例3_16 :谁做的好事?:谁做的好事?思路:思路:再试再试再试再试B B B B同学,让同学,让同学,让同学,让thismanthismanthismanthisman=B;=B;=B;=B;代入到四句话中代入到四句话中代入到四句话中代入到四句话中A A A A说:说:说:说:thismanthismanthismanthisman!=A;!=A;!=A;!=A;B!=AB!=AB!=AB!=A真,值为真,值为真,值为真,值为1 1 1 1。B B B B说:说:说:说:thismanthismanthismanthisman=C;=C;=C;=C;B=CB=CB=CB=C假,值为假,值为假,值为假,值为0 0 0 0。C C C C说:说:说:说:thismanthismanthismanthisman=D;=D;=D;=D;B=DB=DB=DB=D假,值为假,值为假,值为假,值为0 0 0 0。D D D D说:说:说:说:thismanthismanthismanthisman!=D;!=D;!=D;!=D;B!=DB!=DB!=DB!=D真,值为真,值为真,值为真,值为1 1 1 1。显然,不是显然,不是显然,不是显然,不是BBBB所为(四个关系表达式值的和为所为(四个关系表达式值的和为所为(四个关系表达式值的和为所为(四个关系表达式值的和为2 2 2 2)程序举例程序举例3_16 :谁做的好事?:谁做的好事?思路:思路:再试再试再试再试C C C C同学,让同学,让同学,让同学,让thismanthismanthismanthisman= = = =C;C;C;C;代入到四句话中代入到四句话中代入到四句话中代入到四句话中A A A A说:说:说:说:thismanthismanthismanthisman!=A;!=A;!=A;!=A;C!=AC!=AC!=AC!=A 真,值为真,值为真,值为真,值为1 1 1 1。B B B B说:说:说:说:thismanthismanthismanthisman=C;=C;=C;=C;C=CC=CC=CC=C 假,值为假,值为假,值为假,值为1 1 1 1。C C C C说:说:说:说:thismanthismanthismanthisman=D;=D;=D;=D;C=DC=DC=DC=D 假,值为假,值为假,值为假,值为0 0 0 0。D D D D说:说:说:说:thismanthismanthismanthisman!=D;!=D;!=D;!=D;C!=DC!=DC!=DC!=D 真,值为真,值为真,值为真,值为1 1 1 1。显然,是显然,是显然,是显然,是CCCC所为(四个关系表达式值的和为所为(四个关系表达式值的和为所为(四个关系表达式值的和为所为(四个关系表达式值的和为3 3 3 3)程序举例程序举例3_16 :谁做的好事?:谁做的好事?思路:思路:再试再试再试再试D D D D同学,让同学,让同学,让同学,让thismanthismanthismanthisman= = = =D;D;D;D;代入到四句话中代入到四句话中代入到四句话中代入到四句话中A A A A说:说:说:说:thismanthismanthismanthisman!=A;!=A;!=A;!=A;D!=AD!=AD!=AD!=A 真,值为真,值为真,值为真,值为1 1 1 1。B B B B说:说:说:说:thismanthismanthismanthisman=C;=C;=C;=C;D=CD=CD=CD=C 假,值为假,值为假,值为假,值为0 0 0 0。C C C C说:说:说:说:thismanthismanthismanthisman=D;=D;=D;=D;D=DD=DD=DD=D 假,值为假,值为假,值为假,值为1 1 1 1。D D D D说:说:说:说:thismanthismanthismanthisman!=D;!=D;!=D;!=D;D!=DD!=DD!=DD!=D 真,值为真,值为真,值为真,值为0 0 0 0。显然,不是显然,不是显然,不是显然,不是D D D D所为(四个关系表达式值的和为所为(四个关系表达式值的和为所为(四个关系表达式值的和为所为(四个关系表达式值的和为2 2 2 2)这时,我们可以理出头绪,要用所谓这时,我们可以理出头绪,要用所谓这时,我们可以理出头绪,要用所谓这时,我们可以理出头绪,要用所谓枚举法枚举法枚举法枚举法,一个人,一个人,一个人,一个人一个人地去试,四句话中有三句为真,该人即所求。一个人地去试,四句话中有三句为真,该人即所求。一个人地去试,四句话中有三句为真,该人即所求。一个人地去试,四句话中有三句为真,该人即所求。程序举例程序举例3_16 :谁做的好事?:谁做的好事?思路:思路:2 2 2 2、从编写程序的角度看,实现枚举最好用循环结构、从编写程序的角度看,实现枚举最好用循环结构、从编写程序的角度看,实现枚举最好用循环结构、从编写程序的角度看,实现枚举最好用循环结构for(k=1; k=4; k=k+1)for(k=1; k=4; k=k+1)for(k=1; k=4; k=k+1)for(k=1; k=4; k=k+1) / / / / 循环体,开始循环体,开始循环体,开始循环体,开始thismanthismanthismanthisman = 64+k; = 64+k; = 64+k; = 64+k;/ / / / 产生被试者,依次给产生被试者,依次给产生被试者,依次给产生被试者,依次给thismanthismanthismanthisman/ / / / 赋值为赋值为赋值为赋值为A,B,C,DA,B,C,DA,B,C,DA,B,C,Dsum = (sum = (sum = (sum = (thismanthismanthismanthisman!=A)+!=A)+!=A)+!=A)+/ A/ A/ A/ A的话是否为真的话是否为真的话是否为真的话是否为真 ( ( ( (thismanthismanthismanthisman=C)+=C)+=C)+=C)+/ B/ B/ B/ B的话是否为真的话是否为真的话是否为真的话是否为真 ( ( ( (thismanthismanthismanthisman=D)+=D)+=D)+=D)+/ C/ C/ C/ C的话是否为真的话是否为真的话是否为真的话是否为真 ( ( ( (thismanthismanthismanthisman!=D);!=D);!=D);!=D);/ D/ D/ D/ D的话是否为真的话是否为真的话是否为真的话是否为真 / / / / 循环体,结束循环体,结束循环体,结束循环体,结束程序举例程序举例3_16:谁做的好事?:谁做的好事?NSNS图图有了上述了解之后,我们来看解有了上述了解之后,我们来看解有了上述了解之后,我们来看解有了上述了解之后,我们来看解“谁做的好谁做的好谁做的好谁做的好事事事事”的程序框图的程序框图的程序框图的程序框图根据上述框图写出的程序见根据上述框图写出的程序见根据上述框图写出的程序见根据上述框图写出的程序见3_17.cpp3_17.cpp3_17.cpp3_17.cpp#include #include #include #include void main()void main()void main()void main()/ / / / 主函数主函数主函数主函数 intintintint k,sum,g=0; k,sum,g=0; k,sum,g=0; k,sum,g=0;/ / / / 声明变量为整数类型声明变量为整数类型声明变量为整数类型声明变量为整数类型for(k=1;k=4;k=k+1)for(k=1;k=4;k=k+1)for(k=1;k=4;k=k+1)for(k=1;k=4;k=k+1)/ / / / 循环从循环从循环从循环从k k k k为为为为1 1 1 1到到到到4 4 4 4,/ k/ k/ k/ k取取取取1,2,3,41,2,3,41,2,3,41,2,3,4分别代表分别代表分别代表分别代表A,B,C,DA,B,C,DA,B,C,DA,B,C,D / / / / 循环开始循环开始循环开始循环开始sum=0;sum=0;sum=0;sum=0;/ / / / 初始化,置初始化,置初始化,置初始化,置0 0 0 0if (k!=1) sum=sum+1;/ Aif (k!=1) sum=sum+1;/ Aif (k!=1) sum=sum+1;/ Aif (k!=1) sum=sum+1;/ A说的话,为真,则令说的话,为真,则令说的话,为真,则令说的话,为真,则令sumsumsumsum加加加加1 1 1 1;if (k=3) sum=sum+1;/ Bif (k=3) sum=sum+1;/ Bif (k=3) sum=sum+1;/ Bif (k=3) sum=sum+1;/ B说的话,为真,则令说的话,为真,则令说的话,为真,则令说的话,为真,则令sumsumsumsum加加加加1 1 1 1;if (k=4) sum=sum+1;/ Cif (k=4) sum=sum+1;/ Cif (k=4) sum=sum+1;/ Cif (k=4) sum=sum+1;/ C说的话,为真,则令说的话,为真,则令说的话,为真,则令说的话,为真,则令sumsumsumsum加加加加1 1 1 1;if (k!=4) sum=sum+1;/ Dif (k!=4) sum=sum+1;/ Dif (k!=4) sum=sum+1;/ Dif (k!=4) sum=sum+1;/ D说的话,为真,则令说的话,为真,则令说的话,为真,则令说的话,为真,则令sumsumsumsum加加加加1 1 1 1;if (sum=3)if (sum=3)if (sum=3)if (sum=3) / / / / 若有三句话为真话,则做下列两件事若有三句话为真话,则做下列两件事若有三句话为真话,则做下列两件事若有三句话为真话,则做下列两件事 coutcoutcoutcout“做好事的人是做好事的人是做好事的人是做好事的人是 ”char(64+k)char(64+k)char(64+k)char(64+k)endlendlendlendl;/ ;/ ;/ ;/ 输出输出输出输出 g=1;g=1;g=1;g=1;/ / / / 让有解标志置让有解标志置让有解标志置让有解标志置1 1 1 1 if (g!=1) if (g!=1) if (g!=1) if (g!=1) coutcoutcoutcout“未找到解未找到解未找到解未找到解! ! ! !”endlendlendlendl; ; ; ;/ / / / 如如如如g g g g不为不为不为不为1 1 1 1,则输出无解信息,则输出无解信息,则输出无解信息,则输出无解信息 讨论:下面这个程序行不行,从思路上讨论讨论:下面这个程序行不行,从思路上讨论上述程序可以简化为:上述程序可以简化为:上述程序可以简化为:上述程序可以简化为:3_18.cpp3_18.cpp3_18.cpp3_18.cpp#include #include #include #include void main( )void main( )void main( )void main( ) intintintint k, g; k, g; k, g; k, g;/声明变量为整数类型声明变量为整数类型声明变量为整数类型声明变量为整数类型for (k=1; k=4; k=k+1)for (k=1; k=4; k=k+1)for (k=1; k=4; k=k+1)for (k=1; k=4; k=k+1)/这里这里这里这里k k k k既为循环控既为循环控既为循环控既为循环控/制变量,也表示第制变量,也表示第制变量,也表示第制变量,也表示第k k k k个人个人个人个人 if (k!=1)+(k=3)+(k=4)+(k!=4)=3)if (k!=1)+(k=3)+(k=4)+(k!=4)=3)if (k!=1)+(k=3)+(k=4)+(k!=4)=3)if (k!=1)+(k=3)+(k=4)+(k!=4)=3) / / / / 如果如果如果如果4 4 4 4句话有句话有句话有句话有3 3 3 3句为真,则输出该人句为真,则输出该人句为真,则输出该人句为真,则输出该人coutcoutcoutcout“做好事的人是做好事的人是做好事的人是做好事的人是 ”char(64+k)char(64+k)char(64+k)char(64+k)endlendlendlendl; ; ; ; g=1;g=1;g=1;g=1; if (g!=1) if (g!=1) if (g!=1) if (g!=1) coutcoutcoutcout“未找到解未找到解未找到解未找到解! ! ! !”endlendlendlendl; ; ; ;/ / / / 输出无解信息输出无解信息输出无解信息输出无解信息 程序举例程序举例3_16 :谁做的好事?:谁做的好事?if if 语句用于实现单路、两路和多路分支。语句用于实现单路、两路和多路分支。switchswitch也是多选一的分支语句,它是也是多选一的分支语句,它是if if 语语句的一个补充(句的一个补充(else if else if 结构),当用它编结构),当用它编制程序时会增加可读性。制程序时会增加可读性。循环是一组语句,计算机反复执行这组语句循环是一组语句,计算机反复执行这组语句直到满足终止条件为止。直到满足终止条件为止。while, dowhile, do.while.while和和for for 三种循环语句可三种循环语句可以相互转化。以相互转化。小小 结结forfor适用于循环次数已知的循环。适用于循环次数已知的循环。whilewhile先判定循环条件,可能一次都不执行先判定循环条件,可能一次都不执行循环体。循环体。dodowhilewhile后判定循环条件,至少保证执行后判定循环条件,至少保证执行一次循环体。一次循环体。whilewhile和和dodowhilewhile中都有改变循环控制变量中都有改变循环控制变量的语句。的语句。可以通过循环变量来控制循环,在循环体中可以通过循环变量来控制循环,在循环体中通过条件判定产生跳转的方法,终止循环。通过条件判定产生跳转的方法,终止循环。小小 结结P92 P92 P92 P92 习题三习题三习题三习题三3.13.13.13.1,3.63.63.63.6,3.73.73.73.7,3.103.103.103.104 4 4 4名专家对名专家对名专家对名专家对4 4 4 4款赛车进行评论款赛车进行评论款赛车进行评论款赛车进行评论A A A A说:说:说:说:2 2 2 2号赛车是最好的。号赛车是最好的。号赛车是最好的。号赛车是最好的。B B B B说:说:说:说:4 4 4 4号赛车是最好的。号赛车是最好的。号赛车是最好的。号赛车是最好的。C C C C说:说:说:说:3 3 3 3号不是最佳赛车。号不是最佳赛车。号不是最佳赛车。号不是最佳赛车。D D D D说:说:说:说:B B B B说错了。说错了。说错了。说错了。事实上只有一款赛车最佳,且只有一名专家说对了,事实上只有一款赛车最佳,且只有一名专家说对了,事实上只有一款赛车最佳,且只有一名专家说对了,事实上只有一款赛车最佳,且只有一名专家说对了,其他其他其他其他3 3 3 3人都说错了。请编程输出最佳车的车号,以人都说错了。请编程输出最佳车的车号,以人都说错了。请编程输出最佳车的车号,以人都说错了。请编程输出最佳车的车号,以及哪位专家说对了。及哪位专家说对了。及哪位专家说对了。及哪位专家说对了。习习 题题请提前预习第四章的内容,重点是:请提前预习第四章的内容,重点是:(1 1 1 1)数组的概念、定义和初始化)数组的概念、定义和初始化)数组的概念、定义和初始化)数组的概念、定义和初始化(2 2 2 2)字符数组)字符数组)字符数组)字符数组(3 3 3 3)结构与结构数组)结构与结构数组)结构与结构数组)结构与结构数组预习提示预习提示结束页再见!今天就讲到这里
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号