




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ATmega 单片机原理及应用 C语言教程第7章 ATmega C语言实用程序控制流,主讲:海涛,广西大学电气工程学院,内容提要,C语言的程序控制流程可以分为3种基本结构,即顺序结构、选择结构和循环结构。通过这3种基本的程序结构可以构成各种复杂的程序。本章将主要介绍这些基本程序结构的语句实现,包括if语句、switch语句、while语句和for语句的语法格式和语意内容,以及各语句在程序控制中的应用,并为后面章节的学习打好基础。,7.1 C语言的结构化程序设计,C语言是一种结构化的编程语言。从程序流程的角度来看,结构化的程序包含3种基本结构,即顺序结构、选择结构和循环结构。这3种基本的程序结构又可以相互组合、嵌套,从而构成各种复杂程序。,1、顺序结构,顺序结构是一种最基本的程序结构。在这种控制结构中,程序按照程序的存放地址由低向高顺序执行。如图7.1所示,程序先执行语句1,再执行语句2,两者按顺序关系执行。,图7.1 顺序结构流程,例7.1 己知长方体的长为l,宽为w,高为h,求其体积。源程序为:main ()int l, w, h, volume; /定义变量printf (Please input three numbers!n); /输入变量scanf (%d %d %d, /输出l、w、h、v,2、选择结构,选择结构使计算机具有了决策和选择的能力。如图7.2所示,在选择控制结构中,程序先是对某个条件语句进行判断,如果条件为“真”,则执行语句1;如果条件为“假”,则执行语句2,语句1和语句2最后汇集到一起并从一个程序出口中退出。由选择结构的上述功能可以看出,选择语句用于对计算机的某个事件处理提供多条通道,从而使计算机具有选择控制能力。,图7.2 选择结构流程,选择结构程序的设计,需要考虑两个方面的问题。其一是条件的表达,其二是选用何种选择结构语句来实现。对于C语言来说,一般用关系表达式或逻辑表达式表示选择条件,而选择结构的实现则常用if或switch语句。,例7.2 输入两个整数,输出其中的较大值。main()int a,b; /定义两个变量a,bprintf(Please input two integers!n); /输入两个数scanf(%d,%d,&a,&b);if(ab)printf(%dn,a); /输出aelseprintf(%d,b);,3、循环结构,循环结构用于重复执行一组有规律的指令集合,它可分为无条件循环和条件循环两种。由于无条件循环会导致程序的结构混乱,并使程序的可读性变低,因此,在程序设计中一般不采用无条件循环结构,本书也不再做进一步的讨论。对于条件循环结构,程序在给定条件成立时会反复执行某条语句,直至条件不再成立为止,如图5.3所示。C语言提供了for 、while等多种循环语句,它们可以相互组成各种不同形式的循环结构。,图7.3循环结构的流程,C语言中的循环结构又可以分为当型循环结构和直到型循环结构。在当型循环结构中,程序首先判断循环条件,如果为“真”,则程序重复执行循环体中的语句;如果为“假”,则退出循环。在直到型循环结构中,程序首先执行的是循环体中的语句,然后再判断循环条件,如果条件为“真”,则再重复执行语句,否则就退出循环。,7.2 选择语句,选择语句用来判断给定的条件是否满足要求,并根据判断的结果选择程序的执行分支,它构成了计算机的判断决策基础,是模块化程序的重要组成部分。 C语言中常用的选择语句有:if语句和switch语句。其中if语句具有ifelse、if和else if三种形式。,7.2.1 if 语句,1、ifelse分支if else语句的基本结构形式为:if(表达式)语句1: /当表达式为“真”时else语句2: /当表达式为“假”时语句说明:在这种结构中,如果表达式的值为“真”,则程序执行语句1;如果表达式的值为“假”,则程序执行语句2。其执行过程如图7.4所示。,图7.4 if else语句流程,结构中的判断表达式可以为逻辑表达式或关系表达式,也可以为任意的数值类型。语句1和语句2可以是一条语句也可以是由大括号构成的复合语句。,例7.3 输入一个数,如果为2,则输出“YES”;否则输出“NO”。main() int a;printf(Please input one interger!n);scanf(%d,&a);if(a= =2)printf(YESn);elseprintf(NOn);,2、 if分支,if分支是ifelse语句的简单形式,当ifelse语句缺省else部分时,就形成了if结构的分支,其基本结构形式为:if(表达式)语句; /当表达式为“真时语句说明:if分支中,如果表达式的值为“真”,则程序执行语句;如果表达式的值为“假”,则程序不执行任何操作。语句的执行流程如图7.5所示。,图7.5 i f语句流程,例7.4 输入两个整数,输出其较小值。main()int a,b;printf(Please input two integers!n);scanf(%d,%d,printf(%d,a );,3. else if分支,if else和if语句都只能提供两个分支供程序选择。但在实际应用中,两个分支往往是不够的,例如:对三分段函数,相应的处理分支也需要3个。在这种情况下,可以采用else if的多分支结构。该结构的基本形式为: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式n-1) 语句n-1; else 语句n;,语句说明:else if语句为一个多分支语句。语句执行时,程序依次判断各表达式,如果表达式为“真”,则程序执行该表达式所对应的语句,随后跳出else if分支继续执行程序;如果所有的表达式均为“假”,则执行else后的语句。else if语句的执行过程如图7.6所示。,图7.6 else if 语句流程,例7.5将百分制成绩转换成优、良、中、及格和不及格5个等级。main()int score; /定义变量printf(please input a scroe!n);/输入成绩scanf(%d,&score);if(0=score&score60) /判断输入的成绩 printf(Rank=%c, E);/输出成绩等级else if(60=score&score70) printf(Rank=%c, D);else if(70=score&score80) printf(Rank=%c, C);else if(80=score&score90) printf(Rank=%c, B);else printf(Rank=%c, A);,说明:使用if结构还必须注意以下几点:1、 在if语句中的表达式一般是逻辑表达式或关系表达式,但也可以是其他表达,甚至也可以是一个变量。2、 在if语句中,判断执行分支的条件表达式必须用括号括起来,不加分号;而语句之后则必须加分号。3、 在3种形式的if语句中,分支语句为单个语句。如果要想在分支中执行多个语句,则必须用大括号括起来组成一个复合语句。,7.2.2 switch分支,ifelse语句能从两条分支中选择一条。然而很多情况下,我们希望程序从多个分支中选择一个分支来执行。虽然else if 也可实现“多选一”, 但这种实现方法的效率较低,代码量也较大。为此,C语言提供了另一种专用于多分支选择的switch语句,它的一般形式switch(表达式)case常量表达式1: 语句1;case常量表达式2: 语句2;case常量表达式n: 语句n ;default : 语句nl; ,语句说明:程序首先计算表达式的值,然后至上而下寻找与表达式的值相匹配的case关键字后面的常量表达式,如果相互匹配,程序就执行其后的语句;若表达式的值与所有case后的常量表达式均不相同时,则执行语句n+1。 当执行完某一分支语句后,程序还会继续执行后续的case语句。如果希望程序只执行一条分支,则可利用break语句跳出switch结构。,例7.6 用switch调用不同的输出。switch(a) case 1 printf(“china”); break; case 2: printf(“is”); break; case 3: printf(“a”); break; case 4: printf(“great”); break; case 5: printf(country);break; case 6: printf(“!”); break; default:printf(OK);,说明:使用switch结构还必须注意以下几点:1、 switch后的执行部分,必须用大括号括起来。2、 在同一个switch结构中,不能有相同的case常量表达式出现。3、 在case后的多个语句,可以不用大括号括起来。4、 为实程序执行一个分支,可采用break语句来跳出switch结构的方式实现。,7.2.3 选择语句的嵌套,当一个选择语句中又包含了一个或多个选择语句时,就构成了选择语句的嵌套形式。if语句和switch语句都允许嵌套,它们的嵌套格式也基本相同,因此,本书主要以if语句来说明选择语句的嵌套形式。,选择嵌套的一般形式如下:if(表达式1) if(表达式2): 语句1; else 语句2; else if(表达式3) 语句3; else 语句4;,由于if语句中的else部分是选用的,若嵌套内的语句不带else,那么这将会出现else与if匹配的问题。为解决这个问题,C语言中规定,else总是与它最近的if配对。,例7.7 输入3个数,输出最大值main() int a,b,c; printf(Please input two integers!n); scanf(%d,%d,&a,&b); if(ab) if(bc) c=a; else c=b;,7.3 循环语句,在实际应用问题中,经常会碰到一些需要重复处理的问题,这就要求能有一种结构可使计算机循环地执行一组语句。循环结构就是这样的一种结构。其特点是,在给定判定条件为“真”时,程序反复执行某一条或某一组语句,直到判定条件为“假”。 循环结构中的循环语句一般由循环体和循环判定条件两步分组成,其中被重复执行的那部分语句被称为循环体,而循环条件则用于判断是否重复执行循环体部分。,C语言中有3条语句可实现循环功能,它们是:1、 while语句2、 do while语句3、 for语句7.3.1 while语句while语句的一般形式为:while(表达式)语句;,语句中的表达式为循环判定,它是while循环是否继续的条件;语句为循环体,它是执行重复操作的语句。 语句说明:程序首先计算表达式的值,当值为“真”时,程序执行循环体;当值为“假”时,则终止while循环。while语句的执行过程如图7.7所示。,图7. 7 while语句流程,例7.8 求1到100的和。main() int n=1,sum=0; while(n=100) sum=sum+n; n+; ,说明:使用while语句应注意以下几点:1、 while循环结构的循环判定条件在循环体之前,因此在执行循环操作之前必须先进行循环判定条件的测试,如果条件不成立,则循环体内的操作一次也不能执行。2、 while语句中的表达式一般是关系表达或逻辑表达式,但也可以是其他表达式,甚至可以是变量或常量。只要表达式的值为“真”,while语句就会循环执行。,3、 循环体如包括有一个以上的语句,则必须使用大括号括起来,构成一个复合语句。4、 while循环中,应用使循环趋于结束的语句,否则将构成死循环。,do while循环与while循环的不同之处在于:while循环先测试循环判定条件,而do while循环则先执行循环体中的语句,然后再测试循环判定条件。如果条件为“真”,则继续执行循环体;如果条件为“假”,则终止循环。因此,不管循环条件是真是假,do while循环至少都会执行一次循环。do while语句的一般形式为:do 语句;while(表达式);,main()int n=1,sum=0;do sum=sum+n; n+;while(i=100); do while循环语句把循环判定条件的测试放在了循环的结尾处,这样就使得循环至少也能够循环一次,因此常用于执行至少一次循环的情况下。,例7.9求1到100的和。,for循环语句由3个部分构成。其中第一个部分为初始化表达式,它用于在开始执行for循环时进行循环变量的初始化;第二部分是循环判断表达式,它可以提供循环的终止条件;第三部分是尺度增量表达式,用于在循环之后执行某种操作。,如果for语句的第一部分和第三部分被省略了,那么for语句就退化成了while语句;如果用于测试循环条件的第二部分被省略,那么循环就一直进行,这种方式下必须借用其他手段(如break语句或return语句)终止循环。,for循环语句的一般形式为:for(表达式1;表达式2;表达式3)语句;语句的执行过程为:(1)先初始化表达式1。(2)测试循环判定表达式2,若表达式为“真”,则程序执行for语句循环中的循环体;若表达式为“假”,则终止循环。(3)求解表达式3,返回第2步继续判断循环表达式。(4)结束循环。,例7.10 求1到100的和。,main() int n,sum; sum=0; for(n=0;n=100;n+) sum=sum+n; printf(sum=%dn,sum);,说明:C语言中的for语句具有如下几个必须注意的地方:1、 for语句中的3个表达式都可以省略,但其中的分号不能省。2、 表达式1和表达式3可以是一个简单的表达式,也可以是一个逗号表达式。3、 如果要使for语句中的循环体不止一个语句,必须用大括号把多个语句括起来形成一个复合语句。,当一个循环结构中又包含一个或多个循环结构时,就构成了循环嵌套。C语言中的3种循环结构都允许循环嵌套,并且不同的循环语句之间也可以相互嵌套。,例7.11下面是一个循环嵌套程序的例子,看看执行后的结果是什么。 main()int a=1,b=1,c=1;while(a10) do for(;c10;c+) printf(%d%d%dn,a,b,c); b+; while(b10); a+;,7.3.5 break语句和continue语句,在循环语句执行过程中,有时需要在循环判定条件仍为“真”的时候直接从循环体中退出来,这时就需要用到break语句和continue语句。break语句适用于3种循环语句,break语句执行后,程序会立即从最内层的循环语句跳出o continue语句和break语句相似,continue语句一旦执行,程序就立即开始下一次循环。,1、break语句 break语句通常用在循环语句中,它可使程序跳出循环,而执行循环后的语句。在循环结构中break语句一般与if语句联用,当条件满足时便跳出循环。其流程如图7.10所示。,break语句也可用于分支语句中,当switch结构中插入break语句时,程序会跳出switch结构,执行分支语句以后的程序。,2、 continue语句continue语句为循环继续
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年宝鸡方塘高级中学教师招聘(34人)模拟试卷及答案详解(名校卷)
- 2025湖南张家界市市场监督管理局招聘公益性岗位人员1人模拟试卷参考答案详解
- 2025辽宁沈阳市政府国资委市属国有企业外部董事人才库拟入库人员模拟试卷完整参考答案详解
- 2025黑龙江哈尔滨“丁香人才周”(春季)事业单位引才招聘考前自测高频考点模拟试题及参考答案详解一套
- 2025年临沂职业学院公开招聘教师和教辅人员(24名)考前自测高频考点模拟试题及答案详解(全优)
- 2025年临沂郯城县技工学校公开招聘教师(26人)考前自测高频考点模拟试题及一套完整答案详解
- 2025广东广州市越秀区建设街招聘辅助人员1人考前自测高频考点模拟试题及1套完整答案详解
- 2025江苏苏州市相城区教育系统招聘事业编制教师66人考前自测高频考点模拟试题(含答案详解)
- 2025湖南怀化新晃县公益性岗位人员招聘9人模拟试卷带答案详解
- 2025江苏师范大学招聘工作人员78人(第一批)考前自测高频考点模拟试题及答案详解(易错题)
- 安徽省农村信用社联合社2026年校园招聘备考考试题库附答案解析
- 化工安全三级培训考试题及答案解析
- 2025加工定做合同范本
- 2025湖北宜昌市不动产交易和登记中心招聘编外聘用人员17人考试参考试题及答案解析
- 教PEP版六年级英语上册第一次月考试卷(Unit 1-2).(含答案含听力原文)
- 铁路局安全理论培训课件
- 物流配送调度管理系统设计方案
- 35kV线路工程电杆安装施工方案
- 2025年乡镇工会集体协商指导员招聘考试试题库及答案
- 2025-2026学年苏教版(2024)小学科学二年级上册教学计划及进度表
- 2025年度环评文件技术复核服务方案投标文件(技术方案)
评论
0/150
提交评论