08第八章 地址和指针
第八章扩展存储器方案

#1楼
00 01 10 11
常用的存储器地址分配的方法有3种:全译码、部分译码和线选 法。
1. 全译码 利用系统的全部的高位地址线作为存储器芯片(或I/O接口芯 片)的片选信号。 特点:地址与存储单元一一对应,地址空间的利用率高。
例8-1: 利用全译码为80C51扩展16KB的外部数据存储器,存 储芯片选用SRAM6264,要求外部数据存储器占用从0000H开 始的连续地址空间。
读选通、写选通信号。
思考题: 请问执行 MOVX A,@DPTR指令时,RD和WR引脚的状态?
8.3 读写控制、地址空间分配和外部地址锁存器
8.3.1 存储器地址空间分配
存储器空间分配除考虑地址线连接外,还讨论各存储器芯片在整个存 储空间中所占据的地址范围。
单片机地址总线为16条,可寻址的最大空间为64KB,用户可根据系统的 需要确定扩展存储器容量的大小。
使用MOVX A,@Ri和MOVX @Ri,A。这时通过P0口输出Ri中 的内容(低8位地址),而把P2口原有的内容作为高8位地址 输出。
例8-4 将程序存储器中以TAB为首址的32个单元的内容依次传 送到外部RAM以7000H为首地址的区域去。
分析:DPTR指向标号TAB的首地址。R0既指示外部RAM的地址, 又表示数据标号TAB的位移量。本程序的循环次数为32,R0 的值:0~31,R0的值达到32就结束循环。程序如下:
MOV P2,#70H MOV DPTR,#TAB MOV R0,#0 AGIN: MOV A,R0 MOVC A,@A+DPTR MOVX @R0,A INC R0 CJNE R0,#32,AGIN HERE: SJMP HERE TAB: DB ……
C语言知识点归纳

(1)、 % : 要求运算对象为整数 (2)、条件运算符: ? : (3)、自增(减):自增自减只适用于变量,不适用于常量和表达式 (4)、a++: 先使用 a,然后再加 1, ++a 相反 (5)、指针*: 取指针所指向的变量的值 (6)、复合赋值:结合方向为自右向左 如 a=6 求 a+=a*=a%4
第七章 函数
一、函数不能嵌套定义,可以嵌套调用 二、函数的定义一般格式
函数类型 函数名(形参类型说明表) {
声明部分 语句部分 }
4
三 、形参与实参 形式参数:定义函数时函数名后面括号中的变量名 实际参数:调用函数时函数名后面括号中的表达式
说明: 实参必须有确定的值 形参必须指定类型 形参与实参类型一致,个数相同 若形参与实参类型不一致,自动按形参类型转换———函数调用转换 形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释 放
的判断与执行。
第六章 数组
一、数组概念: 数组是类型相同的数据的集合。其中每个数据称为元素。元素由统一的数组名和标识其
位置的下标来唯一地确定。 二、数组定义方法
如一维数组 int a[10]; 二维数组:int a[2][3] 在内存分配若干连续空间给数组 注意:常量表达式用方括弧括起来;[ ]中是常量或常量表达式 常量表达式为数组元素个数,即数组长度;其值从 0 开始. 数组类型为数组中每一个元素类型 三 、数组初始化方法 int a[3]={3,5,7} int a[2][3]={{1,2,3},{4,5,6}} 四、 数组的输入、输出方法: (1)、一维 单循环 如 for(i=0;i<10;i++)
专升本C语言考试大纲

