1、ARDUINO简介 目录1.1 1.1 ArduinoArduino简介简介1.2 1.2 ArduinoArduino Uno Uno简介简介一.什么是ArduinoArduino的产生是为了满足创意创新的需求!Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。它适用于爱好者、艺术家、设计师和对于“互动”有兴趣的朋友们。Arduino能通过各种各样的传感器来感知环境,通过控制灯光、电动机和其他的装置来反馈、影响环境。二.为什么使用Arduino做开发 用Arduino制作作品或者进行产品开发的优势是很明显的。跨
2、平台Arduino IDE可以在Windows、Macintosh OSX、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。简单清晰的开发Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 AVR GCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。三.Arduino的优势 Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现
3、,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。因为Arduino的种种优势,越来越多的专业硬件开发者已经或开始使用Arduino来开发他们的项目、产品;越来越多的软件开发者使用Arduino进入硬件、物联网等开发领域;大学里,自动化、软件,甚至艺术专业,也纷纷开展了Arduino相关课程。2.Arduino的历史这个最经典的开源硬件项目,诞生于意大利的一间设计学校。Arduino的核心开发团队成员包括:Massimo Banzi,David Cuartielles,Tom Igoe,Gianluca Martino,David Mellis和Nicholas Zambet
4、ti。四.Arduino的历史 据说Massimo Banzi的学生们经常抱怨找不到便宜好用的微控制器,2005年冬天,Massimo Banzi跟朋友David Cuartielles讨论了这个问题,David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。这块电路板被命名为Arduino。几乎任何人,即使不懂电脑编程,也能用Arduino做出很酷的东西,比如对感测器作出回应,闪烁灯光,还能控
5、制马达。四.Arduino的历史 意大利北部一个如诗如画的小镇Ivrea,横跨过蓝绿色Dora Baltea河,它最著名的事迹是关于一位受压迫的国王。公元1002年,国王Arduin成为国家的统治者,不幸的是两年后即被德国亨利二世国王给废掉了。今日,在这位无法成为新国王的出生地,cobblestone街上有家叫di Re Arduino的酒吧纪念了这位国王。Massimo Banzi经常光临这家酒吧,而他将这个电子产品计划命名为Aruino以纪念这个地方。四.ArduinO的历史随后Banzi,Cuartielles,和Mellis把设计图放到了网上。保持设计的开放源码理念,因为版权法可以监管
6、开源软体,却很难用在硬体上,他们决定采用Creative Commons许可。Creative Commons(CC)是为保护开放版权行为而出现的类似GPL的一种许可(license)。在Creative Commons许可下,任何人都被允许生产电路板的复制品,还能重新设计,甚至销售原设计的复制品。你不需要付版税,甚至不用取得Arduino团队的许可。唯一被保留的只有Arduino这个名字。它被注册成了商标。如果有人想用这个名字卖电路板,那他们可能必须付一点商标费用给Arduino的核心开发团队成员。五五.ArduinoArduino的优点的优点1.跨平台Arduino IDE可以在Windo
7、ws、Macintosh OSX、Linux三大主流操作系统上运行,而其他的大多数控制器只能在Windows上开发。2.简单清晰的开发Arduino IDE基于processing IDE开发。对于初学者来说,极易掌握,同时有着足够的灵活性。Arduino语言基于wiring语言开发,是对 AVR GCC库的二次封装,不需要太多的单片机基础、编程基础,简单学习后,你也可以快速的进行开发。五五.ArduinoArduino的优点的优点3.3.开放性开放性Arduino的硬件原理图、电路图、IDE软件及核心库文件都是开源的,在开源协议范围内里可以任意修改原始设计及相应代码。4.4.社区与第三方支持
8、社区与第三方支持Arduino有着众多的开发者和用户,你可以找到他们提供的众多开源的示例代码、硬件设计。例如,可以在G、Arduino.cc、O等网站找到Arduino第三方硬件、外设、类库等支持,更快更简单的扩展你的Arduino项目。五五.ArduinoArduino的优点的优点5.5.硬件开发的趋势硬件开发的趋势Arduino不仅仅是全球最流行的开源硬件,也是一个优秀的硬件开发平台,更是硬件开发的趋势。Arduino简单的开发方式使得开发者更关注创意与实现,更快的完成自己的项目开发,大大节约了学习的成本,缩短了开发的周期。六.Arduino系列控制器特色1.开放源代码的电路图设计,程序开
9、发接口免费下载,也可依需求自己修改;2.可以采用USB 接口供电,也可以外部供电,双向选择;3.Arduino支持ISP 在线烧写,可以通过USB 更新程序;4.可依据官方提供的Eagel格式PCB 和SCH 电路图,简化Arduino模组,完成独立运作的微处理控制。可简单地与传感器,各式各样的电子元件连接(红外线、超音波、热敏电阻、光敏电阻、伺服舵机等);5.支持多种互动程序,如:Flash、Max/Msp、VVVV、C、Processing 等;6.应用方面,利用Arduino,突破以往只能使用鼠标、键盘,CCD等输入的装置的互动内容,可以更简单地达成单人或多人游戏互动。七.Arduino
10、作品首款完整机器人平台Arduino宣布向机器人领域进发,发布了名为Arduino Robot的首款完整机器人。这款机器人尺寸为178 x 102mm,将两个圆形Arduino板叠一起。上部的Arduino板名为“Control Board”,主要读取主板传感器的各种数据并且内置处理器进行相应的计算处理。在机器人身上装备了一些常见的传感器设备,比如数字罗盘,红外感应器,彩色液晶屏,扬声器,地面传感器,可活动的LED指示灯等等。这款机器人还能进行各种编程,能够通过USB连接到电脑上连接。机器人通过四节可充电AA镍氢电池提供能量。Will OBrien最近利用自己手头的老iPhone和一个Ardu
11、ino(可开发电路板)自行研制了一个通过iPhone短信发动汽车的组合,短信也能发动汽车,听起来是不是很神奇?基于Arduino的智能家居方案将你需要互相控制灯光的每个房间,换上智能开关,配对后就能通过无线在一个房间对另一个房间的灯光进行控制和监视。简答的说,就是你只需要更换掉你卧室和厕所里的普通照明开关,就可以在卧室里看到厕所的灯是否关闭了,能通过卧室的面板来关闭厕所的灯光。用Arduino UNO去显示图像 全彩RGB LED阵列屏Arduino驱动板Colorduino“tilt radio”倾斜收音机是以色列设计师luka or的作品,他利用Arduino来研究交互设计中的极简主义。设
12、计师将收音机和使用者体验等元素全都剥离,仅留下必要部分收音机的AM/FM调幅/调频系统,设计师甚至把物理上的调节按钮也去掉了。使用者通过将收音机左右倾斜来实现波段和频道调节,省去了传统的调频按钮。在用户体验方面,收音机倾斜的位置还反映了使用者的收听频率和习惯。Arduino Moisture Sensor土壤湿度传器 自动浇花 这款阿迪达斯帆布胶底运动鞋内置有Arduino控制板,板上连接有陀螺仪、加速度传感器、压力传感器、喇叭和蓝牙等,它判断穿戴者的活动与行走路径,时不时的用英国男人忠告式的腔调说一些鼓励的话或不耐烦的话。当你坐着不动,它会说:“超级无聊。”而当你运动跳跃时,它会说:“我喜欢
13、鞋带上有风的感觉”。你也可以设置鞋子的个性,这样它也会说脏话。会说话的运动鞋,还有什么不能?利用Arduino玩出来的各种各样发烧级玩具 基于Arduino编程 捷克学生发明智能照明灯一名捷克学生通过Arduino编程,设计了这台能够自动寻找黑暗角落并将其照亮的机器人灯。这款灯采用了S型仿生外观设计,由底部的轮子、配重块、主体程序和头部聚光灯组成。设计者还赋予了它“生命”当它发现黑暗或者光线不足的角落,就会停下来在原地做出前后俯仰的动作,如同在兴奋地炫耀它的劳动成果。用Arduino在彩色显示屏上显示Google天气信息 看到街边停车场的自动栏杆随轿车的进出自动升降,于是前去观察,一上一下的,
14、蛮有意思,想想,是否可以做个原型产品娱乐下,所以我就制作了这个Arduino与LEGO结合下的自动栏杆。这个作品的工作过程是:当红外传感器(图中黄色圆柱状器件)检测到小车到达栏杆前方,栏杆自动升起打开,并保持打开状态一小会,小车通过栏杆处后,栏杆会放下关闭。Arduino与LEGO结合下的自动栏杆推荐网站http:/www.A Duemilanove这是一款基本的Arduino产品,控制器采用Atmega168或Atmega328,支持直流电源供电和USB口供电,如图所示。后续很多产品都是这款产品的基础上发展而来的。八.Arduino的种类2.Arduino NanoArduino Nano在
15、设计中去掉了直流电源接口,采用Mini-B标准的USB接口来连接电脑,除了外观变了,其他接口及功能保持不变,控制器同样采用Atmega168或Atmega328,是一款缩小版的Arduino Duemilanove,如图所示。八.Arduino的种类3.Arduino mini考虑到存在一些空间要求十分严格的使用者,Arduino mini在设计中甚至去掉了USB接口和复位开关,这样能够减小Arduino的尺寸。唯一的问题是连接电脑或烧写程序时需要一个USB或RS232转换成TTL,Arduino官方也有相应的适配座Mini USB Adapter。八.Arduino的种类4.Arduino
16、BTArduino BT本身包含了一个Bluegiga WT11蓝牙模块,支持蓝牙无线串行通信,但不支持蓝牙音频设备。若没有USB接口,连接电脑或烧写程序可以通过蓝牙适配器与Arduino BT连接实现无线程序下载与控制。八.Arduino的种类5.LilyPad Arduino这是一款真正有艺术气质的产品,面向的主要使用者是从事服装设计之类工作的设计师,他可以使用导电线和或普通线缝在衣服或不料上,LilyPad Arduino每个引脚上的小东大到足够缝纫针可以轻松穿过,如图。如果用导电线缝纫的话,即可以起到固定作用,又可以起到传导作用。比起普通的Arduino板,LilyPad Arduin
17、o相对比较脆弱,比较容易损坏,但是他的基本功能都保留了下来,除了一点,它没有USB接口,所以LilyPad Arduino连接电脑或烧写程序时需要一个USB或RS232转换成TTL的适配座。八.Arduino的种类6.Arduino pro和Arduino pro MINI设计Arduino Pro的目的是为了那些便利性和低成本的高级用户。为了降低成本,它省去了USB接口、直流电源接口和引脚排针,连接电脑或烧写程序时需要一个USB或RS232转换成TTL的适配座。Arduino Pro更像是一个大号的Arduino mini,如图。需要注意的是,Arduino Pro有3.3V/8MHz和5V
18、/16MHz两个版本,使用的时候要留意。另外Arduino Pro同样有一个Arduino Pro Mini的版本。八.Arduino的种类八.Arduino的种类7.Arduino fioArduino Fio的工作电压是3.3V,控制器的工作频率是8MHz,采用Mini-B标准的USB接口,提供一个锂聚合物电池接口,底部预留一个Xbee模块插座,Xbee模块可使Arduino方便的应用于无线网络。八.Arduino的种类8.Arduino UnoArduino Uno是最新的Arduino产品系列,如图所示,它与之前的Arduino板最大的区别在于它不是使用FTDI USB-to-seri
19、al串行驱动器芯片,而是采用Atmega8U2芯片进行USB到串行数据转换。目前Arduino Uno已成为Arduino的主推产品。八.Arduino的种类9.Arduino mega2560Arduino Mega2560的控制器采用ATMega2560,他的资源要比之前的Arduino产品丰富很多,用于满足需使用较多资源进行产品设计与开发的用户需求,同时Arduino Mega2560也兼容之前基于Ardino Duemilanove1.2 1.2 ArduinoArduino Uno Uno简介简介Arduino Uno开发板以ATmega328 MCU控制器为基础.14路数字输入/输
20、出引脚(其中6路可用于PWM输出)、6路模拟输入、一个16MHz晶体震荡器、一个USB接口、一个电源插座、一个ICSP接头和一个复位按钮。它采用Atmega16U2芯片进行USB到串行数据的转换。Uno PCB的最大长度和宽度分别为2.7和2.1英寸,USB连接器和电源插座超出了以前的尺寸。4个螺丝孔让电路板能够附着在表面或外壳上。1.2 1.2 ArduinoArduino Uno Uno简介简介1.ATmega328具有32 KB闪存(其中0.5 KB被启动加载器占用)。它还具有2KB SRAM和1KB EEPROM(可以利用EEPROM库读取和写入)。2.Arduino Uno可通过US
21、B连接或者外部电源供电。外部(非USB)电源可以是AC-DC适配器,也可以是电池。通过将2.1mm中心正极插头插入电路板的电源插座即可连接适配器。电池的引线可插入电源连接器的Gnd和Vin排针。电路板可由620V外部电源供电。然而,如果电源电压低于7V,那么5V引脚可能会提供低于5V的电压,电路板也许会不稳定。如果电源电压超过12V,稳压器可能会过热,从而损坏电路板。电压范围建议为712V。电源引脚如下:1.2 1.2 ArduinoArduino Uno Uno简介简介VIN.使用外部电源时Arduino板的输入电压(与通过USB连接或其它稳压电源提供的5V电压相对)。可以通过该引脚提供电压
22、,或者如果通过电源插座提供电压,则可通过该引脚使用它。5V.该引脚通过电路板上的稳压器输出5V电压。电路板可由DC电源插座(7-12V)、USB连接器(5V)或电路板的VIN引脚(7-12V)供电。通过5V或3.3V引脚供电会旁路稳压器,从而损坏电路板。我们不建议如此。3V3.板载稳压器产生的3.3V电源。最大电流消耗为50 mA。1.2 1.2 ArduinoArduino Uno Uno简介简介GND.接地引脚。IOREF.Arduino板上的该引脚提供微控制器的工作电压参考。配置得当的盾板可以读取IOREF引脚电压,选择合适的电源或者启动输出上的电压转换器以便在5V或3.3V电压下运行。
23、1.2 1.2 ArduinoArduino Uno Uno简介简介1.2 1.2 ArduinoArduino Uno Uno简介简介利用pinMode()、digitalWrite()和digitalRead()功能,Uno上的14个数字引脚都可用作输入或输出。它们的工作电压为5V。每个引脚都可以提供或接受最高40 mA的电流,都有1个20-50 k的内部上拉电阻器(默认情况下断开)。此外,某些引脚还具有特殊功能:串口:0(RX)和1(TX)。用于接收(RX)和发送(TX)TTL串口数据。这些引脚与ATmega8U2 USB转TTL串口芯片的相应引脚相连。1.2 1.2 ArduinoAr
24、duino Uno Uno简介简介3.外部中断:2和3。这些引脚可以配置成在低值、上升或下降沿或者数值变化时触发中断。详情请参照attachInterrupt()功能。4.PWM:3、5、6、9、10和11。为8位PWM输出提供analogWrite()功能。5.SPI:10(SS)、11(MOSI)、12(MISO)、13(SCK)。这些引脚支持利用SPI库进行SPI通信。1.2 1.2 ArduinoArduino Uno Uno简介简介5.LED:13。有1个内置式LED连至数字引脚13。在引脚为高值时,LED打开;引脚为低值时,LED关闭。Uno有6个模拟输入,编号为A0至A5,每个模
25、拟输入都提供10位的分辨率(即1024个不同的数值)。默认情况下,它们的电压为05V,虽然可以利用AREF引脚和analogReference()功能改变其范围的上限值。此外,某些引脚还具有特殊功能:6.TWI:A4或SDA引脚和A5或SCL引脚。支持通过线库实现TWI通信。电路板上还有另外2个引脚:1.2 1.2 ArduinoArduino Uno Uno简介简介7.AREF.模拟输入的参考电压。与analogReference()一起使用。8.Reset.降低线路值以复位微控制器。通常用于为盾板添加复位按钮。第2章 Arduino编程 目录2.1 Arduino2.1 Arduino开发
26、环境开发环境2.2 Arduino2.2 Arduino语言概述语言概述2.3 Arduino2.3 Arduino基本函数基本函数2.1 Arduino开发环境 2.1.1 IDE安装Arduino IDE 是 Arduino 的开放源代码的集成开发环境,其界面友好,语法简单,并能方便地下载程序,使得 Arduino 的程序开发变得非常便捷。作为一款开放源代码的软件,ArduinoIDE 也是由 Java、Processing、avr-gcc 等开放源码的软件写成。Arduino IDE 的另一个最大特点是跨平台的兼容性,其适用于 Windows、Max OS X 以及 Linux。2011
27、 年 11 月 30 日,Arduino官方正式发布了 Arduino1.0 版本,可以下载不同系统下的压缩包,也可以在 github 上下载源码重新编译自己的 IDE。到目前为止,Arduino IDE 已经更新到 1.8 版本,安装过程如下。2.1.1 IDE安装(1)从 Arduino 官网下载最新版本 IDE。选择适合自己计算机系统的安装包,这里以Windows 7 的 64 位系统安装过程为例。首先运行安装程序。2.1.1 IDE安装(2)安装选项,一般保持默认安装。2.1.1 IDE安装(3)选择安装位置。2.1 Arduino开发环境(4)安装过程。2.1.1 IDE安装(5)安
28、装完成。2.1.1 IDE安装(6)IDE的主界面。2.1.2 使用IDE使用 Arduino IDE,需要将 Arduino 开发板通过 USB 线连接到计算机。这样,计算机会为 Arduino 开发板安装驱动程序,并分配相应的 COM 端口,如 COM1、COM2 等。计算机和系统分配的 COM 端口是不一样的。在菜单栏中打开“工具”“端口”,进行端口设置,设置为计算机硬件管理中分配的端口;然后,在菜单栏打开“工具”“开发板”,选择 Arduino 开发板的类型,如 Uno、DUE、YUN 等各种上面介绍的开发板。这样计算机就可以与开发板进行通信了。2.1.2 使用IDEvoid setu
29、p()里面的代码在导通电源时会被执行一次,而 void loop()里面的代码会不断执行。由于在一般的 Arduino 开发板上,第 13 脚上都有一个 LED 灯,所以定义整形变量 led=13,用于函数的控制。另外,程序中用了一些函数,pinMode()是设置引脚的输入或者输出;delay()设置延迟的时间,单位为 ms;digitalWrite()是向 led 变量写入相关的值,使得13脚的 LED 灯的电平发生变化HIGH 或者 LOW。这样 LED 灯就会根据延迟的时间交替地亮灭。2.2 Arduino语言概述2.2.1 标识符标识符是用来标识源程序中某个对象的名字。这些对象可以是语
30、句、数字类型、函数、变量、常量和数量等。标识符长度不要超过32个字符,C 语言对于大小写字符敏感,所以在编写长程序的时候要注意大小写字符的区分。2.2.2 关键字C语言的关键字共有32个,根据关键字的作用,可将其分为数据类型关键字、控制语句 关键字、储存类型关键字和其他关键字等4类。1.数据类型关键字12个 char:声明字符型变量或函数。double:声明双精度变量或函数。enum:声明枚举类型。float:声明浮点型变量或函数。2.2.2 关键字 int:声明整型变量或函数。long:声明长整型变量或函数。short:声明短整型变量或函数。signed:声明有符号类型变量或函数。struc
31、t:声明结构体变量或函数。union:声明共用体(联合)数据类型。unsigned:声明无符号类型变量或函数。void:声明函数无返回值或无参数,声明无类型指针。2.2.2 关键字2.控制语句关键字12个 循环语句(5个):for,是一种循环语句;do,循环语句的循环体;while,循环语句的循环条件;break,跳出当前循环;continue结束当前循环,开始下一个循环。条件语句(3个):if,条件语句;else,条件语句否定分支(与 if 连用);goto,无条件跳转语句。开关语句(3个):switch用于开关语句;case开关语句分支;default,开关语句 中的“其他”分支。2.2.
32、2 关键字 语句(1个):return,子程序返回语句(可以带参数,也可以不带参数)3.3.储存类型关键字储存类型关键字4 4个个 auto:声明自动变量,一般不使用。extern:声明变量是在其他文件中声明(也可以看作是引用变量)。register:声明寄存器变量 static:声明静态变量。2.2.2 关键字4.4.其他关键字其他关键字4 4个个 const:声明只读变量。sizeof:计算机数据类型长度。typedef:用以给数据类型取别名。volatile:说明变量在程序执行中可被隐含地改变。2.2.3 运算符运算符运算符是告诉编译程序执行特定算术或逻辑操作的符号。C 语言的运算范围很
33、宽,把除了控制语句和输入输出以外几乎所有的基本操作都作为运算符处理。运算符主要分为三大类:算术运算符、关系运算符与逻辑运算符。除此之外,还有一些用于完成特殊任务的运算符。2.2.3 运算符运算符1.1.赋值运算符赋值运算符赋值语句的作用是把某个常量、变量或表达式的值赋给另一个变量。C 语言中,符号为“=”这里并不是等于的意思,只是赋值,等于用“=”表示。注意:赋值语句左边的变量在程序的其他地方必须声明。2.2.3 运算符运算符2.2.算术运算符算术运算符在 C 语言中,有两个单目和五个双目运算符,分别为:+正、-负、*乘法、/除法、%取模、+加法、-减法。3.3.逻辑运算符逻辑运算符逻辑运算符
34、是根据表达式的值来返回真值或是假值。其实,在 C 语言中没有所谓的真值 和假值,只是认为非 0 为真值,0 为假值。符号功能:&(逻辑与)|(逻辑或)、!(逻辑非)。2.2.3 运算符运算符4.4.关系运算符关系运算符关系运算符是对两个表达式进行比较,各关系返回一个真/假值。2.2 Arduino语言概述语言概述5.5.自增自减运算符自增自减运算符自增自减运算符是一类特殊的运算符,其中,自增运算符(+)和自减运算符(-)对 变量的操作结果是增加1和减少 1。6.6.复合赋值运算符复合赋值运算符2.2.3 运算符运算符7.7.条件运算符条件运算符条件运算符(:)是C语言中唯一的一个三目运算符。它
35、是对第一个表达式作真/假检测,然后根据结果返回另外两个表达式中的一个,语法格式如下:?:8.8.逗号运算符逗号运算符在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。2.2.4 语言控制语句语言控制语句控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。C语言有9种控制语句,可分为以下3类。1.1.条件判断语句条件判断语句C语言支持两种选择语句:if语句和switch语句。这些语句允许你在程序运行时并知道 其状态的情况下,控制程序的执行过程。首先看一下 if 语句的用法:if(condition)sta
36、tement1;else statement2;2.2.4 语言控制语句语言控制语句(1)if 语句 If 语句的执行过程如下:如果条件为真,就执行 if 的对象 statement1;否则,执行 else 的对象 statement2。任何时候两条语句都不可能同时执行。int a,b;if(ab)a=0;else b=0;2.2.4 语言控制语句语言控制语句(2)switch 语句C 语言又提供了一个专门用于处 理多分支结构的条件选择语句,称为 switch 语句,又称开关语句。使用 switch 语句可直接处 理多个分支(当然包括两个分支),其一般形式如下。2.2.4 语言控制语句语言控制
37、语句switch(表达式)case 常量表达式 1;语句 1;break;case 常量表达式 2;语句 2;break;case 常量表达式 n;语句 n;break;default:语句 n+1;break;2.2.4 语言控制语句语言控制语句2.2.循环执行语句循环执行语句 (1)while 语句while 语句实现“当型”循环,其一般格式如下。while(termination)body;当布尔表达式(termination)的值为 true 时,循环执行大括号中的语句,并且初始化部 分和迭代部分是任选的。2.2.4 语言控制语句语言控制语句(2)do-while 语句 do-whil
38、e 语句实现“直到型”循环,其一般格式如下。do body;while(termination);do-while 语句首先执行循环体,然后计算终止条件:若结果为 true,则循环执行大括号 中的语句,直到布尔表达式的结果为 false。2.2.4 语言控制语句语言控制语句(3)for 语句 for 语句也用来实现“当型”循环,其一般格式如下。for(initialization;termination;iteration)body;2.2.4 语言控制语句语言控制语句3.3.转向语句转向语句转向语句包括 break 语句、continue 语句、return 语句及 goto 语句。此类语句
39、尽量少用,因为这不利于结构化程序设计,滥用它会使程序流程无规律、可读性差。2.2.4 语言控制语句语言控制语句(1)break 语句 break 语句中断当前循环,和 label 一起使用,中断相关联的语句。一般格式如下。breaklabel;上述语句中,可选的 label 参数指定断点处语句的标签。2.2.4 语言控制语句语言控制语句(2)continue 语句 continue 语句是跳过循环体中剩余的语句而强制执行下一次循环,其作用为结束本次循 环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。格式如下。While(表达式 1)语句组 1 if(表达式 2)cont
40、inue;语句组 2 2.2.4 语言控制语句语言控制语句(3)return 语句 return 表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由 return 后面的参数指定。return 通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的,如果函 数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行得顺利与否(-1 和 0 就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。2.2.4 语言控制语句语言控制语句(4)goto 语句 goto 语句也称为无条件转移语句,其一般格式如下。goto 语句标号;其中,语句标号是按标识符规定书写
41、的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与 goto 语句配合使用。实例如下。label:i+;loop:while(x7);2.2.5 语法结构语法结构1.1.顺序结构顺序结构顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行。它的 执行顺序是自上而下,依次执行。2.2.5 语法结构语法结构2.2.选择结构选择结构按照给定的条件有选择地执行程序中的语句。(1)if 单分支结构 该结构的格式如下。if(表达式)语句 功能:判断表达式的值,若为 true(真)则执行语句;若为 false(假),则不执行语句。2.2.5 语法结构语法结构 表
42、达式可以是任意合法的 C+表达式,一般为逻辑表达式或关系表达式,当表达式 为赋值表达式时,可以含对变量的定义。实例如下。if(int i=3)语句/等价于 int i;if(i=3)语句 若表达式的值为数值,则 0 被视为假,一切非 0 被视为真。当表达式的表达式为真,要执行多条语句时,应将这些语句用花括号括起来以复合语 句的形式出现。2.2.5 语法结构语法结构 程序是将整个 if 控制结构看成一条语句处理的。该语句称为 if 语句,也称为条件语 句。语句可以是另一个 if 语句或其他控制语句(嵌套)2.2.5 语法结构语法结构(2)if 双分支结构 该结构的格式如下。if(表达式)语句 1
43、 else 语句 2 功能:判断表达式的值,若为 true(真)则执行语句 1;若为 false(假)则执行语句 If-false 语句。2.2.5 语法结构语法结构 语句 1 和语句 2 可以是另一个 if 语句或其他控制语句(嵌套)。此时 else 总是与它前 面最近且未配对的 if 配对。程序是将整个 if-false 控制结构看成一条语句处理的。else 是 if 语句中的子句,不能 作为独立的语句单独使用。可以用条件运算符“:”来实现简单的双分支结构。2.2.5 语法结构语法结构(3)if 多分支结构 该结构的格式如下。if(表达式 1)语句 1 else if(表达式 2)语句 2
44、 else if(表达式 3)语句 3else 语句 n2.2.5 语法结构语法结构 if 多分支结构实际上是一种规范化的 if 嵌套结构。在这种结构中,if 语句嵌套在 else 之后,即符合以下格式。if(表达式 1)语句 1 else if(表达式 2)语句 2 else if(表达式 3)语句 3 else else 语句 n 2.2.5 语法结构语法结构 从逻辑上看,各个表达式条件都应当是相互排斥的,任意时刻最多有一个条件得以满足,不应出现既满足这个条件又满足那个条件的情况。2.2.5 语法结构语法结构(4)switch 多分支结构 该结构的格式如下。switch(表达式)case
45、常量表达式 1:语句序列 1 case 常量表达式 2:语句序列 2 case 常量表达式 3:语句序列 3 case 常量表达式 4:语句序列 4 case 常量表达式 5:语句序列 5 case 常量表达式 6:语句序列 6.default:语句序列 n 2.2.5 语法结构语法结构 表达式和各个常量表达式的类型一般为整型、字符型、逻辑型和枚举型。各个常量表 达式的类型要与表达式的类型相同或相容,所有常量表达式的值必须互不相同。case 子句为若干个(包括 0 个),default 子句最多只能有一个。从语法上讲,default 子句可以放在任何一个 case 子句的前面,此时还是先判断各
46、个 case 常量表达式的值与表达式 值的匹配(相等)情况,如果所有常量表达式的值均不匹配,这才将 default 子句作为程序的 执行入口点。2.2.5 语法结构语法结构 语句序列由若干条单语句组成,这些单语句可以不写成复合语句的形式。必要时,case 语句标号后的语句序列可以省略不写。若语句序列中含有 break 语句,则执行到此就立即跳出 switch 语句体。当所有 case 子句和 default 子句都带有 break 子句时,它们出现的顺序可以任意。当需要针对表达式的不同取值范围进行不同处理时,使用 if 多分支结构比较方便,因为 switch 语句只能对相等关系进行测试,而 i
47、f 语句却可以用关系表达式对一个较大范围内 的值进行测试。2.2.5 语法结构语法结构3.3.循环结构循环结构(1)while 循环(当型循环)该结构的格式如下。while(表达式)语句 表达式就是给定的循环条件,语句构成循环体,在循环体中一般应用使循环趋于结束 的语句。先判断表达式,后执行语句。当一开始表达式的值就为 false 时,程序 1 次也不循环。While 语句一般用于不知道具体循环次数的情况。2.2.5 语法结构语法结构(2)do-while 循环(直到型循环)该结构的格式如下。do 语句 whlie(表达式);先执行语句,后判断表达式。程序至少要循环 1 次。do-while
48、与 while 循环的不同之处在于:do-while 循环的循环体在前,循环条件在后,因此 do-while 循环时在任何情况下都至少被执行一次;而 while 循环的循环条件在前,循环 体在后,当循环条件一开始就不成立时,循环体一次也不执行。这一点正是在构造循环结构 时决定使用 do-while 语句还是 while 语句的重要依据。2.2.5 语法结构语法结构(3)for 循环(次数循环)该结构的格式如下。for(表达式 1;表达式 2;表达式 3)语句表达式 1 为 for 循环的初始化部分,一般用来设置循环控制变量的初始值,当表达式 为一赋值表达式时,可包含对变量的定义;表达式 2 为
49、 for 循环的条件部分,是用来判定循 环是否继续进行的依据;表达式 3 为 for 循环的增量部分,一般用来修改循环控制变量的值。省略表达式 1 时应在 for 语句之前给循环变量赋初值;省略表达式 2 时可认为循环的 条件始终为真。2.2.5 语法结构语法结构4.跳转语句(1)break 语句(跳出语句)该语句的格式如下。break;跳转语句用在 switch 结构中,break 语句使执行流程跳出所在 switch 语句。用在循环结 构中,break 语句使执行流程无条件地跳出本层循环体。2.2.5 语法结构语法结构 break 语句经常用于使执行流程跳出死循环。若 break 语句位于
50、多重循环的内层循环体中,则只能跳出内层循环(本层循环),而 不能跳出其他外层循环。2.2.5 语法结构语法结构(2)continue 语句(继续语句)该语句的格式如下。continue;用于在循环结构中,结束本次循环,即跳过循环体中尚未执行的语句,接着 进行下一次循环判断。2.2.5 语法结构语法结构(3)goto 语句(转向语句)该语句有两种格式,具体如下。格式一 goto 语句标号;语句序列 语句标号:语句2.2.5 语法结构语法结构 格式二 语句标号:语句 语句序列 goto 语句标号;goto 语句强制中止执行 goto 语句之后的语句,无条件地跳转到语句标号对应的语句继续 执行2.3