《第2章 程序的流程控制.ppt》由会员分享,可在线阅读,更多相关《第2章 程序的流程控制.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SEI 第二章第二章 程序的流程控制程序的流程控制 语句语句高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季2学习目标学习目标n了解布尔数据的概念,掌握关系操作符和逻辑操了解布尔数据的概念,掌握关系操作符和逻辑操作符的使用方法;作符的使用方法;n熟练掌握熟练掌握if语句,掌握语句,掌握switch语句,会利用这两语句,会利用这两种语句进行条件分支结构的程序设计;种语句进行条件分支结构的程序设计;n熟练掌握熟练掌握for语句、语句、while语句,会利用这两种语语句,会利用这两种语句进行循环结构的程序设计。句进行循环结构的程序设计。n掌握掌握break语句和语句和continue
2、语句与上述语句的配语句与上述语句的配合使用方法。合使用方法。高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季3第二章第二章 程序的流程控制程序的流程控制n2.1 结构化程序设计基础结构化程序设计基础n2.2 布尔数据布尔数据n2.3 if分支结构分支结构n2.4 switch 分支结构分支结构n2.5 while 循环结构循环结构n2.6 for 循环结构循环结构n2.7 问题求解与结构化程序设计问题求解与结构化程序设计高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季4n三种基本控制结构三种基本控制结构n顺序结构顺序结构n分支结构分支结构n循环结构循环结构n复杂
3、控制结构复杂控制结构n控制结构可以嵌套,以构成更复杂的控制结构控制结构可以嵌套,以构成更复杂的控制结构结构化程序设计基础结构化程序设计基础结构化程序设计基础结构化程序设计基础高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季5n顺序结构顺序结构n由一组顺序执行的处理块组成,每个处理块可能包含一由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语句,完成一项任务条或一组语句,完成一项任务n顺序结构是最基本的算法结构顺序结构是最基本的算法结构顺序结构顺序结构顺序结构顺序结构结构化程序结构化程序设计基础设计基础高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季6n编
4、写程序,接受用户输入的两个整数,输出其中较大者编写程序,接受用户输入的两个整数,输出其中较大者#include#include zylib.hint main()int a,b,max;/*/*输入部分输入部分 */*/printf(The program gets two numbers and prints the greater one.n);printf(The first number:);a=GetIntegerFromKeyboard();printf(The second number:);b=GetIntegerFromKeyboard();/*/*计算部分计算部分 */*/
5、max=a b?a:b;/*/*三元表达式三元表达式 */*/*/*输出部分输出部分 */*/printf(The greater one is%d.n,max);return 0;顺序结构示例顺序结构示例顺序结构示例顺序结构示例结构化程序结构化程序设计基础设计基础高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季7n格格 式式n表达式表达式1?表达式表达式2:表达式表达式3n计算过程计算过程n先计算表达式先计算表达式1的值,若为真,则结果为表达式的值,若为真,则结果为表达式2的值,否则为的值,否则为表达式表达式3的值的值n示示 例例nx=(a b)?a:b;n等价于:等价于:i
6、f(a b)x=a;else x=b;三元表达式三元表达式三元表达式三元表达式结构化程序结构化程序设计基础设计基础高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季8n分支结构(选择结构)的含义分支结构(选择结构)的含义n根据某一条件的判断结果,确定程序的流程,即选择哪一个程序分支根据某一条件的判断结果,确定程序的流程,即选择哪一个程序分支中的处理块去执行中的处理块去执行n最基本的分支结构是二路分支结构最基本的分支结构是二路分支结构n以条件判断为起点,如果判断结果为真,则执行以条件判断为起点,如果判断结果为真,则执行A处理块的操作,否处理块的操作,否则执行则执行B处理块的操作处理
7、块的操作分支结构分支结构分支结构分支结构结构化程序结构化程序设计基础设计基础高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季9n循环结构的含义循环结构的含义n根据某一条件的判断结果,反复执行某一处理块的过程根据某一条件的判断结果,反复执行某一处理块的过程n进入循环结构,判断循环条件,如果循环条件的结果为真,则执行进入循环结构,判断循环条件,如果循环条件的结果为真,则执行A处理块的操作,即循环一次,然后再次判断循环条件,当循环条件为处理块的操作,即循环一次,然后再次判断循环条件,当循环条件为假时,循环结束假时,循环结束循环结构循环结构循环结构循环结构结构化程序结构化程序设计基础设
8、计基础高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季10第二章第二章 程序的流程控制程序的流程控制n2.1 结构化程序设计基础结构化程序设计基础n2.2 布尔数据布尔数据n2.2.1 枚举类型枚举类型n2.2.2 用户自定义数据类型用户自定义数据类型n2.2.3 关系表达式关系表达式n2.2.4 逻辑表达式逻辑表达式n2.2.5 逻辑表达式的求值逻辑表达式的求值n2.3 if分支结构分支结构n2.4 switch 分支结构分支结构n2.5 while 循环结构循环结构n2.6 for 循环结构循环结构n2.7 问题求解与结构化程序设计问题求解与结构化程序设计高级语言程序设计S
9、EIC+C+C+C+程序设计基础 2009秋季11n如何描述一个星期的每一天这样的数据?如果用如何描述一个星期的每一天这样的数据?如果用int来描述,将会面临:来描述,将会面临:n1表示什么意思?表示什么意思?n星期天用什么整数表示?星期天用什么整数表示?0还是还是7?n如果用如果用06表示一个星期的每一天,则对于一个取值为一个表示一个星期的每一天,则对于一个取值为一个星期某一天的星期某一天的int型变量型变量day,如何防止下面的逻辑错误:,如何防止下面的逻辑错误:wday=10wday=day*2n在在C语言中用枚举类型来解决上面的问题。语言中用枚举类型来解决上面的问题。枚举类型枚举类型枚
10、举类型枚举类型高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季12n枚举类型的定义格式为:枚举类型的定义格式为:nenum ;w为用逗号隔开的若干个枚举值。例如:例如:nenum Day SUN,MON,TUE,WED,THU,FRI,SAT;nenum Color RED,GREEN,BLUE;nenum Month JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC;枚举类型的定义枚举类型的定义枚举类型枚举类型高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季13n枚举类型变量的定义枚举类型变量的定义n例:例:enu
11、m MONTH month;注意:注意:enum不是类型修饰符,不是类型修饰符,enum与所定义的枚举类型名一起与所定义的枚举类型名一起才是类型修饰符(如才是类型修饰符(如enum Day)。n实现布尔类型实现布尔类型n定义类型:定义类型:enum BOOL FALSE,TRUE;n使用布尔类型定义变量:使用布尔类型定义变量:enum BOOL flag;n每次定义,都需要书写每次定义,都需要书写 enum,很不方便,很不方便枚举类型枚举类型枚举类型枚举类型布尔数据布尔数据高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季14n自定义类型的格式自定义类型的格式n格式:格式:typ
12、edef 原类型修饰符原类型修饰符 新类型名新类型名;n例一:例一:typedef int DWORD;n例二:例二:enum BOOL FALSE,TRUE;typedef enum BOOL BOOL;n自定义类型的性质自定义类型的性质n新类型与原类型相同,并未产生新类型,重新命名的自定义类新类型与原类型相同,并未产生新类型,重新命名的自定义类型使程序更易理解型使程序更易理解用户自定义类型用户自定义类型用户自定义类型用户自定义类型布尔数据布尔数据高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季15n实现布尔类型:第一版实现布尔类型:第一版n定义枚举类型:定义枚举类型:enu
13、m BOOL FALSE,TRUE;n自定义布尔类型:自定义布尔类型:typedef enum BOOL BOOL;n定义变量:定义变量:BOOL bool;n实现布尔类型:第二版实现布尔类型:第二版n定义枚举类型:定义枚举类型:enum _BOOL FALSE,TRUE;n自定义布尔类型:自定义布尔类型:typedef enum _BOOL BOOL;n定义变量:定义变量:BOOL bool;n实现布尔类型:第三版实现布尔类型:第三版n定义类型:定义类型:typedef enum FALSE,TRUE BOOL;n定义变量:定义变量:BOOL bool;布尔类型布尔类型布尔类型布尔类型布尔数
14、据布尔数据高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季16n关系操作符关系操作符n(大于)(大于),=(不小于)(不小于),=(不大于)(不大于),=(相等)(相等),!=(不等)(不等)n关系表达式关系表达式n关系操作符与两个操作数构成的表达式关系操作符与两个操作数构成的表达式n运算结果为逻辑值:真或假运算结果为逻辑值:真或假n逻辑值(布尔值)逻辑值(布尔值)nC语言以语言以 0 表示假,以非表示假,以非 0 表示真(经常以表示真(经常以 1 表示)表示)n尽量使用尽量使用 BOOL 类型表示逻辑值!类型表示逻辑值!n示示 例例n例:例:x=y,a b注意:应避免对两个浮
15、点数进行注意:应避免对两个浮点数进行“=”和和“!=”比较运算比较运算 x=y可写成:可写成:fabs(x-y)1e-6关系表达式关系表达式关系表达式关系表达式优先级相同(高)优先级相同(高)优先级相同(低)优先级相同(低)布尔数据布尔数据高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季17n 逻辑操作符逻辑操作符 逻辑操作符实现逻辑运算,结果也为布尔类型的逻辑操作符实现逻辑运算,结果也为布尔类型的值:值:true或或false。!(逻辑非)、(逻辑非)、&(逻辑与)、(逻辑与)、|(逻辑或)(逻辑或)!true -false!true -false!false-true!fa
16、lse-truefalse|false-falsefalse|false-falsefalse|true -truefalse|true -truetrue|false-truetrue|false-truetrue|true -truetrue|true -truefalse&false-falsefalse&false-falsefalse&true -falsefalse&true -falsetrue&false-falsetrue&false-falsetrue&true -truetrue&true -true布尔数据布尔数据逻辑表达式逻辑表达式优先级:高优先级:高低低高级语言程序
17、设计SEIC+C+C+C+程序设计基础 2009秋季18n逻辑表达式:逻辑操作符与一个或两个操作数构逻辑表达式:逻辑操作符与一个或两个操作数构成的表达式,结果仍为真或假成的表达式,结果仍为真或假。n关系操作符与逻辑操作符的优先级关系操作符与逻辑操作符的优先级n从高到低顺序:逻辑非从高到低顺序:逻辑非“!”;小于;小于“=”、大于、大于“”、不大于、不大于“y|a!=b&3 y)max=x;n格式二:格式二:if(条件表达式条件表达式)语句序列语句序列 1 else 语句序语句序列列 2 例:例:if(xy)max=x;else max=y;n格式三:格式三:if(条件条件表达式表达式1)语句序
18、列语句序列 1 else if(条件表达式条件表达式2)语句序列语句序列 2 else if(条件表达式条件表达式3)语句序列语句序列 3。else 语句序列语句序列 n if语句语句 if分支结构分支结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季23l编写程序,接受用户输入的整数,如果该整数为奇编写程序,接受用户输入的整数,如果该整数为奇数则将其乘数则将其乘 3 加加 1 后输出,偶数直接输出。后输出,偶数直接输出。#include#include zylib.hint main()int a,result;/*/*输入部分输入部分 */*/printf(The pro
19、gram gets a number.nIf it is an even,output it directly,n);printf(otherwise multiply it by 3 then plus 1.n);printf(The number:);a=GetIntegerFromKeyboard();/*/*计算部分计算部分 */*/result=a;if(a%2=1)result=a*3+1;/*/*输出部分输出部分 */*/printf(The result is%d.n,result);return 0;简单简单if语句语句 if分支结构分支结构高级语言程序设计SEIC+C+C+
20、C+程序设计基础 2009秋季24l编写程序,接受用户输入的整数,如果该整数为奇数编写程序,接受用户输入的整数,如果该整数为奇数则将其乘则将其乘 3 加加 1 后输出,偶数除以后输出,偶数除以 2 后输出后输出#include#include zylib.hint main()int a,result;/*/*输入部分输入部分 */*/printf(The program gets a number.nIf it is an even,divide it by 2,n);printf(otherwise multiply it by 3 then plus 1.n);printf(The nu
21、mber:);a=GetIntegerFromKeyboard();/*/*计算部分计算部分 */*/if(a%2=1)result=a*3+1;else result=a/2;/*/*输出部分输出部分 */*/printf(The result is%d.n,result);return 0;if-else语句语句 if分支结构分支结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季25if-else语句语句l从键盘输入三个整数,计算其中的最大值并将其输出。从键盘输入三个整数,计算其中的最大值并将其输出。#include#include zylib.hint main()in
22、t a,b,c,max;/*/*输入部分输入部分 */*/printf(“该程序从键盘获取该程序从键盘获取3个整数,输出最大值。个整数,输出最大值。n);printf(“请输入请输入3个数个数:n);a=GetIntegerFromKeyboard();b=GetIntegerFromKeyboard();c=GetIntegerFromKeyboard();/*/*计算部分计算部分 */*/if(a b)max=a;else max=b;if(c max)max=c;/*/*输出部分输出部分 */*/printf(“最大值为:最大值为:%d.n,max);return 0;if分支结构分支结
23、构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季26l从键盘输入一个三角形的三条边,判断其为何种三角形。从键盘输入一个三角形的三条边,判断其为何种三角形。#include int main()int a,b,c;scanf(%d%d%d,&a,&b,&c);if(a+b=c|b+c=a|c+a=b)printf(不是三角形不是三角形);else if(a=b&b=c)printf(等边三角形等边三角形);else if(a=b|b=c|c=a)printf(等腰三角形等腰三角形);else if(a*a+b*b=c*c|b*b+c*c=a*a|c*c+a*a=b*b)prin
24、tf(直角三角形(非等腰)直角三角形(非等腰));elseprintf(其它三角形其它三角形);printf(n);return 0;if-else if-else语句语句 if分支结构分支结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季27If语句的嵌套语句的嵌套n一般形式一般形式if()if()语句语句1else 语句语句2elseif()语句语句3else 语句语句4注意:注意:语句语句1、2、3、4可以是复合语句,每层的可以是复合语句,每层的if与与else配对,或用配对,或用 来确定层次关系。来确定层次关系。if分支结构分支结构高级语言程序设计SEIC+C+C+C
25、+程序设计基础 2009秋季28lelse 与哪个与哪个 if 配对?配对?if(service_years=28)salary_level+=1;else salary_level+=2;lelse 与与 if 配对规则配对规则-else部分属于前面最近的无对应部分属于前面最近的无对应else的的if语句。语句。if(service_years=28)salary_level+=1;else salary_level+=2;降低第二个降低第二个 if 的层次,的层次,使使 else 与第一个与第一个 if 配对配对if语句的歧义语句的歧义 if分支结构分支结构高级语言程序设计SEIC+C+C
26、+C+程序设计基础 2009秋季29第二章第二章 程序的流程控制程序的流程控制n2.1 结构化程序设计基础结构化程序设计基础n2.2 布尔数据布尔数据n2.3 if分支结构分支结构n2.4 switch 分支结构分支结构n2.5 while 循环结构循环结构n2.6 for 循环结构循环结构n2.7 问题求解与结构化程序设计问题求解与结构化程序设计高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季30n计算过程计算过程n先计算表达式的值先计算表达式的值n依次与常数表达式比较依次与常数表达式比较n若相同则执行该分支(子句)若相同则执行该分支(子句)n否则转向否则转向 default
27、 分支分支n最后退出最后退出 switch 语句语句n特别说明特别说明nswitch 后面的表达式必须为整型、字符型或枚举型后面的表达式必须为整型、字符型或枚举型ncase 后面必须为常量表达式,且各个后面必须为常量表达式,且各个 case 值必须不同值必须不同ncase 分支中的语句可以有多条,不需要花括号分支中的语句可以有多条,不需要花括号switch(整型表达式整型表达式)case整型常量表达式整型常量表达式 1:语句序列语句序列 1 case整型常量表达式整型常量表达式 2:语句序列语句序列 2 case整型常量表达式整型常量表达式 n:语句序列语句序列 n default:默认语句序
28、列默认语句序列switch分支结构分支结构switch分支结构分支结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季31switch语句的执行流程语句的执行流程switch分支结构分支结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季32l从键盘输入一个星期的某一天(从键盘输入一个星期的某一天(0:星期天;:星期天;1:星期一;:星期一;.),然后输出其对),然后输出其对应的英语单词。应的英语单词。switch示例示例switch分支结构分支结构#include int main()int day;scanf(“%d”,&day);switch(day)ca
29、se 0:printf(Sunday);break;case 1:printf(Monday);break;case 2:printf(Tuesday);break;case 3:printf(Wednesday);break;case 4:printf(Thursday);break;case 5:printf(Friday);break;case 6:printf(Saturday);break;default:printf(Input error);printf(“n”);return 0;高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季33nbreak 语句的目的语句的
30、目的n终止终止 switch 语句的执行语句的执行n如果没有如果没有 break 语句,则程序会从指定的语句,则程序会从指定的 case 分支开始,分支开始,并在该分支结束后继续执行下去并在该分支结束后继续执行下去n除非除非 switch 语句结束,后面的其他语句结束,后面的其他 case 分支或分支或 default 分分支中的语句都会得到执行支中的语句都会得到执行break语句语句switch分支结构分支结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季34第二章第二章 程序的流程控制程序的流程控制n2.1 结构化程序设计基础结构化程序设计基础n2.2 布尔数据布尔数据n
31、2.3 if分支结构分支结构n2.4 switch 分支结构分支结构n2.5 while 循环结构循环结构n2.6 for 循环结构循环结构n2.7 问题求解与结构化程序设计问题求解与结构化程序设计高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季35n循环是根据某个条件的满足与否来决定是否重复执行一组语循环是根据某个条件的满足与否来决定是否重复执行一组语句。句。nC语言提供了两种实现重复操作的循环语句:语言提供了两种实现重复操作的循环语句:nwhile语句语句nfor语句语句n这两种循环语句在表达能力上是等价的,在解决某个具体问这两种循环语句在表达能力上是等价的,在解决某个具体
32、问题时,用其中的一种可能会比其它两种更加自然。题时,用其中的一种可能会比其它两种更加自然。循环语句循环语句高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季36nwhile 循环格式:循环格式:while(表达式表达式)循环体循环体nwhile 循环执行流程循环执行流程n先判断后执行:表达式为真时,执行一遍循环体(一次迭代),先判断后执行:表达式为真时,执行一遍循环体(一次迭代),返回重新计算表达式的值以确定是否重复执行循环体;若表达返回重新计算表达式的值以确定是否重复执行循环体;若表达式为假,则终止循环式为假,则终止循环n为保证循环终止,循环体内应有能改变表达式值的语句为保证循
33、环终止,循环体内应有能改变表达式值的语句while循环结构循环结构while循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季37while循环示例循环示例l编写程序,接受用户输入的整数编写程序,接受用户输入的整数n,求,求n!。#include int main()int n,i,f;printf(请输入整数请输入整数n:n);scanf(%d,&n);i=2;f=1;/循环初始化循环初始化while(i=n)/循环条件循环条件f*=i;i+;/循环参数调整循环参数调整printf(%d的阶乘为:的阶乘为:%dn,n,f);return 0;循环结构由四部分组成
34、:循环初始化、循环条件、循环体、循环参数调整高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季38l编写程序,接受用户输入的多个整数求和,用户输入编写程序,接受用户输入的多个整数求和,用户输入0时程序时程序结束结束#include#include zylib.hint main()int n,sum=0;/输入与计算部分输入与计算部分 printf(The program gets some integers,and output their sum.n);printf(To stop,please input 0.n);printf(Please input an intege
35、r:);n=GetIntegerFromKeyboard();while(n)sum+=n;printf(The next integer:);n=GetIntegerFromKeyboard();/输出部分输出部分 printf(The sum is%d.n,sum);return 0;常见的程序结构:常见的程序结构:获取第一个数据对象;获取第一个数据对象;While(While(与数据对象相关的循环条件与数据对象相关的循环条件)处理第一个数据对象;处理第一个数据对象;获取下一个数据对象;获取下一个数据对象;while循环示例循环示例while循环结构循环结构高级语言程序设计SEIC+C+C
36、+C+程序设计基础 2009秋季39n发生无限循环的场合发生无限循环的场合n循环体内没有改变循环变量值的语句循环体内没有改变循环变量值的语句n即使改变循环变量值,也不能否定循环条件即使改变循环变量值,也不能否定循环条件n循环体内没有能够强制终止循环执行的语句或命令循环体内没有能够强制终止循环执行的语句或命令n无限循环的后果无限循环的后果n程序永远不会结束,大多数时有害,编程时一般应避免程序永远不会结束,大多数时有害,编程时一般应避免n例外情况:循环体内有专门控制循环终止的语句或命令例外情况:循环体内有专门控制循环终止的语句或命令n命令格式:满足某种条件下使用命令格式:满足某种条件下使用 bre
37、ak 语句,终止循环执行语句,终止循环执行n哨兵:使循环满足终止条件的循环变量值哨兵:使循环满足终止条件的循环变量值无限循环无限循环while循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季40循环结构的特殊控制循环结构的特殊控制break和和continue的使用的使用n语句功能语句功能nbreak:强制退出循环,循环体中跟在:强制退出循环,循环体中跟在breakbreak语句后面的语句后面的语句将不再执行。语句将不再执行。nContinue:提前结束本轮循环体的执行,:提前结束本轮循环体的执行,准备进入下一准备进入下一次循环。次循环。循环条件循环条件循环体循
38、环体truefalsebreakcontinuewhile循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季41/*/*输入与计算部分输入与计算部分*/printf(The program gets some integers,and output their sum.n);printf(To stop,please input 0.n);while(TRUE)printf(Please input an integer:);n=GetIntegerFromKeyboard();if(n=0)break;sum+=n;n使用无限循环和哨兵的优势使用无限循环和哨兵的
39、优势n不再需要将首个数据处理过程提到循环体前单不再需要将首个数据处理过程提到循环体前单独处理独处理使用使用break语句终止循环语句终止循环while循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季42l编写程序,接受用户输入的多个整数求和。注意,仅累加正整编写程序,接受用户输入的多个整数求和。注意,仅累加正整数,跳过所有负数,用户输入数,跳过所有负数,用户输入0时程序结束时程序结束#include#include zylib.hint main()int n,sum=0,count=0;/*/*count 为输入整数的个数为输入整数的个数 */*/*输入与计算
40、部分输入与计算部分 */printf(The program gets some integers,and output the sum of all positive numbers.n);printf(To stop,please input 0.n);while(TRUE)count+=1;printf(Number%d:,count);n=GetIntegerFromKeyboard();if(n=0)break;/*/*终止循环终止循环 */if(n 0)continue;/*/*仅终止循环的当前迭代,不累加负数值仅终止循环的当前迭代,不累加负数值 */sum+=n;/*/*输出部分
41、输出部分*/printf(The sum is%d.n,sum);return 0;continue语句语句while循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季43第二章第二章 程序的流程控制程序的流程控制n2.1 结构化程序设计基础结构化程序设计基础n2.2 布尔数据布尔数据n2.3 if分支结构分支结构n2.4 switch 分支结构分支结构n2.5 while 循环结构循环结构n2.6 for 循环结构循环结构n2.7 问题求解与结构化程序设计问题求解与结构化程序设计高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季44nfor 循环格
42、式循环格式nfor(初始化表达式初始化表达式;条件表达式条件表达式;步进表达式步进表达式)循环体循环体nfor 循环执行流程循环执行流程n先判断后执行:先执行初始化表达式,再计算条件表达式,并先判断后执行:先执行初始化表达式,再计算条件表达式,并根据其结果决定是否执行一遍循环体(为真时执行),计算步根据其结果决定是否执行一遍循环体(为真时执行),计算步进表达式的值(循环再次进表达式的值(循环再次“初始化初始化”),返回重新计算条件表),返回重新计算条件表达式的值以确定循环是否终止达式的值以确定循环是否终止for语句语句for循环结构循环结构循环初始化循环初始化循环条件循环条件循环参数调整循环参
43、数调整高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季45for循环示例循环示例l编写程序,接受用户输入的整数编写程序,接受用户输入的整数n,求,求n!。#include int main()int n,i,f;printf(请输入整数请输入整数n:n);scanf(%d,&n);for(i=2,f=1;i=n;i+)f*=i;printf(%d的阶乘为:的阶乘为:%dn,n,f);return 0;for循环结构循环结构循环初始化循环初始化循环条件循环条件循环参数调整循环参数调整循环体循环体1.只执行一次只执行一次2.可以为空可以为空高级语言程序设计SEIC+C+C+C+程序
44、设计基础 2009秋季46l编写程序,接受用户输入的整数编写程序,接受用户输入的整数 n,求,求 1 n 的平的平方和方和#include#include zylib.hint main()int n,i,sum=0;printf(The program gets a positive integer,n);printf(and prints the squared sum from 1 to the number.n);printf(The number:);n=GetIntegerFromKeyboard();sum=0;for(i=0;i=n;+i)sum+=i*i;printf(The
45、 sum is%d.n,sum);return 0;for循环示例循环示例for循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季47n两种循环结构可以互换使用两种循环结构可以互换使用n如果循环前能确定循环的次数,则用如果循环前能确定循环的次数,则用forfor语句;语句;n否则,使用否则,使用whilewhile语句;语句;nfor 循环将所有循环控制因素都放在循环头部,循环结构最循环将所有循环控制因素都放在循环头部,循环结构最清晰,使用频率也最高。清晰,使用频率也最高。for与与while的比较的比较循环语句循环语句高级语言程序设计SEIC+C+C+C+程序设
46、计基础 2009秋季48例:输入10个数,计算它们的和。#include int main()double x,sum=0;int i;printf(请输入请输入1010个数:个数:);for(i=0;i10;i+)scanf(%lf%lf,&x);sum+=x;printf(sum=%lfsum=%lfn,sum);return 0;for循环举例循环举例循环语句循环语句高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季49while循环举例循环举例例:求数列例:求数列 1/2、3/4、5/8、7/16、9/32的的所所有有大大于于等等于于0.000001的的数数据据项项之之和
47、和,输输出出计计算算结结果。果。分析:分析:序号序号分子分子分母分母12 21-1=11-1=121=222 22-1=32-1=322=432 23-1=53-1=523=8i2 2i-1=2i-1i-1=2i-12i=2ai=(2i-1)/2i循环语句循环语句高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季50#include#include int main()int i=1;double sum=0.0,si;while(si=(i+i-1)/pow(2,i)=0.000001)sum+=si;i+;printf(“sum=%lfn”,sum);return 0;循环语
48、句循环语句高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季51循环结构的嵌套循环结构的嵌套n例:显示输出如下所示的三角形例:显示输出如下所示的三角形(for语句嵌套)语句嵌套)*for循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季52循环结构的嵌套循环结构的嵌套 分析:分析:行号行号 空格数空格数 *数数*0 5 1 *1 4 3 *2 3 5 *3 2 7 *4 1 9*5 0 11for循环结构循环结构高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季53#include int main()int i,j;for(i=0;i
49、6;i+)printf(n);for(j=0;j5-i;j+)printf();for(j=0;ji+i+1;j+)printf(*);return 0;for循环结构循环结构程序代码程序代码高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季54例:编程求出小于例:编程求出小于n n的所有素数(质数)的所有素数(质数)#include int main()int n,count=0;int i,j;printf(请输入一个正整数:请输入一个正整数:);scanf(%d,&n);/从键盘输入一个正整数从键盘输入一个正整数printf(“小于小于%d的素数有:的素数有:n”,n);f
50、or(i=2;in;i+)/循环:分别判断循环:分别判断2、3、.、n-1是否为素数是否为素数j=2;while(j i&i%j!=0)/循环:分别判断循环:分别判断i是否能被是否能被2 i-1整除整除j+;if(j=i)/i是素数是素数printf(%d,i);count+;if(count%6=0)printf(n);/控制每一行输出控制每一行输出6个素数。个素数。printf(n);return 0;高级语言程序设计SEIC+C+C+C+程序设计基础 2009秋季55l编写程序,按下述格式打印九九乘法表编写程序,按下述格式打印九九乘法表循环嵌套循环嵌套高级语言程序设计SEIC+C+C+C