单片机C程序设计2_第1页
单片机C程序设计2_第2页
单片机C程序设计2_第3页
单片机C程序设计2_第4页
单片机C程序设计2_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机单片机C程序设计程序设计 (C Programming for MCU)第二章第二章 C语言基础语言基础2本章内容n2.1 C语言字符集与标识符n2.2 常量与变量n2.3 基本数据类型n2.4 运算符与表达式n2.5 数据的输入输出2.1 C语言字符集与标识符3计算机语言的基本体系结构计算机语言的基本体系结构自然语言的基本体系结构自然语言的基本体系结构字符字符词汇词汇短语短语句子句子段落段落文章文章基本符号基本符号常量、变量、常量、变量、运算符等运算符等表达式表达式语句语句函数函数C C程序程序2.1.1 C语言字符集42626个个小写字母小写字母 abcdefghijklmnopqr

2、stuvwxyz 2626个个大写字母大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 1010个个阿拉伯数字阿拉伯数字 0 1 2 3 4 5 6 7 8 9 其他符号其他符号 + - * / = , . _ : ; ? | ! # % & () 空格空格 C语言语言基本字符基本字符2.1.2 C语言标识符5标识符标识符是一个字符序列,用来标识变量名、函数名是一个字符序列,用来标识变量名、函数名、数据类型等。、数据类型等。标识符分为三类:预定义标识符、关键字标识符和标识符分为三类:预定义标识符、关键字标识符和自定义标识符。自定义标识符。n预定预定义标识符:也叫保留标识符

