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完整全套教学课件
联合体定义和使用场景分析
联合体定义
使用`union`关键字定义联合体类型,指定联合体名 称和成员列表。
内存共享
联合体的所有成员共享同一块内存空间。
使用场景
适用于多种数据类型但只需存储其中一种的场景, 如混合类型的数据存储和处理。
枚举类型定义及应用举例
枚举类型定义
使用`enum`关键字定义枚举类型,指定枚举名称和枚举常量列表。
01
跳转语句的概念和 特点
改变程序执行流程,实现程序的 跳转。
02
跳转语句的语法和 示例
break语句、continue语句、 goto语句等。
03
跳转语句的应用场 景
适用于需要中断循环、跳过某些 操作等特殊情况。
04
函数与模块化设计
函数定义和调用
函数定义的基本语法
返回类型 函数名(参数列表) { 函数体 }
将数组元素作为实参传递给形参,形参和实参类型必须一致;
数组名作为函数参数
将数组名作为实参传递给形参,形参和实参类型可以不一致,但形 参数组的大小必须大于等于实参数组的大小;
多维数组作为函数参数
多维数组可以作为函数参数传递,但需要注意多维数组的传递方式 和一维数组的传递方式不同。
06
指针与动态内存管理
02
数据类型、运算符与表达式
基本数据类型
01
整型(int)
02
浮点型(float、 double)
字符型(char)
03
04
布尔型(bool)
常量与变量
常量
在程序运行过程中,其值不能被改变 的量。
变量
在程序运行过程中,其值可以被改变 的量。
运算符和表达式
谭浩强C语言程序设计课件完整版第10章
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()函数能提高效率。
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章
fp:已经打开的文件指针。
函数功能:
关闭fp指定的文件,释放该文件的缓冲区、 FILE类型变量及文件指针。
若文件关闭成功,则返回0; 若文件关闭失败,则返回非0值。
4/1/2020
10.2 文本文件的读写
18
10.2.1 文件的字符输入输出函数
1. 字符输对出文函本数文f件pu的tc读( )写(操或作pu,tc必( )须)按文件中
函数功能:
按指定的文件使用方式打开指定的文件。 若文件打开成功,为该文件分配一个文件缓冲区和一个 FILE类型变量,返回一个FILE类型指针; 若文件打开失败,返回NULL。
4/1/2020
10.1 文件的概述
13
10.1.2 文件的打开与关闭
文本文件的三种基本使用方式 ”r”:只读方式
为读(输入)文本文件打开文件。若文件不存在, 返回NULL。
char filename[40];
/* filename用于存放数据文件名 */
printf("filename: ");
/* 提示输入磁盘文件名 */
gets(filename);
测试打开文件
if ((fp=fopen(filename,"w"))==NULL)
是否成功
{ printf("Can't open the %s\n", filename);
① 标准输入文件,文件指针为stdin,系统指定为 键盘。
② 标准输出文件,文件指针为stdout,系统指定为 显示器。
③ 标准错误输出文件,文件指针为stderr,系统指 定为显示器,输出错误信息。
4/1/2020
10.1 文件的概述
函数功能:
关闭fp指定的文件,释放该文件的缓冲区、 FILE类型变量及文件指针。
若文件关闭成功,则返回0; 若文件关闭失败,则返回非0值。
4/1/2020
10.2 文本文件的读写
18
10.2.1 文件的字符输入输出函数
1. 字符输对出文函本数文f件pu的tc读( )写(操或作pu,tc必( )须)按文件中
函数功能:
按指定的文件使用方式打开指定的文件。 若文件打开成功,为该文件分配一个文件缓冲区和一个 FILE类型变量,返回一个FILE类型指针; 若文件打开失败,返回NULL。
4/1/2020
10.1 文件的概述
13
10.1.2 文件的打开与关闭
文本文件的三种基本使用方式 ”r”:只读方式
为读(输入)文本文件打开文件。若文件不存在, 返回NULL。
char filename[40];
/* filename用于存放数据文件名 */
printf("filename: ");
/* 提示输入磁盘文件名 */
gets(filename);
测试打开文件
if ((fp=fopen(filename,"w"))==NULL)
是否成功
{ printf("Can't open the %s\n", filename);
① 标准输入文件,文件指针为stdin,系统指定为 键盘。
② 标准输出文件,文件指针为stdout,系统指定为 显示器。
③ 标准错误输出文件,文件指针为stderr,系统指 定为显示器,输出错误信息。
4/1/2020
10.1 文件的概述
C程序设计课件第10章
第一次读了第100个成分 然后再读第3个成分 然后再用一个新的数据修改第50 成分 将其写入第50个成分中 然后又读第200个成分...,等等。 这是允许的,并且是正确的。
普通文件和设备文件
普通文件是指驻留在磁盘或其它外部介质上的一 个有序数据集,可以是源程序文件、目标程序文 件、可执行程序文件;也可以是一组待输入处理 的原始数据,或者是一组输出的结果。
同时,将读写位置指针向前移动size* count个字节。
一般来讲,数组buf每个元素的尺寸为size ,每个字段正好对 应数组buf的一个元素;即读入count个字段送入数组buf的 count个元素中。
写数据块
函数原型:
int fwrite( void *buf, int size, int count, FILE *fp );
库函数本身并不属于语言,它是系统根据需要提供给 用户使用的函数。C 标准定义了常用的函数库和每个函 数库中常用的库函数。但是不同的编译系统提供的函数 库不同,不同编译系统在每个函数库中提供的库函数也 不同。为了提高程序的可移植性,用户应该只使用 C 标准定义的函数库和库函数。
对应每个函数库,有一个头文件,在头文件中包 含相应函数库中所有函数的函数原型。用户使用 库函数时,需要把相应的头文件用 #include 命 令括入到自己的程序文件中。
test.c 表示相对于节 E:\doc\programing的相对文件名
顺序文件和随机文件
顺序文件的特点:文件分成两种模式
读模式 写模式 在任意时刻,一个顺序文件只能处于两种模式之一。当
一个顺序文件处于读模式时,只能从该文件读数据。
反之,当一个顺序文件处于写模式时,只能向该文件写 数据。
从操作角度看,顺序文件只能顺序操作。
普通文件和设备文件
普通文件是指驻留在磁盘或其它外部介质上的一 个有序数据集,可以是源程序文件、目标程序文 件、可执行程序文件;也可以是一组待输入处理 的原始数据,或者是一组输出的结果。
同时,将读写位置指针向前移动size* count个字节。
一般来讲,数组buf每个元素的尺寸为size ,每个字段正好对 应数组buf的一个元素;即读入count个字段送入数组buf的 count个元素中。
写数据块
函数原型:
int fwrite( void *buf, int size, int count, FILE *fp );
库函数本身并不属于语言,它是系统根据需要提供给 用户使用的函数。C 标准定义了常用的函数库和每个函 数库中常用的库函数。但是不同的编译系统提供的函数 库不同,不同编译系统在每个函数库中提供的库函数也 不同。为了提高程序的可移植性,用户应该只使用 C 标准定义的函数库和库函数。
对应每个函数库,有一个头文件,在头文件中包 含相应函数库中所有函数的函数原型。用户使用 库函数时,需要把相应的头文件用 #include 命 令括入到自己的程序文件中。
test.c 表示相对于节 E:\doc\programing的相对文件名
顺序文件和随机文件
顺序文件的特点:文件分成两种模式
读模式 写模式 在任意时刻,一个顺序文件只能处于两种模式之一。当
一个顺序文件处于读模式时,只能从该文件读数据。
反之,当一个顺序文件处于写模式时,只能向该文件写 数据。
从操作角度看,顺序文件只能顺序操作。
C语言程序设计ppt课件
发展
随着计算机技术的不断发展,C语言也在不断演进,出现了C89、C99、C11等版本,增加了许多新特性和功能。
C语言的历史与发展
C语言是一种编译型语言,代码执行效率高,适合开发对性能要求较高的应用。
高效性
C语言提供了丰富的数据类型和运算符,支持结构化编程和模块化设计,方便程序员灵活应对各种复杂问题。
用于进行基本的数学运算,如加(+)、减(-)、乘(*)、除(/)等。
算术运算符
关系运算符
逻辑运算符
表达式
用于比较两个值的大小关系,如等于(==)、不等于(!=)、大于(>)、小于(<)等。
用于组合多个条件,如逻辑与(&&)、逻辑或(||)等。
由运算符和操作数组成的式子,如`a + b`、`x > y`等。
函数的返回值
03
函数可以返回一个值给调用者,通过`return`语句实现。返回值的类型应与函数定义时的返回类型一致。
函数的定义与调用
将实参的值复制给形参,形参的改变不会影响实参。这是C语言默认的参数传递方式。
值传递
通过指针传递实参的地址给形参,形参可以通过指针间接访问和修改实参的值。这种方式可以实现数据的双向传递。
rowSize:数组的行数。
colSize:数组的列数。
二维数组的访问:通过行下标和列下标访问数组元素,下标从0开始。
二维数组的应用:用于存储表格数据、矩阵运算等。
二维数组的初始化:可以在定义时直接初始化,也可以在定义后逐个赋值。
字符串的处理函数
C语言提供了一系列字符串处理函数,如strlen、strcpy、strcat、strcmp等,用于实现字符串的长度计算、复制、连接、比较等操作。
C语言程序设计PPT
p->next=r->next; 点*/ r->next=p; /*将*r的指针域指向*p*/ /*将*p的指针域指向*r的下一个结
说明:在链表中插入新结点并不需要移动链表中的元素,
只需要修改指针的指向即可。
15.2 链表的操作
15.2.5 链表的删除操作
删除链表中元素值为’a’的结点,操作过程如图15.8所示。
15.1 链表的相关概念
函数malloc常常与运算符sizeof配合使用。例如,要分配
一个大小为40的int型的内存空间,代码如下:
int *p; p=(int*)malloc(sizeof(int)*40);
15.1 链表的相关概念
2。free函数──动态内存释放函数
函数free的主要作用是将动态分配的内存空间释放。它的 函数原型如下: void free(void *p);
r->next=p->next; /*删除p指向的结点,使*p脱链*/ free(p); /*释放p指向的结点的内存空间*/
15.2 链表的操作
15.2.6 链表的应用举例——学生信息管理系统 【例15.2】建立一个学生信息管理系统,管理系统有一 个目录菜单,包括6个选项: 1.建立学生信息链表 2.插入一名新的学生 3.从链表中删除学生 4.在链表中查找学生; 5.在链表中浏览信息; 6.退出程序结束操作 根据需要选择其中一项,来实现链表的创建、结点插 入、信息查找、删除结点、浏览信息、退出功能。学 生信息包括学号和姓名。
15.1 链表的相关概念
struct student /*定义结点类型*/ { char data; /*数据域*/ struct student *next; /*next是指针域,指向结 构体类型struct student*/ };
说明:在链表中插入新结点并不需要移动链表中的元素,
只需要修改指针的指向即可。
15.2 链表的操作
15.2.5 链表的删除操作
删除链表中元素值为’a’的结点,操作过程如图15.8所示。
15.1 链表的相关概念
函数malloc常常与运算符sizeof配合使用。例如,要分配
一个大小为40的int型的内存空间,代码如下:
int *p; p=(int*)malloc(sizeof(int)*40);
15.1 链表的相关概念
2。free函数──动态内存释放函数
函数free的主要作用是将动态分配的内存空间释放。它的 函数原型如下: void free(void *p);
r->next=p->next; /*删除p指向的结点,使*p脱链*/ free(p); /*释放p指向的结点的内存空间*/
15.2 链表的操作
15.2.6 链表的应用举例——学生信息管理系统 【例15.2】建立一个学生信息管理系统,管理系统有一 个目录菜单,包括6个选项: 1.建立学生信息链表 2.插入一名新的学生 3.从链表中删除学生 4.在链表中查找学生; 5.在链表中浏览信息; 6.退出程序结束操作 根据需要选择其中一项,来实现链表的创建、结点插 入、信息查找、删除结点、浏览信息、退出功能。学 生信息包括学号和姓名。
15.1 链表的相关概念
struct student /*定义结点类型*/ { char data; /*数据域*/ struct student *next; /*next是指针域,指向结 构体类型struct student*/ };
相关主题