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