ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:87.20KB ,
资源ID:4088488      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4088488.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第四章 流程控制.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第四章 流程控制.docx

1、第四章 流程控制第四章 流程控制41 复合语句 复合语句是用“ ”括起来的一组语句,例如: t=a; a=b; b=t; 该复合语句交换变量a,b的值,t是用于暂时保存中间值的辅助变量。一个复合语句称为一个块。另外复合语句中可以包含说明语句,例如: int t; t=a; a=b; b=t; 复合语句的一般形式为: 说明部分; 语句部分; 注意: 复合语句中的右花括号“”的后面没有分号; 一个复合语句在语法上等价于单个语句,凡一个语句能够出现的地方都能出现复合语句,换句话说,复合语句在逻辑上是一个整体; 复合语句可以嵌套,即一个复合语句中还可以出现复合语句; 复合语句中说明部分的变量,其作用范

2、围(作用域)只限于该复合语句内部,在复合语句外无意义; if子句和else子句以及while、for的循环体,在语法上均规定为单个语句,若需要多个语句,必须写成复合语句的形式。另外,函数体语法上也是一个复合语句,但复合语句可以嵌套,而函数体中不可以嵌套函数。例1 输入两个整数,按从小到大的顺序输出这两个数。 #include void main(void) int a,b; printf(“input a,b:n”); scanf(“%d%d”,&a,&b); int t; if (ab) t=a;a=b;b=t; printf(“a=%d,b=%dn”,a,b); 注意变量t的作用范围,若i

3、nt t;前无 在语法上有错。4.2 if语句 if语句也称为条件语句,它根据一个条件的真和假有选择地执行或不执行某个语句。1 if语句的一般形式if语句有两种形式 if格式:if(表达式)语句1; if-else格式: if(表达式)语句1; else语句2;关于if语句的使用说明: if和else是关键字,是if语句的标志。表达式用来选择条件,可以为任何表达式,表达式必须用括号括起来。 语句1和语句2是任何单个语句(包括复合语句),分别称为if子句和else子句,语句1和语句2末尾必须有分号(复合语句除外)。 if语句中语句1的后面尽管有分号,但整个if语句(包括if-else形式)逻辑上

4、是一个语句。 在前面我们举过一个例子,求a、b、c中最大值:用条件运算符的形式为: m=(ab)?a:b; m=(mc)?m:c; 在功能上与下面使用if语句相同: if(ab) m=a; else m=b; if(mc) m=c;例2 解方程ax+b=0,a和b从终端输入#includevoid main(void)float a,b,x; printf(“input a,b:n”); scanf(“%f%f”,&a,&b); if(!a) printf(“error in input datan”); else x=-b/a; printf(“x=%.4fn”,x); 如果将其中的else

5、子句写成如下形式 else x=-b/a; printf(“x=%.4fn”,x);会发生什么情况? 因此正确地使用是写if语句时应特别注意的问题。2 嵌套的if语句当if子句或else子句又含有一个if语句时,则形成if语句的嵌套,称为嵌套的if语句或称多重if语句。 例 求3个数中的最大值。 if(ab) if(ac) max=a; else max=b; else if(bc) max=b; else max=c; printf(“max=%.2fn”,max); 还可以用非嵌套的if语句实现 if(a=b&a=c) printf(“max=%.2fn”,a); if(b=a&b=c)

6、printf(“max=%.2fn”,b);if(c=a&c=b) printf(“max=%.2fn”,c); 对于嵌套的if语句,由于if 语句有两种形式,因此某些嵌套的if语句语义上可以有两种理解(二义性)。例如: if(n0) if(n0) if(ab) if(ab) z=a; z=a; else else z=b; z=b; 上面两个程序片断相同,因为编译程序约定else与其前面最靠近的且未配对的if配对。因此 上面两程序片断,它们的等价形式为 if(n0) if(ab) z=a; else z=b; 如果非让else与if(n0) 配对则应写成: if(n0) if(ab) z=a

7、; else z=b;4.3switch语句switch语句又称为开关语句,从多种供选择的情况中选择满足条件的一种情况执行的简便而又直观的多分支结构。 if语句是二分支结构,如果要表达两种以上的选择要用嵌套的if 语句。例如计算: 用嵌套的if语句: if (x=1)if (x2) y=3*x+5; else if (x3) y=2*sin(x)-1;else if (x4) y=sqrt(1+x*x);else if(x5) y=x*x-2*x+5;如用switch语句实现上述功能:switch(int) x) case 1: y=3*x+5; break; case 2: y=2*sin(

8、x)-1; break;case 3: y=sqrt(1+x*x); break;case 4: y=x*x-2*x+5; break;switch语句的一般形式为:switch(表达式) case 常量表达式1: 语句序列1; case 常量表达式2: 语句序列2; case 常量表达式n: 语句序列n;default:语句序列;说明:(1)switch、case、default是关键字,switch是语句标志,case和default只能在switch中使用。(2)表达式是选择条件,表达式的值必须为整型、字符型或枚举型,且表达式必须用()括起来。括起来的部分是语句体,不能省,switch的

