




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第2 2章章 C C程序设计言语根底程序设计言语根底C程序设计言语作为本书中数据构造的算法描画言语,程序设计言语作为本书中数据构造的算法描画言语,既具有高级言语的特点,又具有汇编言语的特点,被广泛运既具有高级言语的特点,又具有汇编言语的特点,被广泛运用于系统软件设计和运用软件设计,并且经久不衰。本章主用于系统软件设计和运用软件设计,并且经久不衰。本章主要目的是复习要目的是复习C程序设计言语的一些重点和难点,为数据构程序设计言语的一些重点和难点,为数据构造的学习扫清妨碍。造的学习扫清妨碍。2.1 2.1 开发环境引见开发环境引见C程序设计言语也常称为程序设计言语也常称为C言语的开发环境有言语的
2、开发环境有LCC、Turbo C2.0、Visual C+、Borland C+等多种,本节主等多种,本节主要引见常运用的要引见常运用的Turbo C2.0和和Visual C+6.0开发环境。开发环境。2.1.1 Turbo C 2.02.1.1 Turbo C 2.0开发环境引见开发环境引见1 运转运转Turbo C2.02 Turbo C2.0环境设置环境设置3 Turbo c2.0的运用的运用2.1.2 Visual C+6.02.1.2 Visual C+6.0开发环境引见开发环境引见用用Visual C+6.0编写编写C言语程序,需求两个步骤:一是言语程序,需求两个步骤:一是建立一
3、个控制台工程;二是在该控制台工程中添加一个建立一个控制台工程;二是在该控制台工程中添加一个.C的的文件。文件。2.2 2.2 递归与非递归递归与非递归一个较大的程序包含假设干个具有独立的功能的模块一个较大的程序包含假设干个具有独立的功能的模块,每一个模块实现一个特定的功能,这才是良好的程序设计,每一个模块实现一个特定的功能,这才是良好的程序设计风格。在风格。在C言语中,经过函数实现模块的功能,一个言语中,经过函数实现模块的功能,一个C言语言语程序由一个主函数和假设干个函数组成。递归是程序由一个主函数和假设干个函数组成。递归是C言语程序言语程序设计中常见的函数调用方式,也是学习设计中常见的函数调
4、用方式,也是学习C言语的一个重点和言语的一个重点和难点。难点。2.2.1 2.2.1 函数的递归调用函数的递归调用函数的递归调用指的是在调用一个函数的过程中,又函数的递归调用指的是在调用一个函数的过程中,又出现了对函数本身的调用,这种函数称为递归函数。其中,出现了对函数本身的调用,这种函数称为递归函数。其中,递归调用分为直接递归调用和间接递归调用。一个函数在函递归调用分为直接递归调用和间接递归调用。一个函数在函数定义体内直接调用本人称为直接递归调用,一个函数在经数定义体内直接调用本人称为直接递归调用,一个函数在经过一系列的中间调用,经过其他函数调用本人的称为间接递过一系列的中间调用,经过其他函
5、数调用本人的称为间接递归调用。归调用。函函 数数 func()函函 数数 func()函函 数数 func1()函函 数数 func2()函函 数数 func3() 2.2.2 2.2.2 递归运用举例递归运用举例下面我们以一个例子讲解递归的调用。下面我们以一个例子讲解递归的调用。2.2.3 2.2.3 普通递归转化为非递归普通递归转化为非递归经过分析递归实现求经过分析递归实现求n个自然数的和,我们可以把它转个自然数的和,我们可以把它转化为非递归实现。化为非递归实现。迭代与递归:迭代和递归是程序设计中常用的两种构迭代与递归:迭代和递归是程序设计中常用的两种构造。任何能运用递归处理的问题都能运用
6、迭代的方法处理。造。任何能运用递归处理的问题都能运用迭代的方法处理。迭代和递归的区别是:迭代运用的是循环构造,递归运用的迭代和递归的区别是:迭代运用的是循环构造,递归运用的是选择构造。运用递归可以使程序的构造更明晰,设计出的是选择构造。运用递归可以使程序的构造更明晰,设计出的程序更简约、程序更容易让人了解。程序更简约、程序更容易让人了解。2.3 2.3 指针指针指针是指针是C言语中最难掌握的概念,但同时也是最重要的言语中最难掌握的概念,但同时也是最重要的概念。指针经常用在函数的参数传送和动态分配内存中,在概念。指针经常用在函数的参数传送和动态分配内存中,在数据构造中,指针的运用也非常频繁。指针
7、经常与地址、变数据构造中,指针的运用也非常频繁。指针经常与地址、变量、数组和函数联络在一同。本节的主要学习内容是大家经量、数组和函数联络在一同。本节的主要学习内容是大家经常容易混淆的概念,包括指针变量、指针变量的援用、指针常容易混淆的概念,包括指针变量、指针变量的援用、指针与数组、函数指针与指针函数。与数组、函数指针与指针函数。2.3.1 2.3.1 指针变量指针变量指针是一种变量,也称指针变指针是一种变量,也称指针变量,它的值是内存地址。普通的变量量,它的值是内存地址。普通的变量通常直接包含一个详细的值,例如整通常直接包含一个详细的值,例如整数、浮点数和字符。指针包含的是变数、浮点数和字符。
8、指针包含的是变量的地址,而变量又拥有本人的详细量的地址,而变量又拥有本人的详细值。变量名直接援用了一个值,指针值。变量名直接援用了一个值,指针是间接地援用了一个值。是间接地援用了一个值。一个变量的地址称为该变量的一个变量的地址称为该变量的“指针。假设有一个变量用来存放另指针。假设有一个变量用来存放另一个变量的地址,那么称这个变量为一个变量的地址,那么称这个变量为指针变量。在指针变量。在C言语中,变量在运用言语中,变量在运用前都需求提早声明。前都需求提早声明。2.3.1 2.3.1 指针变量指针变量int q=5,*qPtr;qPtr=&q;2.3.2 2.3.2 指针变量的援用指针变量
9、的援用指针变量和变量一样,都可以对数据进展操作,指针指针变量和变量一样,都可以对数据进展操作,指针变量的操作主要是经过取地址运算符变量的操作主要是经过取地址运算符&和指针运算符和指针运算符*进展进展实现的。例如,实现的。例如,&a指的是变量指的是变量a的地址,的地址,*ptr表示变量表示变量ptr所所指向的内存单元存放的内容。指向的内存单元存放的内容。例例2_3 变量与指向该变量的指针演示程序。变量与指向该变量的指针演示程序。2.3.3 2.3.3 指针与数组指针与数组1指向数组元素的指针指向数组元素的指针int a5=10,20,30,40,50;int *aPtr;2.3.
10、3 2.3.3 指针与数组指针与数组指针援用数组元素的运用举例。指针援用数组元素的运用举例。例例2_4 用指针援用数组元素并打印输出。用指针援用数组元素并打印输出。2.3.3 2.3.3 指针与数组指针与数组2数组指针数组指针int (*p)4;int a34=1,2,3,4,5,6,7,8,9,10,11,12;p=a;2.3.3 2.3.3 指针与数组指针与数组数组指针的运用举例。数组指针的运用举例。例例2_5 用指针援用数组元素并打印输出。用指针援用数组元素并打印输出。2.3.3 2.3.3 指针与数组指针与数组3指针数组指针数组指针数组是一个数组,数组中的元素是指针类型的数指针数组是一
11、个数组,数组中的元素是指针类型的数据。也就是说,指针数组中的元素,每一个都是一个指针变据。也就是说,指针数组中的元素,每一个都是一个指针变量。指针数组的定义如下:量。指针数组的定义如下:int *p4;C P r o g r a m m i n g L a n g u a g e 0A s s e m b l y L a n g u a g e 0J a v a L a n g u a g e 0N a t u r a l L a n g u a g e 02.3.3 2.3.3 指针与数组指针与数组指针数组的运用举例。指针数组的运用举例。例例2_6 用指针数组保管字符串并将字符元素并打印输用
12、指针数组保管字符串并将字符元素并打印输出。出。2.3.4 2.3.4 函数指针与指针函数函数指针与指针函数函数指针与指针函数也是经常容易混淆的概念。与数函数指针与指针函数也是经常容易混淆的概念。与数组指针和指针数组类似,前者强调的指针,后者强调的是函组指针和指针数组类似,前者强调的指针,后者强调的是函数。数。1函数指针函数指针2指针函数指针函数2.3.4 2.3.4 函数指针与指针函数函数指针与指针函数函数指针运用举例。函数指针运用举例。例例2_7 经过一个函数求两个数的和,并经过函数指针经过一个函数求两个数的和,并经过函数指针调用该函数。调用该函数。void main()int a=3,b=
13、5;int (*fun)(int,int);printf(%d+%d=%dn,a,b,Sum(a,b);/*经过函数名调用经过函数名调用*/fun=Sum;/*函数指针指向求和函数函数指针指向求和函数*/printf(%d+%d=%dn,a,b,(*fun)(a,b); /*函数指针调用函数函数指针调用函数*/int Sum(int m,int n) return m+n; 2.3.4 2.3.4 函数指针与指针函数函数指针与指针函数函数指针运用举例。函数指针运用举例。例例2_8 函数指针作为函数参数,实现冒泡排序的升序函数指针作为函数参数,实现冒泡排序的升序陈列和降序陈列。陈列和降序陈列。2
14、.4 2.4 参数传送参数传送在在C言语中,函数的参数传送的方式通常有两种:一种言语中,函数的参数传送的方式通常有两种:一种是传值的方式,另一种是传地址的方式。参数传送通常是我是传值的方式,另一种是传地址的方式。参数传送通常是我们经常遇到的情况。本节主要学习的内容包括传值调用、传们经常遇到的情况。本节主要学习的内容包括传值调用、传地址调用。地址调用。2.4.1 2.4.1 传值调用传值调用在函数调用时,普通情况下,调用函数和被调用函数在函数调用时,普通情况下,调用函数和被调用函数之间会有参数传送。调用函数后面括号里面的参数是实践参之间会有参数传送。调用函数后面括号里面的参数是实践参数,被调用函
15、数中的参数是方式参数。传值调用是建立参数数,被调用函数中的参数是方式参数。传值调用是建立参数的一个副本并把值传送给方式参数,在被调用函数中修正方的一个副本并把值传送给方式参数,在被调用函数中修正方式参数的值,并不会影响到调用函数实践参数的值。式参数的值,并不会影响到调用函数实践参数的值。2.4.2 2.4.2 传地址调用传地址调用C言语经过指针地址实现传地址调用。假设在调用言语经过指针地址实现传地址调用。假设在调用函数时,需求在被调用函数中修正参数值,那么需求把实践函数时,需求在被调用函数中修正参数值,那么需求把实践参数的地址传送给方式参数。下面我们还以求两个整数的较参数的地址传送给方式参数。
16、下面我们还以求两个整数的较大者来阐明参数传地址调用方式的运用及传送情况。大者来阐明参数传地址调用方式的运用及传送情况。2.4.2 2.4.2 传地址调用传地址调用例2_12 编写一个函数求两个整数的较大者和较小者,用传地址方式实现。 &a3&b4ab&a3&b4ab&a&bxy*x*y2.4.2 2.4.2 传地址调用传地址调用&a4&b3ab&a&bxy*x*y&a4&b3ab2.4.2 2.4.2 传地址调用传地址调用例例2_13 把数组中的把数组中的n个元素的值分别扩展个元素的值分别扩展5倍,
17、要求数倍,要求数组名作为参数。组名作为参数。 2.5 2.5 构造体与结合体构造体与结合体构造体和结合体或称共用体是自定义的数据类型构造体和结合体或称共用体是自定义的数据类型。常用于处置非数值型数据,在数据构造中,运用非常广泛。常用于处置非数值型数据,在数据构造中,运用非常广泛,如链表、队列、树等。本节的主要学习内容包括构造体、,如链表、队列、树等。本节的主要学习内容包括构造体、结合体及它们的运用。结合体及它们的运用。2.5.1 2.5.1 构造体的定义构造体的定义构造体是用其他类型构造出来的数据类型。构造体类构造体是用其他类型构造出来的数据类型。构造体类型经常用于存储文件中的记录。假设仅仅用
18、型经常用于存储文件中的记录。假设仅仅用C言语中根本的言语中根本的数据类型,是无法进展描画的。数据类型,是无法进展描画的。stu1.age=20;=Wang Chong;stu1.number=1234;stu1.sex=m;stu1.score=89.0;2.5.2 2.5.2 指向构造体的指针指向构造体的指针指针可以指向整型、浮点型、字指针可以指向整型、浮点型、字符等根本类型变量外,同样也可以指符等根本类型变量外,同样也可以指向构造体变量。指向构造体变量的指向构造体变量。指向构造体变量的指针的值是构造体变量的起始地址。指针的值是构造体变量的起始地址。指针可以指向构造体,也可
19、以指向构造针可以指向构造体,也可以指向构造体数组。指向构造体的指针和指向变体数组。指向构造体的指针和指向变量和指向数组的指针的用法类似。量和指向数组的指针的用法类似。2.5.3 2.5.3 结合体及运用结合体及运用与构造体一样,结合体也是一种派生的数据类型。但与构造体一样,结合体也是一种派生的数据类型。但是与构造体不同的是,结合体的成员共享同一个存储空间。是与构造体不同的是,结合体的成员共享同一个存储空间。union uchar x;float y;double z;2.6 2.6 动态内存分配与释放动态内存分配与释放动态内存分配与释放经常用在数据构造中的链表、树动态内存分配与释放经常用在数据
20、构造中的链表、树和图构造。动态内存分配在需求时进展分配,不需求时即释和图构造。动态内存分配在需求时进展分配,不需求时即释放,不需求提早分配。本节的主要学习内容包括内存的动态放,不需求提早分配。本节的主要学习内容包括内存的动态分配与释放及链表。分配与释放及链表。2.6.1 2.6.1 内存动态分配与释放内存动态分配与释放内存的动态分配需求运用内存的动态分配需求运用malloc函数、函数、 free函数和函数和sizeof运算符实现。函数运算符实现。函数malloc的原型是:的原型是:void *malloc(unsigned int size);函数函数malloc的作用是在内存中分配一个长度为
21、的作用是在内存中分配一个长度为size的延的延续存储空间。函数的前往值是一个指向分配空间的起始位置续存储空间。函数的前往值是一个指向分配空间的起始位置的指针。假设分配空间失败,那么前往的指针。假设分配空间失败,那么前往NULL。函数函数malloc和和free普通成对运用,在运用完内存空间时普通成对运用,在运用完内存空间时,要记得用,要记得用free将内存空间释放。运用函数将内存空间释放。运用函数malloc时,最好时,最好要测试能否分配胜利。曾经释放掉的内存,不可以重新运用要测试能否分配胜利。曾经释放掉的内存,不可以重新运用。2.6.2 2.6.2 链表链表链表是一种常用的数据构造。链表经过自援用构造体链表是一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025大气合同封面图片专业摄影及后期处理服务合同
- 2025厕所改造项目环保工程设计合同样本
- 2025年度高原人参果直销采购合同
- 2025版砌墙施工与材料运输合同规范范本
- 2025版玩具类产品保修与售后服务合同
- 2025年度智能宠物担保合同风险解析
- 2025年度企业法律咨询法律顾问服务协议
- 2025版保障性住房商品房预售合同示范协议
- 2025年度事业单位电子商务岗位设置与运营管理合同
- 2025版婚恋行业市场拓展与合作推广合同
- GB/T 28575-2020YE3系列(IP55)三相异步电动机技术条件(机座号63~355)
- 储油罐有限空间作业安全技术措施表
- 传媒公司员工劳动合同(标准版)
- 缺血性肠病完整版本课件
- 《室内空间设计》第三章课件
- 学习《北方民族大学学生违纪处分规定(修订)》课件
- 设备出厂检验报告
- Matlab-Simulink模型检查验证与测试
- 单位减少存档人员表
- 商务英语翻译实务完整版教学ppt课件全套教程
- 潮流玩具行业研究报告
评论
0/150
提交评论