解剖学实验指导20xx(学生用)

人体组织学与解剖学实验要求

1、严格遵守上课纪律,不迟到。

2、实验观察要求认真仔细,鼓励探索与讨论。

3、认真准备“课堂问答”,积极回答课堂提问。

4、实验报告:认真完成,按时上交,绘图用铅笔而且要有标注。

5、标本、模型、装片要轻拿轻放,损坏要登记并按规定赔偿。

6、课代表做好值日安排,值日生自觉留下做好卫生工作,注意关好窗户。

1

实验一 实验基本知识与操作技术

一、实验目的与要求

1、熟悉人体组织学与解剖学实验的定义、任务及学习方法。

2、了解人体组织学与解剖学实验的发展历史、现状及前景。

3、熟悉并掌握人体解剖学常用术语。

4、熟悉人体解剖学常用实验动物与操作技术。

二、实验用品

显微镜、装片、模型

三、作业

简述人体组织学与解剖学的发展阶段。

实验二 基本组织实验

一、实验目的与要求

1、观察并熟悉上皮组织的特点,重点是比较几种上皮组织的细胞组成。

2、学习血涂片的制作方法,显微镜观察:红细胞、中性粒细胞、淋巴细胞、单核细胞、(嗜酸性粒细胞、嗜碱性粒细胞)、血小板。

3、观察切片,熟悉软骨的类型及其基本特点。

4、了解肌组织的组成,掌握骨骼肌的结构特点。

5、熟悉并掌握神经元的基本形态结构。

二、实验材料及用品

显微镜、切片、脱脂棉、采血针和载玻片、酒精棉球等

三、作业与思考

结合切片,绘制假复层纤毛柱状上皮组织模式图。

2

实验三 运动系统

一、实验目的与要求

1、关节的解剖与观察:通过对关节进行解剖,学习和掌握关节解剖的基本方法,熟悉关节的基本结构和辅助结构。

2、骨架、分离骨、男女骨盆、头骨等标本观察:掌握骨的一般形态和结构,认识人体的每块骨,了解人体颅、脊柱、胸廓、四肢骨的组成及其特点,掌握椎骨的一般结构,比较各部椎骨的特征,了解骨盆的组成,比较男女骨盆的差异。

3、观察模型,熟悉主要的骨骼类型和名称,主要骨骼肌的名称分布,及其作用方式。

二、实验材料及用品

猪关节、常用解剖器械、解剖盘、各种骨骼模型、一次性手套和口罩等

三、作业与思考

绘图说明滑膜关节(膝关节)的基本构造。

实验四 循环系统实验(一)

一、实验目的与要求

1、对照模型识认心的外形及各腔的结构,观察心瓣膜的位置和形态,掌握心各腔与大血管的关系,了解冠脉循环的走行和分布;

2、熟悉猪心的基本解剖方法,进一步了解各腔的大体结构。

3、观察模型,熟悉人体血液循环系统的组成及其特点。

二、实验材料及用品

猪心、解剖盘、解剖器、心脏模型、一次性手套和口罩等

三、作业与思考

结合切片,绘制人体心脏大体结构模式图(胸肋面示意图)。

3

实验五 循环系统实验(二)+免疫系统实验

一、实验目的与要求

1、观察切片,掌握心壁的组织结构,了解蒲肯野纤维的特点;

2、通过观察,进一步熟悉血管壁的结构,比较中等动静脉的组织结构特点。

3、掌握胸腺的位置及其组织结构特点。

4、熟悉并掌握淋巴结的分布及其组织结构特点。

5、了解脾、扁桃体的位置及其大体结构。

二、实验材料及用品

循环系统模型、显微镜、切片等

三、作业与思考

结合切片,绘制中等动静脉模式图(可参考P95图3-3)。

实验六 内脏学实验

一、实验目的与要求

1、熟悉家兔的处死方法,并且了解哺乳类的解剖方法。

2、通过家兔内部结构的观察,掌握哺乳纲动物的一般内脏器官特征。

二、实验材料及器具

活家兔、解剖盘、解剖器具、一次性注射器、酒精棉球、吸水纸、一次性手套和口罩等。

三、兔的内部解剖与观察

1、杀生

(1)空气栓塞法。兔耳背外缘的静脉较粗大,易于进针。

(2)用水淹死或猛击延脑将兔处死。

2、仔细观察家兔的内脏器官形态和位置

三、作业与思考

绘制人胃的大体结构图(可参考P144图5-8B)。

4

实验七 消化系统实验(一)

一、实验目的与要求

1、了解牙的形态和构造,了解咽的位置,掌握胃的结构特点。

2、观察切片,熟悉味蕾的细胞组成。