专升本C语言考试大纲第一章 C语言概述(一)课程内容1 C语言的简史与特点2 一个简单的C程序3 程序的编辑,编译,链接和运行(二)考核知识点与考核要求1.程序设计,要求达到“识记”层次。
2.C语言的字符集,要求达到“领会”层次。
第二章数据类型,运算符与表达式(一)课程内容1 C数据类型2 常量与变量3运算符与表达式(二)考核知识点与考核要求1.C数据类型,要求达到“识记”层次。
2.常量与变量,要求达到“领会”层次。
3.运算符与表达式,要求达到“简单应用”层次。
第三章顺序程序设计(一)课程内容1 C语句的概述2 赋值语句3 数据输入输出的概念及在C语言中的实现4 字符数据的输入输出5 格式输入与输出(二)考核知识点与考核要求1.C语句的概述,要求达到“识记”层次。
2.赋值语句,要求达到“简单应用”层次。
3.格式输入与输出,要求达到“综合应用”层次。
第四章选择结构程序设计(一)课程内容1 if语句2 switch语句(二)考核知识点与考核要求if语句、switch语句,要求达到“综合应用”层次。
第五章循环控制(一)课程内容1 while语句2 do—while语句3 for语句4 循环的嵌套5 break语句和continue语句(二)考核知识点与考核要求1.while语句、do—while语句、for语句、break语句和continue语句,要求达到“综合应用”层次。
2. 循环的嵌套,要求达到“简单应用”层次。
第六章数组(一)课程内容1 一维数组2 多维数组3 字符数组(二)考核知识点与考核要求1一维数组的定义、元素的引用和初始化,要求达到“综合应用”层次。
2. 多维数组的定义、元素的引用和初始化,要求达到“简单应用”层次。
3字符数组的定义、元素的引用和初始化,要求达到“综合应用”层次。
4.字符数组的输入输出、字符串处理函数,要求达到“简单应用”层次。
第七章函数(一)课程内容1 概述2 函数定义的一般形式3 函数参数和函数值4 函数的调用5 函数的嵌套调用6 函数的递归调用7 数组作为函数参数8 局部变量和全局变量9 变量的存储类别(二)考核知识点与考核要求1.函数的定义和调用方法,要求达到“领会”层次。
第八章 FX2N系列可编程控制器应用指令及编程方法1-8节

返回第一张 上一张幻灯片 下一张幻灯片
X002
Y002
(a)
(b)
7 August 2013
返回第一张
上一张幻灯片 下一张幻灯片
第二节 程序流程类应用指令及应用
二、子程序指令及应用 1. 子程序指令的使用说明及其梯形图表示方法
子程序调用 FNC01 CALL 操作数:D(· 指针P0 ~ P62, ) 指针P64~P127 子程序返回 FNC02 SRET 无操作数
图8-12
7 August 2013
中断指令在梯形图中的表示
上一张幻灯片 下一张幻灯片
返回第一张
第二节 程序流程类应用指令及应用
2. 中断指令的执行过程及应用实例 ⑴ 外部中断子程序
在主程序段程序执行中,特殊辅 助 继 电 器 M8050 为 零 时 , 标 号 为 I001的中断子程序允许执行。该 中断在输入口X000送入上升沿信 号时执行。上升沿信号出现一次, 该中断执行一次。执行完毕后即 返回主程序。中断子程序的内容 为秒时钟脉冲继电器M8013驱动输 出继电器Y012工作。
⑶ 标号设在相关的跳转指令之后,也可以设在跳 转指令之前。
7 Байду номын сангаасugust 2013
返回第一张 上一张幻灯片 下一张幻灯片
第二节 程序流程类应用指令及应用
⑷ 使用CJ(P)指令时,跳转只执行一个扫描周 期,若用M8000作为跳转指令的工作条件,跳转就 成为无条件跳转。 ⑸ 跳转可用来执行程序初始化工作。
子程序是为一些特定的控制目的编制的相对独
立的程序。 规定在程序编排时,将主程序排在前边,子程序 排在后边, 并以主程序结束指令FEND(FNC06) 将两部分分隔开。
全国计算机二级考试C语言(最全复习资料)

