资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,.,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,二级,三级,四级,五级,*,课程性质和教学目标,本课程是电子信息学院各专业的一门必修课。,通过本课程的学习,期望达到如下目标:,掌握,C,语言基本编程及应用,掌握,5 1,系列单片机的基本原理及简单开发,理解,C,语言与单片机在传感与控制系统中的作用,初步形成嵌入式系统设计与开发的基本能力,.,课程用书,单片机,C,语言教程,C,程序设计,谭浩强,建议课程参考书,.,课程介绍,1.,课程特点,综合性强、实践性强,.,课程介绍,2.,课程内容,C,语,言,单,片,机,.,课程介绍,2.,课程内容,C,语言编译软件,TC,编,译,环,境,WIN,TC,编,译,环,境,VC,编,译,环,境,Keil C51,编,译,环,境,单片机,C,语言编程环境,.,课程介绍,2.,课程内容,外围器件,单片机,AT89S52,外,围,电,路,传感器,显示器件,信号调理电路,接口器件,嵌,入,式,系,统,Proteus,单片机仿真软件,.,C,语言的发展,语言是在,20,世纪,70,年代初问世的。一九七八年由美国电话电报公司,(AT&T),贝尔实验室正式发表了语言,,研制,C,语言的初衷是为了用它编写,Unix,系统软件。,同时由,B.W.Kernighan,和,D.M.Ritchit,(合称,D&R,)合著了著名的,The C Programming Language,一书,在该书中并没有定义一个完整的标准,C,语言,后来由美国国家标准协会(,American National Standards Institute,)在此基础上制定了一个,C,语言标准,于一九八三年发表,通常称之为,ANSI C,。,.,C,语言的发展,K&R,在,1988,年修改了他们的经典著作,The C,Programming Language,,按照,ANSI C,标准重写了,该书。,1987,年,,ANSI,又公布了新标准,87 ANSI C,。,1990,年,国际标准化组织,ISO,接受,87 ANSI C,为,ISO C,的标准(,ISO 9899,1990,)。,目前流行的,C,编译系统都是以它为基础的。,.,C,语言的特点,(,1,)语言简洁、紧凑,使用方便、灵活。,(,2,),C,语言运算符丰富,共有,14,种运算符。,(,3,),C,语言的数据结构也比较丰富,具有现代计算机语言的各种数据结构。,(,4,)具有结构化的流程控制语句,如选择语句、循环语句等。,(,5,)流程控制和数据操作灵活多样,程序设计有较大的自由度。,(,6,),C,语言允许直接访问物理地址,能进行位运算,能实现汇编语言的大部分功能,可以直接对硬件进行操作。,(,7,)用,C,语言编写的程序可移植性好。,(,8,)用,C,语言写的程序可移植性好(与汇编语言比)。,.,为什么要学习,C,语言,1.,很多其他的语言是基于,C,语言的,学习,C,,你可以更加容易的学习很多其他的语言;,2.,让你有能力去改写其他人写的复杂程序为你所用;,3.,极大地提高你的计算机应用水平;,4.,作为工程师,我们会发现越来越多的硬件可以用,C,语言进行配置。,.,简单的,C,语言程序,/*program writes the words Hello,world to the screen,*File:Hello.c,*By:NJCIT,*Date:07-03-09,*/,#include,main(),printf(Hello,worldn);,return(0);,注释,头文件,主函数,函数体,注:,每个,C,语言程序有且,仅有一个,main,函数,.,简单的,C,语言程序,main()/*,主函数*,/,int a,b,c;/*,定义变量*,/,scanf(“%d,d”,,,/*,输入变量,a,和,b,的值*,/,c=max(a,b);/*,调用,max,函数,将得到的值赋给,c*/,printf(“max=%d”,c);/*,输出,c,的值*,/,int max(x,y)/*,定义,max,函数*,/,int x,y;/*,对形参,x,、,y,做类型定义*,/,int z;/*max,函数中用到的变量,z,,也要加以定义*,/,if(xy)z=x;,else z=y;,return(z);,、,/*,将,z,的值返回,通过,max,带回调用处*,/,.,编辑,链接,编译,执行,C,程序的上机步骤,C,程序开发步骤,file.exe,程序代码的录入,生成源程序,*,.c,语法分析查错,翻译,生成目标程序,*,.obj,与其它目标程序或库,链接装配,生成可执行,程序,*,.exe,.,几个问题,1.,一个,C,源程序包含几个,main(),函数?,2.,一个函数由几部分组成?,3.,一个,C,程序从哪个函数开始执行,在哪里结束?,4.,在一个,C,程序中在”,/*.*/”,之间的内容是否进行编译并运行?”,/*/”,起什么作用?,5.,在一个,C,程序开始有时会有“,include *.h”,这个语句,它是什么意思?,.,总结,1.C,程序是由函数构成的,。,一个,C,源程序至少包含一个函数(,main,函数),也可以包含一个,main,和若干其它函数。因此,,函数,是,C,程序的基本单位。,2.,一个函数由两部分组成,(,1,)函数的,说明部分,包含函数名、函数类型、函数属性、函数参数名、形式参数名,(,2,),函数体,即函数说明部分下面的大括弧,内的部分。,函数体内一般包括:变量定义、执行部分。,.,总结,3.,一个,C,程序,总是从,main,函数开始执行,,而不论,main,函数在整个程序中位置,,最后在,main,中结束,。,4.,每个语句和数据定义的,最后必须有一个分号,。,5.C,语言,本身没有输入输出语句,,输入、输出操作是利用库函数,scanf(),和,printf(),完成。,6.,可以用,/*.*/,作注释,。,.,总结:,格式特点,习惯用,小写,字母,大小写敏感,不使用行号,,无程序行,概念,可使用空行和空格,常用,锯齿形,书写格式,优秀程序员的素质之一,:,使用,TAB,缩进,对齐,有足够的注释,有合适的空行,.,C,语言中的关键字,32,个关键字,:,(,由系统定义,不能重作其它定义,),auto break case char const,continue default do double else,enum extern float for goto,if int long register return,short signed sizeof static struct,switch typedef unsigned union void,volatile while,.,C,语言的要素,1.C,的数据类型,一个程序应包括两个方面的内容:,(,1,)数据的描述;,(,2,)算法:操作步骤,即动作的描述;,数据是操作的对象,操作的结果会改变数据的状况。,数据结构算法程序,.,C,语言数据类型,C,数,据,类,型,基本类型,构造类型,指针类型,空类型,void,定义类型,typedef,数值类型,字符类型,char,枚举类型,enum,整 型,浮点型,单精度型,float,双精度型,double,短整型,short,长整型,long,整型,int,数组,结构体,struct,共用体,union,.,基本数据类型,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(signed),int,16,-3276832767,(signed),short,16,-3276832767,(signed),long,32,-21474836482147483647,16,unsigned,int,065535,32,04294967295,unsigned,long,unsigned,short,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,说明,:,数据类型所占字节数随机器硬件不同而不同,上表以,IBM PC,机为例,:,.,一般用大写字母,是宏定义预处理命令,不是,C,语句,直接常量,:,整型常量,实型常量,字符常量,字符串常量,如,#define PRICE 30,常量,定义:程序运行时其值不能改变的量(即常数),分类,:,符号常量,:,用标识符代表常量,定义格式:,#define,符号常量 常量,例 符号常量举例,(ch2_1.c),#define PRICE 30,main(),int num,total;,num=10;,total=num*PRICE;,printf(total=%d,total);,运行结果:,total=300,.,整型常量(整常数),三种形式:,十进制整数:由数字,0,9,和正负号表示,.,如,123,-456,0,八进制整数:由数字,0,开头,后跟数字,0,7,表示,.,如,0123,011,十六进制整数:由,0 x,开头,后跟,0,9,a,f,A,F,表示,.,如,0 x123,0Xff,例,12,与,12L,例,30000,为,int,型,65536 为,long int,型,整型常量的类型,根据其值所在范围确定其数据类型,在,整常量后加字母,l,或,L,,,认为它是,long int,型常量,问题:,0123 =(),10,0 x123=(),10,0Xff =(),10,83,291,255,问题:,0123 =(),10,0 x123=(),10,0Xff =(),10,.,实型常量(实数或浮点数),表示形式:,十进制数形式:(,必须有小数点,)如,0.123,.123,123.0,0.0,123.,指数形式:(,e,或,E,之前必须有数字;指数必须为整数,)如12.3,e3,123E2,1.23e4,e-5,1.2E-3.5,实型常量的类型,默认,double,型,在,实型常量后加字母,f,或,F,,,认为它是,float,型,.,字符常量,定义,:,用,单引号,括起来的,单个普通字符,或,转义字符,.,字符常量的,值,:该字符的,ASCII,码,值,转义字符及其含义:,转义字符,含义,n,v,r,a,ddd,t,b,f,“,xhh,转义字符,含义,换行,垂直制表,回车,响铃,单引号,3,位,8,进制数代表的字符,水平制表,退格,换页,反斜线,双引号,2,位,16,进制数代表的字符,如 ,101 -A 012 -n,376 -,x61 -a,60 -0 483 -(,),例,:,A-101-x41-65,如,A,65,,,a,97,,,0,48,n,10,如 ,a A?n 101,转义字符,:,反斜线后面跟一个字符或一个代码值表示,25,.,字符常量与字符串常量不同,字符串常量,定义:用,双引号,(,“”,),括,起来的字符序列,存储:,每个字符串尾,自动,加一个,0,作为字符串结束标志,h e l l o,0,例 字符串,“,hello,”,在内存中,a,a 0,例,a,“a”,例,空串 “”,0,例,:char ch;,ch=“A”;,例,:char ch;,ch=A;,.,编译程序根据变量定义为其,分配指定字节的内存单元,.,地址,int a=1,b=-3,c;,a,b,c,2,字节,2,字节,2,字节,地址,地址,.,内存,1,-3,随机数,变量,概念:其值可以改变的量,变量名,与,变量值,变量定义的一般格式:,数据类型,变量,1,,变量,2,,,,变量,n;,变量初始化,:,定义时赋初值,例,:,int a,b,c;,float data;,决定分配字节数,和数的表示范围,合法标识符,变量的使用:,先定义,后使用,例,1,int student;,stadent=19;/,Undefined symbol statent in function main,变量定义位置:,一般,放在函数开头,.,在书写变量说明时,应注意以下几点:,1.,允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之间至少用一个空格间隔。,2.,最后一个变量名之后必须以“;”号结尾。,3.,变量说明必须放在变量使用之前。一般放在函数体的开头部分。,main(),int a,b=2;,a=1;,float data;,data=(a+b)*1.2;,printf(“data=%fn”,data);,main(),int a,b=2;,float data;,a=1;,data=(a+b)*1.2;,printf(“data=%fn”,data);,变量定义,可执行语句,例,:,int a=2,b,c=4;,float data=3.67;,char ch=A;,int x=1,y=1,z=1;,int x=y=z=1;,.,常量与变量,标识符,定义:用来标识变量名、符号常量名、函数名、类型名等的字符序列,组成:,只能由,字母,、,数字,、,下划线,组成,且第一个字母必须是字母或下划线,大小写敏感,不能使用关键字,长度:最长3,2,个字符,命名原则:,见名知意,不宜混淆 如,l,与,I,o,与0,例:判断下列标识符号合法性,sum Sum M.D.John day Date 3days,student_name#33 lotus_1_2_3,char ab _above$123,M.D.John,3days,#33,char,$123,ab,.,整型变量,占字节数随机器不同而不同,一般占一个机器字,shortintlong,可用,sizeof,(,类型标识符)测量,实型变量,float,:,占4字节,提供7位有效数字,double,:,占8字节,提供15,16位有效数字,字符型变量,字符变量存放字符,ASCII,码,char,与,int,数据间可进行算术运算,例,float a;,a=123456.789;/*,a=,123456.7,*/,double b;,b=,123456.789,;/*,b=,123456.789,*/,例,a=,D,;/*a=68;*/,x=,A,+5;/*x=65+5;*/,s=,!,+,G,/*s=33+71;*/,没有,字符串变量,,用字符数组存放,.,2.3,不同类型数据间的转换,隐式转换,什么情况下发生,运算转换,-,不同类型数据混合运算时,赋值转换,-,把一个值赋给与其类型不同的变量时,输出转换,-,输出时转换成指定的输出格式,函数调用转换,-,实参与形参类型不一致时转换,运算转换规则,:,不同类型数据运算时先,自动,转换成同一类型,31,.,double,float,long,unsigned,int,char,short,低,高,说明,:,必定的转换,运算对象类型不同时转换,例,char ch;,int i;,float f;,double d;,ch/i +f*d -(f+i),int,int,double,double,double,double,double,double,int,int,double,double,double,double,double,double,10+a +i*f -d/l,例,int i;,float f;,double d;,long l;,32,.,显式转换(强制转换),一般形式:,(,类型名,),(,表达式),例,(int)(x+y),(int)x+y,(double)(3/2),(int)3.6,说明:强制转换得到所需类型的中间变量,原变量类型不变,例,main(),float x;,int i;,x=3.6;,i=(int)x;,printf(“x=%f,i=%d”,x,i);,结果:,x=3.600000,i=3,精度损失问题,较高类型向较低类型转换时可能发生,Ch2_007.c,Ch2_008.c,33,.,此课件下载可自行编辑修改,此课件供参考!,部分内容来源于网络,如有侵权请与我联系删除!,
展开阅读全文