9、语句体由多个case和至多一个(可以没有)default组成。(3)case后面的常量表达式是值为常数的表达式,通常为常量或符号常量。类型必须和选择条件的类型相同;(4)同一switch语句中的所有case常量值必须互不相同。(5)每个case(称为一种情况)下可以有零或多个语句,有多个语句时可以不加。(6)switch执行时,先计算作为选择条件的表达式,并将表达式的值依次和case后面的常量比较,当与某个case的常量值相等时,则执行case后面的语句。若表达的值与各case的常量值都不相等,在有default的情况下,则执行default后面的语句;否则,不执行switch中的任何语句,此

10、时,switch等价于一个空语句。注意:switch语句一旦发现表达式的值与某个case的常量值相等,则从该case后面的第一个语句开始依次执行,执行完这个case的语句之后,自动进入下一个case继续执行,直到switch语句体中的最后一个语句被执行为止。如果希望执行完一种情况的语句后便跳出switch语句,则要利用break语句或return语句。break跳出switch语句之后继续执行switch语句后面的语句(如果有),return则立即返回到函数调用处。例3从终端输入两个实数,和一个四则运算符(、)执行相应的运算并输出运算结果。include “stdio.h”void main(

11、void) double x,y,result;char op;int flag;printf(“input x,y,op:n”);scanf(“%lf%lf%c”,&x,&y,&op);flag=1;switch(op) case +:result=x+y;break;case -:result=x-y;break;case *:result=x*y;break;case /:if (y) result=x/y;else flag=0;break; default:falg=0;if (flag) printf(“reslt=%fn”,result);else printf(“invalid

12、 input y or opn”);例4:输入某年某月,输出该月的天数。分析:年year为闰年的条件是:(!(year % 4) &( year%100)|!(year %400)为非0,否则year为平年。#include “stdio.h”main() int year ,month,days,flat;printf(“input year,month”n”);scanf(“%d%d”,&year,&month);flag=1;switch(month)case 1: case 3: case 5: case 7: case 8:case 10:case 12:days=31;break;

13、case 4:case 6:case 9:case 11:day=30;break;case 2: if(!(year % 4) & (year%100)|!(year %400) day=29;else days=28; break;default: flag=0;if (flag) printf(“days=%dn”,days);else printf(“invalid input monthn”);输入:1995 2输出:days=28注意:switch语句允许多情况执行相同的语句,但在语法上与PASCAL有不同之处。例如4、6、9和11月均执行 days=30;可以写成:case 4:

14、 case 6: case 9: case 11:days=30;但不能写成:case 4,6,9,11:days=30;也不能写成:case 4, case 6, case 9,case 11:days=30;4.4 while 语句 while 是三种循环语句中的一种。1. while 语句的一般形式 while (表达式) 语句;说明:(1)while是关键字;“表达式”是循环条件,可以为任何表达式,表达式必须用( )标起来; (2)语句为任何单个语句(包括复合语句、if语句、case 语句),称为循环体,循环体是当表达式为真(非0)时要重复执行的语句。 (3)while 语句的流程图如

15、右图所示。执行while语句时,首先计算并测试表达式值,若为非0则执行语句(循环体),然后回到(由向上的流程表示)对表达式的下一次计算和测试;如表达式的值为则结束循环。例如: (1)例如 i=0; while(i5) printf(i=%dn,i); i+; printf(i=%dn,i);表达式i5是循环条件,其中变量i值变化能改变表达式值 。i是循环变量。语句i=0;给循环变量赋初值。i+; 用于改变循环变量的值。若无此语句则为死循环 。如:(2)例如 i=k=1; while(i5) k+=i; printf(i=%d,k=%dn,i,k); 因 i5 永为真,产生死循环将无穷输出行 i

16、=1,k=2 i=1,k=3 (3) 例如 i=0; while(i=4) printf(*n); i+=2; 无论i值在循环体中如何变化,i=4 为永真是死循环。(4) i=0; while(i=4) printf(i=%dni); i+=2; 进入循环时首先测试 i=4 的值为假,结束循环。循环体一次也不执行,无输出。2. while 语句的使用要点(1)用作循环条件的表达式中必须至少包含一个能够改变表达式值的变量,这个变量称为循环变量。有返回值的函数调用也看成变量,例如:while(getchar() 这里getchar() 代表一个 int 变量。(2)在第一次测试表达式的值以前,必须

17、通过适当的方式(输入或赋值)给循环变量赋初值。(3)在下次测试表达式的值之前(即在循环体中)必须有能够改变循环变量值的语句(赋值或输入),且循环变量值的改变应保证循环条件最终取假值。3. 程序设计举例例5 将输入的正文复制到输出,每次一个字符。分析:以 E0F 为结束标志的字符流称为一个正文,可以包含空白字符,例如空格 和换行字符n.在DOS系统上从终端键入 Ctrl+z则 getchar 函数返回文件结束字符 EOF。#include void main(void) char c; printf(input a text end of ctrl+z:n); c=getchar(); whil

18、e(c!=EOF) putchar(c); c=getchar(); 最后四行语句可简化为:while(c=getchar()!=EOF) putchar(c);但应注意优先级。while(c=getchar()!=?) putchar(c);不等价于while(c=getchar()!=?) putchar(c);而while(putchar(getchar()!=?);也不等价于:while(putchar(getchar()!=?);例6. 输入一行字符,按字母、数字和其它字符分成三类,分别统计各类字符的数目(换行字符n不统计在内)。#include void main(void) ch

19、ar c; int alpha=digit=other=0; while(c=getchar()!=n) if(c=a & c=A & c=0 & c=9) digit+; else other+; printf(alphas=%dn digits=%dn other=%dn,alpha,digit,other);如输入 cast=3,honse=5,sunio8输出 alphas=14 digits=3 other=7例7. 输入一正文,统计正文包含的行数、字数和字符数分析:正文的一行是以n为结束标志的字符串。统计行数就是统计n的数目;统计字数只需对空格字符 、制表字符t和换行字符n统一计数

20、。#include #define IN 1#define OUT 0void main(viod) int c,nl,nw,nc,state; state=OUT; nl=nw=nc=0; printf(input a text end of ctrl+Z:n); while(c=getchar()!=EOF) +nc; if(c=n) +nl; if (c=|c=n|c=t) state=OUT; else if (state=OUT) state=IN;+nw;printf(“line=&d words=%d characters=%dn”,nl,nw,nc);由于字与字之间可能包含一个

21、以上连续的空白字符,当遇到每个字的第一个字符时对字计数,state起一个标志作用,它让程序能够识别当前字符是否处于一个字的第一个字符。IN和OUT表示当前字符在一个字中和不在一个字中两种状态。例:求计算机的字长。分析:求机器的字长即计算一个存储int变量时所拥有的二进制位的数目。include “stdio.h”void main(void) unsigned word;int n;word=0;n=1;while(word=1) +n;printf(“word=length=%dn”,n)4.5 for语句 for语句是比while语句功能更强的一种循环语句。给循环变量赋初值、测试及修改都在

22、for的控制部分。甚至循环体也可放到循环的控制部分。For语句的一般形式: for(表达式;表达式;表达式)语句;说明:() for是关键字;()括起来的是控制部分,三个表达式可以为任何表达式;“语句”是循环体,可以是任何单个语句(包括复合语句);()for语句的流程如下图所示:表达式用于给循环变量赋初值,注意:表达式仅在进入for语句时执行一次;表达式是循环条件,同while语句一样,先计算并测试表达式的值,因此for语句的循环体有可能一次也不执行;表达式用于修改循环变量的值,它在每次执行完循环体中的语句之后,都要被执行一次。例如1 for (i:=1;i4;i+)printf(“i=%d

23、s=%dn”,i,2*i); 执行时输出: i=1 s=2 i=2 s=4 i=3 s=62 for(a=10,b=5;a=b;a+)printf(“a=%d,b=%dn”,a,b); 执行时无输出。3 for(x=1;x=100;x+)执行时死循环,输出无穷多个x=100.4 sum=0;for(i=1;i=n;i+) sum=sum+i;可以简化为 for(sum=0,i=1;i=n;i+) sum+=i;进一步简化 for(sum=0,i=1;i=n;sum+=i+);注意: 表达式1(e1)、表达式2(e2)和表达式3(e3)可以全部(或部分)地缺省,无论缺省哪一个表达式,分号均不能省

24、; 缺省e1和e3时,for语句(for(;e2;)等价于一个while语句(while(e2); 缺省e2时的for语句(for(e1;e3))和三个表达式都缺省的for语句(for (;)都是无限循环,被省略的e2缺省值为1(永真),e1和e3没有缺省值。2程序举例 例10输入一批整数,以0结束,输出其中的最大值。分析:从若干数中求最大值,最简单的方法式是;将所有的数进行两两比较,留下较大数用max保存,当所有的数都比较完后,max存放的就是最大数。#includevoid main (void) int x,max; printf(“input numbers ,last one is

25、0:n”); scanf (“%d”,&x); max=x; for (;x;) if (maxx) max=x; scanf(“%d”,&x); printf(“max=%dn”, max);例11求n!,n从终端输入分析:n =1*2*3*n,考虑n较大时,n!可能溢出,应将结果变量说明为long或double.#include “stdio.h”void main(void) int n,i; long fac; printf(“input n:n”);scanf(“%d”,&n);fac=1;for (i=1;i=0&c=0&c=9isspace(c)测试c是否空白字符,如果果c是空白字符,则函数返回值为非,否则返

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1