3、通过观察,熟悉并掌握胃的大体结构并且掌握胃壁的组织结构。

二、实验材料及用品

显微镜、切片、模型等

三、作业与思考

绘制消化管壁基本组织结构示意图。

实验八 消化系统实验(二)

一、实验目的与要求

1、熟悉肝、胰的位置及其解剖结构,并掌握肝的组织结构特点。

2、通过观察,掌握食管、小肠以及大肠的的组织结构特点。

3、观察切片,了解肝肠病变。

二、实验材料及用品

显微镜、切片、模型等

三、作业与思考

绘制人体肝脏的大体结构示意图。

实验九 呼吸系统实验

一、实验目的与要求

1、结合切片和模型观察气管,了解其位置和组织结构。

2、通过喉模型的观察,了解喉软骨及其连接,喉肌及其功能。了解鼻腔和喉腔的构造以及二者与咽的关系。

3、熟悉肺的基本结构:小支气管、细支气管、终末细支气管、呼吸性细支气管、肺泡管、肺泡囊、肺泡、肺泡上皮、肺泡隔、尘细胞。

4、通过病理切片的观察,进一步掌握正常器官的组织结构特点。

二、实验材料及用品

显微镜、切片、模型

三、作业与思考

绘制气管、左右支气管及肺的大体结构示意图(可参考P177图6-13)。

5

实验十 泌尿系统实验(一)

一、实验目的与要求

1、观察模型,了解并掌握肾的位置和外形,

2、观察模型,掌握肾的大体解剖结构,并在肾的冠状切面上分清皮质、髓质、髓放线、肾柱、肾锥体、肾乳头、肾小盏、肾大盏、肾盂、肾窦。

二、实验材料及用品

猪肾、解剖盘、解剖器、模型、吸水纸、酒精棉球、一次性手套和口罩等

三、作业与思考

绘制肾的额状切面示意图。

实验十一 泌尿系统实验(二)+内分泌系统实验

一、实验目的与要求

1、观察切片,熟悉肾的组织结构。

2、熟悉肾的血液循环特点。

3、掌握肾上腺及垂体的形态与位置。肾上腺:肾上腺皮质(球状带、束状带、网状带)、肾上腺髓质。垂体:腺垂体、神经垂体、远侧部、中间部、嗜碱性细胞*、嗜酸性细胞*、嫌色细胞

4、熟悉甲状腺和甲状旁腺的形态及位置。

二、实验材料及用品

显微镜、切片、模型等

三、作业与思考

绘制垂体矢状切面示意图,并且注明其分部。

实验十二 感觉器实验

一、实验目的与要求

1、通过解剖眼球和模型观察,掌握眼球壁各层的名称、位置、分部及主要形态结构。

2、观察耳模型,掌握耳的组成和各部的构造

3、皮肤:表皮真皮各层、皮脂腺、汗腺、毛囊、毛根、立毛肌

二、实验材料及用品

显微镜 切片 模型等

三、作业与思考

绘制眼球的大体结构模式图。

6

实验十三 神经系统(一)

一、实验目的与要求

2、了解脑干的外形和脑神经进出脑干的位置,认识脑干表面各结构 1、了解脊髓的构造,掌握脊神经节各种纤维成分与脊髓的连属关系

3、了解脑干的内部结构,掌握脑干内主要核团的名称、位置、功能及脑神经各种纤维成分与脑神经核的联系。

4、通过家鸽的解剖与观察,熟悉神经系统的基本组成。

二、实验材料及用品

家鸽、解剖器、解剖盘、一次性手套、一次性口罩、脊髓与脊神经连属关系模型、脑干模型、脑干神经核模型等

三、作业与思考

简述12对脑神经连接脑的部位和出入颅的部位。

实验十四 神经系统(二)

一、实验目的与要求

1、辨认大脑半球的主要沟、回和分叶,了解各主要中枢在大脑皮质上的定位,了解大脑基底核的组成和形态,掌握大脑皮质的细胞构筑和分层

3、了解间脑的分部及各部的组成

4、掌握脊髓和神经节的组织结构。

5、了解植物性神经的组成和分布概况,掌握植物性神经的特点

二、实验材料及用品

显微镜 切片 模型

三、作业与思考

实验十五 肥大细胞染色技术

提示:图书馆—期刊网—查阅相关文献;网上搜索等

第2周——第9周 寻找合适的实验材料、方法

第10周——第11周 小组讨论设计实验方案

第12周 师生共同讨论、设计最科学可行的实验方案

第13周——第14周 实验前准备

第15周 进行实验 2、了解小脑的外部形态和内部构造,掌握小脑皮质的细胞构筑和分层 6、掌握神经传导路的构成的走行,分析各传导路不同部位损伤后的主要表现 简述大脑半球外表面的主要结构。

