第4章程序的控制结构ppt课件_第1页
第4章程序的控制结构ppt课件_第2页
第4章程序的控制结构ppt课件_第3页
第4章程序的控制结构ppt课件_第4页
第4章程序的控制结构ppt课件_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第4章 程序的控制构造4.1 语句及程序框架4.1.1 语句的根本分类 语句是程序的根本组成部分,一段程序或者一个函数就是由假设干语句按照算法规定的逻辑关系组成的。各种表达式都要以语句的方式出如今程序中。C言语中的语句有如下类型: (1)变量定义语句; (2)表达式语句; (3)复合语句; (4)函数调用语句; (5)控制语句;1.变量定义语句 语法格式如下: ; 其含义是:通知系统,变量表中列出的一个或多个变量的存在,同时要求系统为每个变量分配存储空间,其大小和类型与所规定的一致。变量定义语句不需求与操作步骤对应。例如: char aChar; int total = 0; /用于累计素数的

2、总数 int score; double x, y;2.表达式语句 语法格式如下: ; 从上述语法格式可以看出,表达式语句是由前面章节提及的各种表达式及后缀的分号构成。其作用是:一旦表达式语句被执行时,就要按照表达式的求值顺序计算出表达式的值。例如: i+; 3. 复合语句 语法格式如下: 其作用是:通知编译系统,将多个语句看成是一个整体,在语法要求上相当于一个语句。因此,在分支和循环构造中经常使用,函数的定义体也是一个复合语句。例如: int x, y = 20; x = y + 10; printf( “%d; %d, x, y ); 4. 函数调用语句 语法格式如下: ( ); 函数调用

3、语句的作用是:将执行控制流程转移到与此语句完全匹配的函数定义体的第一条语句处,开场执行;函数体执行终了后,前往到此语句的下一条语句处继续执行。执行流程如教材图4-1.5. 控制语句 就是用于控制程序执行途径的相关语句,可以实现程序的各种控制构造。言语中包含有九种控制语句。分成三类介绍如下:1分支语句:if语句、switch语句; 2循环语句:do-while语句、while语句、for语句; 3跳转语句:break语句、continue语句、goto语句、 return语句。 分支和循环语句是程序中经常运用的,灵敏熟练掌握其用法是本章的主要义务,后面会详细讲解。4.1.2 C程序框架 一个C程

4、序由假设干源文件和头文件组成,称之为一个工程。头文件包括用户自定义的和系统定义的,这两种都是由假设干函数及全局量的声明和编译预处置组成,文件名普通是*.h。系统定义的如stdio.h, stdlib.h, string.h, math.h, limits.h等,其内容可以在本地安装有C编译器的机器中找到。普通在安装途径的包含文件夹内,如:Program FilesMicrosoft Visual StudioVC98Include。 4.2 分支构造 分支构造与顺序构造相对应,可以称之为判别构造或选择构造,也就是有选择地执行某些语句,改动了完全顺序执行的程序构造。在日常生活中的表达方式是:假设

5、;那么。在计算机领域的根本表达方式是:假设条件成立,那么执行操作1;否那么条件不成立,那么执行操作2。其中,操作1,操作2可以是一条或多条语句。 分支构造包含if和switch两个语句. 4.2.1 if语句的根本格式 语法格式如下: if ( ) 复合语句1 else 复合语句2 if 语句根本格式的语义是:假设条件表达式的值为真,那么执行复合语句1,否那么,即条件表达式的值不为真,那么执行复合语句2。格式中“( )写法与“( != 0 )写法等价。【例4.1】 恣意输入两个不同的整数,输出其中较大的一个。 #includevoid main( ) c4: int x, y; c5: pri

6、ntf( 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 ); return ; 运用if语句需求留意如下内容:(1)从if 关键词开场到复合语句2终了,在语法上就是一条语句,虽然其中包含着两个复合语句,这并不矛盾。(2) if语句中的两个复合语句都可以由空语句,一个语句或者多个语句构成。仅包含空语句或一个语句时,一对大括号可以省略。此处添加大括号的益处是可以减少不用要的语法错误。

7、(3) if语句中的条件表达式必需运用一对匹配的圆括号括起来。(4) 条件表达式可以是逻辑表达式,关系表达式,算术表达式及赋值表达式等,单个变量构成的表达式也是正确的。只要表达式的值不是0值,条件即为成立。【例4.2】 判别某年份能否是闰年。 满足以下两个条件之一的年份均是闰年:一是年份可以被4整除,但不能被100整除;二是能被400整除的年份。 4.2.2 if语句的第二种格式 语法格式如下: if ( ) 复合语句 if 语句第二种格式的语义是:假设条件表达式的值不为真,那么直接执行此if语句的下一条语句,否那么,条件表达式的值为真,那么执行其后的复合语句,复合语句执行完成后同样要执行if

