《程序的控制结构概述.pptx》由会员分享,可在线阅读,更多相关《程序的控制结构概述.pptx(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4章章 程序的控制结构程序的控制结构4.1 语句及程序框架语句及程序框架4.1.1 4.1.1 语句的基本分类语句的基本分类 语句语句是程序的基本组成部分,一段程序或者一个函数是程序的基本组成部分,一段程序或者一个函数就是由若干语句按照算法规定的逻辑关系组成的。各种表就是由若干语句按照算法规定的逻辑关系组成的。各种表达式都要以语句的形式出现在程序中。达式都要以语句的形式出现在程序中。C C语言中的语句有语言中的语句有如下类型:如下类型: (1)(1)变量定义语句;变量定义语句; (2)(2)表达式语句;表达式语句; (3)(3)复合语句;复合语句; (4)(4)函数调用语句;函数调用语句;
2、 (5)(5)控制语句;控制语句;1.1.变量定义语句变量定义语句 语法格式如下:语法格式如下: ; 其含义是:告诉系统,变量表中列出的一个或多个变量的其含义是:告诉系统,变量表中列出的一个或多个变量的存在,同时要求系统为每个变量分配存储空间,其大小和类存在,同时要求系统为每个变量分配存储空间,其大小和类型与型与 所规定的一致。所规定的一致。变量定义语句不需要与操变量定义语句不需要与操作步骤对应。作步骤对应。例如:例如: char aChar; int total = 0; /用于累计素数的总数用于累计素数的总数 int score; double x, y;2.2.表达式语句表达式语句 语法
3、格式如下:语法格式如下: ; 从上述语法格式可以看出,表达式语句是由前面章节提从上述语法格式可以看出,表达式语句是由前面章节提及的各种表达式及后缀的分号构成。其作用是:一旦表达式及的各种表达式及后缀的分号构成。其作用是:一旦表达式语句被执行时,就要按照表达式的求值顺序计算出表达式的语句被执行时,就要按照表达式的求值顺序计算出表达式的值。值。例如:例如: i+; i+; 3. 3. 复合语句复合语句 语法格式如下:语法格式如下: n 其作用是:告诉编译系统,将多个语句看成是一个整体,在语其作用是:告诉编译系统,将多个语句看成是一个整体,在语法要求上相当于一个语句。因此,在分支和循环结构中经常使法
4、要求上相当于一个语句。因此,在分支和循环结构中经常使用,函数的定义体也是一个复合语句。用,函数的定义体也是一个复合语句。例如:例如: int x, y = 20; int x, y = 20; x = y + 10; x = y + 10; printf( “%d; %d”, x, y ); printf( “%d; %d”, x, y ); 4. 4. 函数调用语句函数调用语句 语法格式如下:语法格式如下: ( ( ); ); 函数调用语句的作用是:将执行控制流程转移到与此语函数调用语句的作用是:将执行控制流程转移到与此语句完全匹配的函数定义体的第一条语句处,开始执行;函数句完全匹配的函数定
5、义体的第一条语句处,开始执行;函数体执行结束后,返回到此语句的下一条语句处继续执行。执体执行结束后,返回到此语句的下一条语句处继续执行。执行流程如教材图行流程如教材图4-1.4-1.5. 5. 控制语句控制语句 就是用于控制程序执行路径的相关语句,可以实现程序的就是用于控制程序执行路径的相关语句,可以实现程序的各种控制结构。语言中包含有九种控制语句。分成三类介各种控制结构。语言中包含有九种控制语句。分成三类介绍如下:绍如下:(1 1)分支语句分支语句:ifif语句、语句、switchswitch语句;语句; (2 2)循环语句循环语句:do-whiledo-while语句、语句、whilewh
6、ile语句、语句、forfor语句;语句; (3 3)跳转语句跳转语句:breakbreak语句、语句、continuecontinue语句、语句、gotogoto语句、语句、 returnreturn语句。语句。 分支和循环语句是程序中经常使用的,灵活熟练掌握其用分支和循环语句是程序中经常使用的,灵活熟练掌握其用法是本章的主要任务,后面会详细讲解。法是本章的主要任务,后面会详细讲解。4.1.2 C4.1.2 C程序框架程序框架 一个一个C C程序由程序由若干源文件若干源文件和和头文件头文件组成,称之为一个工组成,称之为一个工程。头文件包括用户自定义的和系统定义的,这两种都是由程。头文件包括用
7、户自定义的和系统定义的,这两种都是由若干函数及全局量的声明和编译预处理组成,文件名一般是若干函数及全局量的声明和编译预处理组成,文件名一般是* *.h.h。系统定义的如。系统定义的如stdio.h, stdlib.h, string.h, math.h,stdio.h, stdlib.h, string.h, math.h, limits.h limits.h等,其内容可以在本地安装有等,其内容可以在本地安装有C C编译器的机器中找编译器的机器中找到。一般在安装路径的包含文件夹内,如:到。一般在安装路径的包含文件夹内,如:Program FilesMicrosoft Visual Studio
8、VC98IncludeProgram FilesMicrosoft Visual StudioVC98Include。 4.2 分支结构分支结构 分支结构与顺序结构相对应,可以称之为分支结构与顺序结构相对应,可以称之为判断结构判断结构或或选选择结构择结构,也就是有选择地执行某些语句,改变了完全顺序执,也就是有选择地执行某些语句,改变了完全顺序执行的程序结构。在日常生活中的表达方式是:如果行的程序结构。在日常生活中的表达方式是:如果;那;那么么。在计算机领域的基本表达方式是:如果条件成立,则。在计算机领域的基本表达方式是:如果条件成立,则执行操作执行操作1 1;否则条件不成立,则执行操作;否则条
9、件不成立,则执行操作2 2。其中,操作。其中,操作1 1,操作,操作2 2可以是一条或多条语句。可以是一条或多条语句。 分支结构包含分支结构包含ifif和和switchswitch两个语句两个语句. . 4.2.1 if4.2.1 if语句的基本格式语句的基本格式 语法格式如下:语法格式如下: if ( if ( ) ) 复合语句复合语句1 1 else else 复合语句复合语句2 2 if if 语句基本格式的语义是:如果条件表达式的值为真,语句基本格式的语义是:如果条件表达式的值为真,则执行复合语句则执行复合语句1 1,否则,即条件表达式的值不为真,则执,否则,即条件表达式的值不为真,则
10、执行复合语句行复合语句2 2。格式中。格式中“( ( )” )”写法与写法与“( ( != 0 )” != 0 )”写法写法等价等价。【例例4.1】 任意输入两个不同的整数,输出其中较大的一个。任意输入两个不同的整数,输出其中较大的一个。 #includevoid main( ) c4: int x, y; c5: printf( n Input two numbers: n ); c6 : scanf( %d%d, &x, &y ); c7 : if ( x y ) c8 : printf( max = %d n, x ); else c10: printf( max = %d n, y )
11、; return ; 使用使用ifif语句需要注意如下内容:语句需要注意如下内容:(1)(1)从从if if 关键词开始到复合语句关键词开始到复合语句2 2结束,在语法上就是一条结束,在语法上就是一条语句,虽然其中包含着两个复合语句,这并不矛盾。语句,虽然其中包含着两个复合语句,这并不矛盾。(2) if(2) if语句中的两个复合语句都可以由语句中的两个复合语句都可以由空语句空语句,一个语句或,一个语句或者多个语句构成。仅包含空语句或一个语句时,一对大括号者多个语句构成。仅包含空语句或一个语句时,一对大括号可以可以省略省略。此处增加大括号的好处是可以减少不必要的语法。此处增加大括号的好处是可以
12、减少不必要的语法错误。错误。(3) if(3) if语句中的条件表达式必需使用一对匹配的圆括号括起语句中的条件表达式必需使用一对匹配的圆括号括起来。来。(4) (4) 条件表达式条件表达式可以是逻辑表达式,关系表达式,算术表达可以是逻辑表达式,关系表达式,算术表达式及赋值表达式等式及赋值表达式等, ,单个变量构成的表达式也是正确的。只单个变量构成的表达式也是正确的。只要表达式的值不是要表达式的值不是0 0值,条件即为成立。值,条件即为成立。【例例4.24.2】 判断某年份是否是闰年。判断某年份是否是闰年。 满足以下两个条件之一的年份均是闰年:一是年份能够被满足以下两个条件之一的年份均是闰年:一
13、是年份能够被4 4整除,但不能被整除,但不能被100100整除;二是能被整除;二是能被400400整除的年份。整除的年份。 4.2.2 if4.2.2 if语句的第二种格式语句的第二种格式 语法格式如下:语法格式如下: if ( if ( ) ) 复合语句复合语句 if if 语句第二种格式的语义是:如果条件表达式的值不为语句第二种格式的语义是:如果条件表达式的值不为真,则直接执行此真,则直接执行此ifif语句的下一条语句,否则,条件表达式语句的下一条语句,否则,条件表达式的值为真,则执行其后的复合语句,复合语句执行完成后同的值为真,则执行其后的复合语句,复合语句执行完成后同样要执行样要执行i
14、fif语句的下一条语句。语句的下一条语句。 【例例4.34.3】 任意输入两个不同的整数,输出其中较大的一个。任意输入两个不同的整数,输出其中较大的一个。 #include void main( ) c4: int x, y, max; c5: printf( n Input two numbers: n ); c6: scanf( %d%d, &x, &y ); c7: max = x;c8: if ( y x ) c9: max = y; c10: printf( max = %d n, max );c11: return ; 4.2.3 if4.2.3 if语句的嵌套形式语句的嵌套形式可
15、以写出如下几种嵌套形式的可以写出如下几种嵌套形式的ifif语句:语句:(1 1)在第二种格式的复合语句处嵌套第二种格式,形如:)在第二种格式的复合语句处嵌套第二种格式,形如: if ( if ( ) 1 ) 其它语句其它语句1 1 if ( if ( ) 2 ) 复合语句复合语句2 2 其它语句其它语句2 2 (2 2) 第二种格式嵌套第一种格式,形如:第二种格式嵌套第一种格式,形如: if ( if ( ) 1 ) if ( if ( ) 2 ) 复合语句复合语句2121 else else 复合语句复合语句2222 (3 3) 第一种格式嵌套第二种格式,形如:第一种格式嵌套第二种格式,形如
16、: if ( if ( ) 1 ) if ( if ( ) 2 ) 复合语句复合语句2 2 else else if ( if ( ) 3 ) 复合语句复合语句3 3 (4 4) 第一种格式嵌套第一种格式,形如:第一种格式嵌套第一种格式,形如: if ( if ( ) 1 ) if ( if ( ) 2 ) 复合语句复合语句2121 else else 复合语句复合语句2222 else else if ( if ( ) 3 ) 复合语句复合语句3131 else else 复合语句复合语句3232 【例例4.44.4】 要求按任意顺序从键盘输入三个整数,编写程序要求按任意顺序从键盘输入三个整
17、数,编写程序完成输出最大值和最小值的算法。完成输出最大值和最小值的算法。 基本思路:首先任取其中两个数,判断最大和最小;使基本思路:首先任取其中两个数,判断最大和最小;使用例用例4.34.3的方法。其次,用第三个数分别与刚刚得到的最大的方法。其次,用第三个数分别与刚刚得到的最大和最小数再次比较,就可以得到三个数中的最大和最小。和最小数再次比较,就可以得到三个数中的最大和最小。4.2.4 if4.2.4 if语句的第三种格式语句的第三种格式其语法格式如下:其语法格式如下:if ( if ( ) 1 ) 复合语句复合语句1 1else if else if ( ( )2 ) 复合语句复合语句2 2
18、else if ( else if ( )3 ) 复合语句复合语句3 3else if ( else if ( )m ) 复合语句复合语句m melse else 复合语句复合语句m+1m+1【例例4.5】设计程序完成将百分制成绩转换成五分制表示。设计程序完成将百分制成绩转换成五分制表示。 #include void main( ) char chscore;int nscore; printf( n please input Score ( 0 100 ): n ); scanf( %d, &nscore ); if ( nscore 60 ) chscore = E; else if (
19、nscore 70 ) chscore = D; else if ( nscore 80 ) chscore = C; else if ( nscore 90 ) chscore = B; else chscore = A; printf( n Your Score is %c ! ! ! n, chscore ); return ; 【例例4.64.6】从键盘读取一个字符数据,判断其类型是:控制从键盘读取一个字符数据,判断其类型是:控制类字符,数字字符,大写字符,小写字符,其他字符等类别类字符,数字字符,大写字符,小写字符,其他字符等类别中的哪一类?设计程序完成。中的哪一类?设计程序完成。
20、基本思路:读入字符数据,依据字符的基本思路:读入字符数据,依据字符的ASCIIASCII值判断所属值判断所属范围。范围。4.2.5 switch语句及语句及break语句语句 switch语句的语法格式:语句的语法格式: switch ( ) case : 复合语句复合语句1 case : 复合语句复合语句2 case : 复合语句复合语句n default: default: 复合语句复合语句n+1 下面使用下面使用switch语句改写例题语句改写例题【例例4. 5】。【例例4.7】设计程序完成将百分制成绩转换成五分制表示。设计程序完成将百分制成绩转换成五分制表示。 #include voi
21、d main( ) c4: int nscore;c5: char chscore;c6: printf( n input Score ( 0 100 ): n ); c7: scanf( %d, &nscore ); c8: nscore /= 10; / 变换后,变换后,nscore 的值是的值是010之间的整数之间的整数c9: switch ( nscore ) c10: c11: case 0:c12: case 1:c13: case 2:c14: case 3:c15: case 4:c16: case 5: chscore = E; c17: case 6: chscore =
22、D; c18: case 7: chscore = C; c19: case 8: chscore = B; c20: case 9:c21: case 10: chscore = A; c23: printf( n Your Score is %c ! ! ! n, chscore );c24: return ; c23 c23句输出句输出chscorechscore变量的当前值。编译运行此段程序应变量的当前值。编译运行此段程序应该是正确的。但是程序运行后,不管百分制成绩是多少,输该是正确的。但是程序运行后,不管百分制成绩是多少,输出结果总是如下:出结果总是如下:Your Score is
23、A ! ! !Your Score is A ! ! !程序一定是存在问题。程序一定是存在问题。 n这里说的流程控制语句,就是指跳转语句这里说的流程控制语句,就是指跳转语句breakbreak。breakbreak语语句的作用之一就是从某个句的作用之一就是从某个casecase子句处跳出子句处跳出switchswitch语句,继语句,继续执行续执行switchswitch的下一条的下一条语句。语句。breakbreak语句还用于循环语句语句还用于循环语句当中,后面介绍。当中,后面介绍。n例例4.74.7的正确写法需要的正确写法需要breakbreak与与switchswitch语句配合使用,程
24、序语句配合使用,程序如下:如下: #include void main( ) c4: int nscore;c5: char chscore;c6: printf( n input Score ( 0 100 ): n ); c7: scanf( %d, &nscore ); c8: nscore /= 10; / 变换后,变换后,nscore 的值是的值是010之间的整数之间的整数c9: switch ( nscore ) c10: c11: case 0:c12: case 1:c13: case 2:c14: case 3:c15: case 4:c16: case 5: chscore
25、 = E; c16_1: break;c17: case 6: chscore = D; c17_1: break;c18: case 7: chscore = C; c18_1: break;c19: case 8: chscore = B; c19_1: break;c20: case 9:c21: case 10: chscore = A; c21_1: break; c23: printf( n Your Score is %c ! ! ! n, chscore ); return ; n【例例4.8】设计能够完成单步四则运算的简易运算器,输设计能够完成单步四则运算的简易运算器,输出运
26、算结果。出运算结果。4.3 循环结构循环结构 C C语言中的循环结构主要包括三个语句,分别是:语言中的循环结构主要包括三个语句,分别是:whilewhile语语句,句,do-whiledo-while语句,语句,forfor语句。每个语句各有自身的特点,语句。每个语句各有自身的特点,学习时注意它们在构成循环结构时的异同。学习时注意它们在构成循环结构时的异同。4.3.1 while4.3.1 while语句语句 whilewhile语句也可以称之为语句也可以称之为“当语句当语句”。 表达的含义是:表达的含义是:当条件表达式的值为真(非当条件表达式的值为真(非0 0值)时,就值)时,就执行循环体,
27、之后重新判断条件表达式的值;如此重复多次执行循环体,之后重新判断条件表达式的值;如此重复多次执行循环体,直到条件表达式的值为假(执行循环体,直到条件表达式的值为假(0 0值)时,值)时,whilewhile语语句结束,顺序执行其后的下一条语句。句结束,顺序执行其后的下一条语句。使用流程框图表示如使用流程框图表示如教材图教材图4-8 4-8 。while语句的语法格式如下:语句的语法格式如下: while ( while ( ) ) 复合语句复合语句其语义是:其语义是:1. 计算条件表达式的值;计算条件表达式的值;2. 如果值为真(或者称为成立,或者非如果值为真(或者称为成立,或者非0),则按顺
28、序执行),则按顺序执行复合语句;返回步骤复合语句;返回步骤1;3. 如果值为假(或者称为不成立,或者如果值为假(或者称为不成立,或者0值),则执行值),则执行while语句的下一条语句。语句的下一条语句。【例例4.9】输出输出ASCII表的可见字符,字符之间用逗号分隔。表的可见字符,字符之间用逗号分隔。可见字符的可见字符的ASCII值在值在32126之间。之间。 #include void main( ) c4:int ch = 32; c5:while ( ch 127 )c6: c7:printf( %c, ch ); /输出字符的同时,用逗号分隔不同字符输出字符的同时,用逗号分隔不同字符
29、c8:ch+; c10:return ;【例例4.10】复制输入的一行字符串,并统计字符个数。复制输入的一行字符串,并统计字符个数。 可以使用可以使用getchar( )函数获得键盘输入的一个字符。一行函数获得键盘输入的一个字符。一行字符串的结尾是回车符字符串的结尾是回车符(n)。由于系统提供了键盘缓冲。由于系统提供了键盘缓冲区,所以能够实现复制字符串的效果。区,所以能够实现复制字符串的效果。#include void main( )int nCh = 0;char ch;printf( input a string : n );while ( ( ch = getchar( ) ) != n
30、 ) putchar( ch ); nCh+;printf( n The number of char is : %d ! n, nCh); 【例例4.11】对例对例4.9改进,每行输出十个字符。改进,每行输出十个字符。 #include void main( ) c4:int ch = 32, i=1; c5:while ( ch 127 )c6: c7:printf( %c, ch ); c8:if ( i % 10 = 0 )c9: printf( n ); c10:i+; c11:ch+; return ;4.3.2 do - while4.3.2 do - while语句语句 do-
31、whiledo-while语句与语句与whilewhile语句的区别之一是,条件表达式的语句的区别之一是,条件表达式的计算与判断时机不同。首先看语法格式:计算与判断时机不同。首先看语法格式:do do 复合语句复合语句 while ( while ( ); ); 其执行过程是:首先执行复合语句,然后判断条件表达式其执行过程是:首先执行复合语句,然后判断条件表达式是否成立,如若成立则再次执行复合语句,否则不成立时,是否成立,如若成立则再次执行复合语句,否则不成立时,do-whiledo-while语句结束,执行下一条语句。其流程描述如教材图语句结束,执行下一条语句。其流程描述如教材图4-9.4-
32、9.【例例4.124.12】求两个正整数的最大公因子。求两个正整数的最大公因子。 此问题最著名的解法是欧几里德此问题最著名的解法是欧几里德EuclidEuclid算法,也称之为算法,也称之为辗转相除法。用自然语言描述如下:辗转相除法。用自然语言描述如下:1. 1. 任意输入两个正整数任意输入两个正整数m m和和n n;2. 2. 求求 r = m % nr = m % n;3. 3. 如果如果r r 等于等于0 0,则说明,则说明n n是是m m的最大公因子,算法结束;的最大公因子,算法结束;4. 4. 否则否则 r r不等于不等于0 0,则将,则将n n赋值给赋值给m m,r r赋值给赋值给
33、n n;转;转2 2处继续。处继续。 #include void main( ) int m, n, r, m1, n1;printf( n input m, n : n ); scanf( %d%d, &m, &n ); m1 = m; n1 = n;do r = m % n; m = n; /这里做辗转赋值这里做辗转赋值 n = r; while ( n != 0 );printf( n The %d and %d s greatest common divisor is %d ! n, m1, n1, m ); 【例例4.13】任意输入一个整数,将其倒序后输出。如输入任意输入一个整数,将
34、其倒序后输出。如输入5678,则输出,则输出8765#include void main( ) int m, r;printf( n input an integer m : n ); scanf( %d, &m );do r = m % 10; printf( %d, r ); while ( m /= 10 );printf( n );4.3.3 for4.3.3 for语句语句 forfor语句是结构比较完备,使用比较灵活的,用于构造循语句是结构比较完备,使用比较灵活的,用于构造循环结构的语句之一。甚至可以取代环结构的语句之一。甚至可以取代do-whiledo-while和和 while
35、 while 语句语句. .语法格式为语法格式为: : for ( for ( ; ; ) ) 复合语句复合语句 与与do-whiledo-while和和whilewhile语句相比较,除了关键字不同之外,语句相比较,除了关键字不同之外,还多了两个表达式;而且表达式之间必须使用分号相分隔;还多了两个表达式;而且表达式之间必须使用分号相分隔;即使某个表达式缺省,即使某个表达式缺省,分号分号也也不能少不能少。表达式前面添加初。表达式前面添加初值,条件和增量字样仅是为了表达各自的作用和功能。值,条件和增量字样仅是为了表达各自的作用和功能。 forfor语句的执行步骤描述如下:语句的执行步骤描述如下:
36、 1.1.计算初值表达式;计算初值表达式;2.2.计算条件表达式,若值为真(非计算条件表达式,若值为真(非0 0),则按顺序执行复合),则按顺序执行复合语句,之后执行步骤语句,之后执行步骤4 4;3.3.若值为假(若值为假(0 0值),则转到步骤值),则转到步骤5 5; 4.4.计算增量表达式;跳转到步骤计算增量表达式;跳转到步骤2 2; 5.5.循环语句结束,执行其后的第一个语句。循环语句结束,执行其后的第一个语句。 【例例4.14】求求0到到200累加和。累加和。#include void main( ) int sum = 0, i; for ( i = 0; i = 200; i+ )
37、 sum += i; printf( n The sum is %d ! n, sum ); 总结循环结构设计的一般步骤如下:总结循环结构设计的一般步骤如下:1. 1. 选择恰当的选择恰当的循环变量循环变量;2. 2. 明确循环的明确循环的结束条件结束条件;3. 3. 循环变量的循环变量的增量(步长)增量(步长)如何变化;如何变化;4. 4. 循环体包含哪些语句。循环体包含哪些语句。【例例4.154.15】分别打印输出分别打印输出FabonacciFabonacci数列的前数列的前2020项。项。【例例4.16】任意输入一个整数任意输入一个整数m,判断其是否素数。,判断其是否素数。#inclu
38、de int main( )int i, m, isTrue = 1; /m保存输入的整数,保存输入的整数,isTrue=1首先认定输入的数是素数首先认定输入的数是素数printf( n input a number n );scanf( %d, &m );for ( i = 2; i m 1; i+ ) if ( m % i = 0 ) isTrue = 0; if ( isTrue ) printf(n %d is prime number! n, m ); else printf(n %d is not prime number!n, m ); 4.3.4 4.3.4 跳转语句跳转语句1
39、. break1. break语句语句 从前面的叙述可知,从前面的叙述可知,breakbreak语句有语句有两种用法两种用法:一是用在:一是用在switchswitch语句,结束分支语句,执行下一条语句;二是用在循语句,结束分支语句,执行下一条语句;二是用在循环结构中,同样是结束循环,执行下一条语句。其语法格式环结构中,同样是结束循环,执行下一条语句。其语法格式如下:如下: break;break; 也就是关键字后面直接加一个分号构成。也就是关键字后面直接加一个分号构成。【例例4.174.17】如下数列如下数列, ,求累加和求累加和sumsum大于大于5 5时,是第几项。时,是第几项。1/1,
40、1/2,1/3,1/4,.,1/n下面给出使用下面给出使用break语句完成的算法。语句完成的算法。#include void main( ) int i; double sum = 0.0; for ( i = 1; ; i+ ) /*设置无限循环设置无限循环*/ sum += 1.0 / i; /求求1/n的累加和的累加和 if ( sum 5 ) /条件成立时,跳出循环条件成立时,跳出循环 break; printf( n The No. is %d, The sum is %lf.n, i, sum ); 2. continue2. continue语句语句 continueconti
41、nue语句的作用是跳过循环中剩余的语句而强行执语句的作用是跳过循环中剩余的语句而强行执行下一次循环。行下一次循环。continuecontinue语句只用在语句只用在forfor、whilewhile、do-whiledo-while等循环体中等循环体中, ,常与常与ifif条件条件语句一起使用语句一起使用, ,用来加速循环。其语法格式用来加速循环。其语法格式如下:如下: continue;continue;3. return3. return语句语句语法格式如下:语法格式如下: return return ; return return语句一旦被执行,其作用有三:一是语句一旦被执行,其作用有
42、三:一是计算表达式的计算表达式的值值;二是将表达式的值;二是将表达式的值带回到函数调用语句所在位置带回到函数调用语句所在位置;三是;三是结束当前函数的执行结束当前函数的执行,即使,即使returnreturn后面还有其它语句。如果后面还有其它语句。如果表达式为空,则表达式为空,则returnreturn语句的作用是结束当前函数的执行,语句的作用是结束当前函数的执行,并返回到函数调用语句处。注意表达式的值必须与函数并返回到函数调用语句处。注意表达式的值必须与函数返返回值类型一致回值类型一致。 举例说明如下:举例说明如下:int func1( )c3:.c4:return 1 * 2;c5:.c6
43、:c7:int main( )c8:c9:int x;c10:x = func1( );c11:. 4.4 循环的嵌套循环的嵌套 从判断语句可以包含判断语句的事实,推而广之,循环语从判断语句可以包含判断语句的事实,推而广之,循环语句的循环体既然是复合语句,当然有循环语句的嵌套形式。句的循环体既然是复合语句,当然有循环语句的嵌套形式。也就是每一种循环语句的循环体内,均可以包含有三种循环也就是每一种循环语句的循环体内,均可以包含有三种循环语句的任何一种。为了叙述方便,定义单层循环是循环体内语句的任何一种。为了叙述方便,定义单层循环是循环体内不包含循环语句的结构;双层循环是循环体内仅包含单层循不包含
44、循环语句的结构;双层循环是循环体内仅包含单层循环的结构形式;三层循环就是双层循环内又包含单层循环的环的结构形式;三层循环就是双层循环内又包含单层循环的结构形式。四层以上的循环很少有应用。结构形式。四层以上的循环很少有应用。n【例例4.184.18】请设计程序完成,统计请设计程序完成,统计100100以内的全部素数的以内的全部素数的个数;并输出最大的素数。个数;并输出最大的素数。 总结一下:双层循环的嵌套形式共可分总结一下:双层循环的嵌套形式共可分9 9种,这里仅以种,这里仅以forfor作为外层循环为例,以作为外层循环为例,以whilewhile和和do-whiledo-while为外层循环的
45、嵌套为外层循环的嵌套与此相似。与此相似。1.for-for1.for-for嵌套嵌套for ( ; ; ) / for ( ; ; ) / 各个表达式均被省略了,以下相同各个表达式均被省略了,以下相同 / /其它必要的语句其它必要的语句 for ( ; ; ) for ( ; ; ) / /内层循环体内层循环体 /必要语句必要语句 2. for-while2. for-while嵌套嵌套for ( ; ; ) for ( ; ; ) / /其它必要的语句其它必要的语句 while ( while ( ) ) / /内层循环体内层循环体 /必要语句必要语句 3.for-do-while嵌套嵌套f
46、or ( ; ; ) /必要的语句必要的语句 do /内层循环体内层循环体 while ( );/必要语句必要语句【例例4.194.19】请设计程序输出如下图形。请设计程序输出如下图形。* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *【例例4.204.20】设计程序完成,输出等腰三角形的图形如下:设计程序完成,输出等腰三角形的图形如下: * * * * * * * * * * * * * * * * * * * * * * * * * * * *
47、 * * * * * * * * * * * * * * * * * * * * * * * * * * * *【例例4.214.21】设计程序输出设计程序输出y = cos(x)y = cos(x)的图像。的图像。 由于有字符窗口的限制,只能将由于有字符窗口的限制,只能将cos(x)cos(x)的图像顺时针旋的图像顺时针旋转转9090o o输出,也就是屏幕向右的方向设为输出,也就是屏幕向右的方向设为y y轴正向,屏幕向轴正向,屏幕向下的方向设为下的方向设为x x轴的正向。轴的正向。 另外,屏幕宽度一般是另外,屏幕宽度一般是8080个字符,所以将个字符,所以将x x轴设定在屏幕轴设定在屏幕的的
48、4040列位置处。列位置处。x x值从值从0 0o o开始,间隔开始,间隔1515o o取值,到取值,到360360o o结束。结束。cos(x)cos(x)的值在的值在-1-1到到+1+1之间变化,为了比较好地反映值的变之间变化,为了比较好地反映值的变化情况,特别将化情况,特别将y y值放大值放大3535倍,并向屏幕的右侧移动倍,并向屏幕的右侧移动4040个个字符,使之介于字符,使之介于5 5到到7575之间。之间。【例例4.224.22】 百马百担问题。共有百马百担问题。共有100100匹马,要驮匹马,要驮100100担货,其担货,其中大马驮中大马驮3 3担,中马驮担,中马驮2 2担,两匹
49、小马驮担,两匹小马驮1 1担,求大、中、担,求大、中、小马各有多少匹?小马各有多少匹? 解决此问题,不妨设大、中、小马各有解决此问题,不妨设大、中、小马各有x,y,zx,y,z匹。可以列匹。可以列 出方程组如下:出方程组如下: x + y + z = 100 (1)x + y + z = 100 (1) 3 3 * * x + 2 x + 2 * * y + 0.5 y + 0.5 * * z = 100 (2) z = 100 (2)4.5 常见的错误常见的错误1.1.在条件表达式中,将在条件表达式中,将=误写为误写为= =。例如:。例如: if ( ( year % 4 = 0 & yea
50、r % 100 != 0 ) | ( year % 400 = 0 ) ) if ( ( year % 4 = 0 & year % 100 != 0 ) | ( year % 400 = 0 ) ) 此处产生的错误是:此处产生的错误是:error C2106: = : left operand error C2106: = : left operand must be l-value must be l-value。是由于将。是由于将=误写为误写为= =造成的。造成的。2.2.将数学中的不等式写法,直接应用于程序设计之中。将数学中的不等式写法,直接应用于程序设计之中。 例如:例如: ( x