7

 

第二篇:20xx《C语言综合实验》指导书-学生 - 副本

《C语言综合实验》指导书

武汉理工大学物理系

20xx年5月

目 录

实验1 数组应用...........................................................................................................1

实验2 函数应用...........................................................................................................2

实验3 指针应用...........................................................................................................4

实验4 结构体应用.......................................................................................................5

综合实验1 学生成绩管理系统...................................................................................6

综合实验2 学生信息管理系统...................................................................................8

综合实验3 图书信息管理系统.................................................................................11

附录1 文件操作.........................................................................................................13

附录2 实验步骤.........................................................................................................19

附录3 实验报告说明.................................................................................................20

实验1 数组应用

一、实验目的及要求

1.学习并掌握一维数组与二维数组的定义、使用及初始化方法。

2.熟练掌握字符数组和字符串的使用方法。

3.掌握数组的一种排序算法。

二、实验内容

1. 找出数组中的最大数和最小数,并把最大数和a[0]中的数对调、最小数和a[1]中的数对调,其余数据位置不变。例如,程序运行时若输入:2 4 6 11 3 9 7 0 5 8,则输出:11 0 6 2 3 9 7 4 5 8。

2. 编写程序从键盘上输入一个字符串和一个字符,实现从字符串中删除该字符。 例如:从键盘输入字符串为"abaaAAbcaaaca",要删除的字符为'a',则在屏幕上输出"bAAbcc"。

下面给出程序的部分代码。请完善程序。

void main( )

{char s[20], ch;

int i,j;

printf("Please input a string:\n");

gets(s);

printf("Please input a character:\n");

ch=getchar();

for( i=0; _________; i++ )

{ ………… /* 编写程序,实现功能 */

}

puts(s);

}

【实验提示】

(1)从字符串数组中删除字符:找到待删除的字符,依次将后一个字符开始前移一个位置。例如查找到待删除字符放置在a[ 5 ]的位置上,原来a[5]的位置存a[6 ]的数据,原来a[6]的位置存a[7]的数据,直到 a[ 5 ]后的所有元素前移一位。

(2)前移元素的过程,应该注意从待删数据的位置开始依次a[i] =a[i+1]

3. (选做)从键盘上接收10个成绩,存放到一个一维数组score中,利用比较排序法,将数组从小到大排序并在屏幕上显示排序结果。比较排序法说明:

将a[0]与a[1]比较,若a[1]<a[0],则a[0]与a[1]交换,否则不变,再将a[0]与a[2]比较,同样小者交换到a[0],……如此比较下去至到a[0]与a[n-1]比较,小者放到a[0]中,第一轮比较n-1次,a[0]中的值就是n个数中最小者。然后a[1]再与a[2]比较,方法同上,小者交换到a[1],……第二轮比较n-2次,这样a[1]也就确定了,第三轮a[2]与其后面的数比较,……,共比较n-1轮以后,数组中各元素的值就按升序排列好。

1

实验2 函数应用

一、实验目的及要求

1. 掌握定义和调用函数的方法。

2.掌握利用函数实现对数组和字符串的操作。

3.掌握通过传值和指针传址调用函数的方法。

二、实验内容

1. 从键盘输入数组a[ 20 ]的20 个元素值,编写一个函数实现对数组元素的逆序放置。即第1个元素与第20个元素互换,第2个元素与第19个元素互换,……,第10个元素与第11个元素互换。

2. 参照给定的主函数,编写一个函数void insert(int a[ ], int n, int y ),它的功能是:把y值插入到有n个数的有序的a数组中, y的值从键盘读入。插入后,数组中的数仍然有序。

对照下面三种情况运行程序:

1)插在最前 2)插在最后 3)插在中间。

int a[11]={2,4,6,8,10,12,14,16,18,20};

void insert( int a[ ], int n, int number );

void main( )

{ int i, x ;

printf("original array is:\n");

for(i=0;i<10;i++)

printf("%5d",a[i]);

printf("\n");

printf("insert a new number:");

scanf("%d",&x);

insert(a,10,x);

for(i=0;i<11;i++)

printf("%d ",a[ i ]);

}

void insert( int a[ ], int n, int number )

{ …… }

若输入数11,输出 2 4 6 8 10 11 12 14 16 18 20;

输入数1, 输出1 2 4 6 8 10 12 14 16 18 20

输入数33,输出2 4 6 8 10 12 14 16 18 20 33

【实验提示】

(1)若x插入数组的中间,插入后此元素之后的数,依次后移一个位置。例如查找到 11

应该放置在a[ 5 ] 的位置上,原来a[5]的数据 12 以及其后的所有元素后移一位。