第一部分 C语言知识复习资料第一章C语言基本知识【考点1】C程序用C语言编写的程序称为C语言源程序,源程序文件的后缀名为“.c”。
源程序经编译后生成后缀名为“.obj”的目标文件,再把目标文件与各种库函数连接起来,生成“.exe”可执行文件。
C语言有三种基本结构:顺序结构、选择结构、循环结构。
【考点2】main函数又称主函数,是C程序的入口。
main后面跟一对小括号和一对花括号,花括号括起来的部分称为main 函数的函数体。
一个C程序从main函数开始执行,到main函数体执行完结束,而不论main函数在整个程序中的位置如何。
每一个程序有且仅有一个main函数,其他函数都是为main函数服务的。
【考点3】存储形式计算机在电脑中保存数据是采用二进制形式,由0或1构成的二进制称为位(bit),八个位构成一个字节(Byte),1个Byte=8个bit。
二进制、八进制、十六进制转化为十进制采用乘法,十进制转化为二进制、八进制、十六进制采用除法。
数据的存放位置就是它的地址。
【考点4】注释是对程序的说明,可出现在程序中任意合适的地方,注释从“/*”开始到最近一个“*/”结束,其间任何内容都不会被计算机执行,注释不可以嵌套。
【考点5】书写格式每条语句的后面必须有一个分号,分号是语句的一部分。
一行内可写多条语句,一个语句可写在多行上。
【考点6】标识符是标识名字的有效字符序列,可以理解为C程序中的单词。
标识符的命名规则是:(1)标识符只能由字母、数字和下划线组成,字母区分大小写。
(2)标识符的第一个字符必须是字母或下划线,不能为数字。
C语言标识符分如下3类(1)关键字。
它们在程序中有固定的含义,不能另作他用。
如int、for、switch等。
(2)预定义标识符。
预先定义并具有特定含义的标识符。
如define、include等。
(3)用户标识符。
用户根据需要定义的标识符,符合命名规则且不与关键字相同。
【考点7】常量与变量常量是指在程序运行过程中,其值不能改变的量。
《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲课程名称:C语言程序设计课程类别:专业选修课适用专业:食品科学与工程考核方式:考试总学时、学分: 48学时 2.5 学分其中实验学时: 16学时一、课程教学目的高级语言程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行。
本课程旨在培养学生学会分析问题的方法和基本问题的解决能力, 初步了解程序设计的技巧和方法、掌握 C 语言的基本内容及程序设计的基本方法与编程技巧,并能够运用Microsoft Visual C++ 6.0集成开发工具编写一些小程序,为以后继续学习打下基础。
二、课程教学要求本课程主要通过适当的示例, 系统、详细地讲解程序设计的基础知识、 C 程序设计语言的基本语法、编程方法和常用算法。
通过教学的各个环节使学生达到各章中所提的基本要求。
讲授时应以培养学生的程序设计实际软件开发能力和实践应用能力为侧重点。
三、先修课程无四、课程教学重、难点重点:C语言中的逻辑值及表示方式,使用while语句、do-while语句和for语句构成的三种循环结构,常用库函数的调用方法,数组应用的基本算法;难点:指针变量的定义及基本操作;函数之间地址的传递。
五、课程教学方法与教学手段以黑板讲授和多媒体教学手段相结合的课堂教学。
通过典型的示例讲解、必要的现场实际操作演示、适量的课堂练习、课后的上机编程调试以及及时地辅导答疑,在教学过程中增强师生之间的互动性,充分发挥学生在学习过程中的自主性、能动性和创造性。
六、课程教学内容第一章程序设计基本概念(1学时)1. 教学内容程序设计的基本含义,算法的基本特点,算法的重要性,结构化程序设计的三种基本结构,使用流程图表示三种基本结构。
2. 重、难点提示重点是结构化程序设计等基本概念;难点是算法的概念。
第二章 C程序设计的初步知识(2学时)1. 教学内容简单C语言程序的构成和格式、标识符、常量和变量、整型数据、实型数据、算术表达式、赋值表达式、自加、自减运算符、强制类型转换和逗号表达式。
C语言程序设计(第八章)
的读写函数。 每次可从文件读出或向文件写入一个字符。
第八章
1.读字符函数fgetc()
fgetc() 函数的功能是从指定的文件中读一个字符,函
数调用的形式为:
字符变量 = fgetc(文件指针);
例如:
ch = fgetc(fp);
的意义是从打开的文件fp中读取一个字符并送入ch中 。
(1)字符读/写函数 :fgetc()/fputc()
(2)字符串读/写函数:fgets()/fputs()
(3)数据块读/写函数:freed/()fwrite()
(4)格式化读/写函数:fscanf()/fprinf()
以上函数原型都在头文件stdio.h中加以声明。
第八章
8.5.1字符读/写函数 :fgetc()/fputc()
关闭文件则断开指针与文件之间的联系,禁止再对该文
件进行操作。
第八章
8.3.1 文件打开的函数fopen()
open函数用于打开一个文件,其调用的一般形式为: 文件指针名 = fopen(文件名, 使用文件方式);
“文件指针名”:必须是被说明为FILE 类型的指针变量。
“文件名”:被打开文件的文件名,“文件名”是字符串常 量、字符数组或字符指针。 “使用文件方式”:指文件的类型和操作要求。
/* 输出系统提示信息 */
上面程序段的意义是,如果返回的指针为空,表示不能 打开test.dat文件,则给出提示信息“打开文件test.dat出 错!”,然后输出系统提示信息,当用户从键盘敲任一键后 执行exit(1)退出程序 。
第八章
8.3.2 文件关闭的函数fclose()
C语言程序设计教程第8章文件
8.2.1 文件的打开与关闭
2. 文件关闭函数fclose() 文件一旦使用完毕,为避免文件数据丢失等错误的发生, 可用文件关闭函数将其关闭。 函数调用的一般形式是: fclose(文件指针); 例如: fclose(fp); 正常完成关闭文件操作时,fclose()函数返回值为0, 如果返回非零值则表示有错误发生。
检查各种输入输出函数对文件进行读写时是否 出错,返回值为0表示未出错,否则表示有错。
8.2.2 文件检测与定位
2.文件的定位函数 在文件内部有一个位置指针,用来指向文件中当前被读写 的字节。 在文件打开时,该指针总是指向文件的第一个字节。 它不同于文件指针,文件指针是指向整个文件的,须在 程序中定义说明,只要不重新赋值,文件指针的值是不变的。 文件内部的位置指针是指示文件内部的当前读写位置, 比如每读写一次,该指针均会向后移动,它不需在程序中定 义说明,而是由系统自动设置的。
在stdio.h中定义了两个文件操作过程中经常用到的符号常量
8.2 文件操作
另外 在stdio.h中定义了两个文件操作过程中经常用到的符号常量 NULL:表示空指针,值为0 EOF: 表示文件末尾,值为-1 通过文件指针就可以完成对文件的操作 文件操作的过程一般有如下步骤:
1. 说明一个文件指针; 2. 通过文件名打开文件,并为文件指针赋值; 3. 通过文件指针对文件进行存取(即读或写操作) ; 4. 关闭文件。
8.2.1 文件的打开与关闭
1. 文件打开函数fopen()
文件在进行读写操作之前要先打开,使用完毕要关闭
所谓打开文件,实际上是建立文件的各种信息,并使 文件指针指向该文件,以便进行其它操作。 fopen()函数用来打开一个文件,其调用的一般形式为:
全国计算机等级考试二级C语言视频教程(完整版)
第一章程序设计的基本概念·01-01.程序设计的基本概念(1)·01-02.程序设计的基本概念(2)·01-03.程序设计的基本概念(3)第二章C语言基础知识·02-01.简单C语言的构成和格式(1)·02-02.简单C语言的构成和格式(2)·02-03.标识符的组成和分类·02-04.整型数据和实型数据(1)·02-05.整型数据和实型数据(2)·02-06.整型数据和实型数据(3)·02-07.整型数据和实型数据(4)·02-08.整型数据和实型数据(5)·02-09.整型数据和实型数据(6)·02-10.整型数据和实型数据(7)·02-11.算术表达式和赋值表达式(1)·02-12.算术表达式和赋值表达式(2)·02-13.算术表达式和赋值表达式(3)·02-14.算术表达式和赋值表达式(4)·02-15.自加自减运算·02-16.课后习题和典型例题讲解第三章C语言函数·03-01.输出函数(1)·03-02.输出函数(2)·03-03.输出函数(3)·03-04.输出函数(4)·03-05.输出函数(5)·03-06.输入函数(1)·03-07.输入函数(2)·03-08.输入函数(3)·03-09.输入函数(4)·03-10.程序举例·03-11.课后习题和典型例题详解第四章C语言表达式和简单语句·04-01.关系运算符和关系表达式(1)·04-02.关系运算符和关系表达式(2)·04-03.逻辑运算符和逻辑表达式(1)·04-04.逻辑运算符和逻辑表达式(2)·04-07.选择语句的使用(2)·04-08.选择语句的使用(3)·04-09.选择语句的使用(4)·04-10.goto语句和课后习题详解(1)·04-05.逻辑运算符和逻辑表达式(3)·04-06.选择语句的使用(1)·04-11.goto语句和课后习题详解(2)第五章C语言循环语句及实例演示·05-01.while语句和do-while语句(1)·05-02.while语句和do-while语句(2)·05-03.while语句和do-while语句(3)·05-04.while语句和do-while语句(4)·05-05.while语句和do-while语句(5)·05-06.for语句和累加累乘算法(1)·05-07.for语句和累加累乘算法(2)·05-08.for语句和累加累乘算法(3)·05-09.for语句和累加累乘算法(4)·05-10.for语句和累加累乘算法(5)·05-11.循环嵌套实例(1)·05-12.循环嵌套实例(2)·05-13.循环嵌套实例(3)·05-14.循环嵌套实例(4)·05-15.循环嵌套实例(5)·05-16.循环嵌套实例(6)·05-17.循环嵌套实例(7)·05-18.循环嵌套实例(8)·05-19.循环嵌套实例(9)·05-20.循环嵌套实例(10)·05-21.循环嵌套实例(11)·05-22.循环嵌套实例(12)·05-23.循环嵌套实例(13)·05-24.循环嵌套实例(14)·05-25.循环嵌套实例(15)·05-26.循环嵌套实例(16)·05-27.循环嵌套实例(17)·05-28.循环嵌套实例(18)·05-29.循环嵌套实例(19)·05-30.循环嵌套实例(20)·05-31.break语句和continue语句的使用方法·05-32.课后习题和典型例题的讲解(1)·05-33.课后习题和典型例题的讲解(2)第六章字符型常量和变量及输入输出函数·06-01.字符型常量和字符型变量(1)·06-02.字符型常量和字符型变量(2)·06-03.字符型常量和字符型变量(3)·06-04.字符型常量和字符型变量(4)·06-05.输入输出函数(1)·06-06.输入输出函数(2)·06-07.输入输出函数(3)·06-08.程序举例(1)·06-09.程序举例(2)·06-10.程序举例(3)·06-11.课后习题讲解和典型例题分析第七章C语言函数和程序设计实例·07-01.函数的定义和返回值(1)·07-02.函数的定义和返回值(2)·07-03.函数的定义和返回值(3)·07-04.函数的定义和返回值(4)·07-05.函数的调用和说明(1)·07-06.函数的调用和说明(2)·07-07.调用函数和被调用函数之间的数值传递(1)·07-08.调用函数和被调用函数之间的数值传递(2)·07-09.函数程序举例(1)·07-10.函数程序举例(2)·07-11.函数程序举例(3)·07-12.函数程序举例(4)·07-13.函数程序举例(5)·07-14.函数程序举例(6)·07-15.函数程序举例(7)·07-16.课后习题讲解第八章变量的地址和指针及指针操作举例·08-01.变量的地址和指针·08-02.指针的定义赋值(1)·08-03.指针的定义赋值(2)·08-04.指针的定义赋值(3)·08-05.对指针变量的操作(1)·08-06.对指针变量的操作(2)·08-07.对指针变量的操作(3)·08-08.对指针变量的操作(4)·08-09.指针在函数中的应用及举例(1)·08-10.指针在函数中的应用及举例(2)·08-11.指针在函数中的应用及举例(3)·08-12.课后习题讲解(1)·08-13.课后习题讲解(2)·08-14.课后习题讲解(3)第九章一维数组和二维数组中指针的应用实例·09-01.一维数组的定义和一维数组的引用(1)·09-02.一维数组的定义和一维数组的引用(2)·09-03.一维数组的定义和一维数组的引用(3)·09-04.一维数组和指针(1)·09-05.一维数组和指针(2)·09-06.函数之间对一维数组和数组元素的引用及实例(1)·09-07.函数之间对一维数组和数组元素的引用及实例·09-15.二维数组的定义和二维数组元素的引用(1)·09-16.二维数组的定义和二维数组元素的引用(2)·09-17.二维数组和指针以及二维数组程序举例(1)·09-18.二维数组和指针以及二维数组程序举例(2)·09-19.二维数组和指针以及二维数组程序举例(3)·09-20.二维数组和指针以及二维数组程序举例(4)·09-21.二维数组和指针以及二维数组程序举例(5)(2)·09-08.函数之间对一维数组和数组元素的引用及实例(3)·09-09.函数之间对一维数组和数组元素的引用及实例(4)·09-10.函数之间对一维数组和数组元素的引用及实例(5)·09-11.函数之间对一维数组和数组元素的引用及实例(6)·09-12.函数之间对一维数组和数组元素的引用及实例(7)·09-13.函数之间对一维数组和数组元素的引用及实例(8)·09-14.函数之间对一维数组和数组元素的引用及实例(9)·09-22.二维数组和指针以及二维数组程序举例(6)·09-23.二维数组和指针以及二维数组程序举例(7)·09-24.二维数组和指针以及二维数组程序举例(8)·09-25.二维数组和指针以及二维数组程序举例(9)·09-26.二维数组和指针以及二维数组程序举例(10)·09-27.课后习题讲解(1)·09-28.课后习题讲解(2)第十章字符串数组·10-01.用一个一维数组来存放字符串(1)·10-02.用一个一维数组来存放字符串(2)·10-03.字符串的输入和输出(1)·10-04.字符串的输入和输出(2)·10-05.字符串的输入和输出(3)·10-06.字符串数组(1)·10-07.字符串数组(2)·10-08.字符串数组(3)·10-09.字符串数组(4)·10-10.字符串数组(5)·10-11.用于字符串处理的函数(1)·10-12.用于字符串处理的函数(2)·10-13.用于字符串处理的函数(3)·10-14.用于字符串处理的函数(4)·10-15.用于字符串处理的函数(5)·10-16.用于字符串处理的函数(6)·10-17.实例讲解(1)·10-18.实例讲解(2)·10-19.课后习题的讲解第十一章main函数和函数的递归调用·11-01.传给main函数的参数(1)·11-02.传给main函数的参数(2)·11-03.通过实参向函数传递函数名或指向函数的指针变量(1)·11-04.通过实参向函数传递函数名或指向函数的指针变量(2)·11-05.函数的递归调用(1)·11-06.函数的递归调用(2)·11-07.函数的递归调用(3)·11-08.函数的递归调用(4)·11-09.函数的递归调用(5)·11-10.函数的递归调用(6)·11-11.课后习题讲解(1)·11-12.课后习题讲解(2)·11-13.课后习题讲解(3)第十二章局部变量、全局变量和生存期·12-01.局部变量、全局变量和存储分类·12-02.局部变量及其作用域和生存期(1)·12-03.局部变量及其作用域和生存期(2)·12-04.全局变量及其作用域和生存期(1)·12-05.全局变量及其作用域和生存期(2)·12-06.函数的存储分类·12-07.课后习题讲解(1)·12-08.课后习题讲解(2)·12-09.课后习题讲解(3)第十三章宏替换·13-01.宏替换(1)·13-02.宏替换(2)·13-03.宏替换(3)·13-04.宏替换(4)·13-05.文件包含和动态存储分配(1)·13-06.文件包含和动态存储分配(2)·13-07.文件包含和动态存储分配(3)·13-08.课后习题讲解(1)·13-09.课后习题讲解(2)·13-10.课后习题讲解(3)第十四章结构体·14-01.用typedef说明一种新类型名·14-02.结构体(1)·14-03.结构体(2)·14-04.结构体(3)·14-19.利用结构体变量构成链表(1)·14-20.利用结构体变量构成链表(2)·14-21.利用结构体变量构成链表(3)·14-05.结构体(4)·14-06.结构体(5)·14-07.结构体(6)·14-08.结构体(7)·14-09.结构体(8)·14-10.结构体(9)·14-11.结构体(10)·14-12.结构体(11)·14-13.结构体(12)·14-14.结构体(13)·14-15.结构体(14)·14-16.结构体(15)·14-17.结构体(16)·14-18.结构体(17)·14-22.利用结构体变量构成链表(4)·14-23.利用结构体变量构成链表(5)·14-24.利用结构体变量构成链表(6)·14-25.利用结构体变量构成链表(7)·14-26.利用结构体变量构成链表(8)·14-27.利用结构体变量构成链表(9)·14-28.利用结构体变量构成链表(10)·14-29.共用体和共用体变量的引用(1)·14-30.共用体和共用体变量的引用(2)·14-31.课后习题讲解(1)·14-32.课后习题讲解(2)·14-33.课后习题讲解(3)第十五章位运算符·15-01.位运算符及其功能(1)·15-02.位运算符及其功能(2)·15-03.位运算符及其功能(3)·15-04.课后习题讲解(1)·15-05.课后习题讲解(2)·15-06.课后习题讲解(3)第十六章C语言文件的概念和文件指针·16-01.C语言文件的概念和文件指针·16-02.打开和关闭文件(1)·16-03.打开和关闭文件(2)·16-04.打开和关闭文件(3)·16-05.打开和关闭文件(4)·16-06.六组文件函数的应用(1)·16-07.六组文件函数的应用(2)·16-08.六组文件函数的应用(3)·16-09.六组文件函数的应用(4)·16-10.六组文件函数的应用(5)·16-11.六组文件函数的应用(6)·16-12.六组文件函数的应用(7)·16-13.六组文件函数的应用(8)·16-14.课后习题讲解。
第八章查找习题_数据结构
3.一个无序序列可以通过构造一棵_ _ 为对无序序列进行排序的过程。
_ _树而变成一个有序序列,构造树的过程即
4. 哈希表是通过将查找码按选定的__
__和 __
__,把结点按查找码转
换为地址进行存储的线性表。哈希方法的关键是_
__和 __
__。一个好的
哈希函数其转换地址应尽可能__
__,而且函数运算应尽可能__
6. 略 7. 略
四、算法设计题 1. int Search(rectype r[ ],int n,keytype k)
//在 n 个关键字从小到大排列的顺序表中,查找关键字为 k 的结点。 {r[n+1].key=MAXINT;//在高端设置监视哨
i=1; while(r[i].key<k)i++; if (r[n+1].key==k) return (i%(n+1)); else return (0) }//算法 search 结束 查找过程的判定树是单枝树,限于篇幅不再画出。本题中虽然表按关键字有序,但进行 顺序查找,查找成功的平均查找长度亦为(n+1)/2。
三、应用题 1.哈希方法的平均查找路长主要取决于负载因子(表中实有元素数与表长之比),它反映了 哈希表的装满程度,该值一般取 0.65~0.9。
散列表存储中解决碰撞的基本方法: ① 开放定址法 形成地址序列的公式是:Hi=(H(key)+di)% m,其中 m 是表长, di 是增量。根据 di 取法不同,又分为三种: a.di =1,2,…,m-1 称为线性探测再散列,其特点是逐个探测表空间,只要散列表 中有空闲空间,就可解决碰撞,缺点是容易造成“聚集”,即不是同义词的关键字争夺同一 散列地址。 b.di =12,-12,22,-22,… ,k2(k≤m/2) 称为二次探测再散列,它减少了聚集, 但不容易探测到全部表空间,只有当表长为形如 4j+3(j 为整数)的素数时才有可能。 c.di =伪随机数序列,称为随机探测再散列。 ② 再散列法 Hi=RHi(key) i=1,2,…,k,是不同的散列函数,即在同义词产生 碰撞时,用另一散列函数计算散列地址,直到解决碰撞。该方法不易产生“聚集”,但增加 了计算时间。 ③ 链地址法 将关键字为同义词的记录存储在同一链表中,散列表地址区间用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章 指针
计算机的内存是以字节为单位的连续的存储空间,每个字节都有编号,这个编号称为内存地
址。
a10121013b101510161201120212031204x
C语言中定义了一种特殊的变量,只用来存放内存地址,称为指针变量。
p
2002p20021012a10121013
8.1 指针变量的定义
定义:类型名 *指针变量名
表示该变量为指向某类型变量的指针变量。
例如:int *pi, *pj;
注意:变量前的星号不可省略,若省略了星号说明符,就变成了把pi和pj定义为整型变量 。
int *p;
p只能指向整型变量的指针变量。(p只能存放整型变量的地址)
double *pd;
char *s1, *s2;
8.2 给指针变量赋值
1.通过求地址运算符(&)获得地址值
单目运算符&用来求出运算对象的地址。
int k = 1, *q, *p;
q = &k;
此时,scanf(“%d”,&k)和scanf(“%d”,q)是等价的。
2.通过指针变量获得地址值
可以通过赋值运算,把一个指针变量中的地址值赋给另一个指针变量,从而使这两个指针指
向同一地址。
p = q;
注意:当进行赋值运算时,赋值号两边指针变量的基类型必须相同。
8.3 对指针变量的操作
8.3.1 通过指针来引用一个存储单元
用单目运算符:“*”
例:
int *p, i = 10, j;
p = &i;
j = *p; (等价于j = i;)
单目运算符“*”必须出现在运算对象的左边,其运算对象是存放地址的指针变量或地址。
如:j = *(&i); j = i;
由于运算符*和&的优先级相同,且自右向左结合,因此表达式中的括号可以省略。即可写
成:j = *&i;
*p = *p + 1;
当*p出现在赋值号左边时,代表的是指针所指的存储单元;
当*p出现在赋值号右边时,代表的是指针所指的存储单元的内容;
*p + = 1; *p=11
+ + (*p) *p=11
(*p)+ +
++和*两个运算符的优先级别相同,按自右至左的方向结合,因此,++*p相当于++(*p)。
(*p) + +中的一对括号不可少
8.3.2 移动指针
移动指针:对指针变量加上或减去一个整数,或通过赋值运算,使指针变量指向相邻的存储
单元。
只有当指针指向一串连续的存储单元时,指针的移动才有意义
在对指针进行加、减运算时,数字“1”不再代表十进制整数“1”,而是指1个存储单元长
度。至于1个长度占多少字节的存储空间,则视指针的基类型而定。
int a=3,b=6,*p;
p=&a;
*p=*p*3;
p=&b;
*p=a-2;
printf("%d,%d",b,*p);
int a,b,m;
int *p1,*p2,*pm;
p1=&a,p2=&b,pm=&m;
scanf("%d%d",p1,p2);
*pm=*p1;
if(*p1>*p2) *pm=b;
printf("%d",m);
8.4 指针变量在函数中的应用
调用swap函数,交换主函数中变量x和y中的数据。
#include
void swap(int *,int *);
main()
{int x = 30,y = 20;
printf(“(1)x = %d y = %d\n”,x,y);
swap(&x,&y);
printf(“(4)x = %d y = %d\n”,x,y);
}
void swap(int *a,int *b)
{int t;
printf(“(2)a = %d b = %d\n”,*a,*b);
t = *a;
*a = *b;
*b = t;
printf(“(3)a = %d b = %d\n”,*a,*b);
}