3、,是系统预先定义义标识符:也叫保留标识符,是系统预先定义好,主要有库函数名好,主要有库函数名 (如(如main,printf,scanfmain,printf,scanf, , sin,abssin,abs等)、预编译命令(如等)、预编译命令(如definedefine、includeinclude)62.1.2 C语言标识符int autogotoiffloatstaticreturnelsecharexternbreakwhileshortregistercontinueforlongdounsignedswitchdoublecasestructdefaultunionvoidenumt

4、ypedefsizeofconstsignedn关键字标识符关键字标识符: 2.1.2 C语言标识符7n自定义标识符:自定义标识符:标识符标识符可以由大写字母、小写字母、下划线(可以由大写字母、小写字母、下划线(_ _)和)和数字数字0 09 9组成,组成,但必须是以大写字母、小写字母或下但必须是以大写字母、小写字母或下划线(划线(_ _)开头)开头。大小写敏感大小写敏感,标识符的大小写是有区别的。,标识符的大小写是有区别的。标识符长度:不同编译器都有自己的规定,标识符长度:不同编译器都有自己的规定,Turbo CTurbo C规定为规定为3232个字符,个字符,VCVC编译器为编译器为409

5、54095个字符。个字符。自定义标识符自定义标识符不能不能与与关键字关键字标识符标识符同名同名。2.1.2 标识符命名示例判断下面哪些是合法的标识符: MyFileSalary 94amountvoid94SalarySalary94$amountf3.5Num_of_Student82.2 变量与常量计算机高级语言中,数据有两种表现形式:在程序执行过程中可以改变的量。变量指在程序执行中不变的量。常量92.2.1 变量变量的定义 定义变量是用下面的格式语句进行定义的: ; 说明:(1) 变量在使用前必须进行定义。 (2) 在同一个程序块中,不能有两个相同的变量名。 (3) 变量名必须符合命名规

6、则。 变量的初始化程序中常需要对一些变量预先设置初值,这一过程称为初始化。可以在定义变量时同时使变量初始化,也可以在多个变量的定义语句中单独对某个变量初始化。例:int len=320; double pos=1.25;注意:一个未初始化的变量不是没有数值,而是取决于变量在系统中的存储形式,它可能是系统的缺省值或无效值。 102.2.2 常量常量:指在程序执行中不变的量。如25,-3.26,a,“hello”等整型常量 (1) 十进制整型常量:即十进制整数,如34、128等。(2)八进制整型常量:以0开头的数,由0至7的数字组成,如04、012等。(3)十六进制整型常量:以0 x或0X开头的数

7、,由0至9、A至F或a至f组成,如0 xFF,0 x16,0 x2C等。需要注意的是:n整型常量中的长整型(long)要以L或小写字母l作为结尾,如10L,32L等n整型常量中的无符号型(unsigned)要以U或u作为结尾,如10U,32U等。 112.2.2 常量实型常量 实型常量即以文字形式出现的实数,实数只允许使用十进制,它可以有两种表示形式:(1) 一般形式:由正负号、数字和小数点组成,必须有一个且仅有一个小数点。如0.0 0.123 .123 -123.0 0.123等。 (2) 指数形式:采用科学表示法,能表示出很大或很小的浮点数。 如:32.5 可表示为325E-1、0.325

8、E2n若浮点型常量是以F(或f)结尾的,则表示单精度类型(float),以L(或小写字母l)结尾的,表示长双精度类型(long double)。如 0.123F -0.123L 等n若一个浮点型常量没有任何说明,表示双精度类型(double)。 如0.123 -0.123等尾数尾数 e或或E 指数指数 1122.2.2 常量字符常量 字符常量是用单引号括起来的一个字符。Aa等n 换行换行 单引号单引号 ()r 回车回车 双引号双引号 ()t 水平水平tab 反斜杠反斜杠 ()v 垂直垂直tab0 空值空值b 退格退格ooo 三位八进制数三位八进制数f 进纸进纸xhh 两两位十六进制数位十六进制

9、数C C 转义字符转义字符132.2.2 常量h he el ll lo o00 因此,长度为n个字符的字符串常量,在内存中占用n+1个字节。注意事项:字符字符与与字符串字符串不等价。例如:不等价。例如:“A”A”与与AA,前者由两个字节组成,前者由两个字节组成( (字符字符AA与字符与字符0)0),而后者只有一个字节。,而后者只有一个字节。最短的字符串是最短的字符串是空字符串空字符串(“”)(“”),它仅由一个结尾符,它仅由一个结尾符00组成。组成。C C中,没有字符串类型,而是用中,没有字符串类型,而是用字符数组字符数组来处理字符串。来处理字符串。字符串常量字符串常量 字符串常量是用双引号

10、(定界符)括起来的一串字符,如“”、“A”、“12.42”、“hello”。C中字符串常量在内存中存储时用字符数组存放,系统将自动在其尾部追加一个0字符作为结束字符。142.2.2 常量布尔常量布尔常量 布尔型常量的取值只有两个:false(假)、true(真)符号常量符号常量 用#define定义符号常量。 用const定义的变量代替符号常量,即常变量。例:#default PI 3.14159 const double PI = 3.14159; 152.3 数据类型 指针类型指针类型 type* 空类型空类型 void 枚举类型枚举类型 enum 结构类型结构类型 struct 联合类型

11、联合类型 union 函数类型函数类型 数据数据类型类型整型整型 int short long 字符型字符型 char(属于属于1字节的整型字节的整型) 单精度浮点型单精度浮点型float实型实型 双精度浮点型双精度浮点型double 长双精度浮点型长双精度浮点型 long double布尔逻辑型布尔逻辑型 bool基本数基本数据类型据类型非基本非基本数据类型数据类型16 2.3.1 基本数据类型整型(int):用来存放整数,整数占用的字节数与机型有关,32位机上占用4个字节。字符型(char):用来保存字符,存储的是该字符的ASCII码,占用一个字节。例如字符A的ASCII码为65,字符a的

12、ASCII码为97。字符型数据从本质上说也是整数,可以是任何一个8位二进制整数。实型:单精度(float)和双精度型(double)都用来存放实数,两者表示的实数精度不同。 float类型是4字节的浮点数。double是8字节的浮点数,double类型是浮点数的缺省类型。逻辑型(bool):也称布尔型,其取值为true和false。布尔型在运算中可以和整型相互转化,false对应为0,true对应为1或非0。17基本数据类型除上述基本数据类型外,还有一些类型修饰符,它用来改变基本类型的意义。n修饰符有short(短型符) 、1ong(长型符)、signed(有符号)和unsigned(无符号)

13、。 nshort:只修饰int,short int可省略为shortnlong:修饰int和double, long int可省略为long,一般表示4个字节,修饰long double时,一般表示8字节。nunsigned和signed:能修饰char, short, int和long。18数据类型示例符符号号位位15个数据位个数据位2个字节个字节16个数据位个数据位2个字节个字节19C基本数据类型 类型名类型名type 说明说明长度长度 数据范围数据范围 bool布尔逻辑型布尔逻辑型 1 true (1) false(0) char字符型字符型 1 -128127 (0255) unsig

14、ned char无符号字符型无符号字符型 1 0255 signed char有符号字符型有符号字符型 1 -128127signed short int有符号短整型有符号短整型 2-3276832767unsigned short int无符号短整型无符号短整型 2065535signed int有符号整型有符号整型 4-21474836482147483647 unsigned int无符号整型无符号整型 4 04294967295 signed long int有符号长整型有符号长整型 4 -21474836482147483647 unsigned long int无符号长型型无符号长

15、型型 4 04294967295 float浮点型浮点型 4 -3.4*10e383.4*10e38 double双精度型双精度型 8 -1.7*10e3081.7*10e308long double长双精度型长双精度型8/ 10至少与至少与double类型范围相同类型范围相同212.3.2 类型转换nC语言类型转换通常是自动的语言类型转换通常是自动的- 隐式隐式(自动自动)类型转换类型转换1)字符与整数)字符与整数可以用整数的地方就可以用字符。可以用整数的地方就可以用字符。而整数转换成字符时,超出而整数转换成字符时,超出8位就将高位丢掉。位就将高位丢掉。2)浮点数与整数)浮点数与整数3)无符

