C语言第二章程序设计基础.ppt_第1页
C语言第二章程序设计基础.ppt_第2页
C语言第二章程序设计基础.ppt_第3页
C语言第二章程序设计基础.ppt_第4页
C语言第二章程序设计基础.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

第二章 C语言程序设计基础,C语言程序设计学习重点 标识符 关键字 数据类型 表达式 基本语句 函数 存储类型 预处理,程序设计语言介绍,从机器语言开始,程序设计语言经历了一个发展过程,如:机器语言、汇编语言、高级语言(C、C+等)。 机器语言是由二进制代码“0”和“1”组成的,能够被硬件(计算机、单片机、DSP等)直接识别和执行的语言。最终烧写到硬件的就是机器语言。用机器语言编写程序难学、难记、难懂、难用,很少使用。 汇编语言是一种符号化语言,它使用助记符代替二进制指令。汇 编语言比机器语言易学易懂,它的优点是效率高、占用空间少、实时性高,但由于依赖具体硬件,因此可移植性差,编写大程序 时调试复杂。 C语言是一门高级语言,易学易用。它支持自上而下的结构化程序设计,可大大缩短应用程序的开发周期,使软件的可读性增加, 编写效率明显提高,可移植性好。因此C语言已成为目前最流行的 单片机、DSP开发语言。,C、汇编和机器语言三者之间的联系,如果您想了解硬件的具体结构和工作原理,那么您可以选择汇编语言。 如果您想快速入门,开发大的系统,那么 建议您学习C语言编程。,怎样选择?,C语言,汇编语言,机器语言,编译,汇编,一个简单的C的程序,void main(void) char P0,LED;/P0是端口0,LED是发光二极管输出 P0=0x24; LED=0x35; While(1); ,C语言程序设计要点,标识符 关键字 数据类型 表达式 基本语句 函数 存储类型 预处理,标识符,标识符用来定义常量、变量、函数、标号以及用户定义对象的名 称。 说明: 标识符由数字和字母组成,但第一个字符必须是字母或下划线。 C语言中大、小写字母被认为是不同符号。例如:at、AT、At 就是 三种不同的标识符。 标识符命名的良好习惯见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选 择能表示数据含义的英文单词(或缩写)作变量名。 例如:name(姓名)、sex(性别)、age(年龄)。,关键字,关键字是一种已经被编译器定义过的标识符,具有特定的含义,因 此也称作保留字,意义是不可以再被用户定义。 下表列出了ANSI C定义的标准关键字。,关键字,数据类型,F2812支持的基本数据类型,在CCS中将常用的数据类型重新定义如下:,Typedef int int16; Typedef long int32; Typedef unsigned int Uint16 Typedef unsigned long Uint32; Typedef float float32; Typedef long double float64;,数组,数组是一些同类型数据的有序结合,它们存储在内存的一个连续 存储区域。 定义:数据类型 数组名常量表达式; 引用:数组名下标 说明: 定义中的数据类型指的是数组元素的数据类型,它们可以是基本 数据类型,也可以是构造类型。 常量表达式表示的是数组容量,也叫数组长度。 数组名可以是任何C语言的合法标识符,相当于数组的首地址。 占用空间:所有成员占用空间之和。 注意:在硬件编程中很少使用多维数组,所以此处没有讲述。,举例,初始化: 在定义数组时对数组元素赋以初值,如下: int age4=31,29,32,15; 如果想使一个数组全部元素为0,可以写成: int age4=0; 引用:C语言规定只能逐个引用数组元素而不能引用整个数组。 例如将数组age4=31,29,32,15的全部元素之和赋给a,代码如下: int age4=31,29,32,15; int a; a= age0+age1+age2+age3;,结构体,结构体是将不同类型的数据按一定顺序存放在一起的数据结构。 定义 在声明类型的时候同时定义变量,形式为: struct 结构体名 成员表列 变量名表列; 直接定义结构体类型变量,形式为: struct 成员表列 变量名表列; 引用:结构体变量名.成员名,结构体,说明: 类型与变量不能混淆,只能对变量赋值。 结构体的成员可单独使用,相当于普通变量。 成员本身可以是一个结构体。 占用空间:所有成员占用空间之和。,举例,定义一个结构体名为student的结构体,有两个变量为student1和 student2,对变量student1的成员no赋值25,并将student1的成员no 赋值给student2的成员no,如下: struct student int no; /*学号*/ char name8;/*姓名*/ char sex; /*性别*/ int age; /*年龄*/ float score; /*C成绩*/ student1, student2; student1.no=25; student2.no= Student1.no;,位域型,位域是这样一种数据结构,它定义每个元素(成员)的二进制位 数,以bit为操作对象,这在对单片机外部设备的管理方面有广泛 应用。 位域定义的一般形式为: struct 位域结构名 数据类型 成员1:长度 1; 数据类型 成员n:长度 n; 变量名表列; 引用:位域结构变量名.成员名,位域型,说明: 其中“数据类型”为位域结构的成员的数据类型,通常为unsignedchar和unsigned int类型; 成员1成员n为位域结构的成员名,为用户定义的标识符; 冒号后面的“长度”表示相应成员的二进制位数; 不是每个位域类型的成员都需要命名,但要有域长,从而可以跳 过这些位; 位域变量被定义后,按照定义的顺序,系统为其在内存开辟存储 空间,在一个char或int的各位中逐个存放,如果小于一个字节,也 将占用一个字节。,举例,struct unsigned char P1OUT_0 : 1; unsigned char P1OUT_1 : 1; unsigned char P1OUT_2 : 1; unsigned char P1OUT_3 : 1; unsigned char P1OUT_4 : 1; unsigned char P1OUT_5 : 1; unsigned char P1OUT_6 : 1; unsigned char P1OUT_7 : 1; P1OUT_bit; P1OUT_bit. P1OUT_0 =1;,共用体,共用体是将不同类型的数据都存放在同一起始地址的内存单元 中, 共用一段内存以节省内存单元。 定义: union 共用体名 数据类型 成员1:长度 1; 数据类型 成员n:长度 n; 变量名表列; union 数据类型 成员1:长度 1; 数据类型 成员n:长度 n; 变量名表列;,共用体,引用:共用体变量名.成员名 说明: 共用体变量中可以包含若干成员及若干种类型,但共用体成员不 能同时使用。 在每一时刻,只能引用一个成员。共用体变量中起 作用的成员值是最后一次存储的成员值。 共用体变量所有成员共用同一段内存单元,共用体变量和它的各 个成员具有相同的地址。后来存放的共用体成员值将覆盖之前存 放的共用体成员值,故只能使用最后一次存储的共用体成员值。 不能对共用体变量进行初始化和赋值,也不能通过引用共用体变 量名来得到某成员的值。 共用体变量不能作函数参数,函数的返回值也不能是共用体类 型。 占用空间:最长的成员的长度。,枚举,枚举就是列举一个变量所有的取值。实际是用符号来表示若干个可取 的整型值, 它是整型的一个子集。 定义: enum 枚举型名枚举常量1,枚举常量2枚举常量n 变量名表列; enum 枚举型名枚举常量1,枚举常量2枚举常量n; enum 枚举型名 变量名表列; 引用:变量名,举例,定义: Enum weekday sun, mon, tue, wed, thu, fri, sat day; 引用: Day=sun;,指针型,指针变量:一种特殊的变量,它在内存中保存的不是一般的数 值,而是另一个变量的地址。 间接存取方式:通过指针来实现数据访问的方法。 定义: 数据类型 *指针变量名; 取地址运算符“&”,引用形式: &变量。 取内容运算符“*”,引用形式:*指针变量。,举例,int data5=0; int *pointer=data; char i; int test; for(i=0;i5;i+) *pointer=i; pointer+; ,常量与变量,常量 定义:指在运行过程中其值始终不可改变的量,也就是直接使用 符号(文字)表示的值。如12、3.5、A等。 分类:整型常量、实型常量、字符常量、字符串常量、布尔常 量。 举例:const Uint16 x; 形式一 #define SCI_IO 0x0030 ; 形式二 变量:指在运行过程中其值可以改变的量,变量是需要用名字来 标识的。,表达式,运算符:又称操作符,是一个符号,它指示在一个或多个操作数上 完成某种运算操作或动作。 算术运算符:+、*、/、%、+、 ; 关系运算符:、=; 逻辑运算符:!、&、| |; 位运算符:、|、&; 赋值运算符:=、+=、=、*=、/=、%=; 条件运算符:?:; 逗号运算符:,; 指针运算符:*、&; 求字节数运算符:sizeof; 强制类型转换运算符:(类型); 其它运算符; 、-、( )、 等。 操作数:是运算符的操作对象, 可以是常量、变量、函数与表达式。,算术运算符,+、-(减法/取负)、*、/、%(求余数)、+、 。 说明: 两个整数相除,其商为整数,小数部分被舍弃。例如,5 / 2 = 2。 余数运算要求两侧的操作数均为整型数据,否则出错。,关系运算符,关系运算符用于判别两个值之间的关系,判别的结果只有真和假两 种结果。判别结果为真,则表示为1,判别结果为假则表示为0。 关系运算符有以下几种: 、=。 说明:关系运算有、 =, 、 =的优 先级相同, =、 !=的优先级相同, 前者的优先级高于后者。,逻辑运算符,!、&、| |。 说明: 逻辑运算符的结果为逻辑量,不同于位运算。 &和是一种短路运算。所谓短路运算,是指在计算的过程 中,只要表达式的值能确定,便不再计算下去。逻辑与运算 时,计算到某个操作数为假,可以确定整个表达式的值为假 时,剩余的表达式部分便不再计算。逻辑或运算时,计算到某 个操作数为真,可以确定整个表达式的值为真时,剩余的表达 式部分便不再计算。,位运算符,、|、&。 说明: 按位取反运算用来对一个二进制数按位取反,即0位变1,1位变0。 按位与运算的规则是操作数的对应位为1,则该位的运算结果为1, 否则为0。 按位或运算的规则是操作数的对应位都为 0, 则该位的运算结果为 0,否则为 1。 按位异或运算的规则是操作数的对应位相同, 则该位的运算结果为 0,否则为 1。,赋值运算符,赋值运算符为“=”,作用是将右边表达式的值赋给等号左边的变 量。如:i=3。 复合赋值运算符:在基本赋值运算符“=”之前加上任一双目算术运 算符及位运算符可构成复合赋值运算符, 又称带运算的赋值运算 符。 一般形式: 变量=表达式 等价于: 变量=变量表达式 说明:代表任一双目算术运算符或位运算符。 例如: char i; i=3;,条件运算符,条件运算是三目运算, 有三个操作数, 一般形式如下: 表达式 1? 表达式 2: 表达式 3 说明: 表达式1必须为逻辑表达式,是条件运算的条件。如表达式1为 真,则计算表达式2,并以此作为整个表达式的值;如表达式1为 假,则计算表达式3,并以此作为整个表达式的值。 举例: ab?a:b表示若a大于b,则表达式的值为a;若a小于b,则表 达式的值为b。实际上是求a、b的最大值。,基本语句,条件语句 开关语句 循环语句,if语句,单分支if语句: 格式: if (条件表达式) 语句; 双分支if语句: 格式: if (条件表达式) 语句1 ; else 语句2 ; 多分支if语句: 格式:if (条件表达式1)语句1; else if(条件表达式2)语句2; else if(条件表达式n)语句n; else 语句n+1;,switch语句,switch(表达式) case 常量表达式1:语句组;break; case 常量表达式2:语句组;break; case 常量表达式:语句组;break; default:语句组;break; ,switch语句,执行流程: (1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值 相同时,就执行该case后面的语句;当执行到break语句时,跳出 switch语句,转向执行switch语句的下一条。 (2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的 值匹配,则执行default 后面的语句(组)。然后,再执行switch语 句的下一条。 说明: 每个case后面“常量表达式”的值,必须各不相同,否则会出现相互 矛盾的现象。 case后面的常量表达式仅起语句标号作用,并不进行条件判断。系 统一旦找到入口标号,就从此标号开始执行,不再进行标号判断, 所以必须加上break语句,以便结束switch语句。,循环语句,while循环语句 格式: while(表达式) 语句; do-while循环语句 格式:do 语句 while (表达式); for循环语句 格式: for (循环变量赋初值;循环条件;循环变量增值) 语句 ;,跳转语句,goto 格式: goto 语句标号; return 格式: return(表达式); break 格式: break; continue 格式:continue。,break和continue语句,说明: break语句只能用于switch结构或循环结构,如果在程序中有下列 语句: if () break; 则此时的if语句一定位于循环体中或switch结构中, break语句跳出 的也不是if语句,而是跳出包含此if语句的循环结构或switch结构。 continue语句的作用是结束本次循环,即跳过循环体中位于continue 后面的语句而立即开始下一轮循环判定:对于while和do-while来 讲,这意味着立即执行条件测试部分,而对于for语句来讲,则意 味着立即求解循环条件表达式。,函数,从用户角度来看,有两种函数:标准库函数和用户自定义函数。标 准库函数是编译器提供的,不需要用户定义。可以直接调用。而用 户自定义函数用户根据自己需要编写的能实现特定功能的函数,需 要先进行定义才能调用。 函数定义的一般形式为: 函数类型 函数名(形式参数表) 局部变量定义 函数体语句 返回值 函数调用的一般形式为:函数名(实际参数表),函数,说明: 函数的参数传递分为值传递和地址传递。当传递参数大于3个时, 建议用地址传递; 如果函数没有返回值或者形式参数,建议用void避免错误。如定义 函数void test(void)。 举例 定义:int sum(int a,int b) int temp; temp=a+b; return(temp); 调用:sun(3,7),main函数,main函数是一个比较特殊的函数。每个单片机C程序都必须有一个 名为main的函数,程序从这里开始执行。 main函数另一个独特的属性是,它有两种正式的原型且经常会使 用一些其它形式。两种标准型如下: int main (void); int main (int arge,char *argv); 整型返回值的作用是向系统返回一个状态码,一般应用在复杂程 序之中,单一程序中一般采用如下结构: void main (void) 局部变量定义 ; 函数体语句; ,存储类型变量,变量和函数都有其有效区域,称为作用域。程序如果使用范围之外 的变量和函数,则编译器会报错。 变量 局部变量:在函数体内部定义的变量,它只在函数内有效,退出函 数时所分配的内存被释放; 全局变量:在函数之外定义的变量,在程序开始执行的时候就被分 配了内存,一直保持到程序结束,可以被任何模块调用。 外部变量:在其它文件中定义但在本文件中使用的变量,用extern标识。 静态变量:寿命相当于全局变量,但只允许在定义的函数内使用的 变量。静态变量在退出定义的函数时,其值仍然保留。 变量的声明形式:作用域类型 数据类型 变量名;,存储类型变量,存储类型函数,函数的存储类型有static和

温馨提示

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

评论

0/150

提交评论