




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
选择编程工具,目前流行两大语法体系:Basic语系和C语系。同一个语系下语言的基本语法是一样。两大语系如图3-3所示。 C语系中,目前两大语言如日中天:C+和Java。C+适宜做系统软件的开发、Java更适宜做网络应用开发。 C+的开发工具是VC+6.0和C+ Builder6.0。 Java流行的开发工具比较多,比如:IBM公司的Visual Age和Websphere Studio,Insprise公司JBuilder等等。,学习Windows下编程,学习语言,选择语言和工具是第一步,而且是非常重要的一步工作,目前的编程语言那么多,有C、C+、C#、Java和汇编语言等等。 虽然有很多语言,只要精通一门就够了。从实用的角度来讲,C语系是较好的选择,而微软公司的Visual C+和Insprise公司(原Borland公司)的C+ Builder是其相应开发工具的两大主流。,C语言发展的四个阶段,C语言经过不断的发展,在编程体系中可以将其分成四个阶段。 1、面向过程的C语言。 2、面向对象的C+语言(包括JAVA)。 3、SDK编程。 4、MFC编程(Microsoft Foundation Class:微软基类库)。,API与SDK,API是英文Application Programming Interface 的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口。 在编程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了。 SDK是英文Software Development Kit的缩写,意思是“软件开发工具包”,微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等等。,类C语言的介绍,1.算法描述方法; 2.语法错误与代码规范问题; 3.代码调试问题; 4.指针与数组 5.结构 6.程序与进程,1.本书的算法描述,1) 类C语言的风格,2) 数据元素的结构定义 typedef struct /数据元素的数据项中关键字(key)的定义 EtypeKey key; /数据元素其它数据项定义; DataType data; EType;,typedef int EtypeKey ; typedef student DataType;,3) 算法函数的描述, (函数形式参数表) /算法说明 函数形式参数表中,以&开头的参数即为引用参数,引用参数能被函数本身更新参数值,可以作为输出数据的“管道”。,取代”return”语句,参数传递的方式:传址方式和传值方式,假设某人A要给某人B:¥2000。 A将钱存放在银行帐户:XXX,并在网上银行注册。 传址方式: A直接告诉B网上银行的登陆密码和支付密码,这样A、B两人拥有对同一帐户存取的权限。 传值方式:假设B 也在网上银行开户:Y,A直接转帐¥2000给B(值复制)。,A-主程序,X-内存变量 B-子程序,Y-内存变量 X,Y存放参数地址; ¥2000-参数值,2000,X,A,B,2000,Y,传址方式,传值方式,X和Z代表同一内存单元; 而X和Y代表不同的内存单元,void add(int ,void add(int y) y=1+2; ,void main() int t=0; add(t); t=? ,t=0,t=3,t=3,较少一次的内存分配,示例1,4)内存空间的动态分配和释放,5)输入输出语句,算法中使用的语句基本上与C+或C语言中是一致的.,1.头文件,#include , , 用时称为标准方式,系统到存放C库头文件所在的目录中寻找要包含的文件。 用“”时,系统先在用户当前目录中寻找要包含的文件,若找不到,再按标准方式查找。,1) 语法错误: 变量和函数没有定义:可能是书写错误,也可能是没有把相关文件包含进来; 中西文输入法的问题; 的个数出现问题; 如果是link过程出现问题,一般是函数定义的问题,2. 语法错误与代码规范问题,只要是编译器能够识别的都是好解决的,编译出错,鼠标双击某一error信息,自动定位 出错代码行,2) 代码规范TAB的使用,掌握在debug方式下设置断点的检查功能,35,程序编译成功,还需要调试吗?,3.代码调试问题,35,void main() unsigned k=1;/ ,K=0x41414141,所有的代码是调试出来的,而不是”编”出来的,只有经过调试的代码才能保证其可用.,设置调试中的断点,调试按钮,显示当前变量值,查看自定义变量的值,单步调试,调试菜单,F10-单步调试 F11-进入函数内部调试 Shift+F11-从函数内部回到调用函数(如main) Ctrl+F10-运行到光标处. Shift+F5-终止调试过程.,是一个重要概念,可以有效地表示复杂的数据结构; 能动态分配内存; 能方便地使用字符串; 有效而方便地使用数组; 能直接处理内存地址等,这对设计系统软件是很必要的。 指针的概念比较复杂,使用也比较灵活,十分小心。,4. 指针,new,delete,int* parr; parr=new int100; /返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int)*100; delete parr;,int *p; p = new int; /返回类型为int* 类型(整数型指针),分配大小为 sizeof(int); delete p;,int *p; p=new int5; /分配大小为 sizeof(int)*5 for(int i=0;i5;i+) *(p+i)=i;,16进制的表示方法,共计32位的2进制bit,存储一个字节,计算机存储结构,int a=3;int *p; 假设已执行p=,关于&和*运算符的说明:,1、&*p与&a相同,即变量a的地址。 2、*&a、*p及变量a等价。,3、(*p) + + 相当于a + +,它与*p + + 不同 *p + + 等价于*(p+ +),p的值改变,不再指向a了。,指针仅能进行加、减算术运算 如:p+n , p-n , p+ , p- , +p , -p , p-= n , p+= n , p1-p2 等 其中n是整数,p、p1、p2均为指针;,int i,j;j=1; i=j+; (i=1,j=2),int i,j;j=1; i=+j; (i=2,j=2),施行加法/减法运算时,指针向地址增大/减小的方向移动; 移动长度取决于指针的基类型,由计算机决定;,typedef struct int core; char v; stdudent; stdudent *p; p=new stdudent3;,p-core=4; p-v=a; p+; p-core=4; p-v=b; p+; p-core=4; p-v=c;,指针移动,数组,char a5; for(int i=0;i5;i+) ai=a+i;,数组,int a5; int *p; p= 含义:把数组的首地址赋给指针变量p。 如果指针变量p已指向数组中的一个元素,则p+1指向同一个数组中的下一个元素(而不是简单地加1)。 如果p的初值为&a0,则:p+i, a+i ,&ai,即指向a数组的第i个元素。 指向数组的指针变量也可以带下标,如pi与*(p+i)等价 引用数组元素时,可以用:ai, *( a+i ) 或 *( p+i ),利用指针操作数组,示例2,声明结构体类型的同时定义变量 typedef struct Argon char name3; int mass; Position positionNow; Argon *next; Argon;,5.结构,15,typedef struct int x,y,z; Position;,嵌套结构,自引用结构,组成结构的成员项可以是任何数据类型。 另一个结构类型的变量 指向另一个结构类型的结构指针 可以是指向本结构类型的一个结构指针。,它们的元素成员都必须存放在一片连续的存储空间中; 通过存取结构变量的成员来访问结构变量; 结构中的成员的数据类型可以不相同,而数组中的元素都是有相同的数据类型, 自引用结构多用于链表,而对于数组,编译程序必须给分配存放其全部元素的存储空间。,一些特点:,嵌套结构变量的访问:,Argon.PositionNow.x 对结构体变量的成员可以像普通变量一样进行各种运算。 嵌套的结构指针的引用 Atom *p; pqx 或(pq)x,Structure Atom Position *q; ,Argon *p; Position *q; p=new Argon; q=new Position; q-x=1; q-y=2; q-z=3; p-positionNow.x=q-x; p-positionNow.y=q-y; p-positionNow.z=q-z; p-name0=a; p-name1=b; p-mass=4; p-next=NULL;,如果没有这一行可以吗?,结尾会出现乱码(0),示例3,6.程序与进程,程序的源代码称为程序源代码,源代码编译后的二进制可执行文件称为程序。 程序被运行起来后内存中和他相关的内存资源和CPU 资源的总和称为进程。 程序空间其实指的是进程中内存布局和内存中的数据。再通俗点就是程序被运行起来时其内存空间的布局。 一个程序被编译完成后其运行时内部的内存空间布局就已经确定,int add(int x,int y) return x+y; int main(void) int result=add (129,127); printf(“nresult=xin“,result); return 0; ,x55x8bxecx83xecx40 x53x56x57x8dx7dxc0 xb9x10x00x00x00xb8 xccxccxccxccxf3xab x8bx45x08x03x45x0c x5fx5ex5bx8bxe5x5dxc3,typedef int (* PF)(int,int); int main(void) unsigned char buff= “x55x8bxecx83xecx40x53x56x57x8dx7dxc0xb9x10x00x00x00xb8xccxccxccxccxf3xabx8bx45x08x03x45x0cx5fx5ex5bx8bxe5x5dxc3“; PF pf; pf=(PF) ,1.结构体. 2.常量或全局变量(a). 3.自定义函数申明及实现,进程运行,主程序mian() 1.定义局部变量b. 2.函数1#调用 3.函数2#调用 . 4.结束,函数1# 1.定义局部变量c. 2.函数调用 3.返回其调用(或父) 函数.,函数2#.,通过参数的传递及结果返回,调用者和被调用建立联系,1.在mian()能直接访问或修改 变量a,b,c? 2.函数1#能直接访问或修改 变量a,b,c?,共享空间,局部空间,局部空间,Malloc,new,free, delete,函数声明(函数原型): void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C+规定,void* 类型可以强制转换为任何其它类型的指针。 从函数声明上可以看出。malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小。比如: int *p; p = new int; /返回类型为int* 类型(整数型指针),分配大小为 sizeof(int); delete p;,int* parr; parr=new int100; /返回类型为 int* 类型(整数型指针),分配大小为 sizeof(int)*100; delete parr; 而 malloc 则必须由我们计算要字节数,并且在返回后强行转换为实际类型的指针。 int* p; p = (int*) malloc (sizeof(int); free(p); 第一、malloc 函数返回的是 void * 类型,如果你写成:p= malloc (sizeof(int); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。所以必须通过 (int *) 来将强制转换。,33,第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。如果你写成: int* p = (int *) malloc (1); 代码也能通过编译,但事实上只分配了1个字节大小的内存空间,当你往里头存入一个整数,就会有3个字节无家可归,而直接“住进邻居家”!造成的结果是后面的内存中原有数据内容全部被清空。 malloc 也可以达到 new 的效果,申请出一段连续的内存,方法无非是指定你所需要内存大小。比如想分配100个int类型的空间: int* p = (int *) malloc (sizeof(in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑施工安全管理信息化在工程项目中的应用案例分析
- 2025年婴幼儿配方食品营养配方优化对婴幼儿视力发育的影响研究
- 2025年城市轨道交通智慧运维系统建设与智能运维管理优化策略深度报告
- 轻化工专业试题及答案解析
- 2025年塔吊维修证考试题及答案
- DB65T 4404-2021 植保无人飞机防治棉花病虫害作业规程
- 敬业专业实践面试题及答案
- 2025年新能源行业企业绿色建筑技术应用与效果分析报告
- 电厂防雷应急预案(3篇)
- 低温工作应急预案(3篇)
- 输血申请单规范PDCA
- 污水处理技术及工艺介绍课件
- 市政工程工程量计算规范课件
- 第17课-我是浙江人课件
- 隐身技术概述课件
- 《红细胞血型系统》课件
- 《太阳出来了》课 件课件
- 《家庭暴力中的正当防卫问题分析(论文)9500字》
- 公路桥梁和隧道工程施工安全风险评估讲解(刘兴旺)
- 人教版七年级音乐下册教学计划(范文五篇)
- 中国主要造船企业分布图
评论
0/150
提交评论