16、号整数)无符号整数一般整数(一般整数(int)和无符号整数()和无符号整数(unsigned)混合使用,)混合使用,则简单整数转换成无符号整数。则简单整数转换成无符号整数。222.3.2 类型转换4)算术转换)算术转换如果一个运算符,有不同类型的运算对象,那么如果一个运算符,有不同类型的运算对象,那么“较低较低”类型会自动转换成类型会自动转换成“较高较高”类型。类型。此外,赋值号右边表达式的类型会自动转换为赋值号左边此外,赋值号右边表达式的类型会自动转换为赋值号左边变量类型变量类型。如,n+1.5结果将为double类型232.3.2 类型转换n强制类型转换(强制类型转换(cast)- 显式类

17、型转换显式类型转换()如:x = sqrt(double) n ); a=(int)b;2.4 运算符和表达式 1 算术运算符 算术运算符如下所示:+(正号运算符,如+4,+1.23等)-(负号运算符,如-4,-1.23等)*(乘法运算符,如6*8,1.4*3.56等)(除法运算符,如6/8,1.4/3.56等)%(模运算符或求余运算符,如40%11等)+(加法运算符,如6+8,1.4+3.56等)-(减法运算符,如6-8,1.4-3.56等) +(增1,如i+)-(减1,如i-) 2442.4 运算符和表达式 (1) 除法运算 两个整数相除,结果为整数,如7/5的结果为1,它是将小数部分去掉

18、,而不是四舍五入;若除数和被除数中有一个是浮点数,则进行浮点数除法,结果是浮点型。如7/5.0、7.0/5、7.0/5.0的结果都是1.4。(2) 求余运算 求余运算要求参与运算的两个操作数都是整型,结果是两个数相除的余数。例如40%5的结果是0,40%11的结果是7。要理解负值的求余运算,例如40%-11结果是7,-40%11结果是-7, -40%-11结果也是-7。 2552.4 运算符和表达式 (3) 优先级算术运算符算术运算符运算运算优先级别优先级别()()改变正常优先级1-,+,-负号、增1、减1 (单目运算符单目运算符)2*, /, %乘法、除法、求余(双目运算符双目运算符)3+,

19、 -加、减法(双目运算符双目运算符)4单目运算符只有一个操作数,双目运算符有两个操作数。如:i+; /1个操作数i a+b;/有a和b两个操作数2662.4 运算符和表达式 2 赋值运算符 = 例:a=a+1;n符合赋值运算符:+=(加赋值), -=(减赋值), *=(乘赋值), /=(除赋值), %=(取余赋值),&=(按位与赋值), =(按位异或赋值), |=(按位或赋值), =(按位右移赋值)。 例:a+=1; 等价于 a=a+1;n多个变量同时赋初值: 例:int a=3, b=3, c=3; 表示a,b,c都赋初值3,不能写成: int a=b=c=3; 2772.4运算符和

20、表达式3 数据类型转换n自动转换(隐式转换) 将数据类型从低到高进行转换。 例如:2*1.25 2*1.25的运算,将2和1.25都转换成double型,结果为double型的2.5。n强制转换(显示转换) 强制类型有下列两种格式:()整型整型(int)无符号整型无符号整型(unsigned)长整型长整型(long)无符号长整无符号长整型型(unsigned long)双精度浮点双精度浮点型型(double)短整型短整型,字符字符型型(short, char)单精度浮点单精度浮点型型(float)类型类型转换的顺序转换的顺序2882.3运算符和表达式4 关系运算符 n是比较两个操作数是否符合给

21、定的条件。若符合条件,则关系表达式的值为“真”,否则为“假”。n由于关系运算需要两个操作数,所以关系运算符都是双目运算符。n提供了6种关系运算符:(小于),(大于),=(大于等于),= =(相等于), ! =(不等于)其中,前4种的优先级相同且高于后面的两种。例如:a = b c 等效于 a = ( b c )2992.3运算符和表达式5 逻辑运算符 n提供了3种逻辑运算符: &逻辑与(双目):指两个操作数都是“真”时,结果为“真”,否则为“假”。 |逻辑或(双目):指两个操作数中有一个是“真”时,结果为“真”,只有它们都为“假”时,结果才为“假”。 ! 逻辑非(单目):指将“真”变“

