




免费预览已结束,剩余117页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,单片机C语言应用技术与实践讲课稿,项目3单片机C语言基础,知识目标:1掌握单片机C语言的数据类型、标识符和关键字、常量、函数结构和数组、函数、指针、文件、结构体类型变量、结构体数组等的使用。2.掌握单片机C语言的运算符和表达式,顺序、选择、循环的流程控制语句。3能够使用C语言进行应用程序设计。能力目标:1.通过本课程的学习,掌握C语言的基本语法、程序设计基本概念和基本方法;2.能运用所学的知识和技能对一般问题进行分析和程序设计,编制出高效的C语言应用程序。,对于单片机应用技术而言,一要学习系统硬件设计,二要学习编程语言。对于MCS-51单片机来说,其编程语言常用的有2种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,我们选择了C语言来学习单片机的软件设计。,项目3单片机C语言基础,一、单片机C语言概述,任务1C51程序组成的识读,二、C51的数据结构为支持8051系列硬件结构,加入一些扩展,包括数据类型、存储器类型、存储模式、指针及函数,其中掌握理解数据类型是很关键的。1、C51的数据类型在标准C语言中基本的数据类型为char、int、short、long、float和double,而在C51编译器中int和short相同,float和double相同,这里就不列出说明了。它们的具体定义如表3-1所示。,任务1C51程序组成的识读,任务1C51程序组成的识读,1char字符类型char类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。分无符号字符类型unsignedchar和有符号字符类型signedchar,默认值为signedchar类型。unsignedchar类型用字节中所有的位来表示数值,所可以表达的数值范围是0255。signedchar类型用字节中最高位字节表示数据的符号,0表示正数,1表示负数,负数用补码表示。所能表示的数值范围是-128+127。unsignedchar常用于处理ASCII字符或用于处理小于或等于255的整型数。注意:正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加1。,任务1C51程序组成的识读,2int整型int整型长度为两个字节,用于存放一个双字节数据。分有符号int整型数signedint和无符号整型数unsignedint,默认值为signedint类型。signedint表示的数值范围是-32768+32767,字节中最高位表示数据的符号,0表示正数,1表示负数。unsignedint表示的数值范围是065535。,任务1C51程序组成的识读,3long长整型long长整型长度为四个字节,用于存放一个四字节数据。分有符号long长整型signedlong和无符号长整型unsignedlong,默认值为signedlong类型。signedint表示的数值范围是-2147483648+2147483647,字节中最高位表示数据的符号,0表示正数,1表示负数。unsignedlong表示的数值范围是04294967295。,任务1C51程序组成的识读,4float浮点型float浮点型在十进制中具有7位有效数字,是符合IEEE754标准的单精度浮点型数据,占用四个字节。5*指针型指针型本身就是一个变量,在这个变量中存放的指向另一个数据的地址。这个指针变量要占据一定的内存单元,对不同的处理器长度也不尽相同,在C51中它的长度一般为13个字节。,任务1C51程序组成的识读,6bit位标量(位变量声明,定义一位位变量的时候使用)bit位标量是C51编译器的一种扩充数据类型,它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,是0和1,可寻址位地址低128字节中的20H2FH(16个字节),高128字节中特殊功能寄存器SFR中可位寻址11个。格式:bitflag=1;7sfr特殊功能寄存器(定义内部21个8位的特殊功能寄存器)sfr也是一种扩充数据类型,占用一个内存单元,值域为0255。利用它可以访问51单片机内部的所有特殊功能寄存器。(在头文件中已经定义好)格式:sfrP1=0 x90;这一句定P1为P1端口在片内的寄存器。Sfr变量名=某个sfr地址;,任务1C51程序组成的识读,8sfr1616位特殊功能寄存器sfr16占用两个内存单元,值域为065535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器,如定时器T0和T1。9sbit可位寻址位(定义存储在可位寻址的SFR中的位变量)sbit同“位“是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。比如定义:sfrP1=0 x90;/因P1端口的寄存器是可位寻址的,所以可以定义sbitP1_1=P11;/P1_1为P1中的P1.1引脚同样,用sbitP1_1=0 x91;可以定义P1.1的地址,任务1C51程序组成的识读,注意:标识符由字符串、数字和下划线等组成,注意的是第一个字符必须是字母或下划线,如“1Timer”是错误的,编译时便会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。在C51编译器中,只支持标识符的前32位为有效标识。关键字则是编程语言保留的特殊标识符,其具有固定名称和含义。在程序编写中不允许标识符与关键字相同。,任务1C51程序组成的识读,在KeiluVision2中的关键字除了有ANSIC标准的32个关键字外,还根据51单片机的特点扩展了相关的关键字。其实在KEILuVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,默认颜色为天蓝色。标准和扩展的关键字如表3-2所示,任务1C51程序组成的识读,任务1C51程序组成的识读,任务1C51程序组成的识读,三、C51中的常量和变量(一)、C51中的常量所谓常量是指在程序运行过程中不能改变的量。常量的数据类型分为整型、浮点型、字符型、字符串型和位标量。1整型常量整型常量可以用十进制表示,如456,0,78等,也可以用十六进制表示,不过要以0 x开头如0 x45,0 x4C等。长整型就在数字后面加字母L,如208L,034L,0 xF340等。,任务1C51程序组成的识读,2浮点型常量浮点型常量可分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,3345.345,0.0等,整数或小数部分为0,可以省略但必须有小数点。指数表示形式为“数字.数字e数字”,中的内容为可选项,其中内容根据具体情况可有可无,但其余部分必须有,如125e3,7e9,3.0e3。3字符型常量是单引号内的字符,如a,d等,不可以显示的控制字符,可以在该字符前面加一个反斜杠组成专用转义字符。,任务1C51程序组成的识读,4符串型常量由双引号内的字符组成,如“test,OK等。当引号内的没有字符时,为空字符串。在使用特殊字符时同样要使用转义字符如双引号。在C中字符串常量是做为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上o转义字符以作为该字符串的结束符。,任务1C51程序组成的识读,5位标量位标量的值是一个二进制。常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有以下几种:#difineFalse0 x0;/用预定义语句可以定义常量#difineTrue0 x1;/这里定义False为0,True为1,即在程序中用到False编译时自动用0替换,True替换为1,任务1C51程序组成的识读,unsignedintcodea=100;/这一句用code把a定义在程序存储器中并赋值constunsignedintc=100;/用const定义c为无符号int常量并赋值以上两句它们的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的,所以如果在这两句后面用了类似a=110,a+这样的赋值语句,编译时将会出错。,任务1C51程序组成的识读,(二)、C51中的变量所谓变量,就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式:存储种类数据类型存储器类型变量名表在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto)、外部(extern)、静态(static)和寄存器(register),缺省类型为自动(auto)。,任务1C51程序组成的识读,说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。下表中是KeiluVision2所能认别的存储器类型。注意的是在AT89S51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。,任务1C51程序组成的识读,任务1C51程序组成的识读,如果省略存储器类型,系统则会按编译模式SMALL、COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的80c51存储区范围,然后把最常用的命令(如循环计数器、队列索引)放在内部数据区可以显著的提高系统性能。需要指出的就是变量的存储种类与存储器类型是完全无关的。SMALL存储模式把所有函数变量和局部数据段放在80c51系统的内部数据存储区这使访问数据非常快,但SMALL存储模式的地址空间受限。在写小型的应用程序时,变量和数据放在data内部数据存储器中是很好的因为访问速度快,但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。COMPACT存储模式中所有的函数和程序变量和局部数据段定位在80c51系统的外部数据存储区。外部数据存储区可有最多256字节(一页)。LARGE存储模式所有函数和过程的变量和局部数据段都定位在80c51系统的外部数据区外部数据区最多可有64KB,这要用数据指针访问数据。,任务1C51程序组成的识读,(三)、数组变量所谓数组就是指具有相同数据类型的变量集,并拥有共同的名字。数组中的每个特定元素都使用下标来访问。数组由一段连续的存贮地址构成,最低的地址对应于第一个数组元素,最高的地址对应最后一个数组元素。数组可以是一维的、也可以是多维的。,任务1C51程序组成的识读,1、一维数组一维数组的说明格式是:类型变量名长度;类型是指数据类型,即每一个数组元素的数据类型,包括整数型、浮点型、字符型、指针型以及结构和联合。例如:inta16;unsignedlonga20;char*s5;char*f;,任务1C51程序组成的识读,说明:数组都是以0作为第一个元素的下标,因此,当说明一个inta16的整型数组时,表明该数组有16个元素,a0a15,一个元素为一个整型变量。大多数字符串用一维数组表示。数组元素的多少表示字符串长度,数组名表示字符串中第一个字符的地址。假如在语句charstr8的数组中存入hello字符串,则str0存放的是字母h的ASCII码值,以此类推,str4存入的是字母o的ASCII码值,str5则应存放字符串终止符0。,任务1C51程序组成的识读,C语言对数组不作边界检查。例如用下面语句说明两个数组charstr14,str25;当赋给str1一个字符串welcome时,只有welc被赋给,0将会自动的赋给str2,这点应特别注意。,任务1C51程序组成的识读,2.、多维数组多维数组的一般说明格式是:类型数组名第n维长度第n-1维长度.第1维长度;例如:intm32;/*定义一个整数型的二维数组*/charc223;/*定义一个字符型的三维数组*/数组m32共有32=6个元素,顺序为:,任务1C51程序组成的识读,m00,m01,m10,m11,m20,m21;数组c223共有223=12个元素,顺序为:c000,c001,c002,c010,c011,c012,c100,c101,c102,c110,c111,c112,数组占用的内存空间(即字节数)的计算式为:字节数=第1维长度第2维长度.第n维长度该数组数据类型占用的字节数,任务1C51程序组成的识读,3、变量的初始化变量的初始化是指变量在被说明的同时赋给一个初值。C语言中外部变量和静态全程变量在程序开始处被初始化,局部变量包括静态局部变量是在进入定义它们的函数或复合语句时才作初始化。所有全程变量在没有明确的初始化时将被自动清零,而局部变量和寄存器变量在未赋值前其值是不确定的。,任务1C51程序组成的识读,对于外部变量和静态变量,初值必须是常数表达式,而自动变量和寄存器变量可以是任意的表达式,这个表达式可以包括常数和前面说明过的变量和函数。(1)单个变量的初始化例如:floatf0,f1=0.2;/*定义全程变量,在初始化时f0被清零,f1被赋0.2*/main()staticinti=10,j;/*定义静态局部变量,初始化时i被赋10,j不确定*/intk=i*5;/*定义局部变量,初始化时k被赋10*5=50*/charc=y;/*定义字符型指什变量并初始化*/,(2)数组变量的初始化例如:main()intp23=2,-9,0,8,2,-5;/*定义数组p并初始化*/intm24=27,-5,19,3,1,8,-14,-2;/*定义数组m并初始化*/char*f=A,B,C;/*定义数组f并初始化*/.,任务1C51程序组成的识读,从上例可以看出,数组进行初始化有下述规则:数组的每一行初始化赋值用并用,分开,总的再加一对括起来,最后以;表示结束。多维数组存储是连续的,因此可以用一维数组初始化的办法来初始化多维数组。例如:intx23=1,2,3,4,5,6;/*用一维数组来初始化二维数组*/对数组初始化时,如果初值表中的数据个数比数组元素少,则不足的数组元素用0来填补。,任务1C51程序组成的识读,对指针型变量数组可以不规定维数,在初始化赋值时,数组维数从0开始被连续赋值。例如:charf=a,b,c;初始化时给3个字符指针赋值,即:f0=a,f1=b,f2=c。(3)指针型变量的初始化例如:main()int*i=7899;/*定义整型数指针变量并初始化*/float*f=3.1415926;/*定义浮点数指针变量并初始化*/char*s=Good;/*定义字符型指针变量并初始化*/,任务1C51程序组成的识读,4、变量的赋值变量赋值是给已说明的变量赋给一个特定值。(1)单个变量的赋值整型变量和浮点变量赋值格式:变量名=表达式;例如:main()inta,m;/*定义局部整型变量a,m*/floatn;/*定义局部浮点变量f*/a=100,m=20;/*给变量赋值*/,任务1C51程序组成的识读,说明:TurboC2.0中允许给多个变量赋同一值时可用连等的方式。例如:main()inta,b,c;a=b=c=0;/*同时给a,b,c赋值*/.,任务1C51程序组成的识读,字符型变量字符型变量可以用三种方法赋值。例如:main()chara0,a1,a2;/*定义局部字符型变量a0,a1,a2*/a0=b;/*将字母b赋给a0*/a1=50;/*将数字50赋给a1*/a2=x0d;/*将回车符赋给a2*/,任务1C51程序组成的识读,指针型变量例如:main()int*i;char*str;*i=100;str=Good;.*i表示i是一个指向整型数的指针,即*i是一个整型变量,i是一个指向该整型变量的地址。,任务1C51程序组成的识读,*str表示str是一个字符型指针,即保留某个字符地址。在初始化时,str没有什么特殊的值,而在执行str=Good时,编译器先在目标文件的某处保留一个空间存放Good0的字符串,然后把这个字符串的第一个字母G的地址赋给str,其中字符串结尾符0是编译程序自动加上的。对于指针变量的使用要特别注意。上例中两个指针在说明前没有初始化,因此这两指针为随机地址,在小存储模式下使用将会有破坏机器的危险。正确的使用办法如下:,任务1C51程序组成的识读,例如:main()int*i;char*str;i=(int*)malloc(sizeof(int);i=420;str=(char*)malloc(20);str=Good,Answer!;.,任务1C51程序组成的识读,上例中,函数(int*)malloc(sizeof(int)表示分配连续的sizeof(int)=2个字节的整型数存储空间并返回其首地址。同样(char*)malloc(20)表示分配连续20个字节的字符存储空间并返回首地址(有关该函数以后再详述)。由动态内存分配函数malloc()分配了内存空间后,这部分内存将专供指针变量使用。如果要使i指向三个整型数,则用下述方法。,任务1C51程序组成的识读,例如:#includemain()int*a;a=(int*)malloc(3*sizeof(int);*a=1234;*(a+1)=4567;*(a+2)=234;.,任务1C51程序组成的识读,*i=1234表示把1234存放到i指向的地址中去,但对于*(i+1)=4567,如果认为将4567存放到i指向的下一个字节中就错了。TurboC2.0中只要说明i为整型指针,则(i+1)等价于i+1*sizeof(int),同样(i+2)等价于i+2*sizeof(int),任务1C51程序组成的识读,(2)数组变量的赋值整型数组和浮点数组的赋值例如:main()intm22;floatn3;m00=0,m01=17,m10=21;/*数组元素赋值*/n0=109.5,n1=-8.29,n2=0.7;,任务1C51程序组成的识读,字符串数组的赋值例如:main()chars30;strcpy(s,GoodNews!);/*给数组赋字符串*/,任务1C51程序组成的识读,注意:字符串数组不能用=直接赋值,即s=GoodNews!是不合法的。所以应分清字符串数组和字符串指针的不同赋值方法。,任务1C51程序组成的识读,(3)指针数组赋值例如:main()char*f2;int*a2;f0=thankyou;/*给字符型数组指针变量赋值*/f1=GoodMorning;*a0=1,*a1=-11;/*给整型数数组指针变量赋值*/.,任务1C51程序组成的识读,四、C51中的函数函数是指程序中的一个模块,C程序就是由一个个模块化的函数所构成,main()函数为程序的主函数,其他若干个函数可以理解为一些子程序。C51的程序结构与标准C语言相同。总的来说,一个C51程序就是一堆函数的集合,在这个集合当中,有且只有一个名为main的函数(主函数)。如果把一个C51程序比作一本书,那么主函数就相当于书的目录部分,其它函数就是章节,主函数中的所有语句执行完毕,则总的程序执行结束。,任务1C51程序组成的识读,C51函数定义的一般格式如下:类型函数名(参数表)参数说明;数据说明部分;执行语句部分;,任务1C51程序组成的识读,一个函数在程序中可以有三种形态:函数定义、函数调用和函数说明。函数定义和函数调用不分先后,但若调用在定义之前,那么在调用前必须先进行函数说明。函数说明是一个没有函数体的函数定义,而函数调用则要求有函数名和实参数表。C51中函数分为两大类,一类是库函数,一类是用户定义函数,这与标准C是一样的。库函数是C51在库文件中已定义的函数,其函数说明在相关的头文件中。对于这类函数,用户在编程时只要用include预处理指令将头文件包含在用户文件中,直接调用即可。用户函数是用户自己定义和调用的一类函数。,任务1C51程序组成的识读,总结一下C51的结构特点如下:1C51程序是由函数构成的。函数是C51程序的基本单位。2一个函数由两部分组成:(1)函数说明部分。包括函数名、函数类型、函数属性、函数参数(形参)名、形式参数类型。一个函数名后面必须跟一个圆括号,函数参数可以没有,如main()。(2)函数体。即函数说明下面的大括号之内的部分。,任务1C51程序组成的识读,3一个C51程序总是从main函数开始执行,而不论main函数在整个程序中所处的位置如何。4C51程序书写格式自由,一行内可以写几个语句,一个语句可以分写在几行上。5每个语句和数据定义(记住不是函数定义哦)的最后必须有一个分号“;”。分号是C51语句的必要组成部分。分号不可少,即使是程序中的最后一个语句也应包含分号。6C51本身没有输入输出语句。标准的输入和输出(通过串行口)是由scanf和printf等库函数来完成的。对于用户定义的输出,比如直接以输出端口读取键盘输入和驱动LED,则需要自行编制输出函数。,任务1C51程序组成的识读,7可以用/*/对C51程序中的任何部分作注释。在KeiluVision2中,还可以使用/进行单行注释。例程:/*这是一个C51程序的例子*/include/使用include预处理伪指令将所需库函数包含进来unsignedintrate;/变量定义unsignedintfetch_rate(void);/函数说明,任务1C51程序组成的识读,main()charloam;dorate=fetch_rate();/函数调用while(1);,任务1C51程序组成的识读,unsignedintfetch_rate(void);/函数定义unsignedintloam;loam=loam+;returnloam;,任务1C51程序组成的识读,运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C语言是一种表达式语言,表达式后面加;号就构成了一个表达式语句。,任务2运算符和表达式的识读,一、赋值运算符在C语言中用=这个符号来表示赋值运算符,就是将数据赋给变量。如x=10;由此可见,利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加;便构成了赋值语句。使用=的赋值语句格式如下:,任务2运算符和表达式的识读,变量=表达式;示例如下a=0 xFF;/将常数十六进制数FF赋于变量ab=c=33;/同时赋值给变量b,cd=e;/将变量e的值赋于变量df=a+b;/将变量a+b的值赋于变量f,任务2运算符和表达式的识读,赋值运算符,赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为=。这里并不是等于的意思,只是赋值,等于用=表示。赋值语句左边必须是变量或寄存器,且必须先定义。常量不能出现左边。,赋值运算符和赋值表达式,简单的赋值运算符:复合的赋值运算符,=,+=、-=、*=、%=、/=,i+=2等价于i=i+2a*=b+5等价于a=a*(b+5)x%=3等价于x=x%3,赋值语句的意义就是先计算出=右边的表达式的值,然后将得到的值赋给左边的变量。而且右边的表达式可以是一个赋值表达式。一些同学往往=与=这两个符号混淆的错误原码,问为何编译报错,往往就是错在if(a=x)之类的语句中,错将=用为=。=符号是用来进行相等关系运算。,任务2运算符和表达式的识读,二、算术、增减量运算符对于a+b,a/b这样的表达式大家都很熟悉,用在C语言中+、/就是算术运算符。C51中的算术、增减量运算符如表3-4所示,其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符。算术表达式的形式:表达式1算术运算符表达式2如:a+b*(10-a),(x+9)/(y-a)除法运算符和一般的算术运算规则有所不同,如是两浮点数相除,其结果为浮点数,如10.0/20.0所得值为0.5,而两个整数相除时,所得值就是整数,如7/3,值为2。像别的语言一样C的运算符与有优先级和结合性,同样可用括号()来改变优先级,任务2运算符和表达式的识读,算术运算符,(加法运算)(减法运算)*(乘法运算符)(除法运算符)%(求余运算符,或称模运算符)如:4%20+(变量自加1)-(变量自减1),注意两个整数相除结果为整数,如8/5的结果为1,舍去小数部分。如果参加运算的两个数中有一个数为实数,则结果是实型。求余运算要求%两侧都是整型数据。,自增、自减运算,实战演练:请说明程序运行完后x,y,z,m,n的值分别是多少?main()intx=6,y,z,m,n;y=+x;z=x-;m=y/z;n=y%z;,自增运算符(+)和自减运算符(-):(1)前置运算变量、变量即先增减、后运算。(2)后置运算变量、变量即先运算、后增减。,三、关系运算符关系运算符反映的是两个表达式之间的大小等于关系,在C中有6种关系运算符:大于小于大于等于小于等于等于!不等于,任务2运算符和表达式的识读,关系运算符,关系运算符优先级,=,=!=,低,高,关系表达式,用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式。关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。例如:(1)关系表达式“8=4”的值为,表达式的值为。(2)关系表达式“50”的值为,表达式的值为。,四、逻辑运算符逻辑运算符是用于求条件式的逻辑值。用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式了。逻辑表达式的一般形式为:逻辑与:条件式1等同于i|=0 x0f;主要用途:将1个数的某(些)位置1,其余各位不变,位运算,异或操作按位异或操作符:格式:xy规则:对应位相同时为0,不同时为1例如,i=i0 x0f;等同于i=0 x0f;主要用途:使1个数的某(些)位翻转(即原来为1的位变为0,为0的变为1),其余各位不变。,位运算,按位取反操作按位取反操作符:格式:x规则:各位翻转,即原来为1的位变成0,原来为0的位变成1例如,i=i;主要用途:间接地构造一个数,以增强程序的可移植性。,左移运算符“”的功能,是把“”左边的操作数的各二进制位全部右移若干位,移动的位数由“”右边的常数指定。进行右移运算时,如果是无符号数,则总是在其左端补“0”,位运算,六、复合赋值运算符复合赋值运算符就是在赋值运算符=的前面加上其他运算符。C语言中的复合赋值运算符如下:+=加法赋值=右移位赋值-=减法赋值elsemin=b;/这一段的意思是当a20|x20|xx)printf(Good);elseprintf(Bad);,任务3程序结构及流程控制语句的识读,4.可用阶梯式if-else-if结构阶梯式结构的一般形式为:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;else语句n;,任务3程序结构及流程控制语句的识读,这种结构是从上到下逐个对条件进行判断,一旦发现条件满点足就执行与它有关的语句,并跳过其它剩余阶梯;若没有一个条件满足,则执行最后一个else语句n。最后这个else常起着缺省条件的作用。同样,如果每一个条件中有多于一条语句要执行时,必须使用和把这些语句包括在其中。,任务3程序结构及流程控制语句的识读,(2)、开关语句在编写程序时,经常会碰到按不同情况分转的多路问题,这时可用嵌套if-else-if语句来实现,但if-else-if语句使用不方便,并且容易出错。对这种情况,应该应用开关语句。开关语句格式为:,任务3程序结构及流程控制语句的识读,switch(变量)case常量1:语句1或空;case常量2:语句2或空;.case常量n:语句n或空;Default:语句n+1或空;,执行switch开关语句时,将变量逐个与case后的常量进行比较,若与其中一个相等,则执行该常量下的语句,若不与任何一个常量相等,则执行default后面的语句。,注意:(1)switch中变量可以是数值,也可以是字符。(2)可以省略一些case和default。(3)每个case或default后的语句可以是语句体,但不需要使用和括起来。,任务3程序结构及流程控制语句的识读,例:main()inttest;for(test=0;test=10;test+)switch(test)/*变量为整型数的开关语句*/,任务3程序结构及流程控制语句的识读,case1:printf(%dn,test);break;/*退出开关语句*/case2:printf(%dn,test);break;,任务3程序结构及流程控制语句的识读,case3:printf(%dn,test);break;default:puts(Error);break;,三.循环结构循环结构是程序设计中的一种基本结构。当程序中出现需要反复执行相同的代码时,就要用到这种结构。循环结构既可以简化程序,又可以提高程序的效率。循环结构的语句有:for语句、while语句和do-while语句。,任务3程序结构及流程控制语句的识读,(1)、for循环for循环是开界的。它的一般形式为:for(;)语句或者空;执行过程:求解表达式1求解表达式2,若其值为真(非零)则执行FOR中的语句体,然后执行第三步,否则结束FOR语句,直接跳出,不在执行第三步。求解表达式3跳到第2步,重复执行,任务3程序结构及流程控制语句的识读,例如:for(i=1;i10时,结束循环。,任务3程序结构及流程控制语句的识读,注意:(1)for循环中语句可以为语句体,但要用“”和“”将参加循环的语句括起来。(2)for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。,(3)for循环可以有多层嵌套。例如:main()inti,j,k;printf(ijkn);for(i=0;i2;i+)for(j=0;j2;j+)for(k=0;k2;k+)printf(%d%d%dn,i,j,k);,任务3程序结构及流程控制语句的识读,输出结果为:ijk000001010011100101110111,(2)while循环while循环的一般形式为:while(条件)语句;while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。特点:先判断、后执行原则:若表达式(条件)不是0,为真,那么执行语句,否则跳出WHILE语句。While(0),While(1),While(5),While(10)若循
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第22章 二次函数 单元测试(含答案)人教版(2024)数学九年级上 册
- 2025年中高端衡器合作协议书
- 校长招考试题及答案
- 2025年湖南省长沙市雅礼外国语学校中考数学模拟试卷(3月份)(含答案)
- 工程造价信息题库及答案
- 2025年心理与健康考试题及答案
- 2025年阜阳中考试卷及详细答案
- 2025年宁夏二建考试试题及答案
- 2025年分类考试笔试题目及答案
- 慢性伤口概述
- 肿瘤科实习生入科培训课件
- 国际商务谈判英文版课件PPT
- 【课件】1.2 点线传情——造型元素之点线面 课件-2021-2022学年高中美术人美版(2019)选修绘画
- 注塑机安全操作规程
- 运动处方(课堂PPT)
- 第2章曲柄压力机
- 物资储备与物流方案
- 数学课堂教学技能训练
- 译林英语五年级上册教材分析
- 关于加强铁路企业年金管理的指导意见
- 资金筹集业务核算培训教材(共39页).ppt
评论
0/150
提交评论