(2)后移元素的过程,应该注意从数组的末尾开始依次a[n]=a[n-1],a[n-1]=a[n-2]……

3. 在main函数中从键盘上输入一个字符串str以及一个整数n,将它们作为参数传递给函数fun。fun函数的功能是将字符串str的第0~m-1个字符移到字符串的最后,第m个字符到最后一个字符移动字符串的头部。例如:

输入:ABCDEFGHIJK

3

输出:DEFGHIJKABC

#include <stdio.h>

void fun(char *w, int n)

{

int i, j;

char str[100]; /*str数组用来存放移动后的字符串*/

/*指向首字符*/

i=0;

j=0;

/*指向第n个字符*/

while(i <= n-1) i++;

/*首先把第n个字符一直到最后一个字符放到str数组的头部*/

{

}

/*把第0个字符到第n-1个字符放到str数组的尾部*/

for(i=0; i<= n-1; i++)

{ j++;

}

/*放上字符串结束标志*/

i=0;

/*str数组中是移动后的字符串,把它复制到w数组中去*/

{

}

}

main()

{ char s[100];

int m;

printf("Input string: ");

scanf("%s", s);

printf("Input m: ");

scanf("%d", &m);

fun(s, m);

printf("After move: %s\n", s);

}

实验3 指针应用

一、实验目的及要求

1.理解和掌握指针及指针变量的基本概念和定义。

2.熟练掌握指针的运算(算术运算、关系运算和赋值运算)。

3.熟练掌握几种不同类型的指针(指向变量的指针、指向数组的指针、指向字符串的指针、指向函数的指针)。

二、实验内容

1.在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。

2.字符串查找: 在给出的被查找的字符串str检查待查找的字符x的出现位置(i=0,1,…)和出现次数(若str中无xCh,则次数=0)

3. n个人围成一圈,1,2,3循环报数,报到3的人退出。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始。若n=6,则输出1;若n=10,则输出4;若n=100,则输出91。编写函数,n作函数参数,函数返回结果。

【实验提示】

初始定义一个存储每个人编号(从1开始)的数组,当该人已经报数退出时,则把其编号赋值为0,下一轮报数时跳过编号为0的人。

实验4 结构体应用

一、实验目的及要求

1.理解并掌握结构类型、结构变量的定义和引用方法。

2.掌握结构体在程序设计中的使用方法。

二、实验内容

定义一个结构体类型,其成员包括:学号、姓名、性别(char型)、年龄、高数、计算机、物理、英语、总分、平均分。利用以下数据完成:

表1 用以创建结构体数组的原始数据 学号 姓名 性别 年龄 高数 计算机物理 英语 总分 平均分

(1)定义一个结构体数组,编写函数input( )实现从键盘输入表1中数据给数组。

(2)编写计算函数calculate(),给每个同学的总分和平均分填上数据。

(3)编写查询函数seek(),通过键盘输入一个姓名,查询该同学的各种数据;若此同学不存在,则输出“NO FIND”。如:输入“Marry”,则输出1003号同学各项数据;输入“Machael”,则输出“No find”。

(4)(选做)编写按总分排序程序sort(),根据每位学生的总分降序排列。

(5)(选做)设计菜单,通过选择菜单调用以上各函数。

【实验提示】

结构体类型在函数外定义,结构体数组在main()中定义。

三个函数都是对main()中定义的数组进行操作,因而函数的参数必须是指向结构体类型的指针,使用指针访问一维数组。

综合实验1 学生成绩管理系统

1.1 系统概述

学生成绩管理系统是学生熟悉的教学系统之一,系统以学生成绩的输入、输出、插入、删除、排序、统计等基本功能模块为基础,将结构体、数组、指针、文件等主要知识点结合在一起,运用菜单、排序等一些常用算法,解决学生成绩管理的实际问题。

1.2 系统基本功能

设计一个学生成绩管理系统,对上学期的本班的学习成绩进行管理,可以用结构数组来设计这个程序,具有查询和检索功能。

1. 每一条记录包括一个学生的学号、姓名、性别、各门课成绩(上学期的科目)、平均成绩。

2. 录入功能:可以一次完成若干条记录的输入。

3. 显示输出功能:完成全部学生记录的显示。

4. 查找功能:完成按姓名或学号查找学生记录,并显示。

5. 排序功能:按学生平均成绩进行排序。

6. 插入功能:插入一条学生记录。

7. 删除功能:完成学生记录的删除。

8. 统计功能:按学生各门课成绩统计出平均成绩。

9. 提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观。

20xxC语言综合实验指导书学生副本

1.3 主要知识点

数据结构可用结构数组或结构指针,系统提供主界面,各种功能操作以独立的函数为基础,重点练习数据类型——数组、结构体和指针的使用方法。系统主要运用对结构体、数组、文件的基本操作,利用常用的统计、排序、求最大值、最小值的基本算法完成成绩管理的基本功能。

