谭浩强C语言程序设计课件完整版第10章
合集下载
C语言程序设计_谭浩强_第二版_CH10
}
第十章 指针 10.3 数组的指针和指向数组的指针变量 10.3.2 通过指针引用数组元素 例10.5输出数组中的全部元素。 ②通过数组名计算数组中元素的地址,找出元素的值。
main() {
int a[10],i; for(i=0;i<10;i++){scanf(“%d”,&a[i]);} print(“\n”); for(i=0;i<10;i++){printf(“%d”,*(a+i));} print(“\n”);
}
运行结果为: 100,10 100,10
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.1 通过指针变量访问整型变量
pointer_1 &a
a 100 *pointer_1
pointer_2 &b
b 10 *pointer_2
第十章 指针 10.2 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 5 *pointer_1
pointer_2 &b
b 9 *pointer_2
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
b 5 *pointer_2
&b
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 9 *pointer_1
C语言程序设计(第四版) 谭浩强 课件 PPT 完整版
语句
printf语句中的“\n‖是换行
符
<
>
C语言程序设计
第/* example1.1 calculate the sum of a and b*/ #include <stdio.h> 预处理命令 /* This is the main program */ void main() 注释 { int a,b,sum; /*定义变量*/ 函数 a=10; b=24; 语句 sum=add(a,b); printf(”sum= %d\n",sum); } printf语句中的“ %d ‖是表
C语言程序设计
第一章 C语言概述
C语言结构特点
函数与主函数
程序由一个或多个函数组成 必须有且只能有一个主函数main(),可以放在程序中任一 位臵 程序执行从main开始,在main中结束,其它函数通过嵌 套调用得以执行。
程序语句
C程序由语句组成 用‚;‛作为语句终止符
注释
C语言程序设计
第一章 C语言概述
Turbo C集成开发环境
配臵要求
UNIX,PC-DOS,MS-DOS,UCDOS操作系统 硬盘容量约2M,448K RAM运行空间
安装Turbo C
创建子目录 Install 若不是可安装盘,将文件拷贝到对应的目录下
TC
*.* *.*
INCLUDE SYS
Alt +x Alt+F ,Q
帮助Help
F1 Ctrl+F1
<
>
C语言程序设计
第一章 C语言概述
常用热键 基本操作:
F10-----调用主菜单 F2------存盘 F3------打开 F1------帮助信息 Alt+F9------Compile Ctrl+F9------Run Alt+F5------User Screen Alt+X ------退出Tc
C语言谭浩强完整课件
2020/12/15
1.3 C语言的发展及其特点
➢C语言是国际上广泛流行的计算机高级
语言。 ➢C语言的发展:
具有多种数据类型
BCPL语言
B语言
C语言
2020/12/15
精练、接近硬件,但 过于简单, 无数据类型
1.3 C语言的发展及其特点
• 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。
2020/12/15
函数体
1.4.1 最简单的C语言程序举 例
#include <stdio.h>
int main( )
{
printf (”This is a C program.\n”);
return 0;
输出函数
}
2020/12/15
输出语句
1.4.1 最简单的C语言程序举 例
#include <stdio.h> int main( ) {
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 运算符丰富。 • 有34种运算符 • 把括号、赋值、强制类型转换等都作为运算符处理 • 表达式类型多样化
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 数据类型丰富。 • 包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型 • C99又扩充了复数浮点类型、超长整型(long long)、布尔类型(bool) • 指针类型数据,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
会自动地、有条不紊地进行工作 ➢计算机的一切操作都是由程序控制的,
离开程序,计算机将一事无成
2020/12/15
1.3 C语言的发展及其特点
➢C语言是国际上广泛流行的计算机高级
语言。 ➢C语言的发展:
具有多种数据类型
BCPL语言
B语言
C语言
2020/12/15
精练、接近硬件,但 过于简单, 无数据类型
1.3 C语言的发展及其特点
• 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的。
2020/12/15
函数体
1.4.1 最简单的C语言程序举 例
#include <stdio.h>
int main( )
{
printf (”This is a C program.\n”);
return 0;
输出函数
}
2020/12/15
输出语句
1.4.1 最简单的C语言程序举 例
#include <stdio.h> int main( ) {
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 运算符丰富。 • 有34种运算符 • 把括号、赋值、强制类型转换等都作为运算符处理 • 表达式类型多样化
2020/12/15
1.3 C语言的发展及其特点
• C语言主要特点: • 数据类型丰富。 • 包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型 • C99又扩充了复数浮点类型、超长整型(long long)、布尔类型(bool) • 指针类型数据,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。
会自动地、有条不紊地进行工作 ➢计算机的一切操作都是由程序控制的,
离开程序,计算机将一事无成
2020/12/15
C语言程序设计第四版PPT-谭浩强
文件f2的 文件信息区
文件f3的 文件信息区
文件的基本知识——文件的操作 写文件:打开-写-关闭 读文件:打开-读-关闭
文件的打开
功能:为文件建立相应的信息区(存放 文件信息)和文件缓冲区(暂时存放输入 输出的数据) 函数: fopen(文件名,使用文件方式); 例: fopen("a1.dat","r");
第10章 文件
本章内容
10.1 文件的基本知识 10.2 打开与关闭文件 10.3 顺序读写数据文件 10.4 随机读写数据文件 10.5 文件读写的出错检测
文件的基本知识——输入输出
之前各章中处理的数据 ➢输入:键盘->内存 ➢输出:内存->显示器 实际上也可能是 ➢输入:外部设备->内存(读文件) ➢输出:内存->外部设备(写文件) 操作系统把各种设备都统一作为文件处理
文件
顺序文件的读写——读写字符串
例10.3 从键盘输入3个字符串,排序,把排
序后的字符串写入文件(P.342-343) 读上面写好的文件(P.344)
顺序文件的读写——格式化读写
fprintf(文件指针,格式字符串,输出表列); fscanf (文件指针,格式字符串,输入表列);
例: fprintf (fp,"%d,%6.2f",i,f); fscanf (fp,"%d,%f",&i,&f);
用文件扩展名”
文件的基本知识——流式文件
C语言把文件看作是字符(或字 节)的序列。
文件以“流”的形式在程序与操 作系统间流动。
文件的基本知识——数据的形式
根据数据的组织形式,数据文件可分为 ASCII文件:数据逐个字符的ASCII码 输出到外存,也称文本文件 二进制文件:内存中二进制形式的数据 直接输出到外存
C语言程序设计 课件 第十章(适于清华谭浩强版)
定义了文件指针以后,意味着:开辟一 个FILE结构的空间,用指针fp指向它。
2021/7/13
4
10.3文件的打开与关闭
10.3.1 文件的打开 C语言的文件操作都用函数实现。 fopen()函数用来打开文件。
fp=fopen(文件名,使用文件方式); fp为已定义的文件指针。 例: FILE *fp;
数据块的读入和写出。
顺序文件。
fread(datapointer,size,count,fp)
fwrite(datapointer,size,count,fp)
其中,datapointer是读写存取数据的
地址。读入数据时,把要读入的数据存放
在它指定的区域。输出数据时,从该地址
指定的区域开始输出。
size * count 读写的总字节数。
使文件指针与文件“脱钩”,关闭以后,不
能再对该文件进行操作。
fclose函数
fclose(文件指针)
例如:fclose(fp);
文件操作的顺序:
打开——》处理——》关闭
保证文件操作的正常执行。
与缓冲区有关。
2021/7/13
8
10.4 文件的读写
10.4.1 fputc函数与fgetc函数
1、fputc()
第10章 文件
10.1 C文件概述
10.1.1 概念 存储在外部介质上数据的集合,是操作 系统管理数据的单位。 外部介质: 磁盘 (输入、输出都可)
终端键盘 ——输入文件 显示器 打印机 ——输出文件
2021/7/13
1
10.1.2 数据流
C语言把文件看作数据流。
字节的序列。
字节流或二进制流。
ASCII文件与二进制文件。
2021/7/13
4
10.3文件的打开与关闭
10.3.1 文件的打开 C语言的文件操作都用函数实现。 fopen()函数用来打开文件。
fp=fopen(文件名,使用文件方式); fp为已定义的文件指针。 例: FILE *fp;
数据块的读入和写出。
顺序文件。
fread(datapointer,size,count,fp)
fwrite(datapointer,size,count,fp)
其中,datapointer是读写存取数据的
地址。读入数据时,把要读入的数据存放
在它指定的区域。输出数据时,从该地址
指定的区域开始输出。
size * count 读写的总字节数。
使文件指针与文件“脱钩”,关闭以后,不
能再对该文件进行操作。
fclose函数
fclose(文件指针)
例如:fclose(fp);
文件操作的顺序:
打开——》处理——》关闭
保证文件操作的正常执行。
与缓冲区有关。
2021/7/13
8
10.4 文件的读写
10.4.1 fputc函数与fgetc函数
1、fputc()
第10章 文件
10.1 C文件概述
10.1.1 概念 存储在外部介质上数据的集合,是操作 系统管理数据的单位。 外部介质: 磁盘 (输入、输出都可)
终端键盘 ——输入文件 显示器 打印机 ——输出文件
2021/7/13
1
10.1.2 数据流
C语言把文件看作数据流。
字节的序列。
字节流或二进制流。
ASCII文件与二进制文件。
谭浩强C程序设计-课件第10章
(7) 重载的运算符必须和用户定义的自定义类型的对 象一起使用,其参数至少应有一个是类对象(或类对 象的引用)。也就是说,参数不能全部是C++的标准 类型,以防止用户修改用于标准类型数据的运算符 的性质。
(8) 用于类对象的运算符一般必须重载,但有两个例 外,运算符“=”和“&”不必用户重载。
① 赋值运算符(=)可以用于每一个类对象,可以利用 它在同类对象之间相互赋值。
(1) C++不允许用户自己定义新的运算符,只能对已 有的C++运算符进行重载。 (2) C++允许重载的运算符 C++中绝大部分的运算符允许重载。具体规定见书中 表10.1。 不能重载的运算符只有5个:
. (成员访问运算符) .* (成员指针访问运算符) ∷ (域运算符) sizeof (长度运算符) ?: (条件运算符)
而且与运算符函数的类型相同。因为必须通过类的 对象去调用该类的成员函数,而且只有运算符重载 函数返回值与该对象同类型,运算结果才有意义。 在例10.2中,表达式c1+c2中第一个参数c1是Complex 类对象,运算符函数返回值的类型也是Complex,这 是正确的。如果c1不是Complex类,它就无法通过隐 式this指针访问Complex类的成员了。如果函数返回 值不是Complex类复数,显然这种运算是没有实际意 义的。
cout<<″c2=″;c2.display( );
cout<<″c1+c2=″;c3.display( );
return 0;
}
运行结果与例10.1相同:
c1=(3+4i)
c2=(5-10i)
c1+c2=(8,-6i)
(8) 用于类对象的运算符一般必须重载,但有两个例 外,运算符“=”和“&”不必用户重载。
① 赋值运算符(=)可以用于每一个类对象,可以利用 它在同类对象之间相互赋值。
(1) C++不允许用户自己定义新的运算符,只能对已 有的C++运算符进行重载。 (2) C++允许重载的运算符 C++中绝大部分的运算符允许重载。具体规定见书中 表10.1。 不能重载的运算符只有5个:
. (成员访问运算符) .* (成员指针访问运算符) ∷ (域运算符) sizeof (长度运算符) ?: (条件运算符)
而且与运算符函数的类型相同。因为必须通过类的 对象去调用该类的成员函数,而且只有运算符重载 函数返回值与该对象同类型,运算结果才有意义。 在例10.2中,表达式c1+c2中第一个参数c1是Complex 类对象,运算符函数返回值的类型也是Complex,这 是正确的。如果c1不是Complex类,它就无法通过隐 式this指针访问Complex类的成员了。如果函数返回 值不是Complex类复数,显然这种运算是没有实际意 义的。
cout<<″c2=″;c2.display( );
cout<<″c1+c2=″;c3.display( );
return 0;
}
运行结果与例10.1相同:
c1=(3+4i)
c2=(5-10i)
c1+c2=(8,-6i)
C++_面向对象程序设计_谭浩强 第十章
‘ ‘ ‘t’ ‘ ‘ ‘y’ ’ ‘ ‘ ‘ ‘\ S’ u’ d’ C’ +’ +’ 0’
string
‘ ‘ ‘t’ ‘ ‘ ‘y’ ’ ‘ ‘ ‘ ‘\ S’ u’ d’ C’ +’ +’ 0’
new开辟的空间
Sp
Length=strlen(string); strcpy(Sp,string); Sp=new char[Length+1];
x=a; y=b; }
void Print(void){ cout<<x<<'\t'<<y<<endl; } }; void main(void) { } A a1; A a2(3.0,30.0);
error,定义时,没有构造函 数可供调用
3、在类中,若定义了没有参数的构造函数,或 各参数均有缺省值的构造函数也称为缺省的构造
A a1, a2;
对局部对象,静态对象,全局对象的初始化 对于局部对象,每次定义对象时,都要调用 构造函数。
对于静态对象,是在首次定义对象时,调用 构造函数的,且由于对象一直存在,只调用 一次构造函数。
对于全局对象,是在main函数执行之前调用 构造函数的。
class A
{ int x,y; public: A(int a){ x=a; cout<<“1\n”;} A(int a, int b) { x=a,y=b;cout<<“2\n”;}
3 5 0 0
析构函数
析构函数的作用与构造函数正好相反,是在对象的生 命期结束时,释放系统为对象所分配的空间,即要撤消一
个对象。
析构函数也是类的成员函数,定义析构函数的格式为: ClassName::~ClassName( ) { ...... // 函数体; }
C语言谭浩强完整课件
着广泛的应用。
计算机系统基本概念
计算机系统的组成
计算机系统由硬件系统和软件系统两大部分组成,硬件系统包括运算器、控制器、存储器 、输入设备和输出设备等五大部分;软件系统包括系统软件和应用软件两大类。
计算机的工作原理
计算机的工作原理可以概括为存储程序控制和程序控制流,即计算机通过执行存储在内存 中的程序来控制各部件协调工作。
在定义数组时,可以直接 对数组进行初始化,也可 以定义后再进行赋值。
一维数组的使用
通过下标访问数组元素, 下标从0开始,最大下标为 数组长度减1。
二维数组与多维数组
二维数组的定义
二维数组可以看作是一个 表格,由行和列组成,每 个元素都有两个下标。
二维数组的初始化
在定义二维数组时,可以 直接对数组进行初始化, 也可以定义后再进行赋值 。
scanf和printf函数都支持 格式化输入输出,可以通 过格式控制符指定输入输 出数据的类型和格式。
格式化输入
格式控制符
C语言提供了一组格式控制符,用于 指定输入输出数据的类型和格式,如 %d表示输入输出整数,%f表示输入 输出浮点数等。
格式化输入
格式化输出
使用printf函数进行格式化输出时, 可以指定输出数据的格式和显示方式 ,如控制小数位数、显示宽度等。
类型。
枚举常量的说明
在枚举类型定义中,可以列 出多个枚举常量,每个常量 对应一个整数值。默认情况 下,第一个枚举常量的值为0 ,后续常量的值依次递增1。
枚举变量的使用
声明枚举类型的变量后,可 以为其赋值。枚举变量的值 只能是枚举常量中定义的值 。使用枚举类型可以提高代 码的可读性和可维护性。
08
文件操作与数据处理
Visual_BASIC_PPT谭浩强第10章
10.1 驱动器列表框
驱动器列表框控件( 驱动器列表框控件(Drive List Box)在工具箱中的 ) 图标为 。我们通过一个简单的例题说明驱动器列 表框的作用。 表框的作用。
【例10.1】 在窗体上添加一个驱动器列表框,一个 】 在窗体上添加一个驱动器列表框, 退出”命令按钮。 “退出”命令按钮。当单击驱动器列表框中的某 个驱动器名称时,用消息框显示所选的驱动器。 个驱动器名称时,用消息框显示所选的驱动器。 用鼠标单击工具箱中的驱动器列表框图标, 用鼠标单击工具箱中的驱动器列表框图标,并用鼠 标在窗体上拖拉画出一个驱动器列表框( 标在窗体上拖拉画出一个驱动器列表框(见图 10.2)。 )。
图10.1
为了在应用程序中能处理文件, 提供了三种文件 为了在应用程序中能处理文件,VB提供了三种文件 系统控件:驱动器列表框、 系统控件:驱动器列表框、目录列表框和文件列 表框。 表框。利用它们可以自己设计出各种处理文件的 对话框。当然也可以直接利用在第7章介绍过的 对话框。当然也可以直接利用在第 章介绍过的 VB提供的标准“打开”(Open)、“另存为” 提供的标准“ )、“ 提供的标准 打开” )、 另存为” (Save As)对话框,但是,利用本章介绍的文件 )对话框,但是, 系统控件可以设计出满足用户特殊要求的、 系统控件可以设计出满足用户特殊要求的、具有 不同界面风格的对话框, 不同界面风格的对话框,利用它们进行文件管理 十分方便。 十分方便。
Path(路径)属性是目录列表框的重要属性之一, (路径)属性是目录列表框的重要属性之一, 用来设置和返回当前的路径。 用来设置和返回当前的路径。上面事件过程中的 dirTest.Path返回当前的路径。 返回当前的路径。 返回当前的路径 到目前为止, 到目前为止,窗体中的驱动器列表框和目录列表框 相互之间尚未建立联系,也就是说, 相互之间尚未建立联系,也就是说,改变驱动器 名时,目录列表框中内容不能随之变化。 名时,目录列表框中内容不能随之变化。若要把 驱动器列表框和目录列表框结合起来用, 驱动器列表框和目录列表框结合起来用,使二者 同步” 需要编写一段程序。 “同步”, 需要编写一段程序。 Private Sub drvTest_Change ( ) dirTest.Path = drvTest.Drive End Sub
清华谭浩强C语言教学-第10章 指针ppt课件
:
• main()
•
{ int num;
•
scanf("%d",&num);
•
printf("num=%d\n", num);
•
}
• C编译程序编译到该变量定义语句时,将变量num 登录到 “符号表〞中。符号表的关键属性有两个:一是“标识符名 〔id)” ,二是该标识符在内存空间中的“地址〔addr)” 。
:
:
(2〕间接访问──通过另一变量访问该变量的 值
C语言规定:在程序中可以定义一种特殊的变 量〔称为指针变量),用来存放其它变量的 地址。
例如,假设定义了这样一个指针变量 num_pointer,它被分配到4000、4001单元, 其 值 可 通 过 赋 值 语 句 “ num_pointer= & num;”得到。此时,指针变量num_pointer 的值就是变量num在内存中的起始地址2000.
:
10.2 变量的指针和指向变量的指
针变量
为表示指针变量和它指向的变量之间的关系,用指针运算符 “*”表示。
例如,指针变量num_pointer与它所指向的变量num的关系, 表示为:
*num_pointer,即*num_pointer等价于变量num。 因而,下面两个语句的作用相同:
num=3;
• 为描述方便,假设系统分配给变量num的2字节存储单元为 2000 和2019,则起始地址2000就是变量num在内存中的地址。
• 3.变量值的存取──通过变量在内存中的地址进行
• 系统执行“scanf(”%d“,&num);”和“printf(”num=%d\n“, num);”时,存取变量num值的方式可以有两种:
• main()
•
{ int num;
•
scanf("%d",&num);
•
printf("num=%d\n", num);
•
}
• C编译程序编译到该变量定义语句时,将变量num 登录到 “符号表〞中。符号表的关键属性有两个:一是“标识符名 〔id)” ,二是该标识符在内存空间中的“地址〔addr)” 。
:
:
(2〕间接访问──通过另一变量访问该变量的 值
C语言规定:在程序中可以定义一种特殊的变 量〔称为指针变量),用来存放其它变量的 地址。
例如,假设定义了这样一个指针变量 num_pointer,它被分配到4000、4001单元, 其 值 可 通 过 赋 值 语 句 “ num_pointer= & num;”得到。此时,指针变量num_pointer 的值就是变量num在内存中的起始地址2000.
:
10.2 变量的指针和指向变量的指
针变量
为表示指针变量和它指向的变量之间的关系,用指针运算符 “*”表示。
例如,指针变量num_pointer与它所指向的变量num的关系, 表示为:
*num_pointer,即*num_pointer等价于变量num。 因而,下面两个语句的作用相同:
num=3;
• 为描述方便,假设系统分配给变量num的2字节存储单元为 2000 和2019,则起始地址2000就是变量num在内存中的地址。
• 3.变量值的存取──通过变量在内存中的地址进行
• 系统执行“scanf(”%d“,&num);”和“printf(”num=%d\n“, num);”时,存取变量num值的方式可以有两种:
C程序设计 谭浩强著 精品课件 第10章 指针(1)
C 程序设计 第十章 指 针
11
【例】int *p1, *p2, a, b, c; float *p3, x, y; char *p4, ch; 说明: 1) 定义时每个指针变量都要用*号标识; 2) 定义形式决定p1~p4均为指向变量的指针变量; 3) 某种类型的指针变量只能指向同类型的变量; 如:p3只能指向float型的变量或下标变量。 4) 每个指针变量有各自的存储单元,在未赋值前其 值不定,不指向任何变量。
C 程序设计
/*↑输出指针表达式的值*/
第十章 指 针
14
赋值说明: 1) 不同类型的指针不能互相赋值; 若有:p3=&i; 可通过编译,但结果可能出错; 2) 指针变量重新赋值,将使其指向新的对象; 3) 尽管地址是正整数,但不能随意将一个整数赋给 指针变量,只能将有效的指针值赋给指针变量; 若:p1=100; 使p1指向了100号存储单元,而100号单元对用户 是不透明的,若出现利用p1向100号单元赋值的情况 将导致对系统或用户程序的破坏。 4) 用空指针初始化是安全的,如p1=0或p1=NULL。
C 程序设计 第十章 指 针
15
4. 指针变量的运算 指针变量可进行有限的算术和关系运算,并有自 己特定的运算规则; 1) 间接访问运算: *指针变量名
其中: 指针变量已指向了某个变量; *号:间接访问运算符;2级、单目、自右而左; 可出现在赋值号左边,或表达式的位置。 运算结果: 表达式位置:引用指针变量当前所指向变量的值; 赋值号左边:对指针变量当前所指向的变量赋值。
标识符 i j k a 地址 2000 2002 2004 2030
注:对于数组仅将起始地址记录在案。
C 程序设计 第十章 指 针
11
【例】int *p1, *p2, a, b, c; float *p3, x, y; char *p4, ch; 说明: 1) 定义时每个指针变量都要用*号标识; 2) 定义形式决定p1~p4均为指向变量的指针变量; 3) 某种类型的指针变量只能指向同类型的变量; 如:p3只能指向float型的变量或下标变量。 4) 每个指针变量有各自的存储单元,在未赋值前其 值不定,不指向任何变量。
C 程序设计
/*↑输出指针表达式的值*/
第十章 指 针
14
赋值说明: 1) 不同类型的指针不能互相赋值; 若有:p3=&i; 可通过编译,但结果可能出错; 2) 指针变量重新赋值,将使其指向新的对象; 3) 尽管地址是正整数,但不能随意将一个整数赋给 指针变量,只能将有效的指针值赋给指针变量; 若:p1=100; 使p1指向了100号存储单元,而100号单元对用户 是不透明的,若出现利用p1向100号单元赋值的情况 将导致对系统或用户程序的破坏。 4) 用空指针初始化是安全的,如p1=0或p1=NULL。
C 程序设计 第十章 指 针
15
4. 指针变量的运算 指针变量可进行有限的算术和关系运算,并有自 己特定的运算规则; 1) 间接访问运算: *指针变量名
其中: 指针变量已指向了某个变量; *号:间接访问运算符;2级、单目、自右而左; 可出现在赋值号左边,或表达式的位置。 运算结果: 表达式位置:引用指针变量当前所指向变量的值; 赋值号左边:对指针变量当前所指向的变量赋值。
标识符 i j k a 地址 2000 2002 2004 2030
注:对于数组仅将起始地址记录在案。
C 程序设计 第十章 指 针
C语言谭浩强完整课件
这种双重性,使它既是成功的系统描述 语言,又是通用的程序设计语言
1.3 C语言的发展及其特点
C语言主要特点:
用C语言编写的程序可移植性好。
C的编译系统简洁,很容易移植到新系统
在新系统上运行时,可直接编译“标准链接 库”中的大部分功能,不需要修改源代码
几乎所有计算机系统都可以使用C语言
1.4.1 最简单的C语言程序举例
#include <stdio.h>
int main( )
{ printf (”This is a C program.\n”); return 0; }
当main函数执行结束前 将整数0作为函数值
1.4.1 最简单的C语言程序举例
#include <stdio.h>
#include <stdio.h> int main( ) { int a,b,sum; a = 123; b = 456; 用sum的值替代 sum = a + b; printf(”sum is %d\n”,sum); return 0; 希望输出的字符 }
例1.3求两个整数中的较大者。 解题思路: 用一个函数实现求两个整数中的较大者 在主函数中调用此函数并输出结果
#include <stdio.h> int main( ) { 因max函数的定义在main函数之后,需声明 int max(int x,int y); int max(int x,int y) int a,b,c; scanf(”%d,%d”,&a,&b); { int z; c = max(a,b); printf("max=%d\n",c); if (x > y) z = x; else z = y; return 0; return(z); } }
1.3 C语言的发展及其特点
C语言主要特点:
用C语言编写的程序可移植性好。
C的编译系统简洁,很容易移植到新系统
在新系统上运行时,可直接编译“标准链接 库”中的大部分功能,不需要修改源代码
几乎所有计算机系统都可以使用C语言
1.4.1 最简单的C语言程序举例
#include <stdio.h>
int main( )
{ printf (”This is a C program.\n”); return 0; }
当main函数执行结束前 将整数0作为函数值
1.4.1 最简单的C语言程序举例
#include <stdio.h>
#include <stdio.h> int main( ) { int a,b,sum; a = 123; b = 456; 用sum的值替代 sum = a + b; printf(”sum is %d\n”,sum); return 0; 希望输出的字符 }
例1.3求两个整数中的较大者。 解题思路: 用一个函数实现求两个整数中的较大者 在主函数中调用此函数并输出结果
#include <stdio.h> int main( ) { 因max函数的定义在main函数之后,需声明 int max(int x,int y); int max(int x,int y) int a,b,c; scanf(”%d,%d”,&a,&b); { int z; c = max(a,b); printf("max=%d\n",c); if (x > y) z = x; else z = y; return 0; return(z); } }
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.3文件的读写
fputc(c,fp2); fclose(fp1); fclose(fp2); } system("cls"); printf("abc.txt:\n"); system("type abc.txt"); printf("\n\nxyz.txt:\n"); system("type xyz.txt"); */ } 运行结果如下:
10.2文件的打开与关闭
即先检查打开的操作有否出错,如果有错就在终端上输出 “cannot open this file”。Exit函数的作用是关闭所有文件,终 止正在调用的过程。待用户检查出错,修改后在运行。 2.文件的关闭(fclose函数) 使用完一个文件之后应该尽快关闭,以免数据丢失。 关闭一个文件使用fclose()函数实现,其格式如下: Fclose(文件指针) 文件指针:指明要关闭哪个文件,作为参数的文件指针必须是由打 开文件函数fopen()得到的。 例如: #include<stdio.h> main() { FILE *fp; … if(fp=fopen(“abc.txt,”“r”))==0) /*尝试打开文件*/
/* 调用DOS命令输出源文件内容*/ /* 调用DOS命令输出目标文件内容
10.3文件的读写
10.3.2 fgets()函数和fputs()函数
以字符为单位的fgetc()函数和fputc()函数一次只能读出或写入一个字 符到文件中,显然处理大量数据时效率不高,以字符串为单位的fgets()函 数和fputs()函数可以一次从文件输入或向文件输出一个字符串。 1.fgets ()函数 fgets()是从文件而不是从标准输入设备取得字符串。其格式如下: fgets(字符串指针,字符个数,文件指针); 其中第一个参数“字符串指针”,即一个字符组名或指向字符的指针, 用于存放读出的字符串;第二个参数指明读出多少个字符,是一个整型数; 第三个参数即目标文件的文件指针。 fgets()在遇到换行符或文件结束符时,即使已读取得字符数小于参数 中指定的数量也会自动停止。如程序设计者已经知道abc.txt文件不大于 100个字节,调用fgets()函数的第二个参数为100,使得整个文件被一次 读取。若abc.txt文件大于100字节,则后面的内容没有被读取。如果 fgets()读取到文件结束符,将会返回一个NULL值。可以据此判断是否到 达文件尾部,使用循环语句读出整个文件。若目标文件的结构不清晰,一 般使用fgetc()函数逐个字符读取,逐个处理。在预先知道目标文件结构的 情况下,使用fgets()函数能提高效率。
10.3文件的读写
对文件来说,读写操作是非常重要的,常用的读写函数如下:
10.3.1 fgetc()函数和fputc()函数
对文件的操作时一次读写一个字符。 1.fgetc()函数 从指定的文件读取一个字符,该文件必须是以读或读写方式打开的。其格 式如下: char c; c = fgetc(文件指针) 文件指针:指向一个已打开的文件,ch为字符变量。fgetc函数的返回值是 一个字符,赋给ch。如果在执行fgetc函数读字符时遇到文件结束符,函数 返回一个文件结束标志EOF(-1)。如果想从一个磁盘文件顺序读入字符 并在屏幕上显示出来,可以如下操作: ch=fgetc(文件指针); while(ch! = EOF) { putchar(ch); ch=fgetc(文件指针); }
10.2文件的打开与关闭
{ 文件打开错误处理 else { /*打开文件成功*/ … 读写文件操作 … fclose(fp); } … } 以上程序由打开文件函数fopen()和关闭文件函数fclose()共同构成了 包含文件操作的C语言程序框架。abc.txt是文件名。 应该养成在程序终止之前关闭所有文件的习惯,如果不关闭文件将会丢失 数据,因为,在向文件写数据时,是先将数据输到缓冲区,待缓冲区充满 后才正式输出给文件。如果当数据未充满缓冲区而程序结束运行,就会将 缓冲区中的数据丢失。用fclose函数关闭文件,可以避免这个问题,它先 把缓冲区中的数据输出到磁盘文件,然后才在释放文件指针变量。
“Hale Waihona Puke b+”“ab+”
以读写方式建立一个新的二进制文件。
以读写方式打开一个二进制文件。
10.2文件的打开与关闭
例如: fp = fopen(“abc.txt”,”r”) /* 以只读方式打开abc.txt文件*/ fp = fopen(“abc.c”,”r+”) /*以读写方式打开abc.c文件*/ fopen() 函数的返回值是一个文件信息结构体的地址,该文件信息结 构体是描述目标文件的相关信息。调用fopen()函数前必须声明一个文件指 针,并使用文件指针接受fopen()函数的返回值。文件指针被赋值后,程序 中就通过这个文件指针对目标文件进行操作。若不使用文件指针接受 fopen()函数的返回值,则无法对已打开的文件进行访问,调用fopen()函 数也是无意义的。 如果不能实现“打开”的任务,fopen函数将会带回一个出错信息。 出错的原因可能是用“r”方式打开一个并不存在的文件;磁盘出故障;磁 盘已满无法建立新文件等。此时fopen函数将带回一个空指针值 NULL(NULL在stdio.h文件中已被定义为0)。 常用下面的方法打开一个文件: if((fp=fopen(“file”,”r”))==NULL) { printf(“cannot open this file\n”); exit(0); }
10.2文件的打开与关闭
表9.1
打开方式标识符 “r” “w” “a” “r+” “w+” “a+” “rb” “wb” “ab” “rb+” 含义 以只读方式打开一个文本文件。 以只写方式打开一个文本文件。 以追加方式打开一个文本文件。 以读写方式打开一个文本文件。 以读写方式建立一个新的文本文件。 以读写方式建立一个文本文件。 以只读方式打开一个二进制文件。 以只写方式打开一个二进制文件。 以追加方式打开一个二进制文件。 以读写方式打开一个二进制文件。
10.3文件的读写
2.fputs()函数 fputs()函数用于向文件写入字符串,它的使用格式如下: fputs(字符串,文件指针); 第一个参数可以是一个字符串,也可以是一个字符数组或指向字符 的指针;第二个参数是文件指针。 例如: char c[100]; char *s; fputs(“Hello”,fp); /*将字符串“Hello”写到fp所指文件中 */ fputs(*s,fp); /*将字符指针s所指的字符串写到fp所 指文件中*/ fputs(c,fp); /*将字符数组c的内容写到fp所指文件中*/ 下面的程序利用fgets()函数和fputs()函数实现了复制文件的功能, 源文件为abc.txt,目标文件为xyz.txt。
10.3文件的读写
注意:EOF不是可输出字符,因此不能在屏幕上显示。由于字符的 ASCII码不可能出现-1,因此EOF定义为-1是合适的。当读入的字符值等 于-1(即EOF)时 ,表示读入的已不是正常的字符而是文件结束符。但以 上只使用于读文本文件的情况。现在 ANSI C已允许用缓冲文件系统处理 二进制文件,而读入某一个字节中的二进制数据的值有可能是-1,而这又 恰好是EOF的值。这就出现了需要读入有用数据而却被处理为“文件结束” 的情况。为了解决这个问题,ANSI C提供一个feof函数来判断文件是否真 的结束。feof(fp)用来测试fp所指向的文件当前状态是否“文件结束”。如 果是文件结束,函数feof(fp)的值为1(真),否则为0(假)。 如果读入一个二进制文件中的数据,可以用 while(! feof(fp)) {c=fgetc(fp); … } 2.fputc()函数 把一个字符写到磁盘文件上去,其格式如下: fputc(字符,文件指针); 例如向文件指针fp所指的文件写入字符‘c‟的语句是: fputc(„c‟,fp);
10.3文件的读写
如果函数调用成功,则返回写入的字符;如果失败,则返回EOF(-1)。 下面的程序实现了复制文件的功能,源文件为c:\tc\abc.txt,目标文件为 c:\tc\xyz.txt。 例10.1 程序举例 #include<stdio.h> main() { FILE *fp1,*fp2; /* 声明两个文件指针,分别用于源文件和目标 文件*/ char c; if((fp1=fopen("abc.txt","r"))==NULL || (fp2=fopen("xyz.txt", "w+"))==NULL) /* 同时打开源文件和目标文件,分别为只读方式和新建文件方式*/ printf("File Open Error\n"); else { while ((c=fgetc(fp1))!=EOF) /* 循环从源文件读入字符,遇到文件 结束符停止*/
10.1文件概述
4)文本文件可以直接在屏幕上显示文件内容;二进制文件虽然可以显示, 但显示的内容无意义 2.文件类型指针 在C语言中引入了文件指针的概念,所有对文件的操作都通过文件指针完 成。 文件指针类似于C语言中的普通指针,但文件指针不是指向一段内存 空间,而是指向一个文件信息结构体,该结构体描述一个文件的相关信息, 其定义在stdio.h头文件中。用户无需了解有关此结构体的细节,只需要 知道如何使用文件指针即可。 声明一个文件指针使用以下语句: FILE * 文件指针名 1)要使用文件指针进行文件相关操作必须在程序中包含stdio.h头文件。 2)“FILE”全是大写字符,若改成小写字母是错误的。 3)声明一个文件指针后,就可以使用各种函数打开、关闭文件以及进行读 写操作。 C语言中,对文件的基本操作可以说就是文件的打开和关闭、文件的 读写等操作。