8、语句的下一条语句。 【例4.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 if语句的嵌套方式可以写出如下几种嵌套方式的if语句:1在第二种格式的复合语句处嵌套第二种格式,形如: if ( ) 其它语句

9、1 if ( ) 复合语句2 其它语句2 2 第二种格式嵌套第一种格式,形如: if ( ) if ( ) 复合语句21 else 复合语句22 3 第一种格式嵌套第二种格式,形如: if ( ) if ( ) 复合语句2 else if ( ) 复合语句3 4 第一种格式嵌套第一种格式,形如: if ( ) if ( ) 复合语句21 else 复合语句22 else if ( ) 复合语句31 else 复合语句32 【例4.4】 要求按恣意顺序从键盘输入三个整数,编写程序完成输出最大值和最小值的算法。 根本思绪:首先任取其中两个数,判别最大和最小;使用例4.3的方法。其次,用第三个数分别

10、与刚刚得到的最大和最小数再次比较,就可以得到三个数中的最大和最小。4.2.4 if语句的第三种格式其语法格式如下:if ( ) 复合语句1else if ( ) 复合语句2else if ( ) 复合语句3else if ( ) 复合语句melse 复合语句m+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 =

11、 E; else if ( 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.6】从键盘读取一个字符数据,判别其类型是:控制类字符,数字字符,大写字符,小写字符,其他字符等类别中的哪一类?设计程序完成。 根本思绪:读入字符数据,根据字符的ASCII值判别所属范围。4.2.5 switch语句及break

12、语句 switch语句的语法格式: switch ( ) case : 复合语句1 case : 复合语句2 case : 复合语句n default: 复合语句n+1 下面运用switch语句改写例题【例4. 5】。【例4.7】设计程序完成将百分制成果转换成五分制表示。 #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之间的整

13、数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 = 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句

14、输出chscore变量的当前值。编译运转此段程序应该是正确的。但是程序运转后,不论百分制成果是多少,输出结果总是如下:Your Score is A ! ! !程序一定是存在问题。 这里说的流程控制语句,就是指跳转语句break。break语句的作用之一就是从某个case子句处跳出switch语句,继续执行switch的下一条语句。break语句还用于循环语句当中,后面引见。例4.7的正确写法需求break与switch语句配合运用,程序如下: #include void main( ) c4: int nscore;c5: char chscore;c6: printf( n input S

15、core ( 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; c16_1: break;c17: case 6: chscore = D; c17_1: break;c18: case 7: chscore = C; c18_1: break;c19: ca

16、se 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 ; 【例4.8】设计可以完成单步四那么运算的简易运算器,输出运算结果。4.3 循环构造 C言语中的循环构造主要包括三个语句,分别是:while语句,do-while语句,for语句。每个语句各有本身的特点,学习时留意它们在构成循环构造时的异同。4.3.1 while语句 while语句也可以称之为“当语句。 表

17、达的含义是:当条件表达式的值为真非0值时,就执行循环体,之后重新判别条件表达式的值;如此反复多次执行循环体,直到条件表达式的值为假0值时,while语句终了,顺序执行其后的下一条语句。运用流程框图表示如教材图4-8 。while语句的语法格式如下: while ( ) 复合语句其语义是:1. 计算条件表达式的值;2. 假设值为真或者称为成立,或者非0,那么按顺序执行复合语句;前往步骤1;3. 假设值为假或者称为不成立,或者0值,那么执行while语句的下一条语句。【例4.9】输出ASCII表的可见字符,字符之间用逗号分隔。可见字符的ASCII值在32126之间。 #include void m

18、ain( ) c4:int ch = 32; c5:while ( ch 127 )c6: c7:printf( %c, ch ); /输出字符的同时,用逗号分隔不同字符c8:ch+; c10:return ;【例4.10】复制输入的一行字符串,并统计字符个数。 可以运用getchar( )函数获得键盘输入的一个字符。一行字符串的结尾是回车符(n)。由于系统提供了键盘缓冲区,所以可以实现复制字符串的效果。#include void main( )int nCh = 0;char ch;printf( input a string : n );while ( ( ch = getchar( )

19、) != n ) 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 - while语句 do-while语句与while语句的区别之一是,条件表达式

