程序设计基础第8章

合集下载

《C++程序设计》学习笔记总结 - 第八章 文件操作

《C++程序设计》学习笔记总结 - 第八章 文件操作

第八章文件操作一、文件基本概念和文件流类文件基本概念和文件流类从不同的角度来看待文件就可以得到不同的文件分类。

C++根据文件数据的编码方式不同分为文本文件和二进制文件。

根据存取方式不同分为顺序存取文件和随机存取文件所谓“文本文件”和“二进制文件”是从文件格式的角度进行分类,是约定俗成的、从计算机用户角度出发进行的分类。

所谓的“顺序存取文件”和“随机存取文件”是根据访问文件中数据的方式来划分的。

顺序存取文件就是按照文件中数据存储次序进行顺序操作,为访问第i 个数据,就首先要访问第i-1个数据,在整个文件操作过程中,将移动位置指针的工作交给系统自动完成。

磁带文件就是一个典型的顺序存取文件。

随机访问文件是根据应用的需要,通过命令移动位置指针直接定位到文件内需要的位置并进行数据操作。

对文件的基本操作分为读文件和写文件。

所谓“读文件”就是将文件中的数据读入内存之中,也称为“输入”。

所谓“写文件”就是将内存中的数据存入文件之中,也称为“输出”。

C++标准类库中有3个流类可以用于文件操作,这3个类统称为文件流类,分别如下:1)ifstream:用于从文件中读取数据。

2)ofstream:用于向文件中写入数据。

3)fstream:既可用于从文件中读取数据,又可用于向文件中写入数据。

使用这3个流类时,程序中需要包含fstream头文件。

类ifstream和类fstream都是从类istream派生而来的,因此类ifstream拥有类istream的全部成员函数。

同样,类ofstream和类fstream也拥有类ostream的全部成员函数。

这3个类中有一些十分熟悉的成员函数可以使用,如operator<<、operator>>、peek( )、ignore( )、getline( )、get( )等。

在程序中,要使用一个文件,必须包含3个基本步骤:打开(open)文件——操作文件——关闭(close)文件。

C语言程序设计 第八章 查表

C语言程序设计 第八章 查表

何谓查找表?查找表是由同一类型的数据元素(或记录)构成的集合。

由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的结构。

对查找表经常进行的操作:•1)查询某个“特定的”数据元素是否在查找表中;•2)检索某个“特定的”数据元素的各种属性;•3)在查找表中插入一个数据元素;•4)从查找表中删去某个数据元素。

查找表可分为两类:静态查找表仅作查询和检索操作的查找表。

动态查找表有时在查询之后,还需要将“查询”结果为“不在查找表中”的数据元素插入到查找表中;或者,从查找表中删除其“查询”结果为“在查找表中”的数据关键字是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。

若此关键字可以识别唯一的一个记录,则称之谓“主关键字”。

若此关键字能识别若干记录,则称之谓“次关键字”。

查找根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素或(记录)。

若查找表中存在这样一个记录,则称“查找成功”。

查找结果给出整个记录的信息,或指示该记录在查找表中的位置;否则称“查找不成功”。

查找结果给出“空记录”或“空指针”。

如何进行查找?查找的方法取决于查找表的结构。

由于查找表中的数据元素之间不存在明显的组织规律,因此不便于查找。

为了提高查找的效率,需要在查找表中的元素之间人为地附加某种确定的关系,换句话说,用另外一种结构来表示查找表。

9.1 静态查找表9.2 动态查找树表9.3 哈希表9.1静态查找表数据对象D :数据关系R :D 是具有相同特性的数据元素的集合。

每个数据元素含有类型相同的关键字,可唯一标识数据元素。

数据元素同属一个集合。

ADT StaticSearchTable {基本操作P:Create(&ST, n);Destroy(&ST); Search(ST, key);Traverse(ST, Visit()); } ADT StaticSearchTable构造一个含n 个数据元素的静态查找表ST 。