1.4 系统程序结构

z 参考数据结构

struct student

{

char number[8];/*学号*/

char name[8];/*姓名*/

char sex[2];/*性别*/

int yuwen ;/*语文成绩*/

int shuxue; /*数学成绩*/

int yingyu;/*英语成绩 */

float sum;/*个人总成绩*/

float ave;/*个人平均成绩*/

}score[MAX],sc;

z 参考函数

主函数main通过调用create,search,del,add,print,ststistics,sort等函数,实现学生成绩录入、查询等系统功能。系统主要功能函数有:

void choose() /*选择菜单*/

void creat() /* 创建学生的资料 */

void add() /*追加学生的资料*/

void search() /*查询学生的成绩*/

void alter() /*修改学生的资料*/

void del() /*删除学生的资料*/

void statistics() /*统计学生的成绩*/

void sort() /*对学生资料进行排序*/

void print()/* 输出显示学生的资料 */

综合实验2 学生信息管理系统

4.1 系统概述

该系统实现了对学生信息的存储和管理。学生信息包括学号、姓名、性别、生日等信息。系统可以对学生信息进行查询、添加、删除和备份。

4.2 基本功能要求

学生管理程序具有下列功能:

1. 输入部分

通过键盘输入多位学生的学生信息。学生的信息包含有:学生姓名、性别、学号、出生年月日、年龄、成绩。

2. 输出部分

输出当前已存储的学生信息。

3. 更新部分

①插入 插入一个新的学生的信息

②删除 删除用户指定的学生信息

③修改 修改用户指定的学生信息

4. 查询部分

①按名字查询 输出用户查询的学生信息

②按学号查询 输出用户查询的学生信息

查询用户指定的学生信息

5. 排序

①按学号排序

②按成绩排序

6. 统计

①统计当前一共存储了多少个学生的信息

②统计当前存储的学生信息中的男生或女生的人数

③统计及格人数

④统计不及格人数

4.3 主要知识点

数据结构可用结构数组或结构指针,系统提供主界面,各种功能操作以独立的函数为基础,重点练习数据类型——数组、结构体和指针的使用方法。

4.4系统程序结构

z 参考数据结构

typedef struct

{

int month, day, year; /*出生年月*/

}BT;

typedef struct

{

int number; /*学号*/

char name[13]; /*姓名*/

char sex[7]; /*性别:male or female*/

BT birth; /*出生年月MM-DD-YY*/

char addr[35]; /*家庭住址*/

int score[3]; /*课程成绩*/

}ST;

z 参考函数

1. 输入模块 input( )

功能:让用户输入学生的档案信息(姓名,年龄,班级,性别,家庭住址,电话,学号)

完成以下工作:

(1) 用户输入学生总数;

(2) 系统根据学生总数创建一个结构数组;

(3) 依次输入各数据域,并读入结构数组;

2. 输出模块 output( )

功能:主要让用户输出已做改动的档案信息;

完成以下工作:利用数组存储数据;显示信息;

3. 信息修改模块 int modify() (返回1—成功;返回0—失败)

功能:主要让用户修改学生的档案信息;

完成以下工作:

(1) 输入用户想修改的学生记录的学生学号;

(2) 查找此学生记录,若存在就继续;如不存在则显示出错信息;

(3) 显示此学生信息;

(4) 提示用户修改信息(每字段提示一下);

(5) 修改完毕,返回菜单。

4. 信息添加模块 add( )

功能:主要让用户增加不在数据库中的某个学生信息;

完成以下工作:

(1) 显示输入信息界面;

(2) 以学号为关键字查找此学生信息,如存在,则显示出错信息;否则继续。

(3) 若输入完毕,则退出此模块并返回至菜单界面。

5. 信息删除模块 delete( )

功能:主要让用户删除已不在校的学生信息;

完成以下工作:

(1) 要求用户输入想删除的学生记录的学号;

(2) 以学号为关键字查找此记录,若存在则显示信息并释放节点;不存在,则显示出错信息;

(3) 退出模块并返回至菜单界面。

6. 信息查找模块 find()

功能:主要让用户查找某个特定的学生信息;

完成以下工作:

(1) 要求用户输入要查找的学生学号;

(2) 以学号为关键字查找信息;

(3) 如存在,则显示此信息并返回至菜单界面;若不存在则显示出错信息。

综合实验3 图书信息管理系统

6.1 系统概述

主要包括管理图书的库存信息、每一本书的借阅信息以及每一个人的借书信息。每一种图书的库存信息包括书名、ISBN、作者、出版社、定价、出版日期和数量等。