22、假”,“假”变“真”。n“逻辑非”、“逻辑与”和“逻辑或”的优先级依次从高到低,且“逻辑非”的优先级还比算术运算符和关系运算符高,而“逻辑与”和“逻辑或”的优先级却比关系运算符要低。n例如: 0 | 8 4 - !0表达式的运算过程是这样的:(1) 进行“!0”的运算,结果为1(“真”)。(2) 进行“8 4-1”的运算,即“8 3”,结果为0(“假”)。(3) 进行“0|0” 的运算,结果为0(“假”)。表达式的值为0。 302.3运算符和表达式6 位运算符 是对操作数按其在计算机内表示的二制数逐位地进行逻辑运算或移位运算,参与运算的操作数只能是整型常量或变量。提供了六种位运算符: (按位求

23、反,单目运算符):将一个二进制数的每一位求反,即0变成1,1变成0。 (右移,双目运算符):将左操作数的二进制值向右移动指定的位数,右移后,移出的低位舍弃。无符号数高位补0;有符号数高位补符号位。& (按位与,双目运算符):将两个操作数对应的二进制位进行逻辑与操作。 (按位异或,双目运算符):将两个操作数对应的二进制位进行异或操作。 | (按位或,双目运算符):将两个操作数对应的二进制位进行逻辑或操作。312.3运算符和表达式7 三目运算符 C中唯一的三目运算符是条件运算符,其格式如下: ? :“条件表达式”是C中可以产生“真”和“假”结果的任何表达式,如果条件表达式的结果为“真”,则

24、执行表达式1,否则执行表达式2。 例如:num = (a b) ? 10 : 8;注意:只有在表达式2后面才能出现分号结束符,“表达式1”和“表达式2”中都不能有分号。 322.3运算符和表达式8 逗号运算符 逗号运算符是优先级最低的运算符,它可以使多个表达式放在一行上,从而大大简化了程序。在计算时,C将从左至右逐个计算每个表达式,最终整个表达式的结果是最后计算的那个表达式的类型和值。例如:j = ( i = 12 , i + 8); /J=20d = (a = 1, b = a + 2, c = b + 3);/d=6332.3运算符和表达式9 sizeof 运算符 sizeof:是返回操作

25、数所占的内存空间大小(字节数),具有两种格式:sizeof()sizeof()例如:sizeof(“Hello”)/ 计算字符串常量“Hello”的实际长度(字符个数),结果为6sizeof(int)/ 计算整型int所占内存的字节数说明:由于同一类型的操作数在不同的计算机中占用的存储字节数可能不同,因此sizeof的结果有可能不一样。例如sizeof(int)的值可能是4,也可能是2。 34352.3运算符和表达式增(减)量运算符:+,-n依据运算符与运算对象间的位置,分为前置和后置运算l前置运算是先进行增减量,再取其值。l后置运算是先取其值,再进行增减量运算。如:n = 5;n = 5;x

26、 = +n;x = n+;结果: ? 结果:?x: 6, n: 6x: 5, n: 6像像+,-这类只要求一个运算对象的运算符又称为单目运算符(这类只要求一个运算对象的运算符又称为单目运算符(unary operators)。)。+,-运算符在有些书中称为自增(减)运算符。运算符在有些书中称为自增(减)运算符。例1_1给出下列程序的输出结果#include main( )int a, b, c;a = b = c = 0;a = +b + +c;printf(“%d %d %dn”,a, b, c);a = b+ + c+;printf(“%d %d %dn”,a, b, c);a = +b

27、+ c+;printf(“%d %d %dn”,a, b, c);a = b- + -c;printf(“%d %d %dn”,a, b, c);a = +c + c;printf(“%d %d %dn”,a, b, c); /* 2 1 1 */* 2 2 2 */* 5 3 3 */* 5 2 2 */* 不确定,取决于机器实现不确定,取决于机器实现 */2.3运算符和表达式3637运算符优先级及结合律优先级 运算符 结合律 初等量运算符 初等量运算符 1 ( ) . - 单目运算符 2 - ! + - * ( 类型名) sizeof 右结合 单目运算符 双目运算符 3 * / % 算术运算符 4 + - 5 移位运算符 6 = 关系运算符 7 = != 8 & 按位运算符 9 10 | 11 & 逻辑运算符 12 | 三目运算符 13 ? : 右结合 赋值运算符 14 *= /= %= += -= = &= = |= 右结合 逗号运算符 15 , 38运算符优先级及结合律(续)n可以使用()运算符来改变表达式中运算符的计算次序。如:(x+y) / 12if( (x = n) 0)while( (c = getchar() ) != EOF)392.3运算符和表达式n在

温馨提示

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

评论

0/150

提交评论