C语言程序设计课件第9章091105详解
合集下载
C语言程序设计第9章.ppt

13
文件的读写(四)
④ 读写一个“记录”(成“块”读写) P317 适用于结构体等复杂实体。 写入 fread(p,size,n,fp) 读入 fwrite(p,size,n,fp) p-实体指针 size-字节数 n-多少次 fp-文 件指针 调用成功,返回n值。
示例: P318例13.3
14
} fclose(fpr);
果。
fclose(fpw);
11
}
#define NULL 0
#include <stdio.h>
FILE *fp;
char *s="123";
main()
{
char ch;
示
clrscr(); if ((fp=fopen("d:\\tc\\a.dat",“w+")) ==NULL)
3
磁盘文件分类
按其存储方式,C文件可以分为: ASCII文件(文本文件)
按数据的ASCII编码方式存放(可用文字编辑软件如 “记事本”打开来看)。 二进制文件 按数据在内存中存储的形式原样存放(0和1的集合) C系统在处理这些文件时,并不区分类型,都看成 是字符流(即以字节为存取单位)。输入输出字符 流的开始和结束只由程序控制而不受物理符号(如 回车符)的控制,故称“流式文件”。
}
12
文件的读写(三)
③ 格式化读写 P321 适用于一般实体,如数值型变量。 fscanf(fp,“%d,%f”,&a,&b); 将磁盘文件中的数据送给变量a,下一个送给变量b fprintf(fp,“%d,%6.2f”,a,b); 将变量a和b按%d和%f格式输出到fp所指文件上 比较:scanf(“%d,%f”,&a,&b); printf(“%d,%6.2f”,a,b);
文件的读写(四)
④ 读写一个“记录”(成“块”读写) P317 适用于结构体等复杂实体。 写入 fread(p,size,n,fp) 读入 fwrite(p,size,n,fp) p-实体指针 size-字节数 n-多少次 fp-文 件指针 调用成功,返回n值。
示例: P318例13.3
14
} fclose(fpr);
果。
fclose(fpw);
11
}
#define NULL 0
#include <stdio.h>
FILE *fp;
char *s="123";
main()
{
char ch;
示
clrscr(); if ((fp=fopen("d:\\tc\\a.dat",“w+")) ==NULL)
3
磁盘文件分类
按其存储方式,C文件可以分为: ASCII文件(文本文件)
按数据的ASCII编码方式存放(可用文字编辑软件如 “记事本”打开来看)。 二进制文件 按数据在内存中存储的形式原样存放(0和1的集合) C系统在处理这些文件时,并不区分类型,都看成 是字符流(即以字节为存取单位)。输入输出字符 流的开始和结束只由程序控制而不受物理符号(如 回车符)的控制,故称“流式文件”。
}
12
文件的读写(三)
③ 格式化读写 P321 适用于一般实体,如数值型变量。 fscanf(fp,“%d,%f”,&a,&b); 将磁盘文件中的数据送给变量a,下一个送给变量b fprintf(fp,“%d,%6.2f”,a,b); 将变量a和b按%d和%f格式输出到fp所指文件上 比较:scanf(“%d,%f”,&a,&b); printf(“%d,%6.2f”,a,b);
c语言学习,c语言课件第09章

struct { char char char long long char };
addr 像这些对不同登记 name[20]; department[30] ;/*部门*/ 表的数据结构的描 address[30]; /*住址*/ 述类型称为结构体 box; /*邮编*/ phone; /*电话号码*/ 类型 email[30]; /*Email*/
9.2 结构体变量的引用与初始化
9.2.1 结构体类型变量的引用 引用结构体类型变量的一般形式为: 引用结构体类型变量的一般形式为: 结构体类型变量名 .成员名 其中“ 是成员(分量)运算符,它在所有运算符中优先级最高。 其中“.”是成员(分量)运算符,它在所有运算符中优先级最高。 说明: 说明: (1)结构体类型变量的各成员与相应的简单类型变量一样可以进行 (1)结构体类型变量的各成员与相应的简单类型变量一样可以进行 各种运算,例如: 各种运算,例如: student2.score[1]= student1.score[1]; sum=stud1.score[0]+stud1.score[1]+stud1.score[2]; (2)如果成员本身又属一个结构体类型 如果成员本身又属一个结构体类型, (2)如果成员本身又属一个结构体类型,则要用若干成员运算符 一级一级地找到最低的一级成员。 ,一级一级地找到最低的一级成员。只能对最低级的成员进行 赋值或存取以及运算。例如: 赋值或存取以及运算。例如: birthday.day=01;student1.birthday.month=10; student1. birthday.day=01;student1.birthday.month=10; student.birthday.year=2004; student.birthday.year=2004;
《C语言程序设计》课件 《C语言程序设计》课件 第9章-结构类型的使用

printf("%4u%8s%6d%6d%6d\n",t.num,
,t.exama,t.examb,t.total); }
运行结果:
程序 演示
结构体变量 整体的引用
<<C语言程序设计>>
Page 15
9.1 结构类型的根本使用
【随堂练习9-1】
有如下定义: struct job_exam a,b;
<<C语言程序设计>>
Page 19
9.2 用函数处理结构类型数据
例9-6
用函数完成:查找最高 总成绩的考生信息。
【自定义函数】 void find(struct job_exam *p) { *p=s[0];
for(int i=1;i<3;i++) if((*p).total<s[i].total) *p=s[i];
…
姓名
王虎 李雪 张扬
…
笔试 成绩 89 82 77
…
面试 成绩 92 85 96
…
总成绩
如何处理?
unsigned num; char name[10]; int exama; int examb; int total;
数据特点:
1.各行内数据不尽相同; 2.各行间数据情况相同; 3.以行为单位处理数据.
<<C语言程序设计>>
Page 3
问题引入
某单位招聘考试成绩汇总表
考号
1501 1502 1503
姓名
王虎 李雪 张扬
笔试 成绩
89 82 77
面试 成绩
92 85 96
总成 绩
C语言程序设计_课件_第九章(适于清华谭浩强版)

注意, 注意,对嵌套结构体的引用必须引用
到最末一级。 到最末一级。
struct OBJECT { struct TASK { long plan; long start; long finish; } ti,tj; int count; } ob;
可以使用scanf(“%d”,&ob.ti.plan) 输 可以使用 入数据。但是不能引用ob.ti 。 入数据。但是不能引用
9.2 结构体与数组 9.2.1结构体包含数组 结构体包含数组 由于结构体的成员可以是任何基 本数据类型和另外一个构造类型, 本数据类型和另外一个构造类型,所 以结构体的成员当然可以是数组。 以结构体的成员当然可以是数组。 下面我们说明一个可以描述一个股票 信息的结构体: 信息的结构体:
struct STOCK { char stockname[8]; /*股票名称 */ 股票名称 char stockcode[6]; /*股票代码 */ 股票代码 float price[3]; /*买 入价、卖出价、成交价 */ 买 入价、卖出价、 }; ;
不能混淆结构体名和结构体变量这两 个概念。 个概念。结构体名实际上标识了程序员定 义的一种新的数据类型, 义的一种新的数据类型,编译系统不可能 为结构体名分配内存空间。 为结构体名分配内存空间。只有当变量被 说明为这种由程序员自己定义的数据类型 的结构体时, 的结构体时,编译系统才会为结构体变量 分配存储空间。在不引起混淆的情况下, 分配存储空间。在不引起混淆的情况下, 结构体变量可以简称为结构体。 结构体变量可以简称为结构体。
*/
Struct STOCK sfz={"ShenFaZhan","000001",8.77,8.78,8.78 }; /*用深发展的数据初始化结构体变量 用深发展的数据初始化结构体变量sfz*/ 用深发展的数据初始化结构体变量 printf("\n %s %s ", sfz.stockname, sfz .stockcode); /*输出股票名称和股票代码 */ 输出股票名称和股票代码 for (i=0;i<3;i++) /*输出股票的买入价、卖出价和成交价 输出股票的买入价、 输出股票的买入价 卖出价和成交价*/ printf("%6.2f ", sfz.price[i]); }
《C语言程序设计》电子课件 第9章课件

Your site here
重 庆
9.2文件的打开与关闭
电
子 工
3.使用文件的方式
程
文件使用方式
意义
职
(1)文件使用方式由r、w、a、t、 rt(只读)
打开一个文本文件,只允许读数据
业
b,+六个字符拼成,各字符的含义
学 院
是:r(read):读;w(write):写; a(append):追加;t(text):文本文
计 算
行管理,把它们的输入、输出等同于对磁盘文件的读和写。
机
ASCII文件:也称为文本文件,这种文件在磁盘中存放时每
学 院
个字符对应一个字节,用于存放对应的ASCII码。
二进制文件:是按二进制的编码方式来存放文件的。
Your site here
重
9.1文件概述
庆
电
子
工 程
2.文件类型指针
职
用一个指针变量指向一个文件,这个指针称为文件指针。
学
院
9.1文件概述
9.2文件打开与关闭
计 算
9.3文件的读写
机
9.4文件检测函数
学
院
Your site here
重
第九章 文件
庆
电
子
工 程
9.1概述
职 业
“文件”是指一组相关数据的有序集合。这个
学 院
数据集有一个名称,叫做文件名。实际上在前
面的各章中我们已经多次使用了文件,例如源
程序文件、目标文件、可执行文件、库文件
业
学
院
说明文件指针的一般形式如下:
FILE * 指针变量标识符
计
FILE *fp;
c语言程序设计课件第9章

第9章 文件系统操作
本章要点:
文件系统控件的使用方法
文件常用语句及函数的使用方法 顺序文件的使用方法 随机文件的使用方法 二进制文件的使用方法
9.1 文件系统控件
9.1.1 驱动器列表框
(1)Drive属性
Drive属性用来返回和设置在驱动器列 表框中显示的驱动器 [对象.] Drive[=drive] 当Drive属性值发生变化时,即驱动器 列表框中的显示驱动器发生变化时, 都会引发此事件。
(4)其他属性
9.1 文件系统控件
(4)Click、DblClick事件
„单击输出文件名。 Sub File1_Click( ) MsgBox File1.FileName End Sub „双击执行可执行程序。 Sub File1_DblClick( ) ChDir Dir1.Path ' 改变当前目录 RetVal = Shell(File1.FileName, 1) ' 执行可执行程序 End Sub
9.2 文件常用语句及函数
2. 文件操作函数
(1)CurDir函数
格式:CurDir[(drive)] 功能:返回当前的路径 Dim MyPath MyPath = CurDir MyPath = CurDir(“C“)
(2)LOF(#文件号)函数
功能:返回一个已打开的文件的长度
9.2 文件常用语句及函数
9.2 文件常用语句及函数
(5)MkDir语句
格式:MkDir path 功能:创建一个新的目录或文件夹。
(6)ChDir语句
本章要点:
文件系统控件的使用方法
文件常用语句及函数的使用方法 顺序文件的使用方法 随机文件的使用方法 二进制文件的使用方法
9.1 文件系统控件
9.1.1 驱动器列表框
(1)Drive属性
Drive属性用来返回和设置在驱动器列 表框中显示的驱动器 [对象.] Drive[=drive] 当Drive属性值发生变化时,即驱动器 列表框中的显示驱动器发生变化时, 都会引发此事件。
(4)其他属性
9.1 文件系统控件
(4)Click、DblClick事件
„单击输出文件名。 Sub File1_Click( ) MsgBox File1.FileName End Sub „双击执行可执行程序。 Sub File1_DblClick( ) ChDir Dir1.Path ' 改变当前目录 RetVal = Shell(File1.FileName, 1) ' 执行可执行程序 End Sub
9.2 文件常用语句及函数
2. 文件操作函数
(1)CurDir函数
格式:CurDir[(drive)] 功能:返回当前的路径 Dim MyPath MyPath = CurDir MyPath = CurDir(“C“)
(2)LOF(#文件号)函数
功能:返回一个已打开的文件的长度
9.2 文件常用语句及函数
9.2 文件常用语句及函数
(5)MkDir语句
格式:MkDir path 功能:创建一个新的目录或文件夹。
(6)ChDir语句
c#程序设计教程 课件第9章

——由这个例子可以看到,Thread类、委托类型 由这个例子可以看到, 由这个例子可以看到 类 委托类型ThreadStart等 ——执行线程 和th2实际上是执行方法 执行线程th1和 实际上是执行方法a.f()和方法 和方法B.g()。 等 。 执行线程 实际上是执行方法 和方法 是多线程程序设计中的核心内容。 是多线程程序设计中的核心内容。
class A { public static int n = 0; public void f() { for (int i = 0; i < 10; i++) { Console.WriteLine("f()在输出:{0}", A.n); 在输出: 在输出 A.n++; 让当前线程 Thread.Sleep(100); 睡眠100毫秒 睡眠 毫秒 } } }
9.2 线程及其实现方法
9.2.1 线程的概念
C#程序设计教程——蒙祖强编著
线程的概念与程序、进程的概念密切相关。 线程的概念与程序、进程的概念密切相关。 程序是程序员编写的静态代码文本。 程序是程序员编写的静态代码文本。 是程序员编写的静态代码文本 进程则是程序的一次动态执行过程, 进程则是程序的一次动态执行过程,进程运行时需要占用装载 则是程序的一次动态执行过程 程序代码(编译后的可执行代码) 程序代码(编译后的可执行代码)以及存放其所需数据的内存空 间和其他的机器资源(如文件等), ),当进程终止时这些内存空间 间和其他的机器资源(如文件等),当进程终止时这些内存空间 和资源也随之释放。显然,同一个程序, 和资源也随之释放。显然,同一个程序,它可以被多次加载到不 同的内存区域中、使用不同的机器资源, 同的内存区域中、使用不同的机器资源,从而形成多个不同的进 即一个程序可以形成多个进程。 程,即一个程序可以形成多个进程。 一个进程是由多个执行单元组成,每个执行单元就是一个线程, 一个进程是由多个执行单元组成,每个执行单元就是一个线程, 即进程是由多个线程组成。 即进程是由多个线程组成。每个线程都共享着其进程所占用的内 存空间和机器资源(如堆栈、 ),实际上 存空间和机器资源(如堆栈、CPU、寄存器等),实际上,一个 、寄存器等),实际上, 线程是一组机器指令以及它共享的内存和资源 是一组机器指令以及它共享的内存和资源。 线程是一组机器指令以及它共享的内存和资源。
《C语言程序设计理论与实践》PPT 第九章

9.1.4 结构体指针
1.结构体包含指针 如:struct test {
int data;
int *p;
}; 第一个元素是一个整型变量,第二个是指向整 型变量的指针。在使用该指针时,首先必须指向确定 变量。
2.指向结构体的指针 一个指针变量当用于指向一个结构体变量时, 称之为结构体指针变量。其值为结构体变量的首地址。 一般形式: struct 结构体 * 结构体指针变量名 例:struct student * pstu 一般访问形式:
该结构体有4个成员,括号后的分号不能少。结 构体变量占用内存空间为所有类型之和。
9.1.1 结构体变量
1.先定义结构体类型,然后在定义结构体变量。 struct 结构体名 {
成员名; }; struct 结构体名 变量名1,变量名2...; 例如:struct date{
int year; int month;int day;}; struct date birthday;
9.3 枚举类型
实际生活中,很多都被限定在一定范围。如: 一个星期只有七天,一年只有十二个月。如果将这些 抽象定义成整型显然不妥当。为此,C语言提供了 “枚举”类型,它将变量的值一一列举出来,变量的 值就限定在列举出来的范围。
定义形式:
enum 枚举名 { 枚举元素表(用逗号隔开) }; 如:enum weekday{ sun,mon,tue,wed,thu,fri,sat }; 再使用 enum weekday去定义该枚举变量,如: enum weekday day;
如同整型数组,当把数组名赋值给某一指针, 其指向就是整个数组的首地址。
9.1.6 用typedef进行类型定义
C语言不仅提供了丰富的数据类型,而且还允许 由用户自己定义类型说明符,也就是说允许由用户为 数据类型取“别名”。类型定义符typedef即可用来 完成此功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• "china"
c h i n a \0
• "BASIC\a"
区别以下两组:
B A S I C \a \0
• (1)空串""(长度为0)与空格串" "(长度为1)
\0
\0
• (2)字符常量’a’与字符串常量"a"
a
a \0
• 如果串中含有双引号字符,则双引号要用转义字符\"
2021/3/30
5
字符串的赋值
2021/3/30
7
字符串的输入/输出
字符串的输入和输出有3种基本方法:
例• 如方有法(定1)义::利用ch格a式r a控[制10字],符逐b[逐%1字c0用字符],循c符输[环1输入0逐]出字; 符ch处a理r i,; 例:
• for (i=0;i<10;i++) scanf(“%c”,&a[i]); //要加取地址符
什么是字符串:
• 字符串是0个或多个有效字符序列
• 串长:字符串中的有效字符个数
• 在源程序中,字符串字面值常量以双引号(不计入串长)为
定界符
• 存储空间大小:在所存的字符串后面自动加字符’\0’作为结
束标志,因此存储空间大小=串长+1
2021/3/30
4
字符串的定义与存储
字符串常量存储在const字符数组中,例如:
• for (i=0;i<10;i++) printf(数“%组c”名,a[已i] )是; 地//要址加,取不地址符
• 方法(2):利用格式控制字能符再%s加整取体处地理址字符符&串,例:
• scanf(“%s%s%s”,a,b,c);
//输入3个字符串,空白符分隔
• • • •
p方gp函串码rue函串为i法ttnss数p1t数,串(((f0saa3(原“),)),原存结;;%:型//函串s型入束//利输输-%i数结指符c用n入出sht系-执束针\字字a%p0统r,符符u行s符参\*t提n串串gs函失被量”供(e,,,ca数败t译指的,os允并b(返n时,为向串cc许自s)h回输的;换的输动tac入值入换r函行字/h/输和*带行a是数p符,出r输空s串返数*)3出函格p;个可指回组s函的数字)读针数;值,串返在符处入p是并串回显s理带-。将值示1空。换是器格行换上的符行输字\符出n符转的字代符
• 例:char s1[8]; s1正="c确hi,na将"指; 串针常常量量s,tru不c能tu被re赋存值储空间的
• char * ps;
起ps始="s地tr址uct赋ur给e";字符指针变量ps
串指针:字符串均有\0字符作为结束标志,故只要知道串的第
一个字符的地址,就可以找到字符串。上例中的串指针常量s1
和串指针变量ps都可代表字符串
再论一维字符数组名的3种含义,例:char s1[8]="china";
• (1)代表第一个数组元素的地址,例:printf("%c\n",*s1);
• (2)代表整个数组空间,例:printf("%d\n",sizeof(s1));
• (3)代表字符串,例:printf("%s\n",s1);
• 输出:printf(“%s”,a);与puts(a);相比,前者可以输出若干个字符串; 后者一次只能输出一个串并自动换行
2021/3/30
9
字符串处理函数的原型
以下是字符串处理计函算数串原长型度,的包函含数在,系串统结头束文符件\s0t不ri计ng.h中, 常用以下6个: 串算拷在贝内函,数函,数将返串回s2值复是制串到长指度针s1指 • (1)unsigned 向串int的 连st串接rle空函n(c间数on。,st返是ch回将ar值串*s是s);2串接s到1串指针s1的尾 • (2)char*串st比rc部p较y(,函ch返数ar回,*s值1对,c是串on连st1接c和h后a串r 的*ss22串逐);s个1指字针符比较,相 • (3)char*等将st返r串ca0st;(中chs的a1r大小*s1于写,cs字o2n返母st 1c改h;a为rs*大1s小2写);于字s母2返,-其1。余 • (4)int str字将cm符串p(s不c中o变n的s,t c大h返a写r回*字s修1母,c改o改n后s为t的c小h串a写rs*字指s2母针); ,其余 • (5)char* 字str符up不r(c变ha,r *返s);回修改后的串s指针。
• char * ps="structure"; s//1系统首c先创h建cionsnt字符a型数\0组存储
"structure",然后将存储空间的起始地址赋给字符指针变量ps
2021/3/30
ps
s t r u c t u r e \0
6
字符串的赋值
字符串字面值常量只能给字错符误指,针字赋符值数却组不名能s给1字是符数组赋值:
C语言没有专门的字符串类型,字符串的操作是用一维字符数 组和一级字符指针来实现的。
字符串字面值常量可以用来给字符数组或字符指针作初始化:
• char s1[8]=“china”; //将“china”的每一个字符(包括串结束符) 逐一赋值给数组s1的各元素
•
• char s2[ ]="3.1416"; //相当于char s2[7]="3.1416";
字符串的应用很广泛,掌握以下两种应用并能举一反三 解决其他相关问题:
• 读入字符串并执行相应的类型转换 • 判断回文
2021/3/30
3
字符串的定义与存储
哪里需要字符串?
• 文本处理的对象是字符串,描述对象的某一特征的数据也常 常是字符串(如:姓名、学号、地址、车牌等)
• C语言中不提供专指门系的统字允符许串使类用型的,字借符助,于包字括符字数母组、和数字符 指针存储和处理字字符字串符、专用字符和转义字符
2021/3/30
8
字符串的输入/输出
注意:用字符指针也可操作字符串,但是必须保证每一种操作
时指针都是有确定地址的,危避险免!使此用时野的指p针s是“野”指
例:char *ps; gets(ps);
针
字符串的输入和输出几种方法的比较与分析:
• 方法(1)比较麻烦,一般很少使用
• 输入:scanf(“%s”,a);与gets(a);相比,前者读入串时以空白符(空 格、Tab、回车),故无法读入含空格的串;后者可以读入含1/3/30
第九章 字符串
主讲: 计算机学院 俞琼
2
2021/3/30
内容提要
本章介绍字符串的存储与处理的相关知识,掌握以下内 容:
• 字符串常量在内存中的存储方式,所占字节数 • 字符串如何利用字符数组和字符指针进行赋值、输入和输出 • 专门用于处理字符串的几个常用函数的原型及实现