6.2 基本功能要求

系统功能包括以下方面:

1. 每一条记录包括一本图书的书名、ISBN、作者、出版社、定价、出版日期和数量。

2. 输入功能:可以一次完成无数条记录的输入。

3. 显示功能:完成全部图书信息的显示。

4. 查找功能:完成按书号或书名或出版社查找图书信息,并显示。

5. 修改功能:完成按书号修改图书信息,并显示。

6. 排序功能:按图书价格进行排序。

7. 插入功能:按图书价格高低插入一条图书信息。

8. 有一个清晰美观界面来调用各个功能。

6.3 主要知识点

数据结构可用结构数组或结构指针,系统提供主界面,各种功能操作以独立的函数为基础,重点练习数据类型——数组、结构体和指针的使用方法。

6.4 系统程序结构

z 参考数据结构

typedef struct

{

int month;

int day;

int year;

}DATES;

typedef struct books

{

char bookname[50];

char ISBN[50];

char author[50];

char publisher[50];

float money;

DATES day;

int count;

struct books *next;

}BOOK_TYPE;

z 参考函数

void BookAdd();/*添加图书*/ void BookFind();/*图书查询*/ void BookDel();/*图书删除*/

void BookModify(); /*修改图书信息*/ void BookSort();/*图书排序*/

void BookShow (); /*显示图书信息*/

附录1 文件操作

文件是程序设计中的一个重要概念。所谓“文件”一般是指存储在外部介质上的数据集合。C语言把文件看作是一个字符的序列,根据组织形式可以分为文本文件和二进制文件。文本文件每个字节放一个ASCII代码,代表一个字符。二进制文件是帮内存中的数据按照内存中的存储形式原样输出到磁盘上存放。

当以"r"为打开方式时,只读;若文件不存在,则返回空指针。

当以"w"为打开方式时,只写;若文件不存在,则生成文件。

当以"a"为打开方式时,追加;此时要求文件一定存在,若不存在,则失败。 r+,w+,a+类似;rb,wb,ab也相似,只不过是以二进制方式!

在C语言中用一个指针变量指向一个文件,这个指针称为文件指针,通过文件指针就可以对他指向的文件进行各种操作。其说明形式为:

FILE * 指针变量标志符

其中FILE是由系统定义的一种结构,该结构中含有文件名、文件状态和文件当前位置等信息。

任何一个文件在使用之前和使用之后, 必须要进行打开和关闭, 这是因为操作系统对于同时打开的文件数目是有限制的。标准文件函数主要包括文件的打开、关闭、读和写等函数。

(1)打开文件函数fopen( )

头文件:<stdio.h>

功能:用于打开文件,

用法:FILE *fopen(char *filename, char *type);

返回值:如果成功的打开一个文件, 函数返回文件指针, 否则返回空指针(NULL)。函数中形式参数有两个, 均为字符型变量(字符串数组或字符串指针)。函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。 第二个形式参数表示打开文件的类型。关于文件类型的规定参见下表。

表4-1 文件操作类型 字符

"r"

"w"

"a"

"r+"

"w+"

"a+"

"b"

"t" 含义 打开文本文件(只读) 创建文本文件(只写) 增补, 如果文件不存在则创建一个 打开一个文本文件(读/写) 创建一个文本文件(读/写) 打开或创建一个文件增补 二进制文件(可以和上面每一项合用) 文本文件(默认项)

如果要打开一个tc子目录中文件名为data的二进制文件, 可写成:

fopen("c:\\tc\\data", "rb");

(2)关闭文件函数fclose( )

头文件:<stdio.h>

功能:fclose()函数用来关闭一个由fopen()函数打开的文件

用法:int fclose(FILE *stream);

返回值:该函数返回一个整型数。当文件关闭成功时, 返回0, 否则返回一个非零值。可以根据函数的返回值判断文件是否关闭成功。

例1

#iclude<stdio.h>

main()

{

FILE *fp; /*定义一个文件指针*/

int i;

fp=fopen("data", "rb"); /*打开当前目录名为data的文件只读 */

if(fp==NULL) /*判断文件是否打开成功*/

puts("File open error");/*提示打开不成功*/

i=fclose(fp); /*关闭打开的文件*/

if(i==0) /*判断文件是否关闭成功*/

printf("O,K"); /*提示关闭成功*/

else

puts("File close error");/*提示关闭不成功*/

}

(3)文件的顺序写函数

函数fprintf( )、fputs( )和fputc( )均为文件的顺序写操作函数,均包含在头文件:<stdio.h>中,其调用格式如下:

int fprintf(FILE *stream, char *format, <variable-list>);

int fputs(char *string, FILE *stream);

int fputc(int ch, FILE *stream);

