《程序控制结构PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《程序控制结构PPT讲稿.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序控制结构第1页,共40页,编辑于2022年,星期日3.1 C 语言结构化程序设计基础程序的控制结构(黑箱)程序的控制结构(黑箱)程序的控制结构(黑箱)程序的控制结构(黑箱)单入口单出口的控制结构易于理解单入口单出口的控制结构易于理解单入口单出口的控制结构易于理解单入口单出口的控制结构易于理解 三种基本控制结构:顺序、分支、循环三种基本控制结构:顺序、分支、循环三种基本控制结构:顺序、分支、循环三种基本控制结构:顺序、分支、循环 控制结构可以嵌套,以构成更复杂的控制结构控制结构可以嵌套,以构成更复杂的控制结构控制结构可以嵌套,以构成更复杂的控制结构控制结构可以嵌套,以构成更复杂的控制结构 程
2、序的结构化程序的结构化程序的结构化程序的结构化 三种基本控制结构可以构造任何复杂的结构化算法三种基本控制结构可以构造任何复杂的结构化算法三种基本控制结构可以构造任何复杂的结构化算法三种基本控制结构可以构造任何复杂的结构化算法 结构化程序设计原则:结构化程序设计原则:结构化程序设计原则:结构化程序设计原则:自顶向下自顶向下自顶向下自顶向下,逐步求精逐步求精逐步求精逐步求精 结构化程序设计过程:首先对任务进行功能分解,然后使用结构结构化程序设计过程:首先对任务进行功能分解,然后使用结构结构化程序设计过程:首先对任务进行功能分解,然后使用结构结构化程序设计过程:首先对任务进行功能分解,然后使用结构化
3、程序设计思想逐一解决各个子问题,最后构造原始问题的解化程序设计思想逐一解决各个子问题,最后构造原始问题的解化程序设计思想逐一解决各个子问题,最后构造原始问题的解化程序设计思想逐一解决各个子问题,最后构造原始问题的解 好处:逻辑性强,可读性好,维护方便好处:逻辑性强,可读性好,维护方便好处:逻辑性强,可读性好,维护方便好处:逻辑性强,可读性好,维护方便第2页,共40页,编辑于2022年,星期日3.2 顺序结构 顺序结构的含义顺序结构的含义顺序结构的含义顺序结构的含义 由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语由一组顺序执行
4、的处理块组成,每个处理块可能包含一条或一组语由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语句,完成一项任务句,完成一项任务句,完成一项任务句,完成一项任务 顺序结构是最基本的算法结构顺序结构是最基本的算法结构顺序结构是最基本的算法结构顺序结构是最基本的算法结构 语句与复合语句(语句块)语句与复合语句(语句块)语句与复合语句(语句块)语句与复合语句(语句块)三种语句结构:单语句(三种语句结构:单语句(三种语句结构:单语句(三种语句结构:单语句(表达式表达式表达式表达式;)、空语句()、空语句()、空语句()、空语句(;)、复合语句)、复合语句)、复合语句)、复合语句(语句序列语句序列
5、语句序列语句序列)第3页,共40页,编辑于2022年,星期日顺序结构程序示例 分别输入两个复数的实部与虚部,计算两个复数的和、差、分别输入两个复数的实部与虚部,计算两个复数的和、差、分别输入两个复数的实部与虚部,计算两个复数的和、差、分别输入两个复数的实部与虚部,计算两个复数的和、差、积、商并输出结果积、商并输出结果积、商并输出结果积、商并输出结果#include include int int mainmain()()float float a a,b b,c c,d d,realreal,imaginaryimaginary;printf printf(“Input reals and i
6、maginaries of two complexes(“Input reals and imaginaries of two complexesn n”);”);scanfscanf(“%(“%f f,%,%f f,%,%f f,%,%f f”,&”,&a a,&,&b b,&,&c c,&,&d d););printf printf(“Sum:%(“Sum:%f f+%+%f fi in n”,”,a a+c c,b b+d d););printf printf(“Difference:%(“Difference:%f f+%+%f fi in n”,”,a a c c,b b d d);
7、);realreal=a a*c c b b*d d;imaginaryimaginary=a a*d d+b b*c c;printf printf(“Product:%(“Product:%f f+%+%f fi in n”,”,realreal,imaginaryimaginary););realreal=(=(a a*c c+b b*d)d)/(/(c c*c c+d d*d d););imaginaryimaginary=(=(b b*c c a a*d)d)/(/(c c*c c+d d*d d););printf printf(“Quotient:%(“Quotient:%f f
8、+%+%f fi in n”,”,realreal,imaginaryimaginary););return 0;return 0;实际需要输入实际需要输入实际需要输入实际需要输入4 4 4 4个实数个实数个实数个实数第4页,共40页,编辑于2022年,星期日3.3 分支结构 分支结构(选择结构)的含义分支结构(选择结构)的含义分支结构(选择结构)的含义分支结构(选择结构)的含义 根据某一条件的判断结果,确定程序的流程,即选择哪一个程序根据某一条件的判断结果,确定程序的流程,即选择哪一个程序根据某一条件的判断结果,确定程序的流程,即选择哪一个程序根据某一条件的判断结果,确定程序的流程,即选择哪
9、一个程序分支中的处理块去执行分支中的处理块去执行分支中的处理块去执行分支中的处理块去执行 最基本的分支结构是二路分支结构最基本的分支结构是二路分支结构最基本的分支结构是二路分支结构最基本的分支结构是二路分支结构 以条件判断为起点,如果判断结果为真,则执行以条件判断为起点,如果判断结果为真,则执行以条件判断为起点,如果判断结果为真,则执行以条件判断为起点,如果判断结果为真,则执行A A处理块的操作,处理块的操作,处理块的操作,处理块的操作,否则执行否则执行否则执行否则执行B B处理块的操作处理块的操作处理块的操作处理块的操作第5页,共40页,编辑于2022年,星期日if-else 语句 语句格式
10、:语句格式:语句格式:语句格式:if(if(表达式表达式表达式表达式)语句语句1 else 1 else 语句语句语句语句2 2表达式必须位于括号内,一般为关系或逻辑表达式表达式必须位于括号内,一般为关系或逻辑表达式 先计算表达式值,若为真则执行语句先计算表达式值,若为真则执行语句先计算表达式值,若为真则执行语句先计算表达式值,若为真则执行语句1 1 1 1,否则执行语句,否则执行语句,否则执行语句,否则执行语句2 2 2 2语句语句1 1 1 1与语句与语句2 2 2 2可以为复合语句可以为复合语句语句语句语句语句1 1 1 1与语句与语句与语句与语句2 2 2 2只能有一个被执行只能有一个
11、被执行只能有一个被执行只能有一个被执行如果仅仅用于确定某条语句是否执行,如果仅仅用于确定某条语句是否执行,elseelse分支可以分支可以分支可以分支可以省略省略省略省略第6页,共40页,编辑于2022年,星期日if-else 语句示例一输入一个字符,判断它是否为输入一个字符,判断它是否为09090909之间的数字之间的数字之间的数字之间的数字#include include int int mainmain()()char char c c;printf printf(“Input a character:”);(“Input a character:”);c c=getchargetcha
12、r();();if if(c c=48&=48&c c=57)=57)printf printf(“It is a number.(“It is a number.n n”);”);elseelse printf printf(“No,it is not a number.(“No,it is not a number.n n”);”);return 0;return 0;因:字符以因:字符以因:字符以因:字符以ASCIIASCIIASCIIASCII码值存储码值存储码值存储码值存储且数字的且数字的且数字的且数字的ASCIIASCIIASCIIASCII码值码值码值码值485748574857
13、4857故:比较故:比较故:比较故:比较ASCIIASCIIASCIIASCII码值码值码值码值第7页,共40页,编辑于2022年,星期日if-else 语句示例二输入一个整数,输出其绝对值输入一个整数,输出其绝对值输入一个整数,输出其绝对值输入一个整数,输出其绝对值#include include int int mainmain()()int int n n,absabs;printf printf(“Enter integer:”);(“Enter integer:”);scanfscanf(“%(“%d d”,&”,&n n););absabs=n n;if if(absabs 0)0
14、)abs abs=absabs;printf printf(“Original integer:%(“Original integer:%d d,absolute value:%,absolute value:%d d n n”,”,n n,absabs););return 0;return 0;第8页,共40页,编辑于2022年,星期日if-else if-else 语句语句格式语句格式 if(if(表达式表达式表达式表达式1)1)语句语句语句语句1 else if(1 else if(表达式表达式表达式表达式2)2)语句语句语句语句2 else 2 else 语句语句语句语句n n第9页,
15、共40页,编辑于2022年,星期日if-else if-else 示例 根据百分制成绩给出优秀、通过或不通过成绩根据百分制成绩给出优秀、通过或不通过成绩根据百分制成绩给出优秀、通过或不通过成绩根据百分制成绩给出优秀、通过或不通过成绩#include#include int int mainmain()()float float scorescore;printfprintf(“Input score:“);(“Input score:“);scanfscanf(“%(“%f f“,&“,&scorescore););if if(scorescore=85&=85&scorescore=100)
16、=60&=60&scorescore 85)=0&=0&scorescore 60)50)50)if(if(salsal 500)50)50)if(if(salsal 500)50)50)if(if(salsal 500)500)salsal+=200;+=200;elseelse salsal+=300;+=300;第11页,共40页,编辑于2022年,星期日条件分支嵌套示例求方程求方程 ax2+bx+c=0 的根的根#include#include#include#include /由于用到平方根函数,要用此头文件由于用到平方根函数,要用此头文件由于用到平方根函数,要用此头文件由于用到平方
17、根函数,要用此头文件int int mainmain()()float float a a,b b,c c,x1x1,x2x2,p p,q q,mm;/定义实型变量定义实型变量定义实型变量定义实型变量 printfprintf(“Enter 3 coefficients:“);(“Enter 3 coefficients:“);scanfscanf(“%(“%f f,%,%f f,%,%f f“,&“,&a a,&,&b b,&,&c c););/从键盘读入方程的三个系数从键盘读入方程的三个系数从键盘读入方程的三个系数从键盘读入方程的三个系数 if if(a a=0.0&=0.0&b b=0&
18、=0&c c=0)=0)/分支分支分支分支1 1:三个系数全为:三个系数全为:三个系数全为:三个系数全为0 0 printfprintf(“any value(“any valuen n“);“);elseelse if if(a=0&b!=0)(a=0&b!=0)/分支分支分支分支2 2:系数:系数:系数:系数a a为为为为0 0,解一元一次方程,解一元一次方程,解一元一次方程,解一元一次方程 printfprintf(“x1=x2=%(“x1=x2=%f f n n,c c/b b););elseelse /分支分支分支分支3 3:解一元二次方程的两个根:解一元二次方程的两个根:解一元二次
19、方程的两个根:解一元二次方程的两个根 mm=b b*b b 4.0*4.0*a a*c c;第12页,共40页,编辑于2022年,星期日条件分支嵌套示例 if if(mm=0)=0)/解实根解实根解实根解实根 x1x1=(=(b b+sqrtsqrt(mm)/(2.0*)/(2.0*a a););x2x2=(=(b b sqrtsqrt(mm)/(2.0*)/(2.0*a a););printfprintf(“x1=%(“x1=%f f n n“,“,x1x1););/输出两个实根输出两个实根输出两个实根输出两个实根 printfprintf(“x2=%(“x2=%f f n n“,“,x2x
20、2););elseelse /解虚根解虚根解虚根解虚根 p p=b b/(2.0*/(2.0*a a););q q=sqrtsqrt(mm)/(2.0*)/(2.0*a a););printfprintf(“x1=%(“x1=%f f+%+%f fi in n“,“,p p,q q););printfprintf(“x2=%(“x2=%f f%f fi in n“,“,p p,q q););return 0;return 0;第13页,共40页,编辑于2022年,星期日switch 分支语法 计算过程计算过程计算过程计算过程 先计算表达式的值先计算表达式的值先计算表达式的值先计算表达式的值 依
21、次与一组常量比较依次与一组常量比较依次与一组常量比较依次与一组常量比较 若相同则执行该分支若相同则执行该分支若相同则执行该分支若相同则执行该分支 否则转向否则转向否则转向否则转向defaultdefaultdefaultdefault分支分支分支分支 退出退出退出退出switchswitchswitchswitch语句语句语句语句说明说明 switchswitchswitchswitch后面的表达式必须为整型、字符型或枚举型后面的表达式必须为整型、字符型或枚举型后面的表达式必须为整型、字符型或枚举型后面的表达式必须为整型、字符型或枚举型 casecasecasecase后面必须为常量表达式,则
22、各个后面必须为常量表达式,则各个后面必须为常量表达式,则各个后面必须为常量表达式,则各个casecasecasecase值必须不同值必须不同值必须不同值必须不同 如果没有如果没有如果没有如果没有defaultdefaultdefaultdefault子句,且没有子句,且没有子句,且没有子句,且没有casecasecasecase子句匹配,则不执行子句匹配,则不执行子句匹配,则不执行子句匹配,则不执行 casecasecasecase分支中的语句可以有多条,不需要花括号分支中的语句可以有多条,不需要花括号分支中的语句可以有多条,不需要花括号分支中的语句可以有多条,不需要花括号switch(swi
23、tch(表达式表达式表达式表达式)case case 常量表达式常量表达式常量表达式常量表达式1:1:语句组语句组语句组语句组1 1 case case 常量表达式常量表达式常量表达式常量表达式2:2:语句组语句组语句组语句组2 2 case case 常量表达式常量表达式常量表达式常量表达式n n:语句组语句组语句组语句组n n default:default:语句组语句组语句组语句组 第14页,共40页,编辑于2022年,星期日switch 分支流程图第15页,共40页,编辑于2022年,星期日switch 分支示例一根据输入的成绩等级,打印相应分数段根据输入的成绩等级,打印相应分数段#i
24、nclude#include int int mainmain()()char char gradegrade;printfprintf(“Input the grade(A,B,C,D,E):“);(“Input the grade(A,B,C,D,E):“);scanfscanf(“%(“%c c“,&“,&gradegrade););switch(switch(grade grade)case A:case A:printfprintf(“90-100(“90-100n n“);“);breakbreak;case B:case B:printfprintf(“80-89(“80-89n
25、 n“);“);breakbreak;case C:case C:printfprintf(“70-79(“70-79n n“);“);breakbreak;case D:case D:printfprintf(“60-69(“60-69n n“);“);breakbreak;case E:case E:printfprintf(“0-59(“0-59n n“);“);breakbreak;default:default:printfprintf(“Error(“Errorn n“);“);return 0;return 0;第16页,共40页,编辑于2022年,星期日switch 分支示例一
26、根据输入的成绩等级,打印相应分数段根据输入的成绩等级,打印相应分数段#include#include int int mainmain()()char char gradegrade;printfprintf(“Input the grade(A,B,C,D,E):“);(“Input the grade(A,B,C,D,E):“);scanfscanf(“%(“%c c“,&“,&gradegrade););switch(switch(grade grade)case A:case A:printfprintf(“90-100(“90-100n n“);“);case B:case B:pr
27、intfprintf(“80-89(“80-89n n“);“);case C:case C:printfprintf(“70-79(“70-79n n“);“);case D:case D:printfprintf(“60-69(“60-69n n“);“);case E:case E:printfprintf(“0-59(“0-59n n“);“);default:default:printfprintf(“Error(“Errorn n“);“);return 0;return 0;breakbreak的目的是终止的目的是终止的目的是终止的目的是终止switchswitch语句的执行。语
28、句的执行。语句的执行。语句的执行。如果没有如果没有如果没有如果没有breakbreak语句,则程序会从指定语句,则程序会从指定语句,则程序会从指定语句,则程序会从指定的的的的casecase分支开始,并在该分支结束后分支开始,并在该分支结束后分支开始,并在该分支结束后分支开始,并在该分支结束后继续执行下去。除非继续执行下去。除非继续执行下去。除非继续执行下去。除非switchswitch语句结束,语句结束,语句结束,语句结束,后面的其他后面的其他后面的其他后面的其他casecase分支或分支或分支或分支或defaultdefault分支中分支中分支中分支中的语句都会得到执行的语句都会得到执行的
29、语句都会得到执行的语句都会得到执行第17页,共40页,编辑于2022年,星期日switch 分支示例二根据输入的成绩等级,打印是否通过信息根据输入的成绩等级,打印是否通过信息#include#include int int mainmain()()char char gradegrade;printfprintf(“Input the grade(A,B,C,D,E):“);(“Input the grade(A,B,C,D,E):“);scanfscanf(“%(“%c c“,&“,&gradegrade););switch(switch(grade grade)case A:case A:
30、case B:case B:case C:case C:case D:case D:printfprintf(“Pass(“Passn n“);break;“);break;case E:case E:printfprintf(“Fail(“Failn n“);break;“);break;default:default:printfprintf(“Error(“Errorn n“);“);return 0;return 0;如果逻辑上确实如此,则不同的如果逻辑上确实如此,则不同的如果逻辑上确实如此,则不同的如果逻辑上确实如此,则不同的casecase分支可以使用同一个语句分支可以使用同一个语
31、句分支可以使用同一个语句分支可以使用同一个语句组,这也许是特意不在某些组,这也许是特意不在某些组,这也许是特意不在某些组,这也许是特意不在某些casecase分支中使用分支中使用分支中使用分支中使用breakbreak的唯一正的唯一正的唯一正的唯一正当理由当理由当理由当理由第18页,共40页,编辑于2022年,星期日3.4 循环结构 循环结构的含义循环结构的含义循环结构的含义循环结构的含义 根据某一条件的判断结果,反复执行某一处理块的过程根据某一条件的判断结果,反复执行某一处理块的过程根据某一条件的判断结果,反复执行某一处理块的过程根据某一条件的判断结果,反复执行某一处理块的过程 最基本的循环
32、结构是当循环最基本的循环结构是当循环最基本的循环结构是当循环最基本的循环结构是当循环 进入循环结构,判断循环条件,如果循环条件的结果为真,进入循环结构,判断循环条件,如果循环条件的结果为真,进入循环结构,判断循环条件,如果循环条件的结果为真,进入循环结构,判断循环条件,如果循环条件的结果为真,则执行则执行则执行则执行A A处理块的操作,即循环一次,然后再次判断循环条件,处理块的操作,即循环一次,然后再次判断循环条件,处理块的操作,即循环一次,然后再次判断循环条件,处理块的操作,即循环一次,然后再次判断循环条件,当循环条件为假时,循环结束当循环条件为假时,循环结束当循环条件为假时,循环结束当循环
33、条件为假时,循环结束第19页,共40页,编辑于2022年,星期日while 循环 while while while while 循环格式:循环格式:循环格式:循环格式:while(while(表达式表达式表达式表达式)循环体循环体循环体循环体 while while while while 循环流程循环流程循环流程循环流程 先判断后执行:表达式为真时,执行一遍循环体(一次迭先判断后执行:表达式为真时,执行一遍循环体(一次迭先判断后执行:表达式为真时,执行一遍循环体(一次迭先判断后执行:表达式为真时,执行一遍循环体(一次迭代),返回重新计算表达式的值以确定是否重复执行循环代),返回重新计算表达
34、式的值以确定是否重复执行循环代),返回重新计算表达式的值以确定是否重复执行循环代),返回重新计算表达式的值以确定是否重复执行循环体;若表达式为假,则终止循环体;若表达式为假,则终止循环体;若表达式为假,则终止循环体;若表达式为假,则终止循环 为保证循环终止,循环体内应有能改变表达式值的语句为保证循环终止,循环体内应有能改变表达式值的语句为保证循环终止,循环体内应有能改变表达式值的语句为保证循环终止,循环体内应有能改变表达式值的语句第20页,共40页,编辑于2022年,星期日while 循环示例使用使用 while while 循环求两个正整数的最小公倍数循环求两个正整数的最小公倍数#inclu
35、de#include int int mainmain()()int int mm,n n,resultresult;printfprintf(“Input two positive integers m,n:“);(“Input two positive integers m,n:“);scanfscanf(“%(“%d d,%,%d d“,&“,&mm,&,&n n););if(if(m m 0&0&n n 0)0)resultresult=mm n n?n n:mm;while(while(resultresult%mm!=0|!=0|resultresult%n n!=0)!=0)re
36、sultresult+;+;printfprintf(“The least common multiple of m and n is%(“The least common multiple of m and n is%d d.n n“,“,resultresult););else else printfprintf(“the number m or n is not a positive integer.(“the number m or n is not a positive integer.n n“);“);return 0;return 0;第21页,共40页,编辑于2022年,星期日
37、do-while 循环 do-while do-while do-while do-while 循环格式:循环格式:循环格式:循环格式:do do 循环体循环体 while(while(表达式表达式););do-while do-while do-while do-while 循环流程循环流程 先执行后判断:先执行一遍循环体(一次迭代),计算表达式的值,先执行后判断:先执行一遍循环体(一次迭代),计算表达式的值,先执行后判断:先执行一遍循环体(一次迭代),计算表达式的值,先执行后判断:先执行一遍循环体(一次迭代),计算表达式的值,表达式为真时重复执行循环体,否则终止循环(循环体至少执行一表达式
38、为真时重复执行循环体,否则终止循环(循环体至少执行一表达式为真时重复执行循环体,否则终止循环(循环体至少执行一表达式为真时重复执行循环体,否则终止循环(循环体至少执行一次,这与次,这与次,这与次,这与whilewhilewhilewhile循环不同)循环不同)循环不同)循环不同)为保证循环终止,循环体内应有能改变表达式值的语句为保证循环终止,循环体内应有能改变表达式值的语句为保证循环终止,循环体内应有能改变表达式值的语句为保证循环终止,循环体内应有能改变表达式值的语句第22页,共40页,编辑于2022年,星期日do-while 循环示例反复求两个正整数的最小公倍数,直到输入的两个数反复求两个正
39、整数的最小公倍数,直到输入的两个数均为均为1 1 1 1时结束时结束时结束时结束#include#include int int mainmain()()int int mm,n n,resultresult;dodo printfprintf(“Input two positive integers m,n:“);(“Input two positive integers m,n:“);scanfscanf(“%(“%d d,%,%d d“,&“,&mm,&,&n n););if(if(m m 0&0&n n 0)0)resultresult=mm n n?n n:mm;while(whil
40、e(resultresult%mm!=0|!=0|resultresult%n n!=0)!=0)resultresult+;+;printfprintf(“The least common multiple of m and n is%(“The least common multiple of m and n is%d d.n n“,“,resultresult););else else printfprintf(“the number m or n is not a positive integer.(“the number m or n is not a positive intege
41、r.n n“);“);while(while(mm!=1|!=1|n n!=1);!=1);return 0;return 0;第23页,共40页,编辑于2022年,星期日for 循环 for for for for 循环格式循环格式循环格式循环格式 for(for(表达式表达式表达式表达式1;1;表达式表达式表达式表达式2;2;表达式表达式表达式表达式3)3)循环体循环体循环体循环体 for for for for 循环流程循环流程循环流程循环流程 先判断后执行:先执行表达式先判断后执行:先执行表达式先判断后执行:先执行表达式先判断后执行:先执行表达式1 1 1 1(循环初始化),再计算表达
42、(循环初始化),再计算表达(循环初始化),再计算表达(循环初始化),再计算表达式式式式2 2 2 2以根据其结果决定是否执行一遍循环体(为真时执行),以根据其结果决定是否执行一遍循环体(为真时执行),以根据其结果决定是否执行一遍循环体(为真时执行),以根据其结果决定是否执行一遍循环体(为真时执行),计算表达式计算表达式计算表达式计算表达式3 3 3 3的值(循环再次的值(循环再次的值(循环再次的值(循环再次“初始化初始化初始化初始化”),返回重新计算),返回重新计算),返回重新计算),返回重新计算表达式表达式表达式表达式2 2 2 2的值以确定循环是否终止的值以确定循环是否终止的值以确定循环是
43、否终止的值以确定循环是否终止第24页,共40页,编辑于2022年,星期日for 循环示例一计算计算#include#include int int mainmain()()int int resultresult,k k;result=0;=0;/累加器变量,设置初始值(本例设为累加器变量,设置初始值(本例设为累加器变量,设置初始值(本例设为累加器变量,设置初始值(本例设为0 0)for(for(k k=1;k k=100;k+)/循环计算循环计算 resultresult+=k*k k;/;/累加累加累加累加 printf(“The result:%(“The result:%d d n n
44、“,“,resultresult););return 0;第25页,共40页,编辑于2022年,星期日三种循环结构的比较 三种循环结构可以互换使用三种循环结构可以互换使用三种循环结构可以互换使用三种循环结构可以互换使用 for for for for 循环与循环与 while while while while 循环常见,循环常见,循环常见,循环常见,do-while do-while do-while do-while 循环少见循环少见循环少见循环少见while while 循环常用于不需要或很少需要初始化的场合循环常用于不需要或很少需要初始化的场合循环常用于不需要或很少需要初始化的场合循环
45、常用于不需要或很少需要初始化的场合for for 循环常用于需要简单初始化和通过递增递减运算控制循环常用于需要简单初始化和通过递增递减运算控制循环常用于需要简单初始化和通过递增递减运算控制循环常用于需要简单初始化和通过递增递减运算控制循环体执行的场合循环体执行的场合循环体执行的场合循环体执行的场合for for 循环将所有循环控制因素都放在循环头部,循环结构最循环将所有循环控制因素都放在循环头部,循环结构最循环将所有循环控制因素都放在循环头部,循环结构最循环将所有循环控制因素都放在循环头部,循环结构最清晰清晰清晰清晰 通过省略循环头部的一个或多个表达式,通过省略循环头部的一个或多个表达式,通过
46、省略循环头部的一个或多个表达式,通过省略循环头部的一个或多个表达式,for for for for 循环也可能循环也可能循环也可能循环也可能非常复杂非常复杂非常复杂非常复杂第26页,共40页,编辑于2022年,星期日for 循环示例二 程序读入一个字符串,然后反向打印输出程序读入一个字符串,然后反向打印输出程序读入一个字符串,然后反向打印输出程序读入一个字符串,然后反向打印输出#include#include#include#include int int mainmain()()char char s s50,50,c c;int int i i,j j;printfprintf(“Inpu
47、t a string:“);(“Input a string:“);scanfscanf(“%(“%s s“,“,s s););for(for(i i=0,=0,j j=strlenstrlen(s s)1;)1;i i j j;i i+,+,j j)c c=s s i i;s s i i=s s j j;s s j j=c c;printfprintf(“%(“%s s n n“,“,s s););return 0;return 0;第27页,共40页,编辑于2022年,星期日for 循环示例三 打印九九乘法表打印九九乘法表打印九九乘法表打印九九乘法表#include#include int
48、 int mainmain()()int int i i,j j,k k;for(for(i i=1;=1;i i=9;=9;i i+)+)for(for(j j=i i;j j=9;=9;j j+)+)k k=i i*j j;printfprintf(“%(“%d d%d d=%=%d d t t“,“,i i,j j,k k););printfprintf(“(“n n“);“);return 0;return 0;如果一个循环体内包含另一个循环则称循如果一个循环体内包含另一个循环则称循如果一个循环体内包含另一个循环则称循如果一个循环体内包含另一个循环则称循环嵌套或多重循环环嵌套或多重循环
49、环嵌套或多重循环环嵌套或多重循环三种循环都可以嵌套,但嵌套时内外层循三种循环都可以嵌套,但嵌套时内外层循三种循环都可以嵌套,但嵌套时内外层循三种循环都可以嵌套,但嵌套时内外层循环不能发生交叉环不能发生交叉环不能发生交叉环不能发生交叉发生嵌套时,内层循环经常需要使用发生嵌套时,内层循环经常需要使用发生嵌套时,内层循环经常需要使用发生嵌套时,内层循环经常需要使用外层循环的某些值作为控制条件外层循环的某些值作为控制条件外层循环的某些值作为控制条件外层循环的某些值作为控制条件第28页,共40页,编辑于2022年,星期日循环控制转移:break 语句输出输出5 5 5 5行、每行行、每行行、每行行、每行
50、10101010个随机数,若随机数大于个随机数,若随机数大于个随机数,若随机数大于个随机数,若随机数大于20,00020,00020,00020,000,本行,本行,本行,本行输出结束输出结束输出结束输出结束#include#include#include#include#include#include int int mainmain()()int int i i,j j,r r;srandsrand(timetime(NULLNULL););for(for(i i=1;=1;i i=5;=5;i i+)+)forfor(j j=1;=1;j j=10;20000)20000)break;b