[Python程序设计基础(第2版)][李东方 (8)[47页]

[Python程序设计基础(第2版)][李东方 (8)[47页]

【例8-5】 用grid()方法排列标签,效果如图8-6所示。设想有一个3×4 的表格,起始行、列序号均为0。将标签lbred置于第2列第0行;将标签 lbgreen置于第0列第1行;将标签lbblue置于第1列起跨2列第2行,占 20像素宽
import tkinter root = () lbred = bel(root, text="Red",
# 创建一个320×240的窗体
8.1.2 tkinter常用控件
【例8-2】 标签及其常见属性示例
import tkinter root=() lb=bel(root,text='我是一个标签',\
bg='#d3fbfb',\ fg='red',\ font=('华文新魏',32),\ width=20,\ height=2,\ relief=tkinter.SUNKEN) lb.pack() root.mainloop()
8.1.3 控件布局 控件的布局通常有pack()、grid()和place()三种方法。 1.pack()方法 方法pack()是一种简单的布局方法,如果用不加参数的默认方式,将按布 局语句的先后,以最小占用空间的方式自上而下地排列控件实例,并且保 持控件本身的最小尺寸。 【例8-3】 用pack()方法不加参数排列标签。为看清楚各控件实例所占用 的空间大小,文本使用了不同长度的中英文,并设置 relief=tkinter.GROOVE的凹陷边缘属性
2.grid()方法 方法grid()是基于网格的布局。先虚拟一个二维表格,再在该表格中布局 控件实例。由于在虚拟表格的单元格中所布局的控件实例大小不一,单 元格也没有固定或均一的大小,因此其仅用于布局的定位。grid()方法与 pack()方法不能混合使用。 方法grid()常用的布局参数如下。

大学计算机基础 第8章 程序设计基础

大学计算机基础 第8章 程序设计基础
进行面向对象程序设计,应该采用面向对象的程序设计语言。一般而言, 面向对象的程序设计语言应该具有以下的特征:
(1)支持对象(Object)的有关概念。 (2)将对象抽象为类(Class)。 (3)类通过继承(ance)形成类层次。 (4)对象间通过传递消息(Message)而相互联系
是将某些对象的相同特征(属性和方法)抽取出来,形成的一个关于这些 对象集合的抽象模型。类具有封装性、继承性、多态性等3个特征。
3. 类(Class)和实例(Instance) 具有相同特性和行为的对象的抽象就是类。因此,对象的抽象是类,类的
具体化就是对象,也可以说类的实例是对象。对象具有所属类的全部属性、 事件和方法。 4. 消息(Message) 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的 这种相互合作需要有一个协调机制,这样的机制就称为“消息”,它是对 象之间进行通信的结构。
须能在有限的时间内完成。如果在数值计算过程中涉及到无穷数级的 情况,必须根据精度要求确定的计算过程才是有穷算法。 2.确切性,是指算法的每一步骤必须要有确切的定义,不能存在二义 性。 3.输入,是指算法在执行的过程中从外界获取的信息。一个算法可以 有0个或多个输入,当有0个输入时,是指算法本身指定了初始条件。 算法的执行结果总是与输入的初始数据相关的,不同的输入会产生不
算法写好后,要检查算法的正确性和完整性,然后再根据算法 用某种高级语言去编写程序。
8.2.3 常用的基本算法
(1)列举法 列举法通常用于解决“是否存在”或“有哪些可能”等问题。它的基
本思想是根据提出的问题,列举出所有可能的情况,并用问题中给定 的条件检验符合条件的解。列举法比较简单,在使用时,要对问题进 行详细的分析,将与问题有关的知识条理化、系统化,并从中找出规 律,优化方案减少运算工作量是应当注意的问题。 (2)归纳法 归纳是一种抽象,即从特殊现象中找出一般规律。归纳法的基本思想 是,通过分析列举的少量特殊情况,找出一般的关系。但这种方法得 到的结论只是一种猜测,还需要进行证明。

C语言程序设计 第3版 第8章 函数

C语言程序设计 第3版 第8章 函数

s=a+b;
return s;
}
main()
//主函数
{
int s;
s=sum();
printf("s=%d\n",s);
}
运行结果
2 3↙ s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名(形式参数表列) {
函数体; return 表达式; }
调用方式
函数调用的一般形式:
函数名(实际参数表) 实际参数表中的参数可以是常数、变量或表达式,各实参之间用逗号分隔。
调用方式:
(1)函数表达式:函数作为表达式中的一项出现在表达式中,这种方式要求函数有返回值。 例如:s=sum(x,y);把sum的返回值赋予变量s。
(2)函数语句:函数调用的一般形式加上分号即构成函数语句,这种方式不要求函数有返回值。 例如:sum(x,y);以函数语句的方式调用函数。
void sum(int a,int b) //自定义函数
{
int s;
s=a+b;
ห้องสมุดไป่ตู้
printf("s=%d\n",s);
} main()
//主函数
{
int x=2,y=3;
sum(x,y);
}
运行结果
s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名( ) {
函数体; return 表达式; }
注意说明:
(1)函数的类型实际上是函数返回值的类型。

C语言程序设计(第八章)

C语言程序设计(第八章)
字符读写函数fgetc()和fputc()是以字符(字节)为单位
的读写函数。 每次可从文件读出或向文件写入一个字符。
第八章
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()

大学计算机基础(第三版)-第8章 程序设计基础

大学计算机基础(第三版)-第8章 程序设计基础

算法的概念
用计算机解决问题的算法应具有以下特征:
有穷性
能行性
确定性
可输入输出信息
算法的表示
自然语言——使用人们能读懂的简短语句对算法的步骤 进行描述。
流程图法——用一些图框、线条以及文字说明来形象地、 直观地描述算法。 N-S流程图法—— 去掉了传统流程图中带箭头的流向线, 全部算法以一个大的矩形框表示,框内还可以包含一些从 属于它的小矩形框,适于结构化程序设计。 伪代码法—— 用介于自然语言和计算机语言之间的文 字和符号来描述算法。 计算机语言—— 用计算机语言描述算法,只有用计算 机语言编写的程序才能被计算机执行。
Hale Waihona Puke 算法的表示及三种基本结构1 顺 序 结 构
2 分 支 结 构
3 循 环 结 构
算法的表示及三种基本结构
(1)
顺序结构
块1
块2 块3
演示算法执行过程
【例】 求两数之和。
num115; num220; sumnum1+num2; 输出sum; 流程图
显示结果:35
num1 15 + num2 20 sum 35 寄存器 35
解释程序
高级语言源程序
计算结果
解释方式执行过程
程序设计语言的组成
一般来说,程序设计语言都应包含以下四 种成分:


数据成分 运算成分 控制成分 传输成分
用以描述程序中所涉及的数据 用以描述程序中所包含的运算 用以描述程序中的控制结构 用以表达程序中数据的传输
程序设计语言的组成
程序语言提供的数据类型:
8.1 程序设计的基本概念
语言 人类交流思想的工具
程序设计语言 人和计算机之间进行交流的语言

C语言程序设计教程第8章文件

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()函数用来打开一个文件,其调用的一般形式为:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。




8.1.2 指针的定义、初始化与应用
定义了指针 pi 并赋值后,内存的分配情况如图所示:
pi
*pi
8.1

1000
5
i(1000)


指针变量同普通变量一样,使用之前不仅要定义说

明,而且必须赋予具体的值。在定义指针变量时,可以

给指针变量赋一个初始值,这一过程称为初始化。未经 赋值的指针变量不能使用。指针变量只能赋予地址,不
使用指针变量作参数,在函数执行过程中能够使指针变量所指向的变 量值发生变化,从而在函数调用结束后这些变化后的值得以保存,并在
8.1
主调函数中使用它们。

【例】 指针作为函数参数示例。

参考程序:
运行结果:

void Doub(float *pNum) {
n=20.000000

*pNum=*pNum*2;

op1=&x;

op2=&y; if(x<y)

{op=op1;op1=op2;op2=op;}

/*两个指针变量交换,交换以后,op1指向存放大数的单元,op2指向 存放小数的单元*/

printf("x=%d,y=%d\\n",x,y);

printf("max=%d,min=%d\\n",*op1,*op2);
}
8.1.2 指针的定义、初始化与应用
运行结果: 128↙ 365↙ a=365,b=128 Max=365,min=128
x
op
op1 op2
op1 op2
y
128
op
op1
365
op2
128 365
8.1 指 针 与 指 针 变 量
8.1.3 指针变量作为函数参数
用指针变量作为函数的参数,形参和实参都应当为指针类型数据。
在C语言中,指针是一种特殊的变量,它是存放地址的。假设
8.1
我们定义了一个指针变量i_pointer用来存放整型变量的地址,

它被分配地址为(3010)、(3011)的两个字节。可以通过语句:

i_pointer =&i; 将i的地址(2000)存放到i_pointer中。这时, i_pointer的值就是 (2000) ,即变量i所占用单元的起始地址。要存取变量i的值,

} main()

{ float f=10.0;

Doub (&f);
printf("\nn=%f",f);
}
8.1.3 指针变量作为函数参数
8.1 指 针 与 指 针 变 量
所谓数组的指针是指数组的起始地址,数组元素的指针是 数组元素的地址。
8.2.1 指针数据元素的指针
8.2
一个数组是由连续的一块内存

单元组成的,数组名就是这块连续

内存单元的首地址。一个数组也是 由各个数组元素(下标变量)组成的,

每个数组元素按其类型不同占有几

个连续的内存单元。一个数组元素 的首地址也是指它所占有的几个内

定义指针变量的 一般形式为:
基本类型 *指针变量名;
与 指

下面都是合法的定义: float *op3; /*定义了一个实型指针变量*/ char *op4; /*定义了一个字符型指针变量*/
变 量
8.1.2 指针的定义、初始化与应用
定义指针变量时应注意以下几点:
1 指针变量前面的*表示要定义的是指针变量,而不是
8.1 指针与指针变量 8.2 指针与数据 8.3 指针与函数
8.4 指针与字符串
8.5
指针数组与指向 指针的指针
8.1.1 指针的概念
为了说清楚什么是指针,必须弄清楚数据在内存中是如何存
储的,又是如何读取的。
内存区的每一个字节有一个编号,这就是“地址” 。如果在
8.1
程序中定义了一个变量,在对程序进行编译时,系统就会给这个
与 指
可以采用间接方式:先找到存放“i的地址”的变量i_pointer ,

从中取出i的地址(2000),然后到2000 、 2001字节取出i的值

(3)。

8.1.1 指针的概念
8.1 指 针 与 指 针 变 量
8.1.2 指针的定义、初始化与应用
1.指针变量的定义
8.1
“先定义,后使用”


变量分配内存单元。

按变量地址存取变量值的方式称为“直接访问”方式


例如: printf(″%d″,i);
针 变
scanf(″%d″,&i);

返回
k=i+j;
8.1.1 指针的概念
另一种存取变量值的方式称为“间接访问”的方式。即, 将变量i的地址存放在另一个变量中
8.1







8.1.1 指针的概念

能赋予其它任何数据,否则将引起错误,这时就用到了

指针运算符&和*。
8.1.2 指针的定义、初始化与应用
(1)
Pf 是一个指针变 量,存放了变量f的指 针(也就是变上就是变 量f的值。因此,对 *pf 的赋值会直接改变 变量f的值。
8.1 指
算术运算中的乘号,指针变量名是*后面的标识符。

每定义一个指针变量,就要写一个*。


2
定义指针变量时必须指定其类型。指针数据都是地址,
原本是没有区别的。但不同的变量占据的内存大小不
针 变
同,其适合的操作也不同,在使用指针变量进行间接

访问操作时,必须知道其数据长度及适合运算,因此
必须指定其类型。
8.1.2 指针的定义、初始化与应用
3
各类型的指针变量只能指向同类型的变量。
8.1

2.指针变量的初始化和引用

C语言中有两个地址运算符,分别对应指针变量的两种运算:


&:取地址运算符,运算对象为变量,运算结

果为运算对象的内存地址。 例如:

int i,*pi;

pi=&i; /*pi指向i*/
(2)
8.1
*运算符的优先级比算 术运算符高,
指 针
因此,

*pf+1.0等价于 (*pf)+1.0。




8.1.2 指针的定义、初始化与应用
【例】输入两个整数 x 和 y,比较后降序输出。
include <stdio.h>
8.1
void main()

{
int *op1,*op2,*op,x,yscanf("%d%d",&x,&y);
8.1.2 指针的定义、初始化与应用
8.1
*:间接访问运算符,运算对象为指针变量,在一

个指针变量前加*,表示该指针所指向的内存单元的值。 也就是说,指针变量保存的是一个内存的起始地址,

指针变量加*后表示该地址所对应的存储单元的值。

例如:

*pi=5; /*间接访问pi,即以pi的内容1000为地址的存储 单元的内容为5*/
相关文档
最新文档