上述三个函数的返回值均为整型量。fprintf() 函数的返回值为实际写入文件中的字符个数(字节数)。如果写错误, 则返回一个负数, fputs()函数返回0时,表明将string指针所指的字符串写入文件中的操作成功, 返回非0时, 表明写操作失败。fputc()函数返回一个向文件所写字符的值, 此时写操作成功, 否则返回EOF(文件结束结束其值为-1, 在stdio.h中定义)表示写操作错误。

fprintf( ) 函数中格式化的规定与printf( ) 函数相同, 所不同的只是fprintf()函数是向文件中写入。而printf()是向屏幕输出。

下面介绍一个例子, 运行后产后一个test.dat的文件。

例2

#include<stdio.h>

main()

{

char *s="That's good news"; /*定义字符串指针并初始化*/

int i=97; /*定义整型变量并初始化*/

FILE *fp; /*定义文件指针*/

fp=fopen("test.dat", "w"); /*建立一个文字文件只写*/

fputs("Your score of C programming is", fp);/*向所建文件写入一串字符*/ fputc(':', fp); /*向所建文件写冒号:*/

fprintf(fp, "%d\n", i); /*向所建文件写一整型数*/

fprintf(fp, "%s", s); /*向所建文件写一字符串*/

fclose(fp); /*关闭文件*/

}

用DOS的TYPE命令显示TEST.DAT的内容如下所示:

屏幕显示

Your score of C programming is: 97

That's good news

(4)文件的顺序读操作函数

函数fscanf()、fgets()和fgetc()均为文件的顺序读操作函数, 其调用格式如下: int fscanf(FILE *stream, char *format, <address-list>);

char fgets(char *string, int n, FILE *steam);

int fgetc(FILE *steam);

fscanf()函数的用法与scanf()函数相似, 只是它是从文件中读到信息。fscanf()函数的返回值为EOF(即-1), 表明读错误, 否则读数据成功。fgets()函数从文件中读取至多n-1个字符(n用来指定字符数), 并把它们放入string指向的字符串中, 在读入之后自动向字符串未尾加一个空字符, 读成功返回string指针, 失败返回一个空指针。fgetc()函数返回文件当前位置的一个字符, 读错误时返回EOF。

下面程序读取例2产生的test.dat文件, 并将读出的结果显示在屏幕上。

例3

#include<stdio.h>

main()

{

char s[40], m[20];

int i;

FILE *fp;

fp=fopen("test.dat", "r"); /*打开文字文件只读*/

fgets(s, 32, fp); /*从文件中读取31个字符*/

printf("%s", s); /*输出所读的字符串*/

fscanf(fp, "%d", &i); /*读取整型数*/

printf("%d", i); /*输出所读整型数*/

putchar(fgetc(fp)); /*读取一个字符同时输出*/

fgets(m, 17, fp); /*读取16个字符*/

puts(m); /*输出所读字符串*/

fclose(fp); /*关闭文件*/

getch(); /*等待任一键*/

}

运行后屏幕显示:

Your score of C programming is: 97

That's good news

如果将上例中fscanf(fp, "%d", &i)改为fscanf(fp, "%s", m), 再将其后的输出语句改为printf("%s", m), 则可得出同样的结果。

(5)文件随机读写函数

文件的随机读写函数如下:

int fseek (FILE *stream, long offset, int fromwhere);

int fread(void *buf, int size, int count, FILE *stream);

int fwrite(void *buf, int size, int count, FILE *stream);

long ftell(FILE *stream);

fseek( )函数的作用是将文件的位置指针设置到从fromwhere开始的第offset 字节的位置上, 其中fromwhere是下表中几个宏定义之一:

表4-2文件位置指针起始计算位置fromwhere 符号常数 数值 含义

从文件开头

从文件指针的现行位置

从文件末尾 offset是指文件位置指针从指定开始位置(fromwhere指出的位置)跳过的字节数。它是一个长整型量, 以支持大于64K字节的文件。fseek( )函数一般用于对二进制文件进行操作。当fseek( )函数返回0时表明操作成功, 返回非0表示失败。下面程序从二进制文件test_b.dat中读取第8个字节。

例4

#include<stdio.h>

main()

{

FILE *fp;

if((fp=fopen("test_b.dat", "rb"))==NULL)

{

printf("Can't open file");

exit(1);

}

fseek(fp, 8. 1, SEEK_SET);

fgetc(fp);

fclose(fp);

}

fread()函数是从文件中读count个字段, 每个字段长度为size个字节, 并把它们存放到buf指针所指的缓冲器中。

fwrite()函数是把buf指针所指的缓冲器中, 长度为size个字节的count个字段写到stream指向的文件中去。