20、的计算与判别时机不同。首先看语法格式:do 复合语句 while ( ); 其执行过程是:首先执行复合语句,然后判别条件表达式能否成立,如假设成立那么再次执行复合语句,否那么不成立时,do-while语句终了,执行下一条语句。其流程描画如教材图4-9.【例4.12】求两个正整数的最大公因子。 此问题最著名的解法是欧几里德Euclid算法,也称之为辗转相除法。用自然言语描画如下:1. 恣意输入两个正整数m和n;2. 求 r = m % n;3. 假设r 等于0,那么阐明n是m的最大公因子,算法终了;4. 否那么 r不等于0,那么将n赋值给m,r赋值给n;转2处继续。 #include void

21、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】恣意输入一个整数,将其倒序后输出。如输入5678,那么输出8765#include void main( ) int m, r;printf(

22、 n input an integer m : n ); scanf( %d, &m );do r = m % 10; printf( %d, r ); while ( m /= 10 );printf( n );4.3.3 for语句 for语句是构造比较完备,运用比较灵敏的,用于构造循环构造的语句之一。甚至可以取代do-while和 while 语句.语法格式为: for ( ; ) 复合语句 与do-while和while语句相比较,除了关键字不同之外,还多了两个表达式;而且表达式之间必需运用分号相分隔;即使某个表达式缺省,分号也不能少。表达式前面添加初值,条件和增量字样仅是为了表达各自

23、的作用和功能。 for语句的执行步骤描画如下: 1.计算初值表达式;2.计算条件表达式,假设值为真非0,那么按顺序执行复合语句,之后执行步骤4;3.假设值为假0值,那么转到步骤5; 4.计算增量表达式;跳转到步骤2; 5.循环语句终了,执行其后的第一个语句。 【例4.14】求0到200累加和。#include void main( ) int sum = 0, i; for ( i = 0; i = 200; i+ ) sum += i; printf( n The sum is %d ! n, sum ); 总结循环构造设计的普通步骤如下:1. 选择恰当的循环变量;2. 明确循环的终了条件;

24、3. 循环变量的增量步长如何变化;4. 循环体包含哪些语句。【例4.15】分别打印输出Fabonacci数列的前20项。【例4.16】恣意输入一个整数m,判别其能否素数。#include 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,

25、 m ); else printf(n %d is not prime number!n, m ); 4.3.4 跳转语句1. break语句 从前面的表达可知,break语句有两种用法:一是用在switch语句,终了分支语句,执行下一条语句;二是用在循环构造中,同样是终了循环,执行下一条语句。其语法格式如下: break; 也就是关键字后面直接加一个分号构成。【例4.17】如下数列,求累加和sum大于5时,是第几项。1/1,1/2,1/3,1/4,.,1/n下面给出运用break语句完成的算法。#include void main( ) int i; double sum = 0.0; fo

26、r ( 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. continue语句 continue语句的作用是跳过循环中剩余的语句而强行执行下一次循环。continue语句只用在for、while、do-while等循环体中,常与if条件语句一同运用,用来加速循环。其语法格式如下: continue;3. return语句语法格式如下: return ; return语句

27、一旦被执行,其作用有三:一是计算表达式的值;二是将表达式的值带回到函数调用语句所在位置;三是终了当前函数的执行,即使return后面还有其它语句。假设表达式为空,那么return语句的作用是终了当前函数的执行,并前往到函数调用语句处。留意表达式的值必需与函数返回值类型一致。 举例阐明如下:int func1( )c3:.c4:return 1 * 2;c5:.c6:c7:int main( )c8:c9:int x;c10:x = func1( );c11:. 4.4 循环的嵌套 从判别语句可以包含判别语句的现实,推而广之,循环语句的循环体既然是复合语句,当然有循环语句的嵌套方式。也就是每一种

28、循环语句的循环体内,均可以包含有三种循环语句的任何一种。为了表达方便,定义单层循环是循环体内不包含循环语句的构造;双层循环是循环体内仅包含单层循环的构造方式;三层循环就是双层循环内又包含单层循环的构造方式。四层以上的循环很少有运用。【例4.18】请设计程序完成,统计100以内的全部素数的个数;并输出最大的素数。 总结一下:双层循环的嵌套方式共可分9种,这里仅以for作为外层循环为例,以while和do-while为外层循环的嵌套与此类似。1.for-for嵌套for ( ; ; ) / 各个表达式均被省略了,以下一样 /其它必要的语句 for ( ; ; ) /内层循环体 /必要语句2. for-while嵌套for ( ; ; ) /其它必要的语句 while ( ) /内层循环体 /必要语句3.for-do-while嵌套for ( ; ; ) /必要的语句 do /内层循环体 while ( );/必要语句【例4.19】请设计程序输出如以下图形。* * * * * * * * *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论