ftell()函数返回文件位置指示器的当前值, 这个值是指示器从文件头开始算起的字节数, 返回的数为长整型数, 当返回-1时, 表明出现错误。下面程序把一个浮点数组以二进制方式写入文件test_b.dat中。

例5

#include <stdio.h>

#include stdlib.h

#include time.h

main()

{

int f[150]; /*定义数组*/

int i;

FILE *fp;

fp=fopen("test_b.dat", "wb"); /*创建一个二进制文件只写*/

randomize();

for(i=0;i<150;i++)

f[i]=random(1000);

fwrite(f, sizeof(int), 150, fp); /*将150个整数写入文件中*/

fclose(fp); /*关闭文件*/

}

下面例子从test_b.dat文件中读100个整型数, 并把它们放到dat数组中。 例6

#include <stdio.h>

main()

{

FILE *fp;

int dat[100],i;

fp=fopen("test_b.dat", "rb");/*打开一个二进制文件只读*/

if(fread(dat, sizeof(int), 100, fp)!=100) /*判断是否读了100个数*/

{

if(feof(fp))

printf("End of file"); /*不到100个数文件结束*/

else

printf("Read error"); /*读数错误*/

fclose(fp); /*关闭文件*/

return;

}

for (i=0;i<100;i++)

printf("%5d",dat[i]);

}

(6)feof()和rewind()函数

这两个函数都包含在stdio.h中,调用格式为:

int feof(FILE *stream);

int rewind(FILE *stream);

feof()函数检测文件位置指示器是否到达了文件结尾, 若是则返回一个非0值, 否则返回0。这个函数对二进制文件操作特别有用, 因为二进制文件中, 文件结尾标志EOF也是一个合法的二进制数, 只简单的检查读入字符的值来判断文件是否结束是不行的。

下面的这条语句是常用的判断文件是否结束的方法。

while(!feof(fp))

fgetc(fp);

rewind()函数用于把文件位置指示器移到文件的起点处, 成功时返回0, 否则, 返回非0值。

(7)文件的存取<read,write>基本算法:

void Data_Save(struct record *p) /*记录文件的存取*/

{

int j;

fp = fopen( "tele_rec.txt " , "w" ); /*以可写方式打开记录文件*/

while( p != NULL ) /*若未到队尾,则将记录存储到文件中*/

{

fwrite(p, sizeof(struct record), 1, fp);

p = p->next;

}

fclose( fp ); /*关闭指定的文件*/

}

struct event * Data_Load() /*从记录文件中读取记录*/

{

long k;

struct record *p, *q;

p = event_head.next;

fp = fopen("tele_rec.txt", "r+t"); /*以读方式打开记录文件*/

if ( fp != NULL )

{

while( !feof(fp)) /*依次读取记录并执行入队操作*/

{

fread(q, sizeof( struct record ), 1, fp);

p->next = q; /*这里p为尾指针,q为指向新节点的指针*/ p = q;

}

p->next = NULL;

event_end = p;

}

else

{

fp = fopen("tele_rec.txt","w"); /*若文件不存在创建指定文件名的新文件*/ event_head.next = NULL;

event_end = event_head.next;

}

}

附录2 实验步骤

上机实验一般应包括以下几个步骤:

1.双击桌面Visual C++快捷方式进入Visual C++,或通过执行“开始=>程序=>

Microsoft Visual Studio 6.0=> Microsoft Visual C++6.0”或执行文件"C:\Program Files\Microsoft Visual Studio\COMMON\MSDev98\Bin\MSDEV.EXE"。

2.单击“文件”菜单的“新建”命令。

3.在打开的“新建”对话框中选择“文件”标签。

4.选择C++ Source File,选择文件保存位置,然后在文件输入栏中输入文件名。如图所示:

20xxC语言综合实验指导书学生副本

5.输入源程序。

6.编译程序:按“Ctrl+F7”或通过“编译”菜单中的“编译”命令,或使用工具栏中的相应工具进行编译 编译

20xxC语言综合实验指导书学生副本

20xxC语言综合实验指导书学生副本

若程序有错则找到出错行修改程序。

7.连接:若程序没有语法错误,则可按功能键F7或执行“编译”菜单中的“构件”命令或通过工具栏中的相关工具(编译工具右边工具),进行连接生成可执行文件。

8.运行程序:按组合键“Ctrl+F5”,或通过“编译”菜单中的执行命令,或通过工具栏中的“!”工具运行程序。

附录3 实验报告说明

1. 实验目的

2. 实验内容

3. 关键源程序

4. 程序运行结果

5. 调试和运行程序过程中产生的问题及采取的措施

6. 实验心得体会

注:需要完成实验1、实验2、实验3、实验4和自选一个